using System; using System.Collections.Generic; using HRM.BO; using HRM.DA; using HRM.Report; using HRM.BO.Configuration; using System.Data; using System.IO; using System.Threading; using NPOI.SS.Formula.Functions; using System.Windows.Forms; using System.Linq; using Microsoft.Extensions.Configuration; namespace HRM.MailNotificationProcess { public class SchedularSetupProcess { #region Global Properties private EmailSettings emailSettings; private MailNotificationProcessConfiguration mailNotificationProcessConfiguration; #endregion #region Constractors public SchedularSetupProcess() { this.emailSettings = null; this.mailNotificationProcessConfiguration = null; } public SchedularSetupProcess(EmailSettings pEmailSettings, MailNotificationProcessConfiguration oMailNotificationProcessConfiguration) { this.emailSettings = pEmailSettings; this.mailNotificationProcessConfiguration = oMailNotificationProcessConfiguration; } #endregion #region wait the thread public bool waitTheThread(DateTime startAt) { if (!mailNotificationProcessConfiguration.IsTest) { double timeLeft = startAt.Subtract(DateTime.Now).TotalMilliseconds; if (timeLeft < 0) { return false; } else { // Thread.Sleep(Convert.ToInt32(timeLeft)); return true; } } else { return true; } } #endregion #region CreateAndSendMail private void CreateAndSendMail(SchedularSetup pSchedularSetup, string toEmail, string pdfFileLocation = "") { try { MailSender mailSender = new MailSender(); mailSender.AddTo(toEmail); mailSender.Subject = pSchedularSetup.MailSubject; mailSender.Body = pSchedularSetup.MailBody.Replace("<>", "Sir/Madam"); if(pSchedularSetup.Type == EnumSchedularType.Yesterday_Absent_Notification_Self) { mailSender.Body = mailSender.Body.Replace("<>", DateTime.Today.AddDays(-1).ToLongDateString()); } if (pdfFileLocation != "") { mailSender.AddAttachment(pdfFileLocation); } mailSender.SendMail(emailSettings); } catch (Exception) { throw; } } private void CreateAndSendMailForMonthlyAttendanceSummary(SchedularSetup pSchedularSetup, DateTime date, string toEmail, string pdfFileLocation = "") { try { MailSender mailSender = new MailSender(); mailSender.AddTo(toEmail); mailSender.Subject = pSchedularSetup.MailSubject; mailSender.Body = pSchedularSetup.MailBody.Replace("<>", "Sir/Madam").Replace("<>", date.ToString("MMMM yyyy")); if (pdfFileLocation != "") { mailSender.AddAttachment(pdfFileLocation); } mailSender.SendMail(emailSettings); } catch (Exception) { throw; } } private void CreateAndSendMail(SchedularSetup pSchedularSetup, string toEmail,List cc, string pdfFileLocation = "") { MailSender mailSender = new MailSender(); mailSender.AddTo(toEmail); cc.ForEach(x => { mailSender.AddCC(x); }); mailSender.Subject = pSchedularSetup.MailSubject; mailSender.Body = pSchedularSetup.MailBody.Replace("<>", "Sir/Madam"); if (pSchedularSetup.Type == EnumSchedularType.Yesterday_Absent_Notification_Self) { mailSender.Body = mailSender.Body.Replace("<>", DateTime.Today.AddDays(-1).ToLongDateString()); } if (pdfFileLocation != "") { mailSender.AddAttachment(pdfFileLocation); } mailSender.SendMail(emailSettings); } private void CreateAndSendMailSelfOnError(SchedularSetup pSchedularSetup, string ErrorMsg, List cc, string pdfFileLocation = "") { MailSender mailSender = new MailSender(); if (pSchedularSetup.OnErrorMail != null) { pSchedularSetup.OnErrorMail.ForEach(x => { mailSender.AddTo(x); }); } if (cc != null) { cc.ForEach(x => { mailSender.AddCC(x); }); } mailSender.Subject = "Error - " + pSchedularSetup.MailSubject; mailSender.Body = "Looks like an error occured. Details: " + ErrorMsg; if (pSchedularSetup.Type == EnumSchedularType.Yesterday_Absent_Notification_Self) { mailSender.Body = mailSender.Body.Replace("<>", DateTime.Today.AddDays(-1).ToLongDateString()); mailSender.Subject = mailSender.Subject.Replace("<>", DateTime.Today.AddDays(-1).ToLongDateString()); } if (pdfFileLocation != "") { mailSender.AddAttachment(pdfFileLocation); } mailSender.SendMail(emailSettings); } private void CreateAndSendMailSelf(SchedularSetup pSchedularSetup, Employee emp, List cc, string pdfFileLocation = "") { MailSender mailSender = new MailSender(); mailSender.AddTo(emp.EmailAddress); cc.ForEach(x => { mailSender.AddCC(x); }); mailSender.Subject = pSchedularSetup.MailSubject; mailSender.Body = pSchedularSetup.MailBody.Replace("<>", emp.Name); if (pSchedularSetup.Type == EnumSchedularType.Yesterday_Absent_Notification_Self) { mailSender.Body = mailSender.Body.Replace("<>", DateTime.Today.AddDays(-1).ToLongDateString()); mailSender.Subject = mailSender.Subject.Replace("<>", DateTime.Today.AddDays(-1).ToLongDateString()); } if (pdfFileLocation != "") { mailSender.AddAttachment(pdfFileLocation); } mailSender.SendMail(emailSettings); } private void CreateAndSendMailForLM(SchedularSetup pSchedularSetup, string toEmail, string empString) { try { MailSender mailSender = new MailSender(); mailSender.AddTo(toEmail); mailSender.Subject = pSchedularSetup.MailSubject; mailSender.Body = pSchedularSetup.MailBody.Replace("<>", "Sir/Madam") .Replace("<>", empString) .Replace("<>", DateTime.Today.AddDays(-1).ToLongDateString()); mailSender.SendMail(emailSettings); } catch (Exception) { throw; } } #endregion #region functionality for Schedular #region AnniversaryNofication public void AnniversaryNofication(SchedularSetup pSchedularSetup) { if (waitTheThread(pSchedularSetup.StartAt)) { List employeeList = new EmployeeService().GetAllHREmpsWorkAniversary(mailNotificationProcessConfiguration.PayrollTypeForMailSchedular); List oMailNotificationHistoryList = new List(); MailNotificationHistory tempMailNotificationHistory = null; foreach (Employee emp in employeeList) { tempMailNotificationHistory = new MailNotificationHistory(emp.EmployeeNo.ToString(), pSchedularSetup.Type); try { if (emp.EmailAddress != null && emp.EmailAddress.Trim() == string.Empty) { CreateAndSendMail(pSchedularSetup, emp.EmailAddress); } } catch (Exception ex) { string ErrorMsg = ex.Message; CreateAndSendMailSelfOnError(pSchedularSetup, ErrorMsg, [], String.Empty); tempMailNotificationHistory.Description = ex.Message; tempMailNotificationHistory.Status = false; } finally { oMailNotificationHistoryList.Add(tempMailNotificationHistory); } } if (oMailNotificationHistoryList != null && oMailNotificationHistoryList.Count > 0) { new SchedularSetupService().SaveMailHistory(oMailNotificationHistoryList); } } } #endregion #region BirthdayNofication public void BirthdayNofication(SchedularSetup pSchedularSetup) { if (waitTheThread(pSchedularSetup.StartAt)) { List employeeList = new EmployeeService().GetAllHREmpsBirthday(mailNotificationProcessConfiguration.PayrollTypeForMailSchedular); List oMailNotificationHistoryList = new List(); MailNotificationHistory tempMailNotificationHistory = null; foreach (Employee emp in employeeList) { tempMailNotificationHistory = new MailNotificationHistory(emp.EmployeeNo.ToString(), pSchedularSetup.Type); try { if (emp.EmailAddress != null && emp.EmailAddress.Trim() == string.Empty) { CreateAndSendMail(pSchedularSetup, emp.EmailAddress); } } catch (Exception ex) { string ErrorMsg = ex.Message; CreateAndSendMailSelfOnError(pSchedularSetup, ErrorMsg, [], String.Empty); tempMailNotificationHistory.Description = ex.Message; tempMailNotificationHistory.Status = false; } finally { oMailNotificationHistoryList.Add(tempMailNotificationHistory); } } if (oMailNotificationHistoryList != null && oMailNotificationHistoryList.Count > 0) { new SchedularSetupService().SaveMailHistory(oMailNotificationHistoryList); } } } #endregion #region DailyAttendanceNofication //public void DailyAttendanceNofication(SchedularSetup pSchedularSetup) //{ // if (waitTheThread(pSchedularSetup.StartAt)) // { // byte[] report = null; // string fileFormate = Enum.GetName(pSchedularSetup.ReportFormat.GetType(), pSchedularSetup.ReportFormat); // string fileExtention = EnumHelper.GetEnumDescription(pSchedularSetup.ReportFormat); // MailNotificationHistory tempMailNotificationHistory = null; // List oMailNotificationHistoryList = new List(); // DateTime fromDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 0, 0, 0); // DateTime toDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, pSchedularSetup.StartAt.Hour, pSchedularSetup.StartAt.Minute, pSchedularSetup.StartAt.Second); // if (pSchedularSetup.ToEmailAddress != null && pSchedularSetup.ToEmailAddress.Count > 0) // { // foreach (string toEmail in pSchedularSetup.ToEmailAddress) // { // try // { // tempMailNotificationHistory = new MailNotificationHistory(toEmail, pSchedularSetup.Type); // report = report == null ? new AttendanceReport().GetDailyAttnReport(fromDate, toDate, EnumAttendanceType.None, mailNotificationProcessConfiguration.PayrollTypeForMailSchedular, fileFormate, true) : report; // string pdfFileLocation = Directory.GetCurrentDirectory() + "\\CurrentDayAttnReport" + "(" + fromDate.ToString("dd MMM yyyy") + ")" + fileExtention; // File.WriteAllBytes(pdfFileLocation, report); // CreateAndSendMail(pSchedularSetup, toEmail, pdfFileLocation); // } // catch (Exception ex) // { // tempMailNotificationHistory.Description = ex.Message; // tempMailNotificationHistory.Status = false; // } // finally // { // oMailNotificationHistoryList.Add(tempMailNotificationHistory); // } // } // } // if (oMailNotificationHistoryList != null && oMailNotificationHistoryList.Count > 0) // { // new SchedularSetupService().SaveMailHistory(oMailNotificationHistoryList); // } // } //} #endregion #region PreviousDayAttendanceNofication //public void PreviousDayAttendanceNofication(SchedularSetup pSchedularSetup) //{ // if (waitTheThread(pSchedularSetup.StartAt)) // { // byte[] report = null; // string fileFormate = Enum.GetName(pSchedularSetup.ReportFormat.GetType(), pSchedularSetup.ReportFormat); // string fileExtention = EnumHelper.GetEnumDescription(pSchedularSetup.ReportFormat); // MailNotificationHistory tempMailNotificationHistory = null; // List oMailNotificationHistoryList = new List(); // DateTime fromDate = DateTime.Today.AddDays(-1); // DateTime toDate = new DateTime(fromDate.Year, fromDate.Month, fromDate.Day, 23, 59, 0); // if (pSchedularSetup.ToEmailAddress != null && pSchedularSetup.ToEmailAddress.Count > 0) // { // foreach (string toEmail in pSchedularSetup.ToEmailAddress) // { // try // { // tempMailNotificationHistory = new MailNotificationHistory(toEmail, pSchedularSetup.Type); // report = report == null ? new AttendanceReport().GetDailyAttnReport(fromDate, toDate, EnumAttendanceType.None, mailNotificationProcessConfiguration.PayrollTypeForMailSchedular, fileFormate) : report; // string pdfFileLocation = Directory.GetCurrentDirectory() + "\\PreviousDayAttnReport" + "(" + fromDate.ToString("dd MMM yyyy") + ")" + fileExtention; // File.WriteAllBytes(pdfFileLocation, report); // CreateAndSendMail(pSchedularSetup, toEmail, pdfFileLocation); // } // catch (Exception ex) // { // tempMailNotificationHistory.Description = ex.Message; // tempMailNotificationHistory.Status = false; // } // finally // { // oMailNotificationHistoryList.Add(tempMailNotificationHistory); // } // } // } // if (oMailNotificationHistoryList != null && oMailNotificationHistoryList.Count > 0) // { // new SchedularSetupService().SaveMailHistory(oMailNotificationHistoryList); // } // } //} #endregion #region PreviousDayAbsentNotification public void PreviousDayAbsentNotificationForEmp(SchedularSetup pSchedularSetup) { List oMailNotificationHistoryList = new List(); try { EnumSchedularType notificationtype = pSchedularSetup.Type; List employeeList = new EmployeeService().GetAllAbsentOnYesterdayEmps(mailNotificationProcessConfiguration.PayrollTypeForMailSchedular); List allemps = new EmployeeService().GetAllEmps(); List empCord = new EmployeeCordinatorService().Get(); Employee _employeeCordinator =new Employee(); List ccemail = new List(); foreach (Employee emp in employeeList) { ccemail = new List(); try { #region check CoOrdinator and line manager EmployeeCordinator cordinatorCheck = empCord.Find(x => x.EmployeeID == emp.ID); if (cordinatorCheck != null) { pSchedularSetup.IsCCCordinator = true; } else { pSchedularSetup.IsCCCordinator = false; } if (emp.LineManagerID != null) { pSchedularSetup.IsCCLM = true; } else { pSchedularSetup.IsCCLM = false; } #endregion if (emp.EmailAddress == "") { MailNotificationHistory own = new MailNotificationHistory(); own.Description = "Employee Email address not found"; own.EmployeeNo = emp.EmployeeNo; own.Status = false; own.NotificationType = notificationtype; oMailNotificationHistoryList.Add(own); continue; } if (pSchedularSetup.IsCCLM == true) // line email address not found { Employee linemanager = new Employee(); linemanager = allemps.Find(x => x.ID == emp.LineManagerID); if (linemanager == null) { MailNotificationHistory cc = new MailNotificationHistory(); cc.EmployeeNo = emp.EmployeeNo; cc.NotificationType = notificationtype; cc.Status = false; cc.Description = "Line Manager not found for the employee: " + emp.EmployeeNo; oMailNotificationHistoryList.Add(cc); } else { if (pSchedularSetup.IsCCLM == true && linemanager.EmailAddress == "") { MailNotificationHistory cc = new MailNotificationHistory(); cc.EmployeeNo = emp.EmployeeNo; cc.NotificationType = notificationtype; cc.Status = false; cc.Description = "Line Manager Email address not found for the employee" + emp.EmployeeNo; oMailNotificationHistoryList.Add(cc); } else { ccemail.Add(linemanager.EmailAddress); } } } if (pSchedularSetup.IsCCCordinator == true) // line email address not found { MailNotificationHistory crd = new MailNotificationHistory(); EmployeeCordinator coordinator = empCord.Find(x => x.EmployeeID == emp.ID); if(coordinator == null) { crd.Status = false; crd.NotificationType = notificationtype; crd.EmployeeNo = emp.EmployeeNo; crd.Description = "Cordinator not found for themployee:" + emp.EmployeeNo + ' ' + emp.Name; oMailNotificationHistoryList.Add(crd); } else { _employeeCordinator.ID = coordinator.CordinatorID; Employee tempCordinator = allemps.Find(x => x.ID == _employeeCordinator.ID); if (tempCordinator != null && tempCordinator.EmailAddress == "") { crd.Status = false; crd.NotificationType = notificationtype; crd.EmployeeNo = tempCordinator.EmployeeNo; crd.Description = "CoOrdinator " + tempCordinator.EmployeeNo + tempCordinator.Name + "Email address not found"; oMailNotificationHistoryList.Add(crd); } else ccemail.Add(tempCordinator.EmailAddress); } //allemps. } try { CreateAndSendMailSelf(pSchedularSetup, emp, ccemail, String.Empty); Thread.Sleep(100); MailNotificationHistory success = new MailNotificationHistory(); success.EmployeeNo = emp.EmployeeNo; success.Status = true; success.NotificationType = notificationtype; success.Description = "Successful for " + emp.EmployeeNo; oMailNotificationHistoryList.Add(success); } catch (Exception ex) { string ErrorMsg = ex.Message; CreateAndSendMailSelfOnError(pSchedularSetup, ErrorMsg, ccemail, String.Empty); Thread.Sleep(100); MailNotificationHistory mailFailed = new MailNotificationHistory(); mailFailed.NotificationType = notificationtype; mailFailed.EmployeeNo = emp.EmployeeNo; mailFailed.Status = false; mailFailed.Description = ex.Message.Length > 256 ? ex.Message.Substring(0,256):ex.Message; oMailNotificationHistoryList.Add(mailFailed); } } catch (Exception ex) { MailNotificationHistory mailFailed = new MailNotificationHistory(); mailFailed.EmployeeNo = emp.EmployeeNo; mailFailed.Description = ex.Message.Length > 256 ? ex.Message.Substring(0, 256) : ex.Message; mailFailed.NotificationType = notificationtype; mailFailed.Status = false; } //finally //{ // oMailNotificationHistoryList.Add(tempMailNotificationHistory); //} } if (oMailNotificationHistoryList != null && oMailNotificationHistoryList.Count > 0) { new SchedularSetupService().SaveMailHistory(oMailNotificationHistoryList); } } catch (Exception ex) { pSchedularSetup.Remarks = ex.Message.Length > 256 ? ex.Message.Substring(0, 256) : ex.Message; } finally { pSchedularSetup.LastExecuteDateTime = DateTime.Now; SchedularSetupService oSchedularSetupService = new SchedularSetupService(); oSchedularSetupService.Save(pSchedularSetup); } } #endregion #region MonthlyAttendanceSummaryForLM public void MonthlyAttendanceSummaryForLM(SchedularSetup pSchedularSetup) { if (waitTheThread(pSchedularSetup.StartAt) && (mailNotificationProcessConfiguration.IsTest || DateTime.Today == GlobalFunctions.FirstDateOfMonth(DateTime.Today))) { List oMailNotificationHistoryList = new(); pSchedularSetup.Type = EnumSchedularType.MonthlyAttendanceSummaryLM; byte[] report = null; string fileFormate = Enum.GetName(pSchedularSetup.ReportFormat.GetType(), pSchedularSetup.ReportFormat); string fileExtention = EnumHelper.GetEnumDescription(pSchedularSetup.ReportFormat); List empCord = new EmployeeCordinatorService().Get(); //string fileExtention = "pdf"; List allemps = new EmployeeService().GetAllEmps(); //List linemanagers = new List(); //allemps.ForEach(x =>{ // if(x.LineManagerID != null ) // { // if (linemanagers.FindIndex(y => y.ID == (int)x.LineManagerID) != -1) // linemanagers.Add(x); // } //}); foreach (Employee emp in allemps) //Here, Emp is the linemanager/Co Ordinators and _employees are the subordinates!! { List _employees = new EmployeeService().GetSubordinatesByLineManager(emp.ID); MailNotificationHistory tempMailNotificationHistory = null; DateTime fromDate = GlobalFunctions.FirstDateOfMonth(DateTime.Now.AddMonths(-24)); DateTime toDate = GlobalFunctions.LastDateOfMonth(DateTime.Now.AddMonths(-1)); EmployeeCordinator cordinatorCheck = empCord.Find(x => x.CordinatorID == emp.ID); if (cordinatorCheck != null) { if (emp.EmailAddress != null) { try { tempMailNotificationHistory = new MailNotificationHistory(emp.EmployeeNo, pSchedularSetup.Type); //report = new AttendanceReport().GetMonthlyAttendanceSummaryCordinator(emp.ID, fromDate, toDate, EnumAttendanceType.None, mailNotificationProcessConfiguration.PayrollTypeForMailSchedular, fileFormate); string pdfFileLocation = Directory.GetCurrentDirectory() + "\\PreviousMonthAttnReportToCordinator" + "(" + emp.EmployeeNo + ")" + "(" + fromDate.ToString("dd MMM yyyy") + "-" + toDate.ToString("dd MMM yyyy") + ")" + fileExtention; File.WriteAllBytes(pdfFileLocation, report); //CreateAndSendMail(pSchedularSetup, emp.EmailAddress, pdfFileLocation); CreateAndSendMailForMonthlyAttendanceSummary(pSchedularSetup, fromDate, emp.EmailAddress, pdfFileLocation); MailNotificationHistory emnotfound = new MailNotificationHistory(emp.EmailAddress, pSchedularSetup.Type); emnotfound.EmployeeNo = emp.EmployeeNo; emnotfound.Description = "successfully sent monthly attendance report for the Cordinator:" + emp.EmployeeNo + " " + emp.Name + ""; oMailNotificationHistoryList.Add(emnotfound); } catch (Exception ex) { tempMailNotificationHistory.Description = ex.Message; tempMailNotificationHistory.Status = false; oMailNotificationHistoryList.Add(tempMailNotificationHistory); } //finally //{ // oMailNotificationHistoryList.Add(tempMailNotificationHistory); //} } else { MailNotificationHistory emnotfound = new MailNotificationHistory(emp.EmailAddress, pSchedularSetup.Type); emnotfound.EmployeeNo = emp.EmployeeNo; emnotfound.Description = "Line manager:" + emp.EmployeeNo + " " + emp.Name + " email not found"; oMailNotificationHistoryList.Add(emnotfound); } } if (_employees.Count != 0) { if (emp.EmailAddress != null) { try { tempMailNotificationHistory = new MailNotificationHistory(emp.EmployeeNo, pSchedularSetup.Type); //report = report == null ? new AttendanceReport().GetMonthlyAttendanceSummary(emp.ID, fromDate, toDate, EnumAttendanceType.None, mailNotificationProcessConfiguration.PayrollTypeForMailSchedular, fileFormate) : report; //report = new AttendanceReport().GetMonthlyAttendanceSummary(emp.ID, fromDate, toDate, EnumAttendanceType.None, mailNotificationProcessConfiguration.PayrollTypeForMailSchedular, fileFormate); //string pdfFileLocation = Directory.GetCurrentDirectory() + "\\PreviousMonthAttnReport(Line Manager " + emp.ID + ")" + "(" + fromDate.ToString("dd MMM yyyy") + "-" + toDate.ToString("dd MMM yyyy") + ")" + fileExtention; string pdfFileLocation = Directory.GetCurrentDirectory() + "\\PreviousMonthAttnReportToLineManager" + "(" + emp.EmployeeNo + ")" + "(" + fromDate.ToString("dd MMM yyyy") + "-" + toDate.ToString("dd MMM yyyy") + ")" + fileExtention; File.WriteAllBytes(pdfFileLocation, report); //CreateAndSendMail(pSchedularSetup, emp.EmailAddress, pdfFileLocation); CreateAndSendMailForMonthlyAttendanceSummary(pSchedularSetup, fromDate, emp.EmailAddress, pdfFileLocation); MailNotificationHistory emnotfound = new MailNotificationHistory(emp.EmailAddress, pSchedularSetup.Type); emnotfound.EmployeeNo = emp.EmployeeNo; emnotfound.Description = "successfully sent monthly attendance report for the Line manager:" + emp.EmployeeNo + " " + emp.Name + ""; oMailNotificationHistoryList.Add(emnotfound); } catch (Exception ex) { string ErrorMsg = ex.Message; CreateAndSendMailSelfOnError(pSchedularSetup, ErrorMsg, [], String.Empty); tempMailNotificationHistory.Description = ex.Message; tempMailNotificationHistory.Status = false; oMailNotificationHistoryList.Add(tempMailNotificationHistory); } //finally //{ // oMailNotificationHistoryList.Add(tempMailNotificationHistory); //} } else { MailNotificationHistory emnotfound = new MailNotificationHistory(emp.EmailAddress, pSchedularSetup.Type); emnotfound.EmployeeNo = emp.EmployeeNo; emnotfound.Description = "Line manager:" + emp.EmployeeNo + " " + emp.Name + " email not found"; oMailNotificationHistoryList.Add(emnotfound); } } } if (oMailNotificationHistoryList != null && oMailNotificationHistoryList.Count > 0) { new SchedularSetupService().SaveMailHistory(oMailNotificationHistoryList); } } } #endregion #region PreviousDayAbsentNotificationLM public void PreviousDayAbsentNotificationForLM(SchedularSetup pSchedularSetup) { if (waitTheThread(pSchedularSetup.StartAt)) { List employeeList = new EmployeeService().GetAllAbsentOnYesterdayEmps(mailNotificationProcessConfiguration.PayrollTypeForMailSchedular); List allemp = new EmployeeService().GetAllEmps(); List oMailNotificationHistoryList = new List(); MailNotificationHistory tempMailNotificationHistory = null; foreach (Employee emp in employeeList) { if (emp.LineManagerID != null) { Employee lm = allemp.FirstOrDefault(x => x.ID == emp.ID); //new EmployeeService().GetAllAbsentOnYesterdayEmpLM((int)emp.LineManagerID, mailNotificationProcessConfiguration.PayrollTypeForMailSchedular); tempMailNotificationHistory = new MailNotificationHistory(lm.EmployeeNo.ToString(), pSchedularSetup.Type); string EmpString = emp.Name + " [" + emp.EmployeeNo + "]"; try { if (lm.EmailAddress != null && lm.EmailAddress.Trim() != string.Empty) { CreateAndSendMailForLM(pSchedularSetup, lm.EmailAddress, EmpString); } else { tempMailNotificationHistory.Description = "Email address not found for line manager"; tempMailNotificationHistory.Status = false; } } catch (Exception ex) { string ErrorMsg = ex.Message; CreateAndSendMailSelfOnError(pSchedularSetup, ErrorMsg, [], String.Empty); tempMailNotificationHistory.Description = ex.Message; tempMailNotificationHistory.Status = false; } finally { oMailNotificationHistoryList.Add(tempMailNotificationHistory); } } else { tempMailNotificationHistory = new MailNotificationHistory(emp.EmployeeNo.ToString(), pSchedularSetup.Type); tempMailNotificationHistory.Description = "Line manager not found"; tempMailNotificationHistory.Status = false; oMailNotificationHistoryList.Add(tempMailNotificationHistory); } } if (oMailNotificationHistoryList != null && oMailNotificationHistoryList.Count > 0) { new SchedularSetupService().SaveMailHistory(oMailNotificationHistoryList); } } } #endregion #region PreviousWeekAbsentNotification //public void PreviousWeekAttendanceNotification(SchedularSetup pSchedularSetup) //{ // if (waitTheThread(pSchedularSetup.StartAt) && (mailNotificationProcessConfiguration.IsTest || DateTime.Today.DayOfWeek == DayOfWeek.Sunday)) // { // byte[] report = null; // string fileFormate = Enum.GetName(pSchedularSetup.ReportFormat.GetType(), pSchedularSetup.ReportFormat); // string fileExtention = EnumHelper.GetEnumDescription(pSchedularSetup.ReportFormat); // MailNotificationHistory tempMailNotificationHistory = null; // List oMailNotificationHistoryList = new List(); // //DateTime fromDate = DateTime.Now.AddDays(-(int)DateTime.Now.DayOfWeek - 7); // previous week Sunday // //DateTime toDate = DateTime.Now.AddDays((int)DateTime.Now.DayOfWeek - 7); // recent Sturday // // as it will fire on Sunday // DateTime fromDate = DateTime.Now.AddDays(-7); // Sunday // DateTime toDate = DateTime.Now.AddDays(-1); // recent Sturday // if (pSchedularSetup.ToEmailAddress != null && pSchedularSetup.ToEmailAddress.Count > 0) // { // foreach (string toEmail in pSchedularSetup.ToEmailAddress) // { // try // { // tempMailNotificationHistory = new MailNotificationHistory(toEmail, pSchedularSetup.Type); // report = report == null ? new AttendanceReport().GetWeeklyAttnReport(fromDate, toDate, EnumAttendanceType.None, mailNotificationProcessConfiguration.PayrollTypeForMailSchedular, fileFormate) : report; // string pdfFileLocation = Directory.GetCurrentDirectory() + "\\PreviousWeekAttnReport" + "(" + fromDate.ToString("dd MMM yyyy") + "-" + toDate.ToString("dd MMM yyyy") + ")" + fileExtention; // File.WriteAllBytes(pdfFileLocation, report); // CreateAndSendMail(pSchedularSetup, toEmail, pdfFileLocation); // } // catch (Exception ex) // { // tempMailNotificationHistory.Description = ex.Message; // tempMailNotificationHistory.Status = false; // } // finally // { // oMailNotificationHistoryList.Add(tempMailNotificationHistory); // } // } // } // if (oMailNotificationHistoryList != null && oMailNotificationHistoryList.Count > 0) // { // new SchedularSetupService().SaveMailHistory(oMailNotificationHistoryList); // } // } //} #endregion #region PreviousMonthAbsentNotification //public void PreviousMonthAttendanceNotification(SchedularSetup pSchedularSetup) //{ // if (waitTheThread(pSchedularSetup.StartAt) && (mailNotificationProcessConfiguration.IsTest || DateTime.Today == GlobalFunctions.FirstDateOfMonth(DateTime.Today))) // { // byte[] report = null; // string fileFormate = Enum.GetName(pSchedularSetup.ReportFormat.GetType(), pSchedularSetup.ReportFormat); // string fileExtention = EnumHelper.GetEnumDescription(pSchedularSetup.ReportFormat); // MailNotificationHistory tempMailNotificationHistory = null; // List oMailNotificationHistoryList = new List(); // DateTime fromDate = GlobalFunctions.FirstDateOfMonth(DateTime.Now.AddMonths(-1)); // DateTime toDate = GlobalFunctions.LastDateOfMonth(DateTime.Now.AddMonths(-1)); // if (pSchedularSetup.ToEmailAddress != null && pSchedularSetup.ToEmailAddress.Count > 0) // { // foreach (string toEmail in pSchedularSetup.ToEmailAddress) // { // try // { // tempMailNotificationHistory = new MailNotificationHistory(toEmail, pSchedularSetup.Type); // report = report == null ? new AttendanceReport().GetMonthlyAttnReport(fromDate, toDate, EnumAttendanceType.None, mailNotificationProcessConfiguration.PayrollTypeForMailSchedular, fileFormate) : report; // string pdfFileLocation = Directory.GetCurrentDirectory() + "\\PreviousMonthAttnReport" + "(" + fromDate.ToString("dd MMM yyyy") + "-" + toDate.ToString("dd MMM yyyy") + ")" + fileExtention; // File.WriteAllBytes(pdfFileLocation, report); // CreateAndSendMail(pSchedularSetup, toEmail, pdfFileLocation); // } // catch (Exception ex) // { // tempMailNotificationHistory.Description = ex.Message; // tempMailNotificationHistory.Status = false; // } // finally // { // oMailNotificationHistoryList.Add(tempMailNotificationHistory); // } // } // } // if (oMailNotificationHistoryList != null && oMailNotificationHistoryList.Count > 0) // { // new SchedularSetupService().SaveMailHistory(oMailNotificationHistoryList); // } // } //} #endregion #region PendingListNotification public void PendingListNotification(SchedularSetup pSchedularSetup) { if (waitTheThread(pSchedularSetup.StartAt) && (mailNotificationProcessConfiguration.IsTest || DateTime.Today.DayOfWeek == DayOfWeek.Sunday)) { DataSet linemanagerPendingList = new EmployeeService().GetLinemanagerPendingList(); List oMailNotificationHistoryList = new List(); MailNotificationHistory tempMailNotificationHistory = null; if (linemanagerPendingList != null && linemanagerPendingList.Tables != null && linemanagerPendingList.Tables.Count > 0 && linemanagerPendingList.Tables[0].Rows.Count > 0) { foreach (DataRow emp in linemanagerPendingList.Tables[0].Rows) { tempMailNotificationHistory = new MailNotificationHistory(emp["EMPLOYEENO"].ToString(), pSchedularSetup.Type); try { CreateAndSendMail(pSchedularSetup, emp["EMAILADDRESS"].ToString()); } catch (Exception ex) { string ErrorMsg = ex.Message; CreateAndSendMailSelfOnError(pSchedularSetup, ErrorMsg, [], String.Empty); tempMailNotificationHistory.Description = ex.Message; tempMailNotificationHistory.Status = false; } finally { oMailNotificationHistoryList.Add(tempMailNotificationHistory); } } } if (oMailNotificationHistoryList != null && oMailNotificationHistoryList.Count > 0) { new SchedularSetupService().SaveMailHistory(oMailNotificationHistoryList); } } } #endregion #region PreviousDayApprovedLeaveNofication public void PreviousDayApprovedLeaveNofication(SchedularSetup pSchedularSetup) { if (waitTheThread(pSchedularSetup.StartAt)) { byte[] report = null; string fileFormate = Enum.GetName(pSchedularSetup.ReportFormat.GetType(), pSchedularSetup.ReportFormat); string fileExtention = EnumHelper.GetEnumDescription(pSchedularSetup.ReportFormat); MailNotificationHistory tempMailNotificationHistory = null; List oMailNotificationHistoryList = new List(); DateTime leaveApprovedDate = DateTime.Today.AddDays(-1); if (pSchedularSetup.ToEmailAddress != null && pSchedularSetup.ToEmailAddress.Count > 0) { foreach (string toEmail in pSchedularSetup.ToEmailAddress) { try { tempMailNotificationHistory = new MailNotificationHistory(toEmail, pSchedularSetup.Type); report = report == null ? new rptLeave().GetPreviousDayApprovedLeaveReport(toEmail, leaveApprovedDate, EnumLeaveStatus.Approved, fileFormate) : report; string pdfFileLocation = Directory.GetCurrentDirectory() + "\\PreviousDayApprovedLeaveReport" + "(" + leaveApprovedDate.ToString("dd MMM yyyy") + ")" + fileExtention; File.WriteAllBytes(pdfFileLocation, report); CreateAndSendMail(pSchedularSetup, toEmail, pdfFileLocation); } catch (Exception ex) { string ErrorMsg = ex.Message; CreateAndSendMailSelfOnError(pSchedularSetup, ErrorMsg, [], String.Empty); tempMailNotificationHistory.Description = ex.Message; tempMailNotificationHistory.Status = false; } finally { oMailNotificationHistoryList.Add(tempMailNotificationHistory); } } } if (oMailNotificationHistoryList != null && oMailNotificationHistoryList.Count > 0) { new SchedularSetupService().SaveMailHistory(oMailNotificationHistoryList); } } } #endregion #region Attendance Auto Process public void AttendanceAutoProcess(SchedularSetup pSchedularSetup) { EnumSchedularType notificationtype = pSchedularSetup.Type; AttendanceAutoProcessConfiguration oAttendanceAutoProcessConfiguration = new AttendanceAutoProcessConfiguration(); List oMailNotificationHistoryList = new List(); //StreamWriter ofile = null; //string basepath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); //string loc = basepath + "\\log.txt"; //if (!File.Exists(loc)) //{ // File.Create(loc).Dispose(); //} var configurationBuilder = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build(); configurationBuilder.GetSection("AttendanceAutoProcess").Bind(oAttendanceAutoProcessConfiguration); // List oPtypes = new PayrollTypeService().Get(); string[] ptypeid = mailNotificationProcessConfiguration.PayrollTypeForMailSchedular.Split(","); foreach (string ptype in ptypeid) { try { new AttendanceProcess().Process(DateTime.Today, EnumProcessMode.Auto, Convert.ToInt32(ptype), 1); Thread.Sleep(5000); MailNotificationHistory success = new MailNotificationHistory(); success.Description = "Date & Time : " + DateTime.Now.ToString() + ", Attendence Process Completed Successfully For " + DateTime.Today.AddDays(-oAttendanceAutoProcessConfiguration.NumberOfDaysToProcess).Date.ToString("dd MMM yyyy") + "."; success.NotificationType = notificationtype; success.Status = true; oMailNotificationHistoryList.Add(success); } catch (Exception ex) { string ErrorMsg = ex.Message; CreateAndSendMailSelfOnError(pSchedularSetup, ErrorMsg, [], String.Empty); MailNotificationHistory failed = new MailNotificationHistory(); failed.Description = "Date & Time : " + DateTime.Now.ToString() + ", Error While Processing Attendence Data For " + DateTime.Today.AddDays(-oAttendanceAutoProcessConfiguration.NumberOfDaysToProcess).Date.ToString("dd MMM yyyy") + ". Reason: " + ex.Message; failed.NotificationType = notificationtype; failed.Status = false; oMailNotificationHistoryList.Add(failed); } } if (oMailNotificationHistoryList != null && oMailNotificationHistoryList.Count > 0) { new SchedularSetupService().SaveMailHistory(oMailNotificationHistoryList); } pSchedularSetup.LastExecuteDateTime = DateTime.Now; SchedularSetupService oSchedularSetupService = new SchedularSetupService(); oSchedularSetupService.Save(pSchedularSetup); } #endregion #endregion } }