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 } }