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" }));
        }
Beispiel #2
0
        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" }));
        }
Beispiel #3
0
        /// <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));
        }
Beispiel #4
0
        /// <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);
        }
Beispiel #5
0
        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" }));
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
        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);
        }
Beispiel #8
0
        /// <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);
        }