Beispiel #1
0
        public JsonResult Search(TreasuryAccessSearchViewModel searchModel)
        {
            MSGReturnModel <string> result = new MSGReturnModel <string>();

            result.RETURN_FLAG         = false;
            result.DESCRIPTION         = Ref.MessageType.not_Find_Any.GetDescription();
            searchModel.vCustodianFlag = AccountController.CustodianFlag;
            Cache.Invalidate(CacheList.TreasuryAccessSearchData);
            Cache.Set(CacheList.TreasuryAccessSearchData, searchModel);
            var datas = TreasuryAccess.GetSearchDetail(searchModel);

            if (datas.Any())
            {
                Cache.Invalidate(CacheList.TreasuryAccessSearchDetailViewData);
                Cache.Set(CacheList.TreasuryAccessSearchDetailViewData, datas);
                result.RETURN_FLAG = true;
            }

            return(Json(result));
        }
Beispiel #2
0
        /// <summary>
        /// 修改申請單記錄檔
        /// </summary>
        /// <param name="data">修改資料</param>
        /// <param name="custodianFlag">是否為保管科</param>
        /// <param name="searchData">申請表單查詢顯示區塊ViewModel</param>
        /// <returns></returns>
        public MSGReturnModel <List <TreasuryAccessSearchDetailViewModel> > updateAplyNo(TreasuryAccessViewModel data, bool custodianFlag, TreasuryAccessSearchViewModel searchData)
        {
            MSGReturnModel <List <TreasuryAccessSearchDetailViewModel> > result = new MSGReturnModel <List <TreasuryAccessSearchDetailViewModel> >();

            result.DESCRIPTION = Ref.MessageType.already_Change.GetDescription();
            using (TreasuryDBEntities db = new TreasuryDBEntities())
            {
                var updateData = db.TREA_APLY_REC.FirstOrDefault(x => x.APLY_NO == data.vAplyNo);
                if (updateData != null)
                {
                    if (updateData.LAST_UPDATE_DT > data.vLastUpdateTime)
                    {
                        return(result);
                    }
                    if (custodianFlag)
                    {
                        updateData.APLY_UNIT = data.vAplyUnit;
                        updateData.APLY_UID  = data.vAplyUid;
                    }
                    updateData.ACCESS_REASON        = data.vAccessReason;
                    updateData.EXPECTED_ACCESS_DATE = TypeTransfer.stringToDateTimeN(data.vExpectedAccessDate);
                    updateData.LAST_UPDATE_UID      = AccountController.CurrentUserId;
                    updateData.LAST_UPDATE_DT       = DateTime.Now;
                    try
                    {
                        db.SaveChanges();
                        result.DESCRIPTION = Ref.MessageType.update_Success.GetDescription();
                        result.RETURN_FLAG = true;
                        result.Datas       = GetSearchDetail(searchData);
                    }
                    catch (DbUpdateException ex)
                    {
                        result.DESCRIPTION = ex.exceptionMessage();
                    }
                }
            }
            return(result);
        }
Beispiel #3
0
        /// <summary>
        /// 作廢 (保留資料)
        /// </summary>
        /// <param name="searchData">金庫物品存取主畫面查詢ViewModel</param>
        /// <param name="data">申請表單查詢顯示區塊ViewModel</param>
        /// <returns></returns>
        public MSGReturnModel <List <TreasuryAccessSearchDetailViewModel> > Invalidate(TreasuryAccessSearchViewModel searchData, TreasuryAccessSearchDetailViewModel data)
        {
            var result = new MSGReturnModel <List <TreasuryAccessSearchDetailViewModel> >();

            result.RETURN_FLAG = false;
            result.DESCRIPTION = Ref.MessageType.already_Change.GetDescription();
            DateTime dt     = DateTime.Now;
            string   logStr = string.Empty;
            //取得流水號
            var _status = Ref.AccessProjectFormStatus.E02.ToString();

            using (TreasuryDBEntities db = new TreasuryDBEntities())
            {
                var _TREA_APLY_REC = db.TREA_APLY_REC.FirstOrDefault(x => x.APLY_NO == data.vAPLY_NO);
                if (_TREA_APLY_REC != null)
                {
                    if (_TREA_APLY_REC.LAST_UPDATE_DT > data.vLast_Update_Time)
                    {
                        return(result);
                    }
                    _TREA_APLY_REC.LAST_UPDATE_UID = AccountController.CurrentUserId;
                    _TREA_APLY_REC.LAST_UPDATE_DT  = dt;
                    _TREA_APLY_REC.APLY_STATUS     = _status;
                    logStr += _TREA_APLY_REC.modelToString(logStr);

                    #region 作廢
                    var sampleFactory = new SampleFactory();
                    var getAgenct     = sampleFactory.GetAgenct(EnumUtil.GetValues <Ref.TreaItemType>().First(x => x.ToString() == _TREA_APLY_REC.ITEM_ID));
                    if (getAgenct != null)
                    {
                        var _recover = getAgenct.ObSolete(db, _TREA_APLY_REC.APLY_NO, _TREA_APLY_REC.ACCESS_TYPE, logStr, dt);
                        if (!_recover.Item1) //失敗
                        {
                            return(result);
                        }
                        logStr += _recover.Item2;
                    }
                    else
                    {
                        return(result);
                    }
                    #endregion

                    #region 申請單歷程檔
                    //「取消申請」:新增「E02」申請人刪除的狀態資料。
                    var ARH = new APLY_REC_HIS()
                    {
                        APLY_NO     = _TREA_APLY_REC.APLY_NO,
                        APLY_STATUS = _status,
                        PROC_UID    = searchData.vCreateUid,
                        PROC_DT     = dt
                    };
                    logStr += ARH.modelToString(logStr);

                    db.APLY_REC_HIS.Add(ARH);

                    #endregion

                    var validateMessage = db.GetValidationErrors().getValidateString();
                    if (validateMessage.Any())
                    {
                        result.DESCRIPTION = validateMessage;
                    }
                    else
                    {
                        try
                        {
                            db.SaveChanges();

                            #region LOG
                            //新增LOG
                            Log log = new Log();
                            log.CFUNCTION = "作廢-金庫物品存取申請作業";
                            log.CACTION   = "U";
                            log.CCONTENT  = logStr;
                            LogDao.Insert(log, searchData.vCreateUid);
                            #endregion

                            result.RETURN_FLAG = true;
                            result.DESCRIPTION = $@"單號{data.vAPLY_NO} 已作廢!";
                        }
                        catch (DbUpdateException ex)
                        {
                            result.DESCRIPTION = ex.exceptionMessage();
                        }
                    }
                }
                if (result.RETURN_FLAG)
                {
                    result.Datas = GetSearchDetail(searchData);
                }
            }
            return(result);
        }
Beispiel #4
0
        /// <summary>
        /// 刪除申請 (刪除資料)
        /// </summary>
        /// <param name="searchData">金庫物品存取主畫面查詢ViewModel</param>
        /// <param name="data">申請表單查詢顯示區塊ViewModel</param>
        /// <returns></returns>
        public MSGReturnModel <List <TreasuryAccessSearchDetailViewModel> > Cancel(TreasuryAccessSearchViewModel searchData, TreasuryAccessSearchDetailViewModel data)
        {
            var result = new MSGReturnModel <List <TreasuryAccessSearchDetailViewModel> >();

            result.RETURN_FLAG = false;
            result.DESCRIPTION = Ref.MessageType.already_Change.GetDescription();
            DateTime dt     = DateTime.Now;
            string   logStr = string.Empty;
            //取得流水號
            SysSeqDao sysSeqDao = new SysSeqDao();
            String    qPreCode  = DateUtil.getCurChtDateTime().Split(' ')[0];

            using (TreasuryDBEntities db = new TreasuryDBEntities())
            {
                var _TREA_APLY_REC = db.TREA_APLY_REC.FirstOrDefault(x => x.APLY_NO == data.vAPLY_NO);
                if (_TREA_APLY_REC != null)
                {
                    if (_TREA_APLY_REC.LAST_UPDATE_DT > data.vLast_Update_Time)
                    {
                        return(result);
                    }
                    logStr += _TREA_APLY_REC.modelToString();


                    #region 刪除申請
                    var sampleFactory = new SampleFactory();
                    var getAgenct     = sampleFactory.GetAgenct(EnumUtil.GetValues <Ref.TreaItemType>().First(x => x.ToString() == _TREA_APLY_REC.ITEM_ID));
                    if (getAgenct != null)
                    {
                        var _recover = getAgenct.CancelApply(db, _TREA_APLY_REC.APLY_NO, _TREA_APLY_REC.ACCESS_TYPE, logStr, dt);
                        if (!_recover.Item1) //失敗
                        {
                            return(result);
                        }
                        logStr = _recover.Item2;
                    }
                    else
                    {
                        return(result);
                    }
                    #endregion

                    #region 刪除 申請單歷程檔
                    db.APLY_REC_HIS.RemoveRange(db.APLY_REC_HIS.Where(x => x.APLY_NO == _TREA_APLY_REC.APLY_NO));
                    #endregion

                    #region 刪除 申請單紀錄檔
                    db.TREA_APLY_REC.Remove(_TREA_APLY_REC);
                    #endregion

                    var validateMessage = db.GetValidationErrors().getValidateString();
                    if (validateMessage.Any())
                    {
                        result.DESCRIPTION = validateMessage;
                    }
                    else
                    {
                        try
                        {
                            db.SaveChanges();

                            #region LOG
                            //新增LOG
                            Log log = new Log();
                            log.CFUNCTION = "刪除申請-金庫物品存取申請作業";
                            log.CACTION   = "D";
                            log.CCONTENT  = logStr;
                            LogDao.Insert(log, searchData.vCreateUid);
                            #endregion

                            result.RETURN_FLAG = true;
                            result.DESCRIPTION = $@"單號{data.vAPLY_NO} 已刪除!";
                        }
                        catch (DbUpdateException ex)
                        {
                            result.DESCRIPTION = ex.exceptionMessage();
                        }
                    }
                }
                if (result.RETURN_FLAG)
                {
                    result.Datas = GetSearchDetail(searchData);
                }
            }
            return(result);
        }
Beispiel #5
0
        /// <summary>
        /// 查詢
        /// </summary>
        /// <param name="data">金庫物品存取主畫面查詢ViewModel</param>
        /// <returns></returns>
        public List <TreasuryAccessSearchDetailViewModel> GetSearchDetail(TreasuryAccessSearchViewModel data)
        {
            List <TreasuryAccessSearchDetailViewModel> result = new List <TreasuryAccessSearchDetailViewModel>();

            if (data.vItem == null || data.vAplyUnit == null || !data.vItem.Any() || !data.vAplyUnit.Any()) //無查詢項目 or 申請單位 表示沒有權限查詢
            {
                return(result);
            }
            var depts = GetDepts();
            var emps  = GetEmps();

            using (TreasuryDBEntities db = new TreasuryDBEntities())
            {
                DateTime?_vAPLY_DT_S          = TypeTransfer.stringToDateTimeN(data.vAPLY_DT_S);
                DateTime?_vAPLY_DT_E          = TypeTransfer.stringToDateTimeN(data.vAPLY_DT_E).DateToLatestTime();
                DateTime?_vActualAccessDate_S = TypeTransfer.stringToDateTimeN(data.vActualAccessDate_S);
                DateTime?_vActualAccessDate_E = TypeTransfer.stringToDateTimeN(data.vActualAccessDate_E).DateToLatestTime();
                var      formStatus           = db.SYS_CODE.AsNoTracking().Where(x => x.CODE_TYPE == "FORM_STATUS").ToList();
                var      treaItems            = db.TREA_ITEM.AsNoTracking().Where(x => x.ITEM_OP_TYPE == "3").ToList();

                var _data = db.TREA_APLY_REC.AsNoTracking()
                            .Where(x => data.vItem.Contains(x.ITEM_ID))                                                              //項目
                            .Where(x => data.vAplyUnit.Contains(x.APLY_UNIT), data.vCustodianFlag && data.vAplyUnit.Count == 1)      //保管科還是要單獨查詢申請單位
                            .Where(x => data.vAplyUnit.Contains(x.APLY_UNIT), !data.vCustodianFlag)                                  //非保管科要加入申請單位條件 (20181105調整)
                            .Where(x => x.APLY_DT >= _vAPLY_DT_S, _vAPLY_DT_S != null)                                               //申請日期(起)
                            .Where(x => x.APLY_DT <= _vAPLY_DT_E, _vAPLY_DT_E != null)                                               //申請日期(迄)
                            .Where(x => x.APLY_NO == data.vAPLY_NO, !data.vAPLY_NO.IsNullOrWhiteSpace())                             //申請單號
                            .Where(x => x.TREA_REGISTER_ID == data.vTREA_REGISTER_ID, !data.vTREA_REGISTER_ID.IsNullOrWhiteSpace()); //金庫登記簿單號

                if (_vActualAccessDate_S != null || _vActualAccessDate_E != null)                                                    //實際存取
                {
                    var status = new List <string>()
                    {
                        Ref.AccessProjectFormStatus.D03.ToString(),
                        Ref.AccessProjectFormStatus.E01.ToString()
                    };                                               //狀態須符合這兩個
                    _data = _data.Where(x => status.Contains(x.APLY_STATUS))
                            .Join(db.TREA_OPEN_REC.AsNoTracking()
                                  .Where(x => x.REGI_APPR_DT >= _vActualAccessDate_S, _vActualAccessDate_S != null)
                                  .Where(x => x.REGI_APPR_DT <= _vActualAccessDate_E, _vActualAccessDate_E != null),
                                  x => x.TREA_REGISTER_ID,
                                  y => y.TREA_REGISTER_ID,
                                  (x, y) => x);
                }
                var dataTAR = _data.ToList();
                var TRIDs   = dataTAR.Where(x => x.TREA_REGISTER_ID != null).Select(x => x.TREA_REGISTER_ID).ToList();
                var dataTOR = db.TREA_OPEN_REC.AsNoTracking().Where(x => TRIDs.Contains(x.TREA_REGISTER_ID)).ToList();
                result.AddRange(
                    from TAR in dataTAR
                    join TOR in dataTOR
                    on TAR.TREA_REGISTER_ID equals TOR.TREA_REGISTER_ID into temp
                    from TOR in temp.DefaultIfEmpty()
                    select new TreasuryAccessSearchDetailViewModel
                {
                    vACCESS_REASON = TAR.ACCESS_REASON,
                    vAPLY_DT       = TypeTransfer.dateTimeNToString(TAR.APLY_DT),
                    vREGI_APPR_DT  = TypeTransfer.dateTimeNToString(TOR?.REGI_APPR_DT),
                    vAPLY_NO       = TAR.APLY_NO,
                    vAPLY_STATUS   = TAR.APLY_STATUS,
                    vAPLY_STATUS_D = formStatus.FirstOrDefault(x => x.CODE == TAR.APLY_STATUS)?.CODE_VALUE,
                    vAPLY_UNIT     = depts.FirstOrDefault(y => y.DPT_CD.Trim() == TAR.APLY_UNIT)?.DPT_NAME,
                    vAPLY_UID      = TAR.APLY_UID,
                    vAPLY_UID_NAME = emps.FirstOrDefault(x => x.USR_ID == TAR.APLY_UID)?.EMP_NAME,
                    vCancleFlag    = TAR.APLY_STATUS == Ref.AccessProjectFormStatus.A01.ToString() && TAR.CREATE_UID == data.vCreateUid ? "Y" : "N",
                    vInvalidFlag   = invalidStatus.Contains(TAR.APLY_STATUS) &&
                                     TAR.CREATE_UID == data.vCreateUid ? "Y" : "N",
                    vPrintFlag        = printsStatus.Contains(TAR.APLY_STATUS) ? "Y" : "N",
                    vItem             = TAR.ITEM_ID,
                    vItemDec          = treaItems.FirstOrDefault(x => x.ITEM_ID == TAR.ITEM_ID)?.ITEM_DESC,
                    vDESC             = !TAR.APLY_APPR_DESC.IsNullOrWhiteSpace() ? TAR.APLY_APPR_DESC : TAR.CUSTODY_APPR_DESC,
                    vACCESS_TYPE      = TAR.ACCESS_TYPE,
                    vLast_Update_Time = TAR.LAST_UPDATE_DT
                });
            }
            return(result);
        }