using Common.BO; using Ease.Core.Model; using Payroll.BO; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Threading; namespace Payroll.BO { public class NotificationProcess { #region Declaration private List 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 (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((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 } }