public ActionResult Revise(FinanceRatioViewModel model) { try { var data = service.Find(model.ViewModel.Id); 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("approver", String.Format("{0} {1}", CurrentUser.FIRST_NAME, CurrentUser.LAST_NAME)); parameters.Add("approval_status", refService.GetReferenceByKey(ReferenceKeys.ApprovalStatus.Rejected).REFF_VALUE); parameters.Add("url_detail", Url.Action("Detail", "FinanceRatio", new { id = data.FINANCERATIO_ID }, this.Request.Url.Scheme)); parameters.Add("url_edit", Url.Action("Edit", "FinanceRatio", new { id = data.FINANCERATIO_ID }, this.Request.Url.Scheme)); parameters.Add("remark", model.ViewModel.RevisionData.Comment); var mailContent = refService.GetMailContent((int)ReferenceKeys.EmailContent.FinanceRatioRejected, parameters); var sender = refService.GetUserEmail(CurrentUser.USER_ID); var display = String.Format("{0} [{1} {2}]", ReferenceLookup.Instance.GetReferenceKey(ReferenceKeys.EmailSender.AdminApprover), CurrentUser.FIRST_NAME, CurrentUser.LAST_NAME); var sendTo = data.CREATOR.EMAIL; ExecuteApprovalAction(model, ReferenceKeys.ApprovalStatus.Edited, Enums.ActionType.Reject, mailContent.EMAILCONTENT, mailContent.EMAILSUBJECT, sender, display, sendTo); } catch (Exception ex) { AddMessageInfo("Submit Failed : " + ex.Message, Enums.MessageInfoType.Error); } return(RedirectToAction("Index")); }
public ActionResult Edit(FinanceRatioViewModel model) { if (!ModelState.IsValid) { AddMessageInfo("Operation not allowed", Enums.MessageInfoType.Error); model = GenerateProperties(model, true); //var obj = service.Find(Convert.ToInt64(id)); model.EnableFormInput = true; model.EditMode = true; model.ViewModel.IsCreator = CurrentUser.USER_ID == model.ViewModel.CreatedBy; var history = this.changeHistoryBLL.GetByFormTypeAndFormId(Enums.MenuList.FinanceRatio, model.ViewModel.Id.ToString()); model.ChangesHistoryList = Mapper.Map <List <ChangesHistoryItemModel> >(history); model.WorkflowHistory = GetWorkflowHistory(model.ViewModel.Id); return(View("Edit", model)); } if (CurrentUser.UserRole == Enums.UserRole.Viewer) { AddMessageInfo("Operation not allowed", Enums.MessageInfoType.Error); return(RedirectToAction("Index")); } ExecuteEdit(model, ReferenceKeys.ApprovalStatus.Edited, ReferenceKeys.EmailContent.FinanceRatioApprovalRequest); return(RedirectToAction("Index")); }
/// <summary> /// Action to display main page module of Finance Ratio /// </summary> /// <returns>The action result that will handled by HTTP request</returns> public ActionResult Index() { var data = new FinanceRatioViewModel() { MainMenu = mainMenu, CurrentMenu = PageInfo, IsNotViewer = (CurrentUser.UserRole == Enums.UserRole.Administrator ? true : false), ListFinanceRatios = Mapper.Map <List <FinanceRatioModel> >( service.GetAll().OrderByDescending(item => item.BUKRS).ThenByDescending(item => item.YEAR_PERIOD)), IsAdminApprover = refService.IsAdminApprover(CurrentUser.USER_ID) }; var list = new List <FinanceRatioModel>(data.ListFinanceRatios); data.ListFinanceRatios = new List <FinanceRatioModel>(); var approvalStatusApproved = refService.GetReferenceByKey(ReferenceKeys.ApprovalStatus.Completed).REFF_ID; var approvalStatusSubmitted = refService.GetReferenceByKey(ReferenceKeys.ApprovalStatus.AwaitingAdminApproval).REFF_ID; foreach (var item in list) { item.IsCreator = CurrentUser.USER_ID == item.CreatedBy; item.IsApproved = /*false; */ item.ApprovalStatus == approvalStatusApproved; item.IsSubmitted = /*false; */ item.ApprovalStatus == approvalStatusSubmitted; data.ListFinanceRatios.Add(item); } refService.Dispose(); service.Dispose(); return(View("Index", data)); }
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); } } }
/// <summary> /// Local helper method to help regenerate properties neccessary when navigating between actions /// </summary> /// <typeparam name="FinanceRatioViewModel">The type of view model object</typeparam> /// <typeparam name="bool">The type of update flag</typeparam> /// <param name="source">Old data of new generated properties, set it null will automatically set null all properties other than SelectList items</param> /// <param name="update">Boolean value that indicates the view model is going to update or reset. Set true</param> /// <returns>New view model data to bind to target view</returns> private FinanceRatioViewModel GenerateProperties(FinanceRatioViewModel source, bool update) { var companyList = service.GetCompanies().Select(item => new CompanyModel() { Id = item.BUKRS, Name = item.BUTXT }); var temp = 0; // default value var span = Int32.TryParse(ConfigurationManager.AppSettings["YearSpanLength"], out temp) ? temp : 50; var periods = new List <int>(); for (int i = DateTime.Now.Year - span; i < DateTime.Now.Year + span; i++) { periods.Add(i); } var yearPeriods = from item in periods select new SelectListItem() { Value = item.ToString(), Text = item.ToString() }; var data = source; if (!update || data == null) { data = new FinanceRatioViewModel(); } data.MainMenu = mainMenu; data.CurrentMenu = PageInfo; data.IsNotViewer = CurrentUser.UserRole == Enums.UserRole.Administrator; data.CompanyList = GenericHelpers <CompanyModel> .GenerateList(companyList, item => item.Id, item => item.Name); data.YearPeriods = new SelectList(yearPeriods .GroupBy(item => item.Value) .Select(group => group.First()), "Value", "Text"); // set default data data.ViewModel.YearPeriod = DateTime.Now.Year; data.ShowActionOptions = data.IsNotViewer; data.EditMode = false; data.EnableFormInput = true; data.ViewModel.IsCreator = false; return(data); }
public ActionResult Create(FinanceRatioViewModel model) { try { if (CurrentUser.UserRole == Enums.UserRole.Viewer) { AddMessageInfo("Operation not allowed", Enums.MessageInfoType.Error); return(RedirectToAction("Index")); } var obj = model.ViewModel; obj.CreatedBy = CurrentUser.USER_ID; obj.CreatedDate = DateTime.Now; obj.LastModifiedBy = CurrentUser.USER_ID; obj.LastModifiedDate = DateTime.Now; model.ViewModel = obj; if (!ModelState.IsValid) { AddMessageInfo("Operation not allowed", Enums.MessageInfoType.Error); } else { obj.ApprovalStatus = refService.GetReferenceByKey(ReferenceKeys.ApprovalStatus.Draft).REFF_ID; var inserted = service.Create(Mapper.Map <CustomService.Data.MASTER_FINANCIAL_RATIO>(obj), (int)Enums.MenuList.FinanceRatio, (int)Enums.ActionType.Created, (int)CurrentUser.UserRole, CurrentUser.USER_ID); AddMessageInfo(Constans.SubmitMessage.Saved, Enums.MessageInfoType.Success ); return(RedirectToAction("Index")); } } catch (Exception ex) { AddMessageInfo("Save Failed : " + ex.Message, Enums.MessageInfoType.Error); } model = GenerateProperties(model, true); return(View(model)); }
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); } }