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); } }
/// <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); } }