EchoTex_Payroll/HRM.BO/Process/NotificationProcess.cs

465 lines
18 KiB
C#
Raw Permalink Normal View History

2024-10-14 10:01:49 +06:00
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
}
}