示例#1
0
        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();
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        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);
            }
        }
示例#6
0
        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);
        }
示例#7
0
        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);
        }