465 lines
18 KiB
C#
465 lines
18 KiB
C#
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<Notification> 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<LetterTemplte> letterTempltes = LetterTemplte.Get();
|
|
// letterTemplte = letterTempltes.Where(r => r.ID.Integer == currentNotification.TagOutputID.Integer).SingleOrDefault();
|
|
// letterTemplte = letterTemplte.Get(letterTemplte.ID);
|
|
// oStream = (FileStream)letterTemplte.Body;
|
|
// }
|
|
|
|
// List<NotificationRule> sendingSMSRules = currentNotification.NotificationRules.Where(e => e.SendDate <= currentDateTime && e.SMSSendStatus ==EnumSendStatus.NotSent).ToList();
|
|
// List<NotificationRule> 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<LetterTemplte> letterTempltes = LetterTemplte.Get();
|
|
//// letterTemplte = letterTempltes.Where(r => r.ID.Integer == currentNotification.TagOutputID.Integer).SingleOrDefault();
|
|
//// letterTemplte = letterTemplte.Get(letterTemplte.ID);
|
|
//// oStream = (FileStream)letterTemplte.Body;
|
|
//// }
|
|
|
|
//// List<NotificationRule> sendingSMSRules = currentNotification.NotificationRules.Where(e => e.SendDate <= currentDateTime && e.SMSSendStatus == EnumSendStatus.NotSent).ToList();
|
|
//// List<NotificationRule> sendingEmailRules = currentNotification.NotificationRules.Where(e => e.SendDate <= currentDateTime && e.EmailSendStatus == EnumSendStatus.NotSent).ToList();
|
|
//// //List<NotificationRule> 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<NotificationRule> 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<NotificationRule> 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<NotificationRule> sendingWebRules)
|
|
// //{
|
|
// // if (currentNotification.TagOutputID.Integer != 0)
|
|
// // {
|
|
// // List<LetterTemplte> 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
|
|
}
|
|
}
|