using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Neo.Afx.ComponentModel;
using Neo.Afx.Services.Correspondence.Entities;
namespace Neo.Afx.Services.Correspondence
{
///
/// Correspondence database context container
///
public class CorrespondenceDatabase : Database
{
///
/// Initializes a new instance of the class.
///
public CorrespondenceDatabase()
: base(new CorrespondenceContext())
{
}
#region UserName
///
/// Gets the name of the user.
///
///
/// The name of the user.
///
public string UserName
{
get
{
if (HttpContext.Current.User != null && HttpContext.Current.User.Identity.IsAuthenticated)
{
return HttpContext.Current.User.Identity.Name.ToLower();
}
return "";
}
}
#endregion
#region Create
///
/// Creates the specified entity ID.
///
/// The entity ID.
/// The item ID.
/// The message type ID.
/// The recipients.
/// The cc.
/// The BCC.
/// The subject.
/// The message.
/// true if Is HTML; false otherwise.
///
public KeyValuePair Create(int entityID, long itemID, byte messageTypeID, string recipients, string cc, string bcc, string subject, string message, bool isHtml)
{
KeyValuePair returnResult;
try
{
var result = Context.Pr_MessageCreate(entityID, itemID, messageTypeID, recipients, cc, bcc, subject, message, isHtml, UserName).SingleOrDefault();
returnResult = result.HasValue ? new KeyValuePair(result.Value, (result.Value != -1) ? String.Empty : "Unknown error occured") : new KeyValuePair(-1, "Unknown error occured");
}
catch (Exception ex)
{
returnResult = new KeyValuePair(-1, ex.InnerException.Message);
}
return returnResult;
}
#endregion
#region Update
///
/// Updates the specified message ID.
///
/// The message ID.
/// The recipients.
/// The cc.
/// The BCC.
/// The subject.
/// The message.
///
public string Update(long messageID, string recipients, string cc, string bcc, string subject, string message)
{
string error;
try
{
var result = Context.Pr_MessageUpdate(messageID, recipients, cc, bcc, subject, message, UserName).SingleOrDefault();
if (result.HasValue)
{
error = (result.Value) ? String.Empty : "Unknown error occured";
}
else
{
error = "Unknown error occured";
}
}
catch (Exception ex)
{
error = ex.InnerException.Message;
}
return error;
}
#endregion
#region Delete
///
/// Deletes the specified message ID.
///
/// The message ID.
///
public string Delete(long messageID)
{
string error;
try
{
var result = Context.Pr_MessageDelete(messageID, UserName).SingleOrDefault();
if (result.HasValue)
{
error = (result.Value) ? String.Empty : "Unknown error occured";
}
else
{
error = "Unknown error occured";
}
}
catch (Exception ex)
{
error = ex.InnerException.Message;
}
return error;
}
#endregion
#region GetMessage
///
/// Gets the message.
///
/// The message ID.
///
public Message GetMessage(long messageID)
{
return Context.Messages.Include("MessageType").Include("UserCreatedBy").Where(a => a.MessageID == messageID && a.IsCancelled == false).FirstOrDefault();
}
#endregion
#region GetMessages
///
/// Gets the messages.
///
/// The entity ID.
/// The item ID.
///
public IEnumerable GetMessages(int entityID, long itemID)
{
//dev note: do not limit messages based on isCancelled as it'll hide any emails that could not be sent on the interface
return from q in Context.Messages.Include("MessageType").Include("UserCreatedBy").OrderBy(a => a.CreatedDate)
where q.EntityID == entityID && q.ItemID == itemID
select q;
}
#endregion
#region GetMessageTypes
///
/// Gets the message types.
///
///
public IEnumerable GetMessageTypes()
{
return from q in Context.MessageTypes
select q;
}
#endregion
#region GetMessageTemplates
///
/// Gets the message templates.
///
/// true if Include system templates; false otherwise.
///
public IEnumerable GetMessageTemplates(bool includeSystemTemplates)
{
if (includeSystemTemplates)
{
return from q in Context.MessageTemplates
where !q.IsCancelled
select q;
}
else
{
return from q in Context.MessageTemplates
where !q.IsCancelled && q.IsSystemTemplate == false
select q;
}
}
#endregion
#region GetMessageContent
///
/// Gets the content of the message.
///
/// The message ID.
/// Returns the message body content
public string GetMessageContent(long messageID)
{
var msgContents = Context.Messages.Where(m => m.MessageID == messageID).ToList();
var sent = new DateTime(1, 1, 1);
if (msgContents[0].SentDate != null)
{
sent = (DateTime)msgContents[0].SentDate;
}
var returnMessage = ("To: " + msgContents[0].Recipients +
(msgContents[0].CC != null ? (msgContents[0].CC.Length > 0 ? "
" + "CC: " + msgContents[0].CC : "") : "")
+ "
Created Date: " + msgContents[0].CreatedDate.ToShortDateString()
+ (sent != new DateTime(1, 1, 1) ? "
Sent Date: " + sent.ToShortDateString() : "
Sent Date: Not Sent Yet")
+ "
" + msgContents[0].Content);
return returnMessage;
}
public void CreateAttachment(KeyValuePair messageid, int v1, byte[] imageData, string v2, int v3, string v4, string v5)
{
throw new NotImplementedException();
}
#endregion
#region CreateAttachment
///
/// Creates an attachment for a message
///
///
///
///
///
///
///
///
public void CreateAttachment(long messageID, long createdByID, byte[] content, string mimeType, long size, string name, string ext)
{
Context.Pr_MessageCreateAttachment(messageID, createdByID, content, mimeType, size, name, ext);
}
#endregion
#region GetEntityRecipient
///
/// Calculate Message Recipient based on entity
///
///
///
///
///
public string GetEntityRecipient(short messageTypeID, long entityID, long itemID, long userID)
{
return Context.Pr_EntityRecipientGet(messageTypeID, entityID, itemID, userID).FirstOrDefault();
}
#endregion
}
}