/// <summary> /// Save Review văn bản /// </summary> /// <param name="processID"></param> /// <param name="stepID"></param> /// <param name="joinUser"></param> /// <param name="message"></param> /// <returns></returns> public JsonResult SaveReview(long processID, int stepID, List <long> joinUser, string message) { AssignUserInfo(); var result = new JsonResultBO(true); if (joinUser.Count > 0 && !joinUser.Contains(currentUser.ID)) { var WF_STEPBusiness = Get <WF_STEPBusiness>(); var WF_PROCESSBusiness = Get <WF_PROCESSBusiness>(); WF_REVIEWBusiness WF_REVIEWBusiness = Get <WF_REVIEWBusiness>(); WF_REVIEW_USERBusiness WF_REVIEW_USERBusiness = Get <WF_REVIEW_USERBusiness>(); var SYS_TINNHANBusiness = Get <SYS_TINNHANBusiness>(); var step = WF_STEPBusiness.GetDaTaByID(stepID); var process = WF_PROCESSBusiness.Find(processID); #region cập nhật trạng thái review process.IS_PENDING = true; WF_PROCESSBusiness.Save(process); #endregion #region lưu yêu cầu review - bảng này sẽ dùng để đếm số lần gửi yêu cầu review WF_REVIEW review = new WF_REVIEW(); review.COMMENT = message; review.CREATED_AT = DateTime.Now; review.ITEMID = process.ITEM_ID; review.ITEMTYPE = process.ITEM_TYPE; review.CREATED_BY = currentUser.ID; WF_REVIEWBusiness.Save(review); #endregion #region lưu yêu cầu review đối với từng người được yêu cầu var WF_LogBusiness = Get <WF_LOGBusiness>(); foreach (var item in joinUser) { WF_USER_REVIEW itemreview = new WF_USER_REVIEW(); itemreview.ITEMID = process.ITEM_ID; itemreview.ITEMTYPE = process.ITEM_TYPE; itemreview.REVIEW_ID = review.ID; itemreview.USER_ID = item; itemreview.CREATED_AT = DateTime.Now; itemreview.CREATED_BY = currentUser.ID; WF_REVIEW_USERBusiness.Save(itemreview); #region luu log WF_LOG log = new WF_LOG(); log.ITEM_ID = process.ITEM_ID; log.WF_ID = process.WF_ID; log.ITEM_TYPE = process.ITEM_TYPE; log.MESSAGE = message; log.NGUOIXULY_ID = currentUser.ID; log.NGUONHAN_ID = item; log.create_at = DateTime.Now; log.create_by = currentUser.ID; WF_LogBusiness.Save(log); #endregion #region gửi notification SYS_TINNHAN noti = new SYS_TINNHAN(); noti.FROM_USERNAME = currentUser.HOTEN; noti.FROM_USER_ID = currentUser.ID; noti.NGAYTAO = DateTime.Now; noti.NOIDUNG = currentUser.HOTEN + " đã gửi bạn review một văn bản trình ký"; if (process.ITEM_TYPE == MODULE_CONSTANT.VANBANTRINHKY) { noti.URL = "/HSVanBanDiArea/VanBanChuaXuLy/DetailVanBan/" + process.ITEM_ID.ToString(); noti.TIEUDE = "REVIEW VĂN BẢN TRÌNH KÝ"; } noti.TO_USER_ID = item; SYS_TINNHANBusiness.Save(noti, targetScreen, false, process.ITEM_ID.HasValue ? process.ITEM_ID.Value : 0, TargetDocType.COORDINATED); #endregion } ElasticSearch.updateListUser(process.ITEM_ID.ToString(), joinUser, ElasticType.VanBanDi); #endregion } else { result.MessageFail("Không thể thực hiện được thao tác này"); } return(Json(result)); }
/// <summary> /// Phản hồi kết quả review /// </summary> /// <param name="phanHoiVanBan"></param> /// <param name="pheDuyetVanBan"></param> /// <param name="itemId"></param> /// <param name="itemType"></param> /// <returns></returns> public ActionResult SaveUserReview(FormCollection coll, IEnumerable <HttpPostedFileBase> filebase, string[] filename, string[] FOLDER_ID) { AssignUserInfo(); string phanHoiVanBan = coll["PHANHOIVANBAN"]; int pheDuyetVanBan = coll["PHEDUYETVANBAN"].ToIntOrZero(); long itemId = coll["itemId"].ToLongOrZero(); string itemType = coll["itemType"]; var result = new JsonResultBO(true); WF_REVIEW_USERBusiness WF_REVIEW_USERBusiness = Get <WF_REVIEW_USERBusiness>(); WF_REVIEWBusiness WF_REVIEWBusiness = Get <WF_REVIEWBusiness>(); WF_REVIEW ReviewObj = WF_REVIEWBusiness.repository.All() .Where(x => x.ITEMID == itemId && x.ITEMTYPE == itemType && x.IS_FINISH != true).FirstOrDefault(); if (ReviewObj != null) { // kiểm tra xem nội dung phản hồi có hay không và người dùng hiện tại có quyền review với văn bản này ko và phải là đợt review mới nhất WF_USER_REVIEW userReview = WF_REVIEW_USERBusiness.repository.All().Where(x => x.ITEMTYPE == itemType && x.ITEMID == itemId && x.USER_ID == currentUser.ID && x.REVIEW_ID == ReviewObj.ID).FirstOrDefault(); if (!string.IsNullOrEmpty(phanHoiVanBan) && userReview != null) { // luu log xu ly var WF_LogBusiness = Get <WF_LOGBusiness>(); // Lấy log cuối cùng WF_LOG lastLog = WF_LogBusiness.repository.All() .Where(x => x.ITEM_ID == ReviewObj.ITEMID && x.ITEM_TYPE == ReviewObj.ITEMTYPE) .OrderByDescending(x => x.ID).FirstOrDefault(); WF_LOG log = new WF_LOG(); if (lastLog != null) { log.MESSAGE = phanHoiVanBan; log.NGUOIXULY_ID = currentUser.ID; log.create_at = DateTime.Now; log.create_by = currentUser.ID; log.ITEM_TYPE = ReviewObj.ITEMTYPE; log.ITEM_ID = ReviewObj.ITEMID; log.NGUONHAN_ID = lastLog.NGUOIXULY_ID; log.WF_ID = lastLog.WF_ID; log.STEP_ID = lastLog.STEP_ID; } // end userReview.COMMENT = phanHoiVanBan; userReview.REVIEW_AT = DateTime.Now; if (pheDuyetVanBan == 1) { userReview.IS_APPROVE = true; log.MESSAGE += "- Đồng ý"; } else { userReview.IS_APPROVE = false; // cập nhật lại trạng thái reject, đã reject rồi sẽ ko cập nhật trạng thái pending của process vì chưa xử lý xong ReviewObj.IS_REJECT = true; log.MESSAGE += "- Không đồng ý"; } if (lastLog != null) { WF_LogBusiness.Save(log); UploadFileTool tool = new UploadFileTool(); tool.UploadCustomFileVer3(filebase, true, VbTrinhKyExtension, URL_FOLDER, VbTrinhKySize, FOLDER_ID, filename, log.ID, LOAITAILIEU.REVIEWVANBAN, "Review Văn bản trình ký", currentUser); } WF_REVIEW_USERBusiness.Save(userReview); WF_REVIEWBusiness.Save(ReviewObj); #region kiểm tra xem đã review hết chưa thì cập nhật lại trạng thái của bảng review là is finish if (WF_REVIEW_USERBusiness.CheckFinishReview(ReviewObj.ID)) { // nếu không còn bản ghi nào để review thì cập nhật trạng thái is finish ReviewObj.IS_FINISH = true; WF_REVIEWBusiness.Save(ReviewObj); // nếu đã cập nhật hêt rồi mà ko có bản ghi nào bị từ chối thì update lại trạng thái pending của process if (ReviewObj.IS_REJECT != true) { var WF_PROCESSBusiness = Get <WF_PROCESSBusiness>(); var ProcessObj = WF_PROCESSBusiness.repository.All() .Where(x => x.ITEM_ID == itemId && x.ITEM_TYPE == itemType).OrderByDescending(x => x.ID) .FirstOrDefault(); if (ProcessObj != null) { ProcessObj.IS_PENDING = false; WF_PROCESSBusiness.Save(ProcessObj); } } } #endregion #region gửi notification var SYS_TINNHANBusiness = Get <SYS_TINNHANBusiness>(); SYS_TINNHAN noti = new SYS_TINNHAN(); noti.FROM_USERNAME = currentUser.HOTEN; noti.FROM_USER_ID = currentUser.ID; noti.NGAYTAO = DateTime.Now; noti.NOIDUNG = currentUser.HOTEN + " đã trả lời Review một văn bản trình ký"; if (ReviewObj.ITEMTYPE == MODULE_CONSTANT.VANBANTRINHKY) { noti.URL = "/HSVanBanDiArea/VanBanChuaXuLy/DetailVanBan/" + itemId.ToString(); noti.TIEUDE = "REVIEW VĂN BẢN TRÌNH KÝ"; } noti.TO_USER_ID = userReview.CREATED_BY; SYS_TINNHANBusiness.Save(noti, targetScreen, false, ReviewObj.ITEMID.HasValue ? ReviewObj.ITEMID.Value : 0, TargetDocType.COORDINATED); #endregion } //else //{ // //result.MessageFail("Dữ liệu không hợp lệ hoặc bạn đang cố gắng hack hệ thống"); // //return Redirect("/HSVanBanDiArea/VanBanChuaXuLy/DetailVanBan/" + itemId.ToString()); //} } //else //{ // result.MessageFail("Dữ liệu không hợp lệ hoặc bạn đang cố gắng hack hệ thống"); //} return(Redirect("/HSVanBanDiArea/VanBanChuaXuLy/DetailVanBan/" + itemId.ToString())); //return Json(result); }