/// <summary> /// This method used for added reminder notification log /// </summary> /// <param name="emailTemplateId"></param> /// <param name="employeeBillId"></param> /// <param name="isReminderMail"></param> private void AddedReminderNotificationLog(long emailTemplateId, long employeeBillId, bool isReminderMail, string emailTo) { using (var _dbTeleBillingContext = new telebilling_v01Context()) { Emailreminderlog newEmailReminderLog = new Emailreminderlog(); newEmailReminderLog.CreatedDate = DateTime.Now; newEmailReminderLog.IsReminderMail = isReminderMail; newEmailReminderLog.TemplateId = emailTemplateId; newEmailReminderLog.EmailTo = string.IsNullOrEmpty(emailTo) ? string.Empty : emailTo; newEmailReminderLog.EmployeeBillId = employeeBillId; _dbTeleBillingContext.Add(newEmailReminderLog); _dbTeleBillingContext.SaveChanges(); } }
/// <summary> /// /// </summary> /// <param name="employeeBillServicePackage"></param> /// <param name="employeeBillMasters"></param> private void SendEmailNotificationToEmployee(Employeebillservicepackage employeeBillServicePackage, Employeebillmaster employeeBillMaster) { if (!string.IsNullOrEmpty(employeeBillMaster.Employee.EmailId)) { Dictionary <string, string> replacements = new Dictionary <string, string>(); EnumList.Month month = (EnumList.Month)employeeBillMaster.BillMonth; replacements.Add("{BillNumber}", employeeBillMaster.BillNumber); replacements.Add("{BillMonth}", month.ToString()); replacements.Add("{BillYear}", employeeBillMaster.BillYear.ToString()); replacements.Add("{newEmpName}", employeeBillMaster.Employee.FullName); replacements.Add("{Provider}", employeeBillMaster.Provider.Name); string telphoneNumber = !string.IsNullOrEmpty(employeeBillMaster.TelephoneNumber) ? employeeBillMaster.TelephoneNumber.Trim() : string.Empty; replacements.Add("{TelePhoneNumber}", telphoneNumber); string deductionAmount = string.Empty; if (employeeBillServicePackage.DeductionAmount != null) { deductionAmount = Convert.ToString(employeeBillServicePackage.DeductionAmount); } replacements.Add("{DeductionAmount}", deductionAmount); using (var _dbTeleBillingContext = new telebilling_v01Context()) { long emailTemplateTypeId = Convert.ToInt64(EnumList.EmailTemplateType.SendEmailNotificationToEmployeForAmountToBeDeducted); Emailtemplate emailTemplate = _dbTeleBillingContext.Emailtemplate.FirstOrDefault(x => x.EmailTemplateTypeId == emailTemplateTypeId); if (emailTemplate != null && !string.IsNullOrEmpty(employeeBillMaster.Employee.EmailId)) { string body = emailTemplate.EmailText; replacements.ToList().ForEach(x => { body = body.Replace(x.Key, Convert.ToString(x.Value)); }); if (SendEmail(emailTemplate.EmailFrom, emailTemplate.EmailBcc, emailTemplate.Subject, body, employeeBillMaster.Employee.EmailId)) { AddedReminderNotificationLog(emailTemplate.Id, employeeBillMaster.Id, false, employeeBillMaster.Employee.EmailId); } } } } }
void timerReminder_Elapsed(object sender, ElapsedEventArgs e) { using (var _dbTeleBillingContext = new telebilling_v01Context()) { int waitingForIdentificationStatus = Convert.ToInt16(EnumList.EmployeeBillStatus.WaitingForIdentification); int waitingForLineManagerApprovalStatus = Convert.ToInt16(EnumList.EmployeeBillStatus.WaitingForLineManagerApproval); List <Employeebillmaster> employeeBillMasters = _dbTeleBillingContext.Employeebillmaster.Where(x => !x.IsDelete && (x.EmployeeBillStatus == waitingForIdentificationStatus || x.EmployeeBillStatus == waitingForLineManagerApprovalStatus)).Include(x => x.Provider).Include(x => x.Employee).Include(x => x.Linemanager).Include(x => x.BillDelegatedEmp).ToList(); Configuration configuration = _dbTeleBillingContext.Configuration.First(); DateTime todaydate = DateTime.Now.Date; //mail sending only one time for bill identification if (configuration.NBillAllocationToEmployee) { List <Employeebillmaster> employeeBillMastersForNotiIdentification = employeeBillMasters.Where(x => !x.IsDelete && x.EmployeeBillStatus == waitingForIdentificationStatus && x.CreatedDate.Date == todaydate).ToList(); if (employeeBillMastersForNotiIdentification.Any()) { int emailTemplateTypeId = Convert.ToInt16(EnumList.EmailTemplateType.EmployeeCallIdentificationNotification); Emailtemplate emailTemplate = _dbTeleBillingContext.Emailtemplate.FirstOrDefault(x => x.EmailTemplateTypeId == emailTemplateTypeId); if (emailTemplate != null) { foreach (var item in employeeBillMastersForNotiIdentification) { Emailreminderlog emailReminderLog = _dbTeleBillingContext.Emailreminderlog.FirstOrDefault(x => x.EmployeeBillId == item.Id && x.TemplateId == emailTemplate.Id && !x.IsReminderMail); if (emailReminderLog == null && !string.IsNullOrEmpty(item.Employee.EmailId)) { Dictionary <string, string> replacements = new Dictionary <string, string>(); EnumList.Month month = (EnumList.Month)item.BillMonth; replacements.Add("{newEmpName}", item.Employee.FullName); replacements.Add("{BillNumber}", item.BillNumber); replacements.Add("{BillMonth}", month.ToString()); replacements.Add("{Provider}", item.Provider.Name); replacements.Add("{BillYear}", item.BillYear.ToString()); replacements.Add("{TelePhoneNumber}", item.TelephoneNumber.Trim()); string body = emailTemplate.EmailText; replacements.ToList().ForEach(x => { body = body.Replace(x.Key, Convert.ToString(x.Value)); }); if (SendEmail(emailTemplate.EmailFrom, emailTemplate.EmailBcc, emailTemplate.Subject, body, item.Employee.EmailId)) { AddedReminderNotificationLog(emailTemplate.Id, item.Id, false, item.Employee.EmailId); } } } } } } //mail sending only one time for bill delegated identification if (configuration.NBillDelegatesForIdentification) { List <Employeebillmaster> employeeBillMastersForDelgatedIdentification = employeeBillMasters.Where(x => !x.IsDelete && x.EmployeeBillStatus == waitingForIdentificationStatus && x.BillDelegatedEmpId != null).ToList(); if (employeeBillMastersForDelgatedIdentification.Any()) { int emailTemplateForDelegatedTypeId = Convert.ToInt16(EnumList.EmailTemplateType.BillDelegatesForIdentification); Emailtemplate emailTemplate = _dbTeleBillingContext.Emailtemplate.FirstOrDefault(x => x.EmailTemplateTypeId == emailTemplateForDelegatedTypeId); if (emailTemplate != null) { foreach (var item in employeeBillMastersForDelgatedIdentification) { Emailreminderlog emailReminderLog = _dbTeleBillingContext.Emailreminderlog.FirstOrDefault(x => x.EmployeeBillId == item.Id && x.TemplateId == emailTemplate.Id && !x.IsReminderMail); if (emailReminderLog == null && !string.IsNullOrEmpty(item.BillDelegatedEmp.EmailId)) { Dictionary <string, string> replacements = new Dictionary <string, string>(); EnumList.Month month = (EnumList.Month)item.BillMonth; replacements.Add("{newEmpName}", item.BillDelegatedEmp.FullName); replacements.Add("{BillNumber}", item.BillNumber); replacements.Add("{BillMonth}", month.ToString()); replacements.Add("{Provider}", item.Provider.Name); replacements.Add("{BillYear}", item.BillYear.ToString()); string body = emailTemplate.EmailText; replacements.ToList().ForEach(x => { body = body.Replace(x.Key, Convert.ToString(x.Value)); }); if (SendEmail(emailTemplate.EmailFrom, emailTemplate.EmailBcc, emailTemplate.Subject, body, item.BillDelegatedEmp.EmailId)) { AddedReminderNotificationLog(emailTemplate.Id, item.Id, false, item.BillDelegatedEmp.EmailId); } } } } } } //mail sending only one time for bill identification request approval to line manager if (configuration.NNewBillReceiveForApproval) { List <Employeebillmaster> employeeBillMastersForbillApproval = employeeBillMasters.Where(x => !x.IsDelete && x.EmployeeBillStatus == waitingForLineManagerApprovalStatus && x.CreatedDate.Date == todaydate).ToList(); if (employeeBillMastersForbillApproval.Any()) { int emailTemplateTypeId = Convert.ToInt16(EnumList.EmailTemplateType.LineManagerApprovalNotification); Emailtemplate emailTemplate = _dbTeleBillingContext.Emailtemplate.FirstOrDefault(x => x.EmailTemplateTypeId == emailTemplateTypeId); if (emailTemplate != null) { foreach (var item in employeeBillMastersForbillApproval) { Emailreminderlog emailReminderLog = _dbTeleBillingContext.Emailreminderlog.FirstOrDefault(x => x.EmployeeBillId == item.Id && x.TemplateId == emailTemplate.Id && !x.IsReminderMail); if (emailReminderLog == null && !string.IsNullOrEmpty(item.Linemanager.EmailId)) { Dictionary <string, string> replacements = new Dictionary <string, string>(); replacements.Add("{newEmpName}", item.Employee.FullName); EnumList.Month month = (EnumList.Month)item.BillMonth; replacements.Add("{BillNumber}", item.BillNumber); replacements.Add("{BillMonth}", month.ToString()); replacements.Add("{BillYear}", item.BillYear.ToString()); replacements.Add("{Provider}", item.Provider.Name); replacements.Add("{TelePhoneNumber}", item.TelephoneNumber.Trim()); string body = emailTemplate.EmailText; replacements.ToList().ForEach(x => { body = body.Replace(x.Key, Convert.ToString(x.Value)); }); if (SendEmail(emailTemplate.EmailFrom, emailTemplate.EmailBcc, emailTemplate.Subject, body, item.Linemanager.EmailId)) { AddedReminderNotificationLog(emailTemplate.Id, item.Id, false, item.Linemanager.EmailId); } } } } } } //mail sending only one time for delegates bill identification request approval to line manager if (configuration.NDelegatesBillForApproval) { List <Employeebillmaster> employeeBillMastersForDelegatesBillApproval = employeeBillMasters.Where(x => !x.IsDelete && x.EmployeeBillStatus == waitingForLineManagerApprovalStatus && x.CreatedDate.Date == todaydate && x.BillDelegatedEmpId != null).ToList(); if (employeeBillMastersForDelegatesBillApproval.Any()) { int emailTemplateTypeId = Convert.ToInt16(EnumList.EmailTemplateType.DelegateBillApproval); Emailtemplate emailTemplate = _dbTeleBillingContext.Emailtemplate.FirstOrDefault(x => x.EmailTemplateTypeId == emailTemplateTypeId); if (emailTemplate != null) { foreach (var item in employeeBillMastersForDelegatesBillApproval) { Emailreminderlog emailReminderLog = _dbTeleBillingContext.Emailreminderlog.FirstOrDefault(x => x.EmployeeBillId == item.Id && x.TemplateId == emailTemplate.Id && !x.IsReminderMail); if (emailReminderLog == null && !string.IsNullOrEmpty(item.BillDelegatedEmp.EmailId)) { Dictionary <string, string> replacements = new Dictionary <string, string>(); replacements.Add("{newEmpName}", item.Employee.FullName); EnumList.Month month = (EnumList.Month)item.BillMonth; replacements.Add("{BillNumber}", item.BillNumber); replacements.Add("{BillMonth}", month.ToString()); replacements.Add("{BillYear}", item.BillYear.ToString()); replacements.Add("{Provider}", item.Provider.Name); replacements.Add("{TelePhoneNumber}", item.TelephoneNumber.Trim()); string body = emailTemplate.EmailText; replacements.ToList().ForEach(x => { body = body.Replace(x.Key, Convert.ToString(x.Value)); }); if (SendEmail(emailTemplate.EmailFrom, emailTemplate.EmailBcc, emailTemplate.Subject, body, item.BillDelegatedEmp.EmailId)) { AddedReminderNotificationLog(emailTemplate.Id, item.Id, false, item.BillDelegatedEmp.EmailId); } } } } } } //mail sending reminder in perticular interval for bill identification and also delegated employee if (configuration.REmployeeCallIdentificationIsActive) //Included delgated employee { List <Employeebillmaster> employeeBillMastersForREmpCllIdetification = employeeBillMasters.Where(x => !x.IsDelete && x.EmployeeBillStatus == waitingForIdentificationStatus).ToList(); if (employeeBillMastersForREmpCllIdetification.Any()) { int emailTemplateTypeId = Convert.ToInt16(EnumList.EmailTemplateType.EmployeeCallIdentificationRemider); int emailTemplateTypeForDelegateUserId = Convert.ToInt16(EnumList.EmailTemplateType.BillDelegatesForIdentification); foreach (var item in employeeBillMastersForREmpCllIdetification) { DateTime reminderDate = new DateTime(); Emailreminderlog emailReminderLog = new Emailreminderlog(); //check bill delgated or not if (item.BillDelegatedEmpId != null) { Emailtemplate emailTemplateForDelegateUser = _dbTeleBillingContext.Emailtemplate.FirstOrDefault(x => x.EmailTemplateTypeId == emailTemplateTypeForDelegateUserId); if (emailTemplateForDelegateUser != null && !string.IsNullOrEmpty(item.BillDelegatedEmp.EmailId)) { emailReminderLog = _dbTeleBillingContext.Emailreminderlog.Where(x => x.EmployeeBillId == item.Id && x.TemplateId == emailTemplateForDelegateUser.Id && x.IsReminderMail).OrderByDescending(x => x.CreatedDateInt).FirstOrDefault(); int intervalDay = configuration.REmployeeCallIdentificationInterval != null?Convert.ToInt32(configuration.REmployeeCallIdentificationInterval) : 0; if (emailReminderLog != null) { reminderDate = emailReminderLog.CreatedDate.AddDays(intervalDay); } else { reminderDate = item.CreatedDate.AddDays(intervalDay); } if (reminderDate.Date == DateTime.Now.Date) { Dictionary <string, string> replacements = new Dictionary <string, string>(); replacements.Add("{newEmpName}", item.Employee.FullName); EnumList.Month month = (EnumList.Month)item.BillMonth; replacements.Add("{BillNumber}", item.BillNumber); replacements.Add("{Provider}", item.Provider.Name); replacements.Add("{BillMonth}", month.ToString()); replacements.Add("{BillYear}", item.BillYear.ToString()); replacements.Add("{TelePhoneNumber}", item.TelephoneNumber.Trim()); string body = emailTemplateForDelegateUser.EmailText; replacements.ToList().ForEach(x => { body = body.Replace(x.Key, Convert.ToString(x.Value)); }); if (SendEmail(emailTemplateForDelegateUser.EmailFrom, emailTemplateForDelegateUser.EmailBcc, emailTemplateForDelegateUser.Subject, body, item.BillDelegatedEmp.EmailId)) { AddedReminderNotificationLog(emailTemplateForDelegateUser.Id, item.Id, true, item.BillDelegatedEmp.EmailId); } } } } else { Emailtemplate emailTemplate = _dbTeleBillingContext.Emailtemplate.FirstOrDefault(x => x.EmailTemplateTypeId == emailTemplateTypeId); if (emailTemplate != null && !string.IsNullOrEmpty(item.Employee.EmailId)) { emailReminderLog = _dbTeleBillingContext.Emailreminderlog.Where(x => x.EmployeeBillId == item.Id && x.TemplateId == emailTemplate.Id && x.IsReminderMail).OrderByDescending(x => x.CreatedDateInt).FirstOrDefault(); int intervalDay = configuration.REmployeeCallIdentificationInterval != null?Convert.ToInt32(configuration.REmployeeCallIdentificationInterval) : 0; if (emailReminderLog != null) { reminderDate = emailReminderLog.CreatedDate.AddDays(intervalDay); } else { reminderDate = item.CreatedDate.AddDays(intervalDay); } if (reminderDate.Date == DateTime.Now.Date) { Dictionary <string, string> replacements = new Dictionary <string, string>(); replacements.Add("{newEmpName}", item.Employee.FullName); EnumList.Month month = (EnumList.Month)item.BillMonth; replacements.Add("{BillNumber}", item.BillNumber); replacements.Add("{BillMonth}", month.ToString()); replacements.Add("{BillYear}", item.BillYear.ToString()); replacements.Add("{Provider}", item.Provider.Name); replacements.Add("{TelePhoneNumber}", item.TelephoneNumber.Trim()); string body = emailTemplate.EmailText; replacements.ToList().ForEach(x => { body = body.Replace(x.Key, Convert.ToString(x.Value)); }); if (SendEmail(emailTemplate.EmailFrom, emailTemplate.EmailBcc, emailTemplate.Subject, body, item.Employee.EmailId)) { AddedReminderNotificationLog(emailTemplate.Id, item.Id, true, item.Employee.EmailId); } } } } } } } //mail sending reminder perticular interval for bill identification request approval to line manager if (configuration.RLinemanagerApprovalIsActive) { List <Employeebillmaster> employeeBillMastersForRLineManager = employeeBillMasters.Where(x => !x.IsDelete && x.EmployeeBillStatus == waitingForLineManagerApprovalStatus).ToList(); if (employeeBillMastersForRLineManager.Any()) { foreach (var item in employeeBillMastersForRLineManager) { DateTime reminderDate = new DateTime(); Emailreminderlog emailReminderLog = new Emailreminderlog(); //check bill delgated or not if (item.BillDelegatedEmpId != null) { int emailTemplateDelegateTypeId = Convert.ToInt16(EnumList.EmailTemplateType.DelegateBillApproval); Emailtemplate emailTemplateForDelegateUser = _dbTeleBillingContext.Emailtemplate.FirstOrDefault(x => x.EmailTemplateTypeId == emailTemplateDelegateTypeId); if (emailTemplateForDelegateUser != null && !string.IsNullOrEmpty(item.BillDelegatedEmp.EmailId)) { emailReminderLog = _dbTeleBillingContext.Emailreminderlog.Where(x => x.EmployeeBillId == item.Id && x.TemplateId == emailTemplateForDelegateUser.Id && x.IsReminderMail).OrderByDescending(x => x.CreatedDateInt).FirstOrDefault(); int intervalDay = configuration.RLinemanagerApprovalInterval != null?Convert.ToInt32(configuration.RLinemanagerApprovalInterval) : 0; if (emailReminderLog != null) { reminderDate = emailReminderLog.CreatedDate.AddDays(intervalDay); } else { reminderDate = item.CreatedDate.AddDays(intervalDay); } if (reminderDate.Date == DateTime.Now.Date) { Dictionary <string, string> replacements = new Dictionary <string, string>(); replacements.Add("{newEmpName}", item.Employee.FullName); EnumList.Month month = (EnumList.Month)item.BillMonth; replacements.Add("{BillNumber}", item.BillNumber); replacements.Add("{BillMonth}", month.ToString()); replacements.Add("{BillYear}", item.BillYear.ToString()); replacements.Add("{TelePhoneNumber}", item.TelephoneNumber.Trim()); string body = emailTemplateForDelegateUser.EmailText; replacements.ToList().ForEach(x => { body = body.Replace(x.Key, Convert.ToString(x.Value)); }); if (SendEmail(emailTemplateForDelegateUser.EmailFrom, emailTemplateForDelegateUser.EmailBcc, emailTemplateForDelegateUser.Subject, body, item.BillDelegatedEmp.EmailId)) { AddedReminderNotificationLog(emailTemplateForDelegateUser.Id, item.Id, true, item.BillDelegatedEmp.EmailId); } } } } else { int emailTemplateTypeId = Convert.ToInt16(EnumList.EmailTemplateType.LineManagerApprovalRemider); Emailtemplate emailTemplate = _dbTeleBillingContext.Emailtemplate.FirstOrDefault(x => x.EmailTemplateTypeId == emailTemplateTypeId); if (emailTemplate != null && !string.IsNullOrEmpty(item.Linemanager.EmailId)) { emailReminderLog = _dbTeleBillingContext.Emailreminderlog.Where(x => x.EmployeeBillId == item.Id && x.TemplateId == emailTemplate.Id && x.IsReminderMail).OrderByDescending(x => x.CreatedDateInt).FirstOrDefault(); int intervalDay = configuration.RLinemanagerApprovalInterval != null?Convert.ToInt32(configuration.RLinemanagerApprovalInterval) : 0; if (emailReminderLog != null) { reminderDate = emailReminderLog.CreatedDate.AddDays(intervalDay); } else { reminderDate = item.CreatedDate.AddDays(intervalDay); } if (reminderDate.Date == DateTime.Now.Date) { Dictionary <string, string> replacements = new Dictionary <string, string>(); replacements.Add("{newEmpName}", item.Employee.FullName); EnumList.Month month = (EnumList.Month)item.BillMonth; replacements.Add("{BillNumber}", item.BillNumber); replacements.Add("{BillMonth}", month.ToString()); replacements.Add("{BillYear}", item.BillYear.ToString()); replacements.Add("{TelePhoneNumber}", item.TelephoneNumber.Trim()); string body = emailTemplate.EmailText; replacements.ToList().ForEach(x => { body = body.Replace(x.Key, Convert.ToString(x.Value)); }); if (SendEmail(emailTemplate.EmailFrom, emailTemplate.EmailBcc, emailTemplate.Subject, body, item.Linemanager.EmailId)) { AddedReminderNotificationLog(emailTemplate.Id, item.Id, true, item.Linemanager.EmailId); } } } } } } } } }
public EmailSender(telebilling_v01Context dbTeleBilling_V01Context) { _dbTeleBilling_V01Context = dbTeleBilling_V01Context; }
public AccountRepository(telebilling_v01Context dbTeleBilling_V01Context) { _dbTeleBilling_V01Context = dbTeleBilling_V01Context; }
void timerBillClosed_Elapsed(object sender, ElapsedEventArgs e) { using (var _dbTeleBillingContext = new telebilling_v01Context()) { try { int billAllocatedStatusId = Convert.ToInt16(EnumList.BillStatus.BillAllocated); List <Billmaster> billMasters = _dbTeleBillingContext.Billmaster.Where(x => !x.IsDelete && (x.BillStatusId == billAllocatedStatusId)).ToList(); if (billMasters.Any()) { foreach (var item in billMasters) { if (item.BillDueDate != null) { if (Convert.ToDateTime(item.BillDueDate).Date < DateTime.Now.Date) { int billCloseStatusId = Convert.ToInt16(EnumList.EmployeeBillStatus.CloseBill); int billAutoCloseBillStatusId = Convert.ToInt16(EnumList.EmployeeBillStatus.AutoCloseBill); List <Employeebillmaster> employeeBillMasters = _dbTeleBillingContext.Employeebillmaster.Where(x => x.BillMasterId == item.Id && !x.IsDelete && (x.EmployeeBillStatus != billCloseStatusId && x.EmployeeBillStatus != billAutoCloseBillStatusId)).Include(x => x.Employee).Include(x => x.Provider).ToList(); List <Notificationlog> notificationlogs = new List <Notificationlog>(); if (employeeBillMasters.Any()) { foreach (var subItem in employeeBillMasters) { #region Transaction Log Entry if (subItem.TransactionId == null) { subItem.TransactionId = GenerateTeleBillingTransctionID(); } //var jsonSerailzeObj = JsonConvert.SerializeObject(subItem); //SaveRequestTraseLog(Convert.ToInt64(subItem.TransactionId), 0, Convert.ToInt64(EnumList.TransactionTraseLog.BillClosed), jsonSerailzeObj); #endregion List <Employeebillservicepackage> employeeBillServicePackages = _dbTeleBillingContext.Employeebillservicepackage.Where(x => x.EmployeeBillId == subItem.Id && !x.IsDelete).Include(x => x.Package).ToList(); foreach (var employeeBillServicePackage in employeeBillServicePackages) { if (!subItem.Employee.IsPresidentOffice) { if (string.IsNullOrEmpty(subItem.TelephoneNumber)) //For Skyp { //for service landline or voip if (employeeBillServicePackage.ServiceTypeId == Convert.ToInt64(EnumList.ServiceType.VOIP) || employeeBillServicePackage.ServiceTypeId == Convert.ToInt64(EnumList.ServiceType.MOC)) { if (subItem.EmployeeBillStatus == Convert.ToInt16(EnumList.EmployeeBillStatus.WaitingForIdentification) || subItem.EmployeeBillStatus == Convert.ToInt16(EnumList.EmployeeBillStatus.BillReject)) { List <Billdetails> billdetails = _dbTeleBillingContext.Billdetails.Where(x => x.EmployeeBillId == subItem.Id && x.ServiceTypeId == employeeBillServicePackage.ServiceTypeId).ToList(); decimal personalDeduction = 0; decimal businessCharge = 0; foreach (var subBillDetail in billdetails) { if (subBillDetail.CallIdentificationType == Convert.ToInt16(EnumList.AssignType.Business)) { businessCharge += subBillDetail.CallAmount != null?Convert.ToDecimal(subBillDetail.CallAmount) : 0; } else if (subBillDetail.CallIdentificationType == Convert.ToInt16(EnumList.AssignType.Employee)) { personalDeduction += subBillDetail.CallAmount != null?Convert.ToDecimal(subBillDetail.CallAmount) : 0; } } employeeBillServicePackage.PersonalIdentificationAmount = personalDeduction; employeeBillServicePackage.BusinessIdentificationAmount = businessCharge; employeeBillServicePackage.DeductionAmount = personalDeduction; } else if (subItem.EmployeeBillStatus == Convert.ToInt16(EnumList.EmployeeBillStatus.WaitingForLineManagerApproval) || subItem.EmployeeBillStatus == Convert.ToInt16(EnumList.EmployeeBillStatus.LineManagerApproved)) { employeeBillServicePackage.DeductionAmount = employeeBillServicePackage.PersonalIdentificationAmount; } SendEmailNotificationToEmployee(employeeBillServicePackage, subItem); } } else { var telephoneNumberAllocation = _dbTeleBillingContext.Telephonenumberallocation.FirstOrDefault(x => x.TelephoneNumber == subItem.TelephoneNumber && x.EmployeeId == subItem.EmployeeId && !x.IsDelete); if (telephoneNumberAllocation.AssignTypeId != Convert.ToInt16(EnumList.AssignType.Business)) { employeeBillServicePackage.DeductionAmount = 0; List <Billdetails> billDetails = _dbTeleBillingContext.Billdetails.Where(x => x.EmployeeBillId == subItem.Id && x.ServiceTypeId == employeeBillServicePackage.ServiceTypeId).ToList(); decimal totalAmount = billDetails.Sum(x => x.CallAmount).Value; //for service landline if (employeeBillServicePackage.ServiceTypeId == Convert.ToInt64(EnumList.ServiceType.LandLine) || employeeBillServicePackage.ServiceTypeId == Convert.ToInt64(EnumList.ServiceType.StaticIP)) { //remaning employeeBillServicePackage.DeductionAmount = employeeBillServicePackage.PersonalIdentificationAmount; SendEmailNotificationToEmployee(employeeBillServicePackage, subItem); } else { if (subItem.EmployeeBillStatus == Convert.ToInt16(EnumList.EmployeeBillStatus.WaitingForIdentification) || subItem.EmployeeBillStatus == Convert.ToInt16(EnumList.EmployeeBillStatus.BillReject)) { if (employeeBillServicePackage.Package.PackageAmount < totalAmount) { decimal amount = 0; decimal businessIdentificationAmount = employeeBillServicePackage.BusinessIdentificationAmount != null?Convert.ToDecimal(employeeBillServicePackage.BusinessIdentificationAmount) : 0; if (employeeBillServicePackage.Package.PackageAmount < businessIdentificationAmount) { amount = businessIdentificationAmount; } else { amount = employeeBillServicePackage.Package.PackageAmount != null?Convert.ToDecimal(employeeBillServicePackage.Package.PackageAmount) : 0; } //BusinessIdentificationAmount alway less than or equal Package Amount employeeBillServicePackage.DeductionAmount = totalAmount - amount; SendEmailNotificationToEmployee(employeeBillServicePackage, subItem); } else { employeeBillServicePackage.DeductionAmount = 0; } } else if (subItem.EmployeeBillStatus == Convert.ToInt16(EnumList.EmployeeBillStatus.WaitingForLineManagerApproval) || subItem.EmployeeBillStatus == Convert.ToInt16(EnumList.EmployeeBillStatus.LineManagerApproved)) { if (subItem.EmployeeBillStatus == Convert.ToInt16(EnumList.EmployeeBillStatus.WaitingForLineManagerApproval)) { List <Billdetails> billdetails = _dbTeleBillingContext.Billdetails.Where(x => x.EmployeeBillId == subItem.Id).ToList(); var serviceBillDetials = billdetails.GroupBy(x => x.ServiceTypeId); var finalServiceDetails = serviceBillDetials.Where(x => x.Key == employeeBillServicePackage.ServiceTypeId); foreach (var billDetailsData in finalServiceDetails) { decimal personalDeduction = 0; decimal businessCharge = 0; foreach (var subBillDetail in billDetailsData) { if (subBillDetail.CallIdentificationType == Convert.ToInt16(EnumList.AssignType.Business)) { businessCharge += subBillDetail.CallAmount != null?Convert.ToDecimal(subBillDetail.CallAmount) : 0; } else if (subBillDetail.CallIdentificationType == Convert.ToInt16(EnumList.AssignType.Employee)) { personalDeduction += subBillDetail.CallAmount != null?Convert.ToDecimal(subBillDetail.CallAmount) : 0; } } employeeBillServicePackage.PersonalIdentificationAmount = personalDeduction; employeeBillServicePackage.BusinessIdentificationAmount = businessCharge; } } if (employeeBillServicePackage.Package.PackageAmount < totalAmount) { decimal businessIdentificationAmount = employeeBillServicePackage.BusinessIdentificationAmount != null?Convert.ToDecimal(employeeBillServicePackage.BusinessIdentificationAmount) : 0; decimal amount = 0; if (employeeBillServicePackage.Package.PackageAmount < businessIdentificationAmount) { amount = businessIdentificationAmount; } else { amount = employeeBillServicePackage.Package.PackageAmount != null?Convert.ToDecimal(employeeBillServicePackage.Package.PackageAmount) : 0; } employeeBillServicePackage.DeductionAmount = totalAmount - amount; SendEmailNotificationToEmployee(employeeBillServicePackage, subItem); } } } } else { employeeBillServicePackage.DeductionAmount = 0; } } } else { employeeBillServicePackage.DeductionAmount = 0; } employeeBillServicePackage.UpdateDate = DateTime.Now; } _dbTeleBillingContext.UpdateRange(employeeBillServicePackages); _dbTeleBillingContext.SaveChanges(); subItem.EmployeeBillStatus = Convert.ToInt16(EnumList.EmployeeBillStatus.AutoCloseBill); subItem.UpdatedDate = DateTime.Now; subItem.BillClosedDate = DateTime.Now; #region Notification FOR Bill Close notificationlogs.Add(GenerateNotificationObject(Convert.ToInt16(subItem.EmployeeId), 1, Convert.ToInt16(EnumList.NotificationType.BillClosed), subItem.Id)); #endregion } if (notificationlogs.Any()) { _dbTeleBillingContext.AddRange(notificationlogs); _dbTeleBillingContext.SaveChanges(); } _dbTeleBillingContext.UpdateRange(employeeBillMasters); _dbTeleBillingContext.SaveChanges(); Billmaster billMaster = _dbTeleBillingContext.Billmaster.FirstOrDefault(x => x.Id == employeeBillMasters[0].BillMasterId && !x.IsDelete); if (billMaster != null) { billMaster.BillStatusId = Convert.ToInt16(EnumList.BillStatus.BillClosed); billMaster.UpdatedDate = DateTime.Now; _dbTeleBillingContext.Update(billMaster); _dbTeleBillingContext.SaveChanges(); } } } } } } } catch (global::System.Exception ex) { throw ex; } } }
public LogManagement(telebilling_v01Context dbTeleBilling_V01Context, IStringConstant iStringConstant) { _dbTeleBilling_V01Context = dbTeleBilling_V01Context; _iStringConstant = iStringConstant; }