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