public JsonResult ThuHoiVanBan(long id) { HSCV_VANBANDIBusiness = Get <HSCV_VANBANDIBusiness>(); var WF_PROCESSBusiness = Get <WF_PROCESSBusiness>(); var WF_STATEBusiness = Get <WF_STATEBusiness>(); var ProcessObj = WF_PROCESSBusiness.repository.All().Where(x => x.ITEM_TYPE == MODULE_CONSTANT.VANBANTRINHKY && x.ITEM_ID == id).FirstOrDefault(); if (ProcessObj != null) { AssignUserInfo(); var VanBanObj = HSCV_VANBANDIBusiness.repository.Find(id); if (VanBanObj != null) { var DM_NGUOIDUNGBusiness = Get <DM_NGUOIDUNGBusiness>(); var UserBoInfo = DM_NGUOIDUNGBusiness.GetUserInfo(VanBanObj.CREATED_BY.Value); int STARTSTATEBYUSERId = WF_PROCESSBusiness.GetState(ProcessObj.WF_ID.Value, UserBoInfo); var STARTSTATEBYUSER = WF_STATEBusiness.repository.Find(STARTSTATEBYUSERId); ProcessObj.CURRENT_STATE = STARTSTATEBYUSER.ID; ProcessObj.CURRENT_STATE_NAME = STARTSTATEBYUSER.STATE_NAME; ProcessObj.USER_ID = VanBanObj.CREATED_BY; WF_PROCESSBusiness.Save(ProcessObj); var log = new WF_LOG(); log.ITEM_ID = ProcessObj.ITEM_ID; log.ITEM_TYPE = ProcessObj.ITEM_TYPE; log.NGUOIXULY_ID = ProcessObj.USER_ID; log.WF_ID = ProcessObj.WF_ID; log.MESSAGE = "<div class='label label-danger'>Thu hồi</div>"; log.STEP_ID = null; log.create_at = DateTime.Now; log.create_by = currentUser.ID; var LogBusiness = Get <WF_LOGBusiness>(); LogBusiness.Save(log); } } return(Json(new { Type = "SUCCESS", Message = "thu hồi bản trình ký thành công" })); }
public JsonResult SaveKyDuyetVanBan(long id) { AssignUserInfo(); HSCV_VANBANDIBusiness = Get <HSCV_VANBANDIBusiness>(); HSCV_VANBANDI VanBan = HSCV_VANBANDIBusiness.Find(id); if (VanBan == null) { return(Json(new { Type = "ERROR", Message = "Không tìm thấy văn bản trình ký cần ký duyệt" })); } //Nếu như văn bản cần ký duyệt if (true == VanBan.HAS_SIGNED) { try { UploadFileTool tool = new UploadFileTool(); FileUltilities file = new FileUltilities(); List <string> ListExtension = tool.GetWordExtension(); List <string> ListPdfExtension = tool.GetPdfExtension(); var TAILIEUDINHKEMBusiness = Get <TAILIEUDINHKEMBusiness>(); var ListTaiLieu = TAILIEUDINHKEMBusiness.GetDataByItemID(id, LOAITAILIEU.VANBAN); var ListPdf = ListTaiLieu.Where(x => !string.IsNullOrEmpty(x.DINHDANG_FILE) && ListPdfExtension.Contains(x.DINHDANG_FILE.ToLower())).ToList(); var ListWord = ListTaiLieu.Where(x => !string.IsNullOrEmpty(x.DINHDANG_FILE) && ListExtension.Contains(x.DINHDANG_FILE.ToLower())).ToList(); var personalSign = ""; if (currentUser.signpath != null && currentUser.signpath != "") { personalSign = Server.MapPath("~/" + currentUser.signpath); } if (ListWord.Count > 0) { FileUltilities.CreateListWatermark("APPROVED", ListWord, "", personalSign); } if (ListPdf.Count > 0) { FileUltilities.CreateWaterMarkPdf(ListPdf, "APPROVED"); } } catch (Exception ex) { } } #region cập nhật wf function done var WF_PROCESSBusiness = Get <WF_PROCESSBusiness>(); var process = WF_PROCESSBusiness.GetProcess(VanBan.ID, MODULE_CONSTANT.VANBANTRINHKY); var WF_STATE_FUNCTIONBusiness = Get <WF_STATE_FUNCTIONBusiness>(); var function = WF_STATE_FUNCTIONBusiness.GetStateFunction((int)process.CURRENT_STATE); var WF_FUNCTION_DONEBusiness = Get <WF_FUNCTION_DONEBusiness>(); var WF_LOGBusiness = Get <WF_LOGBusiness>(); var functionDone = new WF_FUNCTION_DONE(); functionDone.ITEM_TYPE = MODULE_CONSTANT.VANBANTRINHKY; functionDone.ITEM_ID = VanBan.ID; functionDone.STATE = process.CURRENT_STATE; functionDone.FUNCTION_STATE = function.ID; functionDone.create_at = DateTime.Now; AssignUserInfo(); functionDone.create_by = currentUser.ID; WF_FUNCTION_DONEBusiness.Save(functionDone); var log = new WF_LOG(); log.ITEM_ID = VanBan.ID; log.ITEM_TYPE = MODULE_CONSTANT.VANBANTRINHKY; log.MESSAGE = "<div class='label label-info'>Đã phát hành</div>"; log.WF_ID = process.WF_ID; log.create_at = DateTime.Now; log.create_by = currentUser.ID; log.NGUOIXULY_ID = currentUser.ID; WF_LOGBusiness.Save(log); //Ghi nhận luồng đã xử lý xong var WF_STATEBusiness = Get <WF_STATEBusiness>(); var state = WF_STATEBusiness.Find(process.CURRENT_STATE); if (state != null && state.IS_KETTHUC == true) { process.IS_END = true; WF_PROCESSBusiness.Save(process); } #endregion return(Json(new { Type = "SUCCESS", Message = "Ký duyệt văn bản thành công" })); }
/// <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); }
public JsonResult SavePhatHanhVanBan(FormCollection col) { AssignUserInfo(); SMSDAL.SendSMSDAL sms = new SMSDAL.SendSMSDAL(); SYS_TINNHANBusiness = Get <SYS_TINNHANBusiness>(); LogSMSBusiness = Get <LogSMSBusiness>(); HSCV_VANBANDIBusiness = Get <HSCV_VANBANDIBusiness>(); HSCV_VANBANDENBusiness = Get <HSCV_VANBANDENBusiness>(); DM_NHOMDANHMUCBusiness = Get <DM_NHOMDANHMUCBusiness>(); DM_DANHMUC_DATABusiness = Get <DM_DANHMUC_DATABusiness>(); TAILIEUDINHKEMBusiness = Get <TAILIEUDINHKEMBusiness>(); DM_NGUOIDUNGBusiness = Get <DM_NGUOIDUNGBusiness>(); WF_MODULEBusiness = Get <WF_MODULEBusiness>(); WF_PROCESSBusiness = Get <WF_PROCESSBusiness>(); WF_STATE_FUNCTIONBusiness = Get <WF_STATE_FUNCTIONBusiness>(); WF_STATEBusiness = Get <WF_STATEBusiness>(); WF_STREAMBusiness = Get <WF_STREAMBusiness>(); WF_FUNCTION_DONEBusiness = Get <WF_FUNCTION_DONEBusiness>(); WF_LOGBusiness = Get <WF_LOGBusiness>(); WF_ITEM_USER_PROCESSBusiness = Get <WF_ITEM_USER_PROCESSBusiness>(); CCTC_THANHPHANBusiness = Get <CCTC_THANHPHANBusiness>(); string selectedDept = col["department-choose"]; long? ID = col["ID"].ToLongOrNULL(); if (0 >= ID) { return(Json(new { Type = "ERROR", Message = "Không tìm thấy văn bản cần lưu sổ và phát hành" })); } #region cập nhật thông tin văn bản đi HSCV_VANBANDI VanBanDi = HSCV_VANBANDIBusiness.Find(ID); if (VanBanDi == null) { return(Json(new { Type = "ERROR", Message = "Không tìm thấy văn bản cần lưu sổ và phát hành" })); } if (!string.IsNullOrEmpty(col["SOHIEU"])) { VanBanDi.SOHIEU = col["SOHIEU"]; } VanBanDi.USER_RECEIVE_DIRECTLY = col["USERS_RECEIVE_SPECIAL"]; VanBanDi.DONVINHAN_INTERNAL_ID = selectedDept; VanBanDi.SOTHEOSO = col["SOTHEOSO"]; VanBanDi.SOVANBAN_ID = col["SOVANBAN_ID"].ToIntOrNULL(); if (!string.IsNullOrEmpty(col["TRICHYEU"])) { VanBanDi.TRICHYEU = col["TRICHYEU"].Trim(); } if (!string.IsNullOrEmpty(col["NGAY_HIEULUC"])) { try { VanBanDi.NGAYCOHIEULUC = col["NGAY_HIEULUC"].ToDateTime(); } catch (Exception e) { } } if (!string.IsNullOrEmpty(col["NGAYHET_HIEULUC"])) { try { VanBanDi.NGAYHETHIEULUC = col["NGAYHET_HIEULUC"].ToDateTime(); } catch (Exception e) { } } if (!string.IsNullOrEmpty(col["NGAYBANHANH"])) { try { VanBanDi.NGAYBANHANH = col["NGAYBANHANH"].ToDateTime(); } catch (Exception e) { } } HSCV_VANBANDIBusiness.Save(VanBanDi); #endregion //cập nhật số đi theo văn bản vào số văn bản hiện tại int numbSoDiTheoSo = VanBanDi.SOTHEOSO.GetPrefixNumber(); DM_DANHMUC_DATABusiness.UpdateSoVanBan(VanBanDi.SOVANBAN_ID.GetValueOrDefault(), numbSoDiTheoSo); #region Convert Văn bản List <int> ListDonVi = selectedDept.ToListInt(','); DateTime? NGAY_HIEULUC = col["NGAY_HIEULUC"].ToDateTime(); DateTime? NGAYHET_HIEULUC = col["NGAYHET_HIEULUC"].ToDateTime(); string TRICHYEU = col["TRICHYEU"]; string SOHIEU = col["SOHIEU"]; if (!string.IsNullOrEmpty(SOHIEU)) { SOHIEU = SOHIEU.Trim(); } if (!string.IsNullOrEmpty(TRICHYEU)) { TRICHYEU = TRICHYEU.Trim(); } List <TAILIEUDINHKEM> ListTaiLieu = TAILIEUDINHKEMBusiness.GetDataByItemID(ID.HasValue ? ID.Value : 0, LOAITAILIEU.VANBAN); DM_NGUOIDUNG NguoiDung = DM_NGUOIDUNGBusiness.Find(VanBanDi.NGUOIKY_ID); #endregion #region cập nhật wf function done var process = WF_PROCESSBusiness.GetProcess(VanBanDi.ID, MODULE_CONSTANT.VANBANTRINHKY); var function = WF_STATE_FUNCTIONBusiness.GetStateFunction((int)process.CURRENT_STATE); var functionDone = new WF_FUNCTION_DONE(); functionDone.ITEM_TYPE = MODULE_CONSTANT.VANBANTRINHKY; functionDone.ITEM_ID = VanBanDi.ID; functionDone.STATE = process.CURRENT_STATE; functionDone.FUNCTION_STATE = function.ID; functionDone.create_at = DateTime.Now; functionDone.create_by = currentUser.ID; WF_FUNCTION_DONEBusiness.Save(functionDone); var log = new WF_LOG(); log.ITEM_ID = VanBanDi.ID; log.ITEM_TYPE = MODULE_CONSTANT.VANBANTRINHKY; log.MESSAGE = "<div class='label label-info'>Đã phát hành</div>"; log.WF_ID = process.WF_ID; log.create_at = DateTime.Now; log.create_by = currentUser.ID; log.NGUOIXULY_ID = currentUser.ID; WF_LOGBusiness.Save(log); //Ghi nhận luồng đã xử lý xong var state = WF_STATEBusiness.Find(process.CURRENT_STATE); if (state != null && state.IS_KETTHUC == true) { process.IS_END = true; WF_PROCESSBusiness.Save(process); } var itemprocess = WF_ITEM_USER_PROCESSBusiness.repository.All().Where(x => x.ITEM_ID == process.ITEM_ID && x.ITEM_TYPE == process.ITEM_TYPE && x.STEP_ID == process.CURRENT_STATE) .FirstOrDefault(); if (itemprocess != null) { itemprocess.DAXULY = true; WF_ITEM_USER_PROCESSBusiness.Save(itemprocess); } #endregion //gửi văn bản đi cho đơn vị SaveVanBanPhatHanhToDonVi(VanBanDi, sms); //gửi văn bản đi cho cá nhân SaveVanBanPhatHanhToCaNhan(VanBanDi, sms); return(Json(new { Type = "SUCCESS", Message = "Lưu sổ và phát hành văn bản thành công" })); }
public JsonResultBO AddFlow(long ItemId, string itemType, UserInfoBO userId, int customState = 0) { var result = new JsonResultBO(true); //Lấy thông tin module của loại đối tượng var module = this.context.WF_MODULE.Where(x => x.MODULE_CODE.Equals(itemType)).FirstOrDefault(); if (module == null || module.WF_STREAM_ID == null) { result.MessageFail("Không tìm thấy luồng xử lý"); return(result); } //Lấy thông tin luồng xử lý var DeptObj = this.context.CCTC_THANHPHAN.Find(userId.DM_PHONGBAN_ID); if (DeptObj == null) { result.MessageFail("Không tìm thấy luồng xử lý do chưa set đúng phòng ban"); return(result); } var LstWFIds = module.WF_STREAM_ID.ToListInt(','); var flow = this.context.WF_STREAM.Where(x => x.LEVEL_ID == DeptObj.CATEGORY && LstWFIds.Contains(x.ID)).FirstOrDefault(); if (flow == null) { result.MessageFail("Không tìm thấy luồng xử lý"); return(result); } //Lấy danh sách bước var lstStep = this.context.WF_STATE.Where(x => x.WF_ID == flow.ID).OrderBy(x => x.ID).ToList(); if (lstStep == null && !lstStep.Any()) { result.MessageFail("Luồng xử lý chưa được cấu hình"); return(result); } var stateID = GetState(flow.ID, userId); /* * @author: duynn * @description: "trạng thái" tùy chỉnh cho phép sử dụng trạng thái vượt cấp * */ if (customState > 0) { stateID = customState; } var stateCurrent = this.context.WF_STATE.Find(stateID); var process = new WF_PROCESS(); process.ITEM_ID = ItemId; process.ITEM_TYPE = itemType; process.USER_ID = userId.ID; process.WF_ID = flow.ID; process.CURRENT_STATE = stateCurrent.ID; process.CURRENT_STATE_NAME = stateCurrent.STATE_NAME; if (customState > 0) { process.IS_END = stateCurrent.IS_KETTHUC.GetValueOrDefault(); } this.Save(process); var userProcess = new WF_ITEM_USER_PROCESS(); userProcess.ITEM_ID = ItemId; userProcess.ITEM_TYPE = itemType; userProcess.IS_XULYCHINH = true; userProcess.USER_ID = userId.ID; userProcess.create_at = DateTime.Now; userProcess.create_by = userId.ID; if (customState > 0) { userProcess.DAXULY = true; } this.context.WF_ITEM_USER_PROCESS.Add(userProcess); var log = new WF_LOG(); log.ITEM_ID = process.ITEM_ID; log.ITEM_TYPE = process.ITEM_TYPE; log.NGUOIXULY_ID = userId.ID; log.WF_ID = process.WF_ID; if (customState > 0) { log.MESSAGE = "<div class='label label-info'>" + stateCurrent.STATE_NAME + "</div>"; } else { log.MESSAGE = "<div class='label label-info'>Khởi tạo</div>"; } log.STEP_ID = null; log.create_at = DateTime.Now; log.create_by = userId.ID; this.context.WF_LOG.Add(log); if (customState > 0) { var function = this.context.WF_STATE_FUNCTION .Where(x => x.WF_STATE_ID == customState) .FirstOrDefault(); if (function != null) { var functionDone = new WF_FUNCTION_DONE(); functionDone.ITEM_TYPE = itemType; functionDone.ITEM_ID = ItemId; functionDone.STATE = customState; functionDone.FUNCTION_STATE = function.ID; functionDone.create_at = DateTime.Now; functionDone.create_by = userId.ID; this.context.WF_FUNCTION_DONE.Add(functionDone); } } this.context.SaveChanges(); return(result); }
public JsonResultBO StepDenie(long processID, int stepid, string mess, long LogID) { var result = new JsonResultBO(true); long?ngxuly = 0; using (var transaction = this.context.Database.BeginTransaction()) { try { var process = this.context.WF_PROCESS.Find(processID); if (process == null) { result.MessageFail("Đối tượng không trong luồng xử lý"); return(result); } //var log = this.context.WF_LOG.Where(x => x.WF_ID == process.WF_ID && x.ITEM_TYPE.Equals(process.ITEM_TYPE) && x.ITEM_ID == process.ITEM_ID).OrderByDescending(x => x.ID).FirstOrDefault(); var log = this.context.WF_LOG.Find(LogID); #region Cập nhật lại trạng thái //if (log.STEP_ID == null) //{ // result.MessageFail("Không có trạng thái để quay lại"); // return result; //} ngxuly = process.USER_ID; var step = this.context.WF_STEP.Find(log.STEP_ID); process.CURRENT_STATE = step.STATE_BEGIN; var stepConfig = this.context.WF_STEP_CONFIG.Where(x => x.WF_STEP_ID == step.ID).FirstOrDefault(); var state = this.context.WF_STATE.Find(step.STATE_BEGIN); process.CURRENT_STATE_NAME = state.STATE_NAME; process.USER_ID = log.NGUOIXULY_ID; this.context.SaveChanges(); #endregion #region ghi log xử lý var logNew = new WF_LOG(); logNew.ITEM_ID = process.ITEM_ID; logNew.ITEM_TYPE = process.ITEM_TYPE; logNew.MESSAGE = mess; logNew.NGUOIXULY_ID = ngxuly; logNew.NGUONHAN_ID = process.USER_ID; logNew.WF_ID = step.WF_ID; logNew.STEP_ID = stepid; logNew.IS_RETURN = true; logNew.create_at = DateTime.Now; logNew.create_by = ngxuly; this.context.WF_LOG.Add(logNew); this.context.SaveChanges(); if (stepConfig != null && stepConfig.IS_NOTI_MESSAGE == true) { //var thongbao = new SYS_TINNHAN(); //thongbao.TO_USER_ID = ngxuly; //thongbao.URL = MODULE_CONSTANT.GetNameModule(process.ITEM_TYPE, process.ITEM_ID.GetValueOrDefault()).Link; //thongbao.NOIDUNG = "Trả về 1 " + MODULE_CONSTANT.GetNameModule(process.ITEM_TYPE, process.ITEM_ID.GetValueOrDefault()).Name + "Cần xử lý"; //thongbao.FROM_USER_ID = process.USER_ID; //thongbao.NGAYTAO = DateTime.Now; //thongbao.NGUOITAO = ngxuly; //this.context.SYS_TINNHAN.Add(thongbao); //context.SaveChanges(); } #endregion transaction.Commit(); } catch { transaction.Rollback(); result.MessageFail("Có lỗi xử lý. Không thể chuyển trạng thái"); } } return(result); }
/// <summary> /// Thực hiện chuyển trạng thái /// </summary> /// <returns></returns> public JsonResultBO SaveStepAction(long processID, int stepID, long mainUser, List <long> joinUser, string message, long currentUser) { var result = new JsonResultBO(true); long?ngxuly = 0; int? curentStep = 0; using (var transaction = this.context.Database.BeginTransaction()) { try { var process = this.context.WF_PROCESS.Find(processID); if (process == null) { result.MessageFail("Đối tượng không trong luồng xử lý"); return(result); } var step = this.context.WF_STEP.Find(stepID); if (step == null) { result.MessageFail("Không tìm thấy bước chuyển"); return(result); } long idUserBack = 0; var stepConfig = this.context.WF_STEP_CONFIG.Where(x => x.WF_STEP_ID == step.ID).FirstOrDefault(); if (stepConfig != null && stepConfig.IS_BACK_USER == true) { var logLast = this.context.WF_LOG.Where(x => x.ITEM_TYPE == process.ITEM_TYPE && x.ITEM_ID == process.ITEM_ID).OrderByDescending(x => x.ID).FirstOrDefault(); if (logLast != null) { idUserBack = logLast.NGUOIXULY_ID.GetValueOrDefault(0); } } ngxuly = process.USER_ID; curentStep = step.ID; #region Cập nhật trạng thái cho đối tượng process.CURRENT_STATE = step.STATE_END; var stateEnd = this.context.WF_STATE.Find(step.STATE_END); process.CURRENT_STATE_NAME = stateEnd.STATE_NAME; if (stateEnd.IS_KETTHUC == true) { //Kiểm tra xe process đã kết thúc chưa. các hành động đã thực hiện chưa var isNoFunc = true; var stateFunction = this.context.WF_STATE_FUNCTION.Where(x => x.WF_STATE_ID == stateEnd.ID).FirstOrDefault(); if (stateFunction != null) { //kiểm tra xem function đã thực hiện chưa var done = this.context.WF_FUNCTION_DONE.Where(x => x.STATE == stateEnd.ID && x.ITEM_TYPE == process.ITEM_TYPE && x.FUNCTION_STATE == stateFunction.ID && x.ITEM_ID == process.ITEM_ID).Any(); if (!done) { //function đã thực hiện isNoFunc = false; } } if (isNoFunc) { process.IS_END = true; } } if (idUserBack > 0) { mainUser = idUserBack; } #region cập nhật lại trạng thái đã xử lý của user cũ var itemuserprocess = this.context.WF_ITEM_USER_PROCESS.Where(x => x.ITEM_TYPE == process.ITEM_TYPE && x.ITEM_ID == process.ITEM_ID && x.USER_ID == process.USER_ID && x.IS_XULYCHINH.Value == true).FirstOrDefault(); if (itemuserprocess != null) { itemuserprocess.DAXULY = true; this.context.SaveChanges(); } #endregion if (mainUser > 0) { process.USER_ID = mainUser; } this.context.SaveChanges(); #endregion #region Lưu người xử lý if (mainUser > 0) { var wf_main_process = new WF_ITEM_USER_PROCESS(); wf_main_process.IS_XULYCHINH = true; wf_main_process.ITEM_ID = process.ITEM_ID; wf_main_process.ITEM_TYPE = process.ITEM_TYPE; wf_main_process.STEP_ID = curentStep; wf_main_process.create_at = DateTime.Now; wf_main_process.create_by = currentUser; wf_main_process.USER_ID = mainUser; this.context.WF_ITEM_USER_PROCESS.Add(wf_main_process); this.context.SaveChanges(); } if (joinUser != null && joinUser.Any()) { foreach (var item in joinUser) { var wf_join_process = new WF_ITEM_USER_PROCESS(); wf_join_process.IS_XULYCHINH = false; wf_join_process.ITEM_ID = process.ITEM_ID; wf_join_process.ITEM_TYPE = process.ITEM_TYPE; wf_join_process.STEP_ID = curentStep; wf_join_process.create_at = DateTime.Now; wf_join_process.create_by = currentUser; wf_join_process.USER_ID = item; this.context.WF_ITEM_USER_PROCESS.Add(wf_join_process); this.context.SaveChanges(); } } #endregion #region ghi log xử lý var log = new WF_LOG(); log.ITEM_ID = process.ITEM_ID; log.ITEM_TYPE = process.ITEM_TYPE; log.MESSAGE = message; log.create_at = DateTime.Now; log.NGUOIXULY_ID = ngxuly; log.NGUONHAN_ID = process.USER_ID; log.WF_ID = step.WF_ID; log.STEP_ID = step.ID; this.context.WF_LOG.Add(log); this.context.SaveChanges(); #endregion transaction.Commit(); } catch { transaction.Rollback(); result.MessageFail("Có lỗi xử lý. Không thể chuyển trạng thái"); } } return(result); }