public void CcfWorkflow(CcfWorkflowDocumentInput input) { var isNeedSendNotif = true; switch (input.ActionType) { case Enums.ActionType.Created: CreateDocument(input); isNeedSendNotif = false; break; case Enums.ActionType.Modified: ModifiedDocument(input); isNeedSendNotif = false; break; case Enums.ActionType.Submit: SubmitDocument(input); break; case Enums.ActionType.Completed: CompleteDocument(input); break; } //todo sent mail if (isNeedSendNotif) { SendEmailWorkflow(input); } _uow.SaveChanges(); }
private void AddWorkflowHistory(CcfWorkflowDocumentInput input) { var dbData = Mapper.Map <WorkflowHistoryDto>(input); dbData.ACTION_DATE = DateTime.Now; dbData.MODUL_ID = Enums.MenuList.TraCcf; dbData.ACTION = input.ActionType; dbData.REMARK_ID = null; _workflowService.Save(dbData); }
private void ModifiedDocument(CcfWorkflowDocumentInput input) { var dbData = _ccfService.GetCcf().Where(x => x.TRA_CCF_ID == input.DocumentId).FirstOrDefault(); if (dbData == null) { throw new BLLException(ExceptionCodes.BLLExceptions.DataNotFound); } input.DocumentNumber = dbData.DOCUMENT_NUMBER; AddWorkflowHistory(input); }
private void CompleteDocument(CcfWorkflowDocumentInput input) { var dbData = _ccfService.GetCcfById(input.DocumentId); if (dbData == null) { throw new BLLException(ExceptionCodes.BLLExceptions.DataNotFound); } if (dbData.DOCUMENT_STATUS == (int)Enums.DocumentStatus.Completed) { dbData.DOCUMENT_STATUS = (int)Enums.DocumentStatus.Completed; } input.DocumentNumber = dbData.DOCUMENT_NUMBER; AddWorkflowHistory(input); }
private void SendEmailWorkflow(CcfWorkflowDocumentInput input) { var ccfData = Mapper.Map <TraCcfDto>(_ccfService.GetCcfById(input.DocumentId)); var mailProcess = ProsesMailNotificationBody(ccfData, input); //distinct double To email List <string> ListTo = mailProcess.To.Distinct().ToList(); if (mailProcess.IsCCExist) { //Send email with CC _messageService.SendEmailToListWithCC(ListTo, mailProcess.CC, mailProcess.Subject, mailProcess.Body, true); } else { _messageService.SendEmailToList(ListTo, mailProcess.Subject, mailProcess.Body, true); } }
private void InProgress(CcfWorkflowDocumentInput input) { var dbData = _ccfService.GetCcfById(input.DocumentId); if (dbData == null) { throw new BLLException(ExceptionCodes.BLLExceptions.DataNotFound); } if (dbData.DOCUMENT_STATUS == (int)Enums.DocumentStatus.AssignedForHR) { dbData.DOCUMENT_STATUS = (int)Enums.DocumentStatus.InProgress; } else if (dbData.DOCUMENT_STATUS == (int)Enums.DocumentStatus.AssignedForFleet) { dbData.DOCUMENT_STATUS = (int)Enums.DocumentStatus.InProgress; } input.DocumentNumber = dbData.DOCUMENT_NUMBER; AddWorkflowHistory(input); }
private CcfMailNotification ProsesMailNotificationBody(TraCcfDto ccfData, CcfWorkflowDocumentInput input) { var bodyMail = new StringBuilder(); var rc = new CcfMailNotification(); var webRootUrl = ConfigurationManager.AppSettings["WebRootUrl"]; var typeEnv = ConfigurationManager.AppSettings["Environment"]; var serverIntranet = ConfigurationManager.AppSettings["ServerIntranet"]; var creatorData = _employeeService.GetEmployeeById(ccfData.EmployeeID); var creatorDataComplaintFor = _employeeService.GetEmployeeById(ccfData.EmployeeIdComplaintFor); var fleetApprovalData = _employeeService.GetEmployeeById(ccfData.EmployeeID); var complaintCategory = _complaintCategory.GetComplaintById(ccfData.ComplaintCategory); var creatorDataEmail = creatorData == null ? string.Empty : creatorData.EMAIL_ADDRESS; var creatorDataEmailComplaintFor = creatorDataComplaintFor == null ? string.Empty : creatorDataComplaintFor.EMAIL_ADDRESS; var creatorDataName = creatorData == null ? string.Empty : creatorData.FORMAL_NAME; var hrList = string.Empty; var fleetList = string.Empty; var hrEmailList = new List <string>(); var fleetEmailList = new List <string>(); var hrRole = _settingService.GetSetting().Where(x => x.SETTING_GROUP == EnumHelper.GetDescription(Enums.SettingGroup.UserRole) && x.SETTING_VALUE.Contains("HR")).FirstOrDefault().SETTING_VALUE; var fleetRole = _settingService.GetSetting().Where(x => x.SETTING_GROUP == EnumHelper.GetDescription(Enums.SettingGroup.UserRole) && x.SETTING_VALUE.Contains("FLEET")).FirstOrDefault().SETTING_VALUE; var hrQuery = "SELECT 'PMI\\' + sAMAccountName AS sAMAccountName FROM OPENQUERY(ADSI, 'SELECT employeeID, sAMAccountName, displayName, name, givenName, whenCreated, whenChanged, SN, manager, distinguishedName, info FROM ''LDAP://DC=PMINTL,DC=NET'' WHERE memberOf = ''CN = " + hrRole + ", OU = ID, OU = Security, OU = IMDL Managed Groups, OU = Global, OU = Users & Workstations, DC = PMINTL, DC = NET''') WHERE sAMAccountName <> '" + ccfData.CreatedBy + "'"; var fleetQuery = "SELECT 'PMI\\' + sAMAccountName AS sAMAccountName FROM OPENQUERY(ADSI, 'SELECT employeeID, sAMAccountName, displayName, name, givenName, whenCreated, whenChanged, SN, manager, distinguishedName, info FROM ''LDAP://DC=PMINTL,DC=NET'' WHERE memberOf = ''CN = " + fleetRole + ", OU = ID, OU = Security, OU = IMDL Managed Groups, OU = Global, OU = Users & Workstations, DC = PMINTL, DC = NET''') WHERE sAMAccountName <> '" + ccfData.CreatedBy + "'"; if (typeEnv == "VTI") { hrQuery = "SELECT 'PMI\\' + LOGIN AS LOGIN FROM LOGIN_FOR_VTI WHERE AD_GROUP = '" + hrRole + "' AND LOGIN <> '" + ccfData.CreatedBy + "'"; fleetQuery = "SELECT 'PMI\\' + LOGIN AS LOGIN FROM LOGIN_FOR_VTI WHERE AD_GROUP = '" + fleetRole + "' AND LOGIN <> '" + ccfData.CreatedBy + "'"; } EntityConnectionStringBuilder e = new EntityConnectionStringBuilder(ConfigurationManager.ConnectionStrings["FMSEntities"].ConnectionString); string connectionString = e.ProviderConnectionString; SqlConnection con = new SqlConnection(connectionString); con.Open(); SqlCommand query = new SqlCommand(hrQuery, con); SqlDataReader reader = query.ExecuteReader(); while (reader.Read()) { var hrLogin = "******" + reader[0].ToString() + "',"; hrList += hrLogin; } hrList = hrList.TrimEnd(','); query = new SqlCommand(fleetQuery, con); reader = query.ExecuteReader(); while (reader.Read()) { var fleetLogin = "******" + reader[0].ToString() + "',"; fleetList += fleetLogin; } fleetList = fleetList.TrimEnd(','); var hrQueryEmail = "SELECT EMAIL FROM " + serverIntranet + ".[dbo].[tbl_ADSI_User] WHERE FULL_NAME IN (" + hrList + ")"; var fleetQueryEmail = "SELECT EMAIL FROM " + serverIntranet + ".[dbo].[tbl_ADSI_User] WHERE FULL_NAME IN (" + fleetList + ")"; var creatorQuery = "SELECT EMAIL from " + serverIntranet + ".[dbo].[tbl_ADSI_User] where FULL_NAME like 'PMI\\" + ccfData.CreatedBy + "'"; var employeeForQuery = "SELECT EMAIL from " + serverIntranet + ".[dbo].[tbl_ADSI_User] where ID like 'ID" + ccfData.EmployeeIdComplaintFor + "'"; if (typeEnv == "VTI") { hrQueryEmail = "SELECT EMAIL FROM EMAIL_FOR_VTI WHERE FULL_NAME IN (" + hrList + ")"; fleetQueryEmail = "SELECT EMAIL FROM EMAIL_FOR_VTI WHERE FULL_NAME IN (" + fleetList + ")"; creatorQuery = "SELECT EMAIL FROM EMAIL_FOR_VTI WHERE FULL_NAME like 'PMI\\" + ccfData.CreatedBy + "'"; employeeForQuery = "SELECT EMAIL FROM EMAIL_FOR_VTI WHERE ID like 'ID" + ccfData.EmployeeIdComplaintFor + "'"; } query = new SqlCommand(hrQueryEmail, con); reader = query.ExecuteReader(); while (reader.Read()) { hrEmailList.Add(reader[0].ToString()); } query = new SqlCommand(fleetQueryEmail, con); reader = query.ExecuteReader(); while (reader.Read()) { fleetEmailList.Add(reader[0].ToString()); } query = new SqlCommand(creatorQuery, con); reader = query.ExecuteReader(); while (reader.Read()) { creatorDataEmail = reader["EMAIL"].ToString(); } query = new SqlCommand(employeeForQuery, con); reader = query.ExecuteReader(); while (reader.Read()) { creatorDataEmailComplaintFor = reader["EMAIL"].ToString(); } reader.Close(); con.Close(); //Email Employee to Fleet / HR if (ccfData.EmployeeID == input.EmployeeId) { if (complaintCategory.ROLE_TYPE == "Fleet") { rc.Subject = ccfData.DocumentNumber + " has been submitted by " + creatorDataName; bodyMail.Append("Dear Fleet,<br /><br />"); bodyMail.AppendLine(); bodyMail.Append("You Have Received New Car Complaint Form Document Number : " + ccfData.DocumentNumber + "<br /><br />"); bodyMail.AppendLine(); bodyMail.AppendLine(); bodyMail.Append("Please Respon <a href='" + webRootUrl + "/TraCcf/ResponseCoordinator?TraCcfId=" + ccfData.TraCcfId + "&isPersonalDashboard=False" + "'> HERE </a><br /><br />"); bodyMail.AppendLine(); bodyMail.AppendLine(); bodyMail.Append("Thanks<br /><br />"); bodyMail.AppendLine(); bodyMail.Append("Regards,<br />"); bodyMail.AppendLine(); bodyMail.Append(creatorDataName); bodyMail.AppendLine(); foreach (var item in fleetEmailList) { rc.To.Add(item); } //rc.CC.Add(creatorDataEmail); if (creatorDataEmailComplaintFor != creatorDataEmail) { rc.CC.Add(creatorDataEmailComplaintFor); rc.CC.Add(creatorDataEmail); } else { rc.CC.Add(creatorDataEmail); } } else if (complaintCategory.ROLE_TYPE == "HR") { rc.Subject = ccfData.DocumentNumber + " has been submitted by " + creatorDataName; bodyMail.Append("Dear HR,<br /><br />"); bodyMail.AppendLine(); bodyMail.Append("You Have Received New Car Complaint Form Document Number : " + ccfData.DocumentNumber + "<br /><br />"); bodyMail.AppendLine(); bodyMail.AppendLine(); bodyMail.Append("Please Respon <a href='" + webRootUrl + "/TraCcf/ResponseCoordinator?TraCcfId=" + ccfData.TraCcfId + "&isPersonalDashboard=False" + "'> HERE </a><br /><br />"); bodyMail.AppendLine(); bodyMail.AppendLine(); bodyMail.Append("Thanks<br /><br />"); bodyMail.AppendLine(); bodyMail.Append("Regards,<br />"); bodyMail.AppendLine(); bodyMail.Append(creatorDataName); bodyMail.AppendLine(); foreach (var item in hrEmailList) { rc.To.Add(item); } //rc.CC.Add(creatorDataEmail); if (creatorDataEmailComplaintFor != creatorDataEmail) { rc.CC.Add(creatorDataEmailComplaintFor); rc.CC.Add(creatorDataEmail); } else { rc.CC.Add(creatorDataEmail); } } } else //Email InProgress & Complete From Fleet/HR to Employee { switch (input.ActionType) { case Enums.ActionType.Submit: if (complaintCategory.ROLE_TYPE == "Fleet") { rc.Subject = ccfData.DocumentNumber + " In Progress by Fleet"; bodyMail.Append("Dear " + ccfData.EmployeeName + ",<br /><br />"); bodyMail.AppendLine(); bodyMail.Append("Your Car Complaint Form " + ccfData.DocumentNumber + " Has Been Response By " + input.UserId + " <br /><br />"); bodyMail.AppendLine(); bodyMail.AppendLine(); bodyMail.Append("Click Detail <a href='" + webRootUrl + "/TraCcf/DetailsCcf/DetailsCcf?TraCcfId=" + ccfData.TraCcfId + "&isPersonalDashboard=True" + "'> HERE </a><br /><br />"); bodyMail.AppendLine(); bodyMail.AppendLine(); bodyMail.Append("Thanks<br /><br />"); bodyMail.AppendLine(); bodyMail.Append("Regards,<br />"); bodyMail.AppendLine(); bodyMail.Append("Fleet Team"); bodyMail.AppendLine(); rc.To.Add(creatorDataEmail); foreach (var item in fleetEmailList) { rc.CC.Add(item); } if (creatorDataEmailComplaintFor != creatorDataEmail) { rc.CC.Add(creatorDataEmailComplaintFor); } } else if (complaintCategory.ROLE_TYPE == "HR") { rc.Subject = ccfData.DocumentNumber + " In Progress by HR"; bodyMail.Append("Dear " + ccfData.EmployeeName + ",<br /><br />"); bodyMail.AppendLine(); bodyMail.Append("Your Car Complaint Form " + ccfData.DocumentNumber + " Has Been Response By " + input.UserId + " <br /><br />"); bodyMail.AppendLine(); bodyMail.AppendLine(); bodyMail.Append("Click Detail <a href='" + webRootUrl + "/TraCcf/DetailsCcf/DetailsCcf?TraCcfId=" + ccfData.TraCcfId + "&isPersonalDashboard=True" + "'> HERE </a><br /><br />"); bodyMail.AppendLine(); bodyMail.AppendLine(); bodyMail.Append("Thanks<br /><br />"); bodyMail.AppendLine(); bodyMail.Append("Regards,<br />"); bodyMail.AppendLine(); bodyMail.Append("HR Team"); bodyMail.AppendLine(); rc.To.Add(creatorDataEmail); foreach (var item in hrEmailList) { rc.CC.Add(item); } if (creatorDataEmailComplaintFor != creatorDataEmail) { rc.CC.Add(creatorDataEmailComplaintFor); } } break; case Enums.ActionType.Completed: if (complaintCategory.ROLE_TYPE == "Fleet") { rc.Subject = ccfData.DocumentNumber + " has been completed by Fleet"; bodyMail.Append("Dear " + ccfData.EmployeeName + ",<br /><br />"); bodyMail.AppendLine(); bodyMail.Append("Your Car Complaint Form " + ccfData.DocumentNumber + " Has Been Completed By " + input.UserId + "<br /><br />"); bodyMail.AppendLine(); bodyMail.AppendLine(); bodyMail.Append("Click Detail <a href='" + webRootUrl + "/TraCcf/DetailsCcf/DetailsCcf?TraCcfId=" + ccfData.TraCcfId + "&isPersonalDashboard=True" + "'> HERE </a><br /><br />"); bodyMail.AppendLine(); bodyMail.AppendLine(); bodyMail.Append("Thanks<br /><br />"); bodyMail.AppendLine(); bodyMail.Append("Regards,<br />"); bodyMail.AppendLine(); bodyMail.Append("Fleet Team"); bodyMail.AppendLine(); rc.To.Add(creatorDataEmail); foreach (var item in fleetEmailList) { rc.CC.Add(item); } if (creatorDataEmailComplaintFor != creatorDataEmail) { rc.CC.Add(creatorDataEmailComplaintFor); } } else if (complaintCategory.ROLE_TYPE == "HR") { rc.Subject = ccfData.DocumentNumber + " has been completed by HR"; bodyMail.Append("Dear " + ccfData.EmployeeName + ",<br /><br />"); bodyMail.AppendLine(); bodyMail.Append("Your Car Complaint Form " + ccfData.DocumentNumber + " Has Been Completed By " + input.UserId + "<br /><br />"); bodyMail.AppendLine(); bodyMail.AppendLine(); bodyMail.Append("Click Detail <a href='" + webRootUrl + "/TraCcf/DetailsCcf/DetailsCcf?TraCcfId=" + ccfData.TraCcfId + "&isPersonalDashboard=True" + "'> HERE </a><br /><br />"); bodyMail.AppendLine(); bodyMail.AppendLine(); bodyMail.Append("Thanks<br /><br />"); bodyMail.AppendLine(); bodyMail.Append("Regards,<br />"); bodyMail.AppendLine(); bodyMail.Append("HR Team"); bodyMail.AppendLine(); rc.To.Add(creatorDataEmail); foreach (var item in hrEmailList) { rc.CC.Add(item); } if (creatorDataEmailComplaintFor != creatorDataEmail) { rc.CC.Add(creatorDataEmailComplaintFor); } } break; } } rc.IsCCExist = true; rc.Body = bodyMail.ToString(); return(rc); }