using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Windows.Forms; using Ease.CoreV35.Model; namespace Payroll.BO { [Serializable] public class NotificationProcess { #region Declaration private ObjectsTemplate oCurrentNotifications; private FileStream oStream=null; private LetterTemplte letterTemplte = null; private String outputDir = Application.StartupPath; private HtmlRichTextBoxBo txtBody = new HtmlRichTextBoxBo(); private String sHtml; private static bool IsFinished = true; private static Thread thread = null; #endregion #region Constuctor public NotificationProcess() { IsFinished = false; oCurrentNotifications = Notification.Get(EnumNotificationStatus.InProcess); } #endregion #region Thread Functions public static void StartThread() { if (!IsFinished) return; NotificationProcess nProcess = new NotificationProcess(); IsFinished = false; thread = new Thread(nProcess.ProcessStart); thread.Priority = ThreadPriority.BelowNormal; thread.Start(); } public static void EndThread() { if (thread != null) { IsFinished = true; thread.Join(); } } private void ProcessStart() { while (!IsFinished) { Process(new Object()); Thread.Sleep((60000*5)); } } #endregion #region Public Functions public void Process(object stateObject) { DateTime currentDateTime = DateTime.Today; currentDateTime = currentDateTime.AddDays(1); currentDateTime = currentDateTime.AddSeconds(-1); foreach(Notification currentNotification in oCurrentNotifications) { letterTemplte = null; oStream = null; if (currentNotification.TagOutputID.Integer != 0) { List letterTempltes = LetterTemplte.Get(); letterTemplte = letterTempltes.Where(r => r.ID.Integer == currentNotification.TagOutputID.Integer).SingleOrDefault(); letterTemplte = letterTemplte.Get(letterTemplte.ID); oStream = (FileStream)letterTemplte.Body; } List sendingSMSRules = currentNotification.NotificationRules.Where(e => e.SendDate <= currentDateTime && e.SMSSendStatus ==EnumSendStatus.NotSent).ToList(); List sendingEmailRules = currentNotification.NotificationRules.Where(e => e.SendDate <= currentDateTime && e.EmailSendStatus == EnumSendStatus.NotSent).ToList(); if (sendingSMSRules.Count > 0) ProcessSMS(currentNotification, sendingSMSRules); if (sendingEmailRules.Count > 0) ProcessEmail(currentNotification, sendingEmailRules); //ProcessWeb(currentNotification, sendingWebRules); Notification oNotification = Notification.Get(currentNotification.ID); if (!oNotification.NotificationRules .Where(ob => ob.SMSSendStatus == EnumSendStatus.NotSent || ob.EmailSendStatus == EnumSendStatus.NotSent|| ob.WebSendStatus == EnumSendStatus.NotSent) .Any()) { oNotification.Status = EnumNotificationStatus.Closed; oNotification.Save(); } } } //public void Process(object stateObject,out string outputString) //{ // DateTime currentDateTime = DateTime.Today; // currentDateTime = currentDateTime.AddDays(1); // currentDateTime = currentDateTime.AddSeconds(-1); // foreach (Notification currentNotification in oCurrentNotifications) // { // if (currentNotification.TagOutputID.Integer != 0) // { // List letterTempltes = LetterTemplte.Get(); // letterTemplte = letterTempltes.Where(r => r.ID.Integer == currentNotification.TagOutputID.Integer).SingleOrDefault(); // letterTemplte = letterTemplte.Get(letterTemplte.ID); // oStream = (FileStream)letterTemplte.Body; // } // List sendingSMSRules = currentNotification.NotificationRules.Where(e => e.SendDate <= currentDateTime && e.SMSSendStatus == EnumSendStatus.NotSent).ToList(); // List sendingEmailRules = currentNotification.NotificationRules.Where(e => e.SendDate <= currentDateTime && e.EmailSendStatus == EnumSendStatus.NotSent).ToList(); // //List sendingWebRules = currentNotification.NotificationRules.Where(e => e.SendDate <= currentDateTime && e.WebSendStatus == EnumSendStatus.NotSent && currentNotification.IsWebNf).ToList(); // if (sendingSMSRules.Count > 0) ProcessSMS(currentNotification, sendingSMSRules); // if (sendingEmailRules.Count > 0) ProcessEmail(currentNotification, sendingEmailRules); // //ProcessWeb(currentNotification, sendingWebRules); // Notification oNotification = Notification.Get(currentNotification.ID); // if (!oNotification.NotificationRules // .Where(ob => // ob.SMSSendStatus == EnumSendStatus.NotSent || // ob.EmailSendStatus == EnumSendStatus.NotSent || // ob.WebSendStatus == EnumSendStatus.NotSent).Any()) // { // oNotification.Status = EnumNotificationStatus.Closed; // oNotification.Save(); // } // } // outputString = string.Empty; //} #endregion #region Private Functions private void GenerateFromTagOutput(NotificationRule notifyRule, Notification notification) { txtBody = new HtmlRichTextBoxBo(); LetterTemplte otmp = new LetterTemplte(); otmp = letterTemplte; try { if (letterTemplte.Body != null && letterTemplte.FilePath == string.Empty) { string strPath = otmp.Generate(notification.TagOutputID, notification.ObjectID, notification.OptionalObjectID, notifyRule.PerticipantID, oStream); txtBody.LoadFile(strPath); } else { string strPath = otmp.Generate(notification.TagOutputID, notification.ObjectID, notification.OptionalObjectID, notifyRule.PerticipantID, letterTemplte.FilePath); txtBody.LoadFile(strPath); } } catch (Exception ex) { throw new Exception("Failed to generate From Tag Output due to"+ex.Message); } } private void ProcessEmail(Notification currentNotification, List sendingEmailRules) { foreach (NotificationRule emailRule in sendingEmailRules) { try { if (letterTemplte != null) { GenerateFromTagOutput(emailRule, currentNotification); sHtml = txtBody.GetHTML(true, true); } else { sHtml = currentNotification.Body; } SendEMail(emailRule, currentNotification); } catch (MailSenderException ex) { if (ex.InnerException != null) { Notification.ChangeNotificationRuleRemarks(emailRule , ex.InnerException.Message , EnumNotificationMedium.SMS); } else { Notification.ChangeNotificationRuleRemarks(emailRule , ex.Message , EnumNotificationMedium.SMS); } continue; } catch (Exception ex) { if (ex.InnerException != null) { Notification.ChangeNotificationRuleRemarks(emailRule, ex.InnerException.Message, EnumNotificationMedium.SMS); } else { Notification.ChangeNotificationRuleRemarks(emailRule, ex.Message, EnumNotificationMedium.SMS); } continue; } } } private void ProcessSMS(Notification currentNotification, List sendingSMSRules) { foreach (NotificationRule smsRule in sendingSMSRules) { try { if (letterTemplte != null) { GenerateFromTagOutput(smsRule, currentNotification); sHtml = txtBody.Text.Replace("\n", " "); } else { txtBody.Clear(); txtBody.AddHTML(currentNotification.Body); sHtml = txtBody.Text.Replace("\n", " "); } SendSMS(smsRule, currentNotification); } catch (Exception ex) { if (ex.InnerException != null) { Notification.ChangeNotificationRuleRemarks(smsRule, ex.InnerException.Message, EnumNotificationMedium.SMS); } else { Notification.ChangeNotificationRuleRemarks(smsRule, ex.Message, EnumNotificationMedium.SMS); } continue; } } } private void SendEMail(NotificationRule emailRule, Notification currentNotification) { Employee tempEmp; Vendor tempVendor; CV tempParticipant; EnumSendMail oSendMailNotification = EnumSendMail.None; MailSender mailSender = new MailSender(); switch (emailRule.PerticipantType) { case EnumPerticipantType.Employee: tempEmp = Employee.Get(emailRule.PerticipantID); mailSender.To = tempEmp.EmailAddress; break; case EnumPerticipantType.Vendor: tempVendor = Vendor.Get(emailRule.PerticipantID); mailSender.To = tempVendor.EmailAddress; break; case EnumPerticipantType.Applicant: tempParticipant = CV.Get(emailRule.PerticipantID); mailSender.To = tempParticipant.EmailAddress; break; default: break; } // This will be closed alternate to rhe switch //mailSender.To = "hassan.imroze@gmail.com"; mailSender.Body = sHtml + currentNotification.Footer + emailRule.ExtendedBody; mailSender.Subject = currentNotification.Subject; if (currentNotification.Attachment.Trim() != string.Empty) { mailSender.AddAttachment(currentNotification.Attachment); } if (mailSender.To != null && mailSender.To.Trim() != string.Empty) { mailSender.SendMail(); Notification.ChangeNotificationRuleStatus(emailRule, EnumSendStatus.Sent, EnumNotificationMedium.Email); } } private void SendSMS(NotificationRule smsRule, Notification currentNotification) { Employee tempEmp; Vendor tempVendor; CV tempParticipant; SMSSender smsSender = new SMSSender(); switch (smsRule.PerticipantType) { case EnumPerticipantType.Employee: tempEmp = Employee.Get(smsRule.PerticipantID); //smsSender.CellNumber = tempEmp.MobileNo; break; case EnumPerticipantType.Vendor: tempVendor = Vendor.Get(smsRule.PerticipantID); //smsSender.CellNumber = tempVendor.Mobile; break; case EnumPerticipantType.Applicant: tempParticipant = CV.Get(smsRule.PerticipantID); //smsSender.CellNumber = tempParticipant.MobileNo; break; default: break; } //This will be closed alternate to the switch smsSender.CellNumber = "01834837704"; smsSender.SMSMessage = sHtml + currentNotification.Footer + smsRule.ExtendedBody; //will be open after test //smsSender.SendSMS(); Notification.ChangeNotificationRuleStatus(smsRule, EnumSendStatus.Sent, EnumNotificationMedium.SMS); } #endregion //private void GenerateFromTagOutput(NotificationRule notifyRule, Notification notification) //{ // MSWord file = new MSWord(); // txtBody = new HtmlRichTextBoxBo(); // Employee oEmp = Employee.Get(notifyRule.PerticipantID); // LetterTemplte otmp = new LetterTemplte(); // otmp = letterTemplte; // try // { // if (letterTemplte.Body != null && letterTemplte.FilePath == string.Empty)//notification.TagOutputID.Integer >= 5) // { // Hashtable table = new Hashtable(); // file.OriginalFile = oStream.Name; // FileInfo ossInfo = null; // PhotoPath oPhotoPath = PhotoPath.Get(ID.FromInteger(1)); // string sgenFilePath = oPhotoPath.LetterTempPath + "\\Generated\\" + oEmp.EmployeeNo + "-" + notification.Subject + ".doc"; // ossInfo = new FileInfo(sgenFilePath); // table = otmp.RefreshObject(oEmp); // if (ossInfo.Exists) // { // ossInfo.Delete(); // } // if (table != null) // { // File.Copy(oStream.Name, sgenFilePath, true); // file = new MSWord(); // file.OpenWordApplication(); // file.OriginalFile = oStream.Name; // file.ReplaceWords(sgenFilePath, table); // file.CloseWordApplication(); // } // txtBody.LoadFile(sgenFilePath); // //MessageBox.Show("File(s) created successfully.", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information); // } // else // { // string strPath = otmp.Generate(notification.TagOutputID, notification.ObjectID.Integer, notification.OptionalObjectID.Integer, oEmp.ID, ""); // txtBody.LoadFile(strPath); // //MessageBox.Show("File(s) created successfully.", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information); // } // } // catch (Exception ex) // { // file.CloseWordApplication(); // throw new Exception(ex.Message); // //MessageBox.Show("Fail to create file. Because " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); // //Console.WriteLine("Fail to create file. Because " + ex.Message); // } //} //#region Process Web //private void ProcessWeb(Notification currentNotification, List sendingWebRules) //{ // if (currentNotification.TagOutputID.Integer != 0) // { // List letterTempltes = LetterTemplte.Get(); // letterTemplte = letterTempltes.Where(r => r.ID.Integer == currentNotification.TagOutputID.Integer).SingleOrDefault(); // letterTemplte = letterTemplte.Get(letterTemplte.ID); // oStream = (FileStream)letterTemplte.Body; // } // foreach (NotificationRule webRule in sendingWebRules) // { // if (currentNotification.TagOutputID.Integer != 0) // { // GenerateFromTagOutput(webRule,currentNotification); // sHtml = txtBody.GetHTML(true, true); // } // else // { // sHtml = currentNotification.Body; // } // SendWeb(webRule, currentNotification); // } //} //private void SendWeb(NotificationRule webRule, Notification currentNotification) //{ // Employee tempEmp; // Vendor tempVendor; // CV tempParticipant; // try // { // switch (webRule.PerticipantType) // { // case EnumPerticipantType.Employee: // tempEmp = Employee.Get(webRule.PerticipantID); // //smsSender.CellNumber = tempEmp.MobileNo; // break; // case EnumPerticipantType.Vendor: // tempVendor = Vendor.Get(webRule.PerticipantID); // //smsSender.CellNumber = tempVendor.Mobile; // break; // case EnumPerticipantType.Applicant: // tempParticipant = CV.Get(webRule.PerticipantID); // //smsSender.CellNumber = tempParticipant.MobileNo; // break; // default: // break; // } // Notification.ChangeNotificationRuleStatus(webRule, EnumSendStatus.Sent, EnumNotificationMedium.WEB); // } // catch (Exception ex) // { // MessageBox.Show(ex.Message); // } //} //#endregion } }