/// <summary> /// HieuVan /// Hàm xử lý tự động send mail hợp đồng đến hạn /// </summary> public static void SendMailContract() { BaseService _base = new BaseService(); string status = string.Empty; string fullPath = string.Empty; List <Hre_ContractSendMailEntity> lstProbation = new List <Hre_ContractSendMailEntity>(); List <Hre_ContractEntity> lstAttach = new List <Hre_ContractEntity>(); Hre_ContractEntity attach = new Hre_ContractEntity(); DateTime DS = DateTime.Now; DateTime DE = DateTime.Now; List <object> lstParam = new List <object>(); lstParam.AddRange(new object[3]); var dataProfile = _base.GetData <Hre_ProfileEntity>(lstParam, ConstantSql.hrm_hr_sp_get_ProfileIdsByOrg, string.Empty, ref status); using (var context = new VnrHrmDataContext()) { var unitOfWork = (IUnitOfWork)(new UnitOfWork(context)); var repoHre_Contract = new CustomBaseRepository <Hre_Contract>(unitOfWork); var repoCat_ContractType = new CustomBaseRepository <Cat_ContractType>(unitOfWork); var repoCat_Export = new CustomBaseRepository <Cat_Export>(unitOfWork); var repoCat_OrgStructure = new CustomBaseRepository <Cat_OrgStructure>(unitOfWork); var repoCat_OrgStructureType = new CustomBaseRepository <Cat_OrgStructureType>(unitOfWork); var repoSys_TemplateSendMail = new CustomBaseRepository <Sys_TemplateSendMail>(unitOfWork); string _typeTemplate = EnumDropDown.EmailType.E_WARNINGCONTRACT.ToString(); var template = repoSys_TemplateSendMail.FindBy(s => s.Type == _typeTemplate).FirstOrDefault(); if (template == null) { return; } var dataContractType = repoCat_ContractType.FindBy(s => s.ID != null).ToList(); var dataContract = repoHre_Contract.FindBy(s => s.IsDelete == null).ToList(); var dataOrgStructure = repoCat_OrgStructure.FindBy(s => s.IsDelete == null).ToList(); var dataOrgStructureType = repoCat_OrgStructureType.FindBy(s => s.IsDelete == null).ToList(); // lọc từng hợp đồng, kiểm tra những hợp đồng nào đến hạn Hre_ContractSendMailEntity entity = new Hre_ContractSendMailEntity(); List <string> lstTemp = new List <string>(); foreach (var item in dataContract) { lstTemp = new List <string>(); entity = new Hre_ContractSendMailEntity(); if (item.DateEnd == null) { continue; } var contractType = dataContractType.Where(s => s.ID == item.ContractTypeID).FirstOrDefault(); int loop = contractType.ExpiryContractLoop != null ? contractType.ExpiryContractLoop.Value : 0; int dbd = contractType.ExpiryContractDayByDay != null ? contractType.ExpiryContractDayByDay.Value : 0; DateTime loopStart = DateTime.Now.AddDays(loop); DateTime dbdStart = DateTime.Now.AddDays(dbd); if ((dbdStart >= item.DateEnd.Value || item.DateEnd.Value <= DateTime.Now) && item.ContractResult == null) { attach = item.Copy <Hre_ContractEntity>(); var profile = dataProfile.Where(s => s.ID == item.ProfileID).FirstOrDefault(); entity.ContractID = item.ID; entity.DayDue = item.DateEnd; entity.ProfileName = profile.ProfileName; attach.ProfileName = profile.ProfileName; attach.CodeEmp = profile.CodeEmp; entity.Type = EnumDropDown.ExpiredContractType.E_DayByDay.ToString(); if (contractType.EmailToList != null) { var lstCodeOrg = contractType.EmailToList.Split(',').ToList(); foreach (var itemCO in lstCodeOrg) { var temp = LibraryService.GetNearestParent(profile.OrgStructureID, (OrgUnit)Enum.Parse(typeof(OrgUnit), itemCO, true), dataOrgStructure, dataOrgStructureType); if (temp == null || temp.Email == null) { continue; } var mailOfOrg = temp.Email.Split(',').ToList(); lstTemp.AddRange(mailOfOrg); } } if (!string.IsNullOrEmpty(contractType.EmailOther)) { var lstEmailOther = contractType.EmailOther.Split(',').ToList(); lstTemp.AddRange(lstEmailOther); } if (lstTemp != null) { entity.lstEmail = lstTemp; } lstAttach.Add(attach); lstProbation.Add(entity); } else if ((loopStart >= item.DateEnd.Value || item.DateEnd.Value <= DateTime.Now) && item.ContractResult == null) { attach = item.Copy <Hre_ContractEntity>(); if (DateTime.Now.Day != contractType.DayInMonthLoop1 && DateTime.Now.Day != contractType.DayInMonthLoop2 && DateTime.Now.Day != contractType.DayInMonthLoop3) { continue; } var profile = dataProfile.Where(s => s.ID == item.ProfileID).FirstOrDefault(); entity.ContractID = item.ID; entity.DayDue = item.DateEnd; entity.ProfileName = profile.ProfileName; attach.ProfileName = profile.ProfileName; attach.CodeEmp = profile.CodeEmp; entity.Type = EnumDropDown.ExpiredContractType.E_Loop.ToString(); if (contractType.EmailToList != null) { var lstCodeOrg = contractType.EmailToList.Split(',').ToList(); foreach (var itemCO in lstCodeOrg) { var temp = LibraryService.GetNearestParent(profile.OrgStructureID, (OrgUnit)Enum.Parse(typeof(OrgUnit), itemCO, true), dataOrgStructure, dataOrgStructureType); if (temp == null || temp.Email == null) { continue; } var mailOfOrg = temp.Email.Split(',').ToList(); lstTemp.AddRange(mailOfOrg); } } if (!string.IsNullOrEmpty(contractType.EmailOther)) { var lstEmailOther = contractType.EmailOther.Split(',').ToList(); lstTemp.AddRange(lstEmailOther); } if (lstTemp != null) { entity.lstEmail = lstTemp; } lstAttach.Add(attach); lstProbation.Add(entity); } } if (lstAttach.Count > 0) { var lstExport = repoCat_Export.FindBy(s => s.IsDelete == null && s.ScreenName == EnumDropDown.EmailType.E_WARNINGCONTRACT.ToString()).ToList(); if (lstExport.Count > 0) { var export = lstExport.FirstOrDefault(); fullPath = ExportService.Export(export.ID, lstAttach, null, ExportFileType.Excel); } } List <Hre_ContractBodyEntity> lstSM = new List <Hre_ContractBodyEntity>(); Hre_ContractBodyEntity SM = new Hre_ContractBodyEntity(); List <Guid> lstGC = new List <Guid>(); foreach (var item in lstProbation) { string _type = "Theo Chu Kỳ"; if (item.Type == EnumDropDown.ExpiredContractType.E_DayByDay.ToString()) { _type = "Hàng Ngày"; } if (item.lstEmail == null) { continue; } string value = "<tr><td> " + item.ProfileName + " </td><td> " + item.DayDue + "</td><td> " + _type + "</td></tr>"; foreach (var email in item.lstEmail) { lstGC = new List <Guid>(); SM = new Hre_ContractBodyEntity(); var exits = lstSM.Where(m => m.Email == email).FirstOrDefault(); if (exits != null && !exits.lstGContract.Contains(item.ContractID)) { if (SM.lstGContract != null) { lstGC = SM.lstGContract; } lstGC.Add(item.ContractID); exits.lstGContract = lstGC; exits.Body += value; } else if (exits == null || !exits.lstGContract.Contains(item.ContractID)) { if (SM.lstGContract != null) { lstGC = SM.lstGContract; } lstGC.Add(item.ContractID); SM.lstGContract = lstGC; SM.Email = email; SM.Body = value; lstSM.Add(SM); } } } foreach (var item in lstSM) { string title = template.Subject; var name = item.Email.Split('@'); #region magreData string[] strsParaKey = null; string[] strsParaValues = null; strsParaKey = new string[] { EnumDropDown.EmailType_WARNINGCONTRACT.E_PROFILENAME.ToString(), EnumDropDown.EmailType_WARNINGCONTRACT.E_TABLECONTENT.ToString(), }; strsParaValues = new string[] { name[0].ToString(), item.Body }; string body = LibraryService.ReplaceContentFile(template.Content, strsParaKey, strsParaValues); #endregion //string body = "<html><head><title></title></head><body class='scayt-enabled'>Dear " + name[0].ToString() + " ,<br /><br />" // + "This is email warning about contract probation:<br /> <br /><table border='1' cellpadding='1' cellspacing='1' style='width: 500px;'>" // + "<tr><td> Nhân Viên </td><td> Ngày Hết Hạn </td><td> Loại Hết Hạn </td></tr>" // + item.Body // + "</tbody></table><tbody>" // + "</body></html>"; _base.SendMail(title, item.Email, body, fullPath); } } }
public Hre_ContractEntity SetNewCodeContract(Hre_ContractEntity contractEntity, string strIdConstract, string userLogin) { if (contractEntity != null) { var service = new BaseService(); var status = string.Empty; var objContractType1 = service.GetFirstData <Cat_ContractTypeEntity>(contractEntity.ContractTypeID, ConstantSql.hrm_cat_sp_get_ContractTypeById, userLogin, ref status); var objProfile1 = service.GetFirstData <Hre_ProfileEntity>(contractEntity.ProfileID, ConstantSql.hrm_hr_sp_get_ProfileById, userLogin, ref status); if (objContractType1 != null) { var contractType = (Cat_ContractTypeEntity)objContractType1; var profileEntity = (Hre_ProfileEntity)objProfile1; if (!string.IsNullOrEmpty(contractType.Type)) { var objSysConfig = service.GetFirstData <Sys_AllSettingEntity>(AppConfig.HRM_HRE_GENERATE_CODE_CONTRACT.ToString(), ConstantSql.hrm_sys_sp_get_AllSettingByKey, userLogin, ref status); if (objSysConfig != null) { var sysConfig = (Sys_AllSettingEntity)objSysConfig; if (sysConfig != null && !string.IsNullOrEmpty(sysConfig.Value1)) { ElementFormula elementContactType = new ElementFormula("ContactType", contractType.Type, 0); ElementFormula elementCodeEmp = new ElementFormula("CodeEmp", profileEntity.CodeEmp, 0); ElementFormula elementOrdinal = new ElementFormula("Ordinal", 1, 0); var result = FormulaHelper.ParseFormula(sysConfig.Value1, new List <ElementFormula>() { elementContactType, elementCodeEmp }); if (result != null && string.IsNullOrEmpty(result.ErrorMessage)) { var value = result.Value; if (value != null) { string newCode = value.ToString(); if (newCode.EndsWith("Ordinal")) { var strNewCode = newCode.Substring(0, newCode.Length - 7); if (!string.IsNullOrEmpty(strIdConstract)) { var listContractType = service.GetData <Cat_ContractTypeEntity>(Common.DotNetToOracle(strIdConstract), ConstantSql.hrm_cat_sp_get_ContractTypeByIds, userLogin, ref status); if (listContractType != null) { var listContractTypeById = listContractType.Where(d => d.Type == contractType.Type).FirstOrDefault(); if (listContractTypeById != null) { var listId = strIdConstract.Split(',').ToList(); var count = listId.Where(s => listContractTypeById.ID.ToString() == s).Select(d => d == listContractTypeById.ToString()).Count(); //var count = listContractTypeById.Count(); newCode = strNewCode + "-" + (count + 1); } else { newCode = strNewCode + "-" + "1"; } } else { newCode = strNewCode + "-" + 1; } } else { newCode = strNewCode + "-" + 1; } } contractEntity.ContractNo = newCode; } } } } } } contractEntity.ActionStatus = status; } return(contractEntity); }