private void ExecuteApprovalAction(FinanceRatioViewModel model, ReferenceKeys.ApprovalStatus statusApproval, Enums.ActionType actionType, string email, string subject, string sender, string display, string sendTo)
        {
            var comment = (model.ViewModel.RevisionData != null) ? model.ViewModel.RevisionData.Comment : null;
            var role    = (statusApproval == ReferenceKeys.ApprovalStatus.AwaitingAdminApproval) ? CurrentUser.UserRole : Enums.UserRole.AdminApprover;

            var updated = service.ChangeStatus(model.ViewModel.Id, statusApproval, (int)Enums.MenuList.FinanceRatio, (int)actionType, (int)role, CurrentUser.USER_ID, comment);

            if (updated != null)
            {
                List <string> mailAddresses = new List <string>();
                if (statusApproval == ReferenceKeys.ApprovalStatus.AwaitingAdminApproval)
                {
                    var approvers = refService.GetAdminApprovers().ToList();
                    foreach (var appr in approvers)
                    {
                        var _email = refService.GetUserEmail(appr.REFF_VALUE.Trim());
                        if (!string.IsNullOrEmpty(_email))
                        {
                            mailAddresses.Add(_email);
                        }
                    }
                }
                else
                {
                    var admins = refService.GetAdmins().ToList();
                    foreach (var adm in admins)
                    {
                        var _email = refService.GetUserEmail(adm.USER_ID);
                        if (!string.IsNullOrEmpty(_email))
                        {
                            mailAddresses.Add(_email);
                        }
                    }
                    //mailAddresses.Add(sendTo);
                }
                bool mailStatus = ItpiMailer.Instance.SendEmail(mailAddresses.ToArray(), null, null, null, subject, email, true, sender, display);
                if (!mailStatus)
                {
                    AddMessageInfo(Constans.SubmitMessage.Updated + " but failed to send email", Enums.MessageInfoType.Success);
                }
                else
                {
                    AddMessageInfo(Constans.SubmitMessage.Updated + " and successfully send email", Enums.MessageInfoType.Success);
                }
            }
        }
        private void ExecuteEdit(FinanceRatioViewModel model, ReferenceKeys.ApprovalStatus statusApproval, ReferenceKeys.EmailContent emailTemplate, bool sendEmail = false)
        {
            try
            {
                var obj  = model.ViewModel;
                var data = service.Find(model.ViewModel.Id);
                var old  = Mapper.Map <FinanceRatioModel>(data);
                obj.CreatedBy   = old.CreatedBy;
                obj.CreatedDate = old.CreatedDate;
                obj.Company     = Mapper.Map <CompanyModel>(service.GetCompany(obj.Bukrs));
                if (statusApproval == ReferenceKeys.ApprovalStatus.Edited)
                {
                    // do nothing
                }
                else if (statusApproval == ReferenceKeys.ApprovalStatus.AwaitingAdminApproval)
                {
                    obj = old;
                }
                else if (statusApproval == ReferenceKeys.ApprovalStatus.Completed)
                {
                    obj = old;
                    obj.LastApprovedBy   = CurrentUser.USER_ID;
                    obj.LastApprovedDate = DateTime.Now;
                }
                obj.LastModifiedBy   = CurrentUser.USER_ID;
                obj.LastModifiedDate = DateTime.Now;
                obj.ApprovalStatus   = refService.GetReferenceByKey(statusApproval).REFF_ID;
                model.ViewModel      = obj;
                var parameters = new Dictionary <string, string>();
                parameters.Add("company", data.COMPANY.BUTXT);
                parameters.Add("period", data.YEAR_PERIOD.ToString());
                parameters.Add("date", DateTime.Now.ToString("dddd, dd MMMM yyyy"));
                parameters.Add("creator", String.Format("{0} {1}", data.CREATOR.FIRST_NAME, data.CREATOR.LAST_NAME));
                parameters.Add("approval_status", refService.GetReferenceByKey(ReferenceKeys.ApprovalStatus.Edited).REFF_VALUE);
                parameters.Add("url_detail", Url.Action("Detail", "FinanceRatio", new { id = data.FINANCERATIO_ID }, this.Request.Url.Scheme));
                parameters.Add("url_approve", Url.Action("Approve", "FinanceRatio", new { id = data.FINANCERATIO_ID }, this.Request.Url.Scheme));


                bool success = service.Edit(Mapper.Map <CustomService.Data.MASTER_FINANCIAL_RATIO>(obj), (int)Enums.MenuList.FinanceRatio, (int)Enums.ActionType.Modified, (int)CurrentUser.UserRole, CurrentUser.USER_ID);
                if (success)
                {
                    if (sendEmail)
                    {
                        var mailContent = refService.GetMailContent((int)emailTemplate, parameters);
                        var sender      = refService.GetUserEmail(CurrentUser.USER_ID);
                        var display     = ReferenceLookup.Instance.GetReferenceKey(ReferenceKeys.EmailSender.Admin);
                        var sendToId    = refService.GetReferenceByKey(ReferenceKeys.Approver.AdminApprover).REFF_VALUE;
                        var sendTo      = refService.GetUserEmail(sendToId);
                        //AddMessageInfo(Constans.SubmitMessage.Updated + " and sending email", Enums.MessageInfoType.Success);
                        bool mailStatus = ItpiMailer.Instance.SendEmail(new string[] { sendTo }, null, null, null, mailContent.EMAILSUBJECT, mailContent.EMAILCONTENT, true, sender, display);
                        if (!mailStatus)
                        {
                            AddMessageInfo(Constans.SubmitMessage.Updated + " but failed to send email", Enums.MessageInfoType.Success);
                        }
                        else
                        {
                            AddMessageInfo(Constans.SubmitMessage.Updated + " and successfully send email", Enums.MessageInfoType.Success);
                        }
                    }
                    else
                    {
                        AddMessageInfo(Constans.SubmitMessage.Updated, Enums.MessageInfoType.Success);
                    }
                }
                else
                {
                    AddMessageInfo("Submit failed! Please try again", Enums.MessageInfoType.Error);
                }
            }
            catch (Exception ex)
            {
                var msg = String.Format("Message: {0}\nStack Trace: {1}\nInner Exception: {2}", ex.Message, ex.StackTrace, ex.InnerException);
                AddMessageInfo(msg, Enums.MessageInfoType.Error);
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Method to save a tariff data(insert or update or submit or approve or reject)
        /// </summary>
        /// <param name="data">Tariff data</param>
        /// <param name="status">Status approval</param>
        /// <param name="actionType">Action type, insert, update, reject or approve</param>
        /// <param name="role">User role</param>
        /// <param name="user">User ID</param>
        /// <param name="userEmail">User Email</param>
        /// <param name="displayName">User Full Name</param>
        /// <param name="comment">Remarks on Rejection Action</param>
        /// <returns></returns>
        public bool Save(TARIFF data, ReferenceKeys.ApprovalStatus status, Enums.ActionType actionType, int role, string user, string userEmail, string displayName, string comment = null)
        {
            using (var context = new EMSDataModel())
            {
                using (var transaction = context.Database.BeginTransaction())
                {
                    try
                    {
                        var          changes   = new Dictionary <string, string[]>();
                        bool         sendEmail = false;
                        string[]     sendTo    = null;
                        CONTENTEMAIL email     = null;
                        data.STATUS_APPROVAL = refService.GetReferenceByKey(status).REFF_ID;
                        if (actionType == Enums.ActionType.Created)
                        {
                            data.CREATED_BY   = user;
                            data.CREATED_DATE = DateTime.Now;
                            context.TARIFF.Add(data);
                            data.APPROVALSTATUS = context.SYS_REFFERENCES.Find(data.STATUS_APPROVAL);
                            data.PRODUCT_TYPE   = context.ZAIDM_EX_PRODTYP.Find(data.PROD_CODE);
                            changes             = this.GetAllChanges(null, data);
                            context.SaveChanges();
                        }
                        else if (actionType == Enums.ActionType.Modified)
                        {
                            var old = context.TARIFF.Find(data.TARIFF_ID);
                            data.LASTMODIFIED_BY   = user;
                            data.LASTMODIFIED_DATE = DateTime.Now;
                            data.CREATED_BY        = old.CREATED_BY;
                            data.CREATED_DATE      = old.CREATED_DATE;
                            data.APPROVALSTATUS    = refService.GetReferenceByKey(ReferenceKeys.ApprovalStatus.Edited);
                            data.PRODUCT_TYPE      = context.ZAIDM_EX_PRODTYP.Find(data.PROD_CODE);
                            changes = this.GetAllChanges(old, data);
                            context.Entry(old).CurrentValues.SetValues(data);
                            context.SaveChanges();
                        }
                        else // Approved or Rejected
                        {
                            var old = context.TARIFF.Find(data.TARIFF_ID);
                            data = (TARIFF)context.Entry(old).GetDatabaseValues().ToObject();
                            data.STATUS_APPROVAL = refService.GetReferenceByKey(status).REFF_ID;
                            data.PRODUCT_TYPE    = context.ZAIDM_EX_PRODTYP.Find(old.PROD_CODE);
                            data.CREATOR         = context.USER.Find(data.CREATED_BY);

                            if (status == ReferenceKeys.ApprovalStatus.Completed)
                            {
                                data.APPROVER          = context.USER.Find(user);
                                data.STATUS_APPROVAL   = refService.GetReferenceByKey(status).REFF_ID;
                                data.APPROVALSTATUS    = refService.GetReferenceByKey(status);
                                data.LASTAPPROVED_BY   = user;
                                data.LASTAPPROVED_DATE = DateTime.Now;
                                var           admins      = refService.GetAdmins();
                                List <string> adminEmails = new List <string>();
                                foreach (var adm in admins)
                                {
                                    if (!string.IsNullOrEmpty(adm.EMAIL))
                                    {
                                        adminEmails.Add(adm.EMAIL);
                                    }
                                }
                                sendTo = adminEmails.ToArray();
                                email  = GetEmailContent(ReferenceKeys.EmailContent.TariffApproved, data);
                            }
                            else if (status == ReferenceKeys.ApprovalStatus.AwaitingAdminApproval || status == ReferenceKeys.ApprovalStatus.Rejected || status == ReferenceKeys.ApprovalStatus.Edited)
                            {
                                data.LASTMODIFIED_BY   = user;
                                data.LASTMODIFIED_DATE = DateTime.Now;
                                if (status == ReferenceKeys.ApprovalStatus.AwaitingAdminApproval)
                                {
                                    //var reff = refService.GetReferenceByKey(ReferenceKeys.Approver.AdminApprover);
                                    data.APPROVALSTATUS = refService.GetReferenceByKey(status);
                                    data.LASTEDITOR     = refService.GetUser(data.LASTMODIFIED_BY);
                                    var           approvers      = refService.GetAdminApprovers();
                                    List <string> approverEmails = new List <string>();
                                    foreach (var adm in approvers)
                                    {
                                        var appEmail = refService.GetUserEmail(adm.REFF_VALUE);
                                        if (!string.IsNullOrEmpty(appEmail))
                                        {
                                            approverEmails.Add(appEmail);
                                        }
                                    }
                                    sendTo = approverEmails.ToArray();
                                    email  = GetEmailContent(ReferenceKeys.EmailContent.TariffApprovalRequest, data);
                                }
                                else
                                {
                                    data.STATUS_APPROVAL = refService.GetReferenceByKey(status).REFF_ID;
                                    data.APPROVALSTATUS  = refService.GetReferenceByKey(status);
                                    data.APPROVER        = context.USER.Find(user);
                                    var           admins      = refService.GetAdmins();
                                    List <string> adminEmails = new List <string>();
                                    foreach (var adm in admins)
                                    {
                                        if (!string.IsNullOrEmpty(adm.EMAIL))
                                        {
                                            adminEmails.Add(adm.EMAIL);
                                        }
                                    }
                                    sendTo = adminEmails.ToArray();
                                    email  = GetEmailContent(ReferenceKeys.EmailContent.TariffRejected, data, comment);
                                }
                            }
                            changes = GetAllChanges(old, data);
                            context.Entry(old).CurrentValues.SetValues(data);
                            context.SaveChanges();
                            sendEmail = true;
                        }
                        var formType = (int)Enums.MenuList.Tariff;
                        refService.LogsActivity(context, data.TARIFF_ID.ToString(), changes, formType, (int)actionType, role, user, comment);
                        transaction.Commit();

                        if (sendEmail)
                        {
                            return(ItpiMailer.Instance.SendEmail(sendTo, null, null, null, email.EMAILSUBJECT, email.EMAILCONTENT, true, userEmail, displayName));
                        }
                        return(true);
                    }
                    catch (Exception ex)
                    {
                        throw this.HandleException("Exception occured on TariffManagementService. See Inner Exception property to see details", ex);
                    }
                }
            }
        }
        private void ExecuteEdit(ProductTypeIndexViewModel model, ReferenceKeys.ApprovalStatus statusApproval, ReferenceKeys.EmailContent emailTemplate, bool sendEmail = false)
        {
            try
            {
                var obj  = model.ViewModel;
                var data = _productTypeService.Find(model.ViewModel.ProdCode);
                var old  = Mapper.Map <ProductTypeFormViewModel>(data);

                obj.CreatedBy   = old.CreatedBy;
                obj.CreatedDate = old.CreatedDate;

                if (statusApproval == ReferenceKeys.ApprovalStatus.Edited)
                {
                    // do nothing
                }
                else if (statusApproval == ReferenceKeys.ApprovalStatus.AwaitingAdminApproval)
                {
                    obj = old;
                }
                else if (statusApproval == ReferenceKeys.ApprovalStatus.Completed)
                {
                    obj = old;
                    obj.LastApprovedBy   = CurrentUser.USER_ID;
                    obj.LastApprovedDate = DateTime.Now;
                }

                if (obj.IsDeleted == true)
                {
                    obj.IsDeleted = false;
                }
                else
                {
                    obj.IsDeleted = true;
                }

                obj.ModifiedBy     = CurrentUser.USER_ID;
                obj.ModifiedDate   = DateTime.Now;
                obj.ApprovalStatus = _refService.GetReferenceByKey(statusApproval).REFF_ID;
                model.ViewModel    = obj;

                var parameters = new Dictionary <string, string>();

                parameters.Add("product_type", data.PRODUCT_TYPE);
                parameters.Add("date", DateTime.Now.ToString("dddd, MMM dd yyyy")); // without time
                //parameters.Add("date", DateTime.Now.ToString("dddd, MMM dd yyyy hh:mm:ss")); // with time
                parameters.Add("creator", String.Format("{0} {1}", data.CREATOR.FIRST_NAME, data.CREATOR.LAST_NAME));
                parameters.Add("approval_status", data.APPROVALSTATUS.REFF_VALUE);
                parameters.Add("url_detail", Url.Action("Detail", "ProductType", new { id = data.PROD_CODE }, this.Request.Url.Scheme));
                parameters.Add("url_approve", Url.Action("Approve", "ProductType", new { id = data.PROD_CODE }, this.Request.Url.Scheme));

                bool success = _productTypeService.Edit(Mapper.Map <CustomService.Data.MASTER_PRODUCT_TYPE>(obj), (int)Enums.MenuList.ProductType, (int)Enums.ActionType.Modified, (int)CurrentUser.UserRole, CurrentUser.USER_ID);
                if (success)
                {
                    if (sendEmail)
                    {
                        var mailContent = _refService.GetMailContent((int)emailTemplate, parameters);
                        var sender      = _refService.GetUserEmail(CurrentUser.USER_ID);
                        var display     = ReferenceLookup.Instance.GetReferenceKey(ReferenceKeys.EmailSender.AdminCreator);
                        var sendToId    = _refService.GetReferenceByKey(ReferenceKeys.Approver.AdminApprover).REFF_VALUE;
                        var sendTo      = _refService.GetUserEmail(sendToId);
                        AddMessageInfo(Constans.SubmitMessage.Updated + "<br />Sending email", Enums.MessageInfoType.Success);
                        bool mailStatus = ItpiMailer.Instance.SendEmail(new string[] { sendTo }, null, null, null, mailContent.EMAILSUBJECT, mailContent.EMAILCONTENT, true, sender, display);
                        if (!mailStatus)
                        {
                            AddMessageInfo("Send email failed! Please try again", Enums.MessageInfoType.Warning);
                        }
                        else
                        {
                            AddMessageInfo("Email sent!", Enums.MessageInfoType.Success);
                        }
                    }
                    else
                    {
                        AddMessageInfo(Constans.SubmitMessage.Updated, Enums.MessageInfoType.Success);
                    }
                }
                else
                {
                    AddMessageInfo("Submit failed! Please try again", Enums.MessageInfoType.Error);
                }
            }
            catch (Exception ex)
            {
                var msg = String.Format("Message: {0}\nStack Trace: {1}\nInner Exception: {2}", ex.Message, ex.StackTrace, ex.InnerException);
                AddMessageInfo(msg, Enums.MessageInfoType.Error);
            }
        }