Пример #1
0
        public PartialViewResult GetAction(long idItem, string itemType)
        {
            AssignUserInfo();
            var model = new ActionFlowBO();
            var WF_PROCESSBusiness        = Get <WF_PROCESSBusiness>();
            var WF_STATEBusiness          = Get <WF_STATEBusiness>();
            var WF_STEPBusiness           = Get <WF_STEPBusiness>();
            var WF_STATE_FUNCTIONBusiness = Get <WF_STATE_FUNCTIONBusiness>();
            var WF_FUNCTION_DONEBusiness  = Get <WF_FUNCTION_DONEBusiness>();

            model.Process = WF_PROCESSBusiness.GetProcess(idItem, itemType) ?? new WF_PROCESS();
            // Kiểm tra xem có bản ghi nào bị reject hay không
            WF_REVIEWBusiness = Get <WF_REVIEWBusiness>();
            WF_REVIEW ReviewRejectObj = WF_REVIEWBusiness.repository.All().Where(x =>
                                                                                 x.ITEMID == model.Process.ITEM_ID && x.ITEMTYPE == model.Process.ITEM_TYPE).OrderByDescending(x => x.ID)
                                        .FirstOrDefault();

            model.ReviewObj = ReviewRejectObj;
            // kiểm tra xem bước xử lý có tồn tại không và kiểm tra xem có đang ở trạng thái pending
            // nghĩa là đang gửi review hay không
            if (model.Process != null && (model.Process.IS_PENDING != true || (ReviewRejectObj != null && ReviewRejectObj.IS_REJECT == true)))
            {
                model.StartState = WF_STATEBusiness.Find(model.Process.CURRENT_STATE);
                //check xem người đang xử lý chính có phải người dùng hiện tại hay không
                if (model.Process.USER_ID == currentUser.ID)
                {
                    // Kiểm tra xem trạng thái hiện tại có phải trạng thái kết thúc hay chưa
                    if (model.StartState.IS_KETTHUC != true)
                    {
                        model.LstStep     = WF_STEPBusiness.GetListNextStep(model.Process.WF_ID.Value, model.StartState.ID);
                        model.LstStepBack = WF_STEPBusiness.GetListNextStepBack(model.Process);
                    }

                    if (model.StartState != null)
                    {
                        model.Function = WF_STATE_FUNCTIONBusiness.CheckGetFunction(model.StartState.ID, idItem, model.Process.ITEM_TYPE);
                    }
                }
            }
            else if (model.Process.IS_PENDING == true)
            {
                // Kiểm tra xem có bản ghi review nào ở trạng thái chưa kết thúc hay không
                WF_REVIEW ReviewObj = WF_REVIEWBusiness.repository.All().Where(x =>
                                                                               x.ITEMID == model.Process.ITEM_ID && x.ITEMTYPE == model.Process.ITEM_TYPE &&
                                                                               x.IS_FINISH != true)
                                      .FirstOrDefault();
                if (ReviewObj != null)
                {
                    var WfUserReview = Get <WF_REVIEW_USERBusiness>();
                    // cập nhật trạng thái Required review - nếu trạng thái này = true thì yêu cầu review
                    model.REQUIRED_REVIEW = WfUserReview.CheckReviewing(ReviewObj.ID, currentUser.ID);
                }
            }
            return(PartialView("_ActionFlowPartial", model));
        }
Пример #2
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);
        }
Пример #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));
        }
        public ActionResult DetailVanBanDen(long id, int type = VANBANDEN_CONSTANT.CHUA_XULY)
        {
            AssignUserInfo();
            wfItemUserProcess     = Get <WF_ITEM_USER_PROCESSBusiness>();
            wfReviewUserBusiness  = Get <WF_REVIEW_USERBusiness>();
            dmDanhMucDataBusiness = Get <DM_DANHMUC_DATABusiness>();
            hscvVanBanDenBusiness = Get <HSCV_VANBANDENBusiness>();
            attachmentBusiness    = Get <TAILIEUDINHKEMBusiness>();
            var            HSCVREADVANBANBusiness = Get <HSCVREADVANBANBusiness>();
            HSCV_VANBANDEN entityVanBanDen        = hscvVanBanDenBusiness.Find(id);
            bool           canAccess = wfItemUserProcess.CheckPermissionProcess(id, true == entityVanBanDen.IS_NOIBO ? MODULE_CONSTANT.VANBANDENNOIBO : MODULE_CONSTANT.VANBANDEN, currentUser.ID);
            bool           canReview = wfReviewUserBusiness.CheckPermissionReview(id, true == entityVanBanDen.IS_NOIBO ? MODULE_CONSTANT.VANBANDENNOIBO : MODULE_CONSTANT.VANBANDEN, currentUser.ID);

            if ((!canAccess && !canReview) || entityVanBanDen == null)
            {
                return(Redirect("/Home/UnAuthor"));
            }

            var checkread = HSCVREADVANBANBusiness.repository.All()
                            .Where(x => x.USER_ID == currentUser.ID && x.TYPE == 1 && x.VANBAN_ID == id).FirstOrDefault();

            if (checkread == null)
            {
                HSCV_READVANBAN readObj = new HSCV_READVANBAN();
                readObj.TYPE      = 1;
                readObj.USER_ID   = currentUser.ID;
                readObj.VANBAN_ID = id;
                HSCVREADVANBANBusiness.Save(readObj);
            }

            DetailVanBanDenViewModel model                    = new DetailVanBanDenViewModel();
            DM_DANHMUC_DATA          entityDonViGui           = dmDanhMucDataBusiness.Find(entityVanBanDen.DONVI_ID);
            DM_DANHMUC_DATA          entityDoKhan             = dmDanhMucDataBusiness.Find(entityVanBanDen.DOKHAN_ID);
            DM_DANHMUC_DATA          entityDoUuTien           = dmDanhMucDataBusiness.Find(entityVanBanDen.DOMAT_ID);
            DM_DANHMUC_DATA          entityLinhVucVanBan      = dmDanhMucDataBusiness.Find(entityVanBanDen.LINHVUCVANBAN_ID);
            DM_DANHMUC_DATA          entityLoaiVanBan         = dmDanhMucDataBusiness.Find(entityVanBanDen.LOAIVANBAN_ID);
            DM_DANHMUC_DATA          entityLoaiCoQuan         = dmDanhMucDataBusiness.Find(entityVanBanDen.LOAI_COQUAN_ID);
            DM_DANHMUC_DATA          entityThongTinLoaiVanBan = dmDanhMucDataBusiness.Find(entityVanBanDen.THONGTIN_LOAI_ID);
            DM_DANHMUC_DATA          entityCongVanDen         = dmDanhMucDataBusiness.Find(entityVanBanDen.CONGVAN_DEN_ID);

            model.currentUserId         = currentUser.ID;
            model.entityVanBanDen       = entityVanBanDen;
            model.nameOfDonViGui        = entityDonViGui != null ? entityDonViGui.TEXT : string.Empty;
            model.nameOfDoKhan          = entityDoKhan != null ? entityDoKhan.TEXT : string.Empty;
            model.nameOfDoUuTien        = entityDoUuTien != null ? entityDoUuTien.TEXT : string.Empty;
            model.nameOfLinhVucVanBan   = entityLinhVucVanBan != null ? entityLinhVucVanBan.TEXT : string.Empty;
            model.nameOfLoaiVanBan      = entityLoaiVanBan != null ? entityLoaiVanBan.TEXT : string.Empty;
            model.nameOfLoaiCoQuan      = entityLoaiCoQuan != null ? entityLoaiCoQuan.TEXT : string.Empty;
            model.nameOfThongTinLoaiBan = entityThongTinLoaiVanBan != null ? entityThongTinLoaiVanBan.TEXT : string.Empty;
            model.nameOfCongVanDen      = entityCongVanDen != null ? entityCongVanDen.TEXT : string.Empty;

            model.groupOfTaiLieuDinhKems = attachmentBusiness.GetDataByItemID(entityVanBanDen.ID, LOAITAILIEU.VANBANDEN);
            model.typeOfVanBanDen        = type;

            bool isFinish = hscvVanBanDenBusiness.CheckIsFinish(id);

            model.canCreateCalendar = (entityVanBanDen.NGUOITAO == currentUser.ID && isFinish);
            if (isFinish == false && entityVanBanDen.NGAYCONGTAC != null)
            {
                //kiểm tra người dùng có bước xử lý hay không?
                bool hasSteps = false;
                wfProcessBusiness       = Get <WF_PROCESSBusiness>();
                wfReviewUserBusiness    = Get <WF_REVIEW_USERBusiness>();
                wfReviewBusiness        = Get <WF_REVIEWBusiness>();
                wfStateBusiness         = Get <WF_STATEBusiness>();
                wfStepBusiness          = Get <WF_STEPBusiness>();
                wfStateFunctionBusiness = Get <WF_STATE_FUNCTIONBusiness>();

                WF_PROCESS process = wfProcessBusiness.repository.All()
                                     .Where(x => x.ITEM_ID == id && x.ITEM_TYPE == MODULE_CONSTANT.VANBANDEN &&
                                            x.USER_ID == currentUser.ID).FirstOrDefault();

                WF_REVIEW reviewReject = wfReviewBusiness.repository.All()
                                         .Where(x => x.ITEMID == id && x.ITEMTYPE == MODULE_CONSTANT.VANBANDEN && x.IS_REJECT == true)
                                         .OrderByDescending(x => x.ID).FirstOrDefault();

                WF_FUNCTION       function      = null;
                bool              requireReview = false;
                List <WF_STEP>    nextSteps     = new List <WF_STEP>();
                List <StepBackBO> stepsBack     = new List <StepBackBO>();

                if (process != null)
                {
                    if (process != null || reviewReject != null)
                    {
                        WF_STATE startState = wfStateBusiness.Find(process.CURRENT_STATE);
                        if (startState != null)
                        {
                            if (startState.IS_KETTHUC != true)
                            {
                                nextSteps = wfStepBusiness.GetListNextStep(process.WF_ID.GetValueOrDefault(), startState.ID);
                                stepsBack = wfStepBusiness.GetListNextStepBack(process);
                            }

                            function = wfStateFunctionBusiness.CheckGetFunction(startState.ID, entityVanBanDen.ID, MODULE_CONSTANT.VANBANDEN);
                        }
                    }
                    else if (process.IS_PENDING == true)
                    {
                        WF_REVIEW reviewFinish = wfReviewBusiness.repository.All()
                                                 .Where(x => x.ITEMID == id && x.ITEMTYPE == MODULE_CONSTANT.VANBANDEN && x.IS_FINISH != true)
                                                 .OrderByDescending(x => x.ID).FirstOrDefault();
                        if (reviewFinish != null)
                        {
                            requireReview = wfReviewUserBusiness.CheckReviewing(reviewFinish.ID, currentUser.ID);
                        }
                    }

                    hasSteps = (nextSteps.Any() || stepsBack.Any() || function != null || requireReview == true);
                }
                model.hasSteps = hasSteps;
                if (hasSteps)
                {
                    entityVanBanDen.NGAYCONGTAC = new DateTime(entityVanBanDen.NGAYCONGTAC.Value.Year, entityVanBanDen.NGAYCONGTAC.Value.Month, entityVanBanDen.NGAYCONGTAC.Value.Day);
                    lichCongTacBusiness         = Get <LICHCONGTACBusiness>();
                    model.isDuplicateCalendar   = lichCongTacBusiness.repository.All()
                                                  .Where(x => x.LANHDAO_ID == currentUser.ID &&
                                                         x.NGAY_CONGTAC.Equals(entityVanBanDen.NGAYCONGTAC.Value)).Count() > 0;
                }
            }

            return(View(model));
        }