Exemple #1
0
        protected void checkBeforeAction(tatroshi obj)
        {
            atroshisBll bll = new atroshisBll();

            if (!bll.CheckRosterHistory(obj))
            {
                throw new UtilException("Check fail: Date range cross.", null);
            }
        }
Exemple #2
0
        public bool CheckRosterHistory(tatroshi obj)
        {
            bool r = false;
            var  q = from p in gDB.tatroshis
                     where p.emno == obj.emno &&
                     ((p.exdt.HasValue == false) || (p.exdt >= obj.efdt)) &&
                     ((obj.exdt.HasValue == false) || (p.exdt > obj.efdt)) &&
                     (p.efdt != obj.efdt)
                     select p;

            if (q.ToList().Count > 0)
            {
                r = false;
            }
            else
            {
                r = true;
            }

            return(r);
        }
Exemple #3
0
        private tatrosdtl getCurrentRoster(tatroshi curRosterHistory, List <tatrosdtl> curRosterDtl, DateTime startDate)
        {
            #region 判断实效、失效日期
            if (curRosterHistory.efdt.Value > startDate)
            {
                //如果轮班历史的有效日期大于当前计算日期,则从轮班历史生效日期开始计算
                //startDateByPerson = _rosterHis.efdt.Value;
                return(null);
            }

            if (curRosterHistory.tatroster.efdt.Value > startDate)
            {
                //如果轮班的有效日期大于当前计算日期,则从轮班生效日期开始计算
                //startDateByPerson = _rosterHis.tatroster.efdt.Value;
                return(null);
            }
            #endregion

            //判断需要从哪个班次开始计算
            int shiftIndex = (int)((TimeSpan)(startDate - curRosterHistory.tatroster.efdt)).TotalDays % curRosterDtl.Count;

            return(curRosterDtl[shiftIndex]);
        }
Exemple #4
0
        public void getEdit()
        {
            string message = "{}";

            try
            {
                string    record = this.Request["record"];
                Hashtable ht     = JavaScriptConvert.DeserializeObject <Hashtable>(record);

                List <ColumnInfo> parameters = JavaScriptConvert.DeserializeObject <List <ColumnInfo> >(ht["keycolumns"].ToString());
                tatroshi          obj        = JavaScriptConvert.DeserializeObject <tatroshi>(ht["params"].ToString());

                checkBeforeAction(obj);

                new BaseBll().DoUpdate <tatroshi>(obj, parameters);
                message = "{status:'success',msg:'" + HRMSRes.Public_Message_EditWell + "'}";
            }
            catch (Exception ex)
            {
                message = "{status:'failure',msg:'" + ExceptionPaser.Parse(HRMSRes.Public_Message_EditBad, ex, true) + "'}";
            }
            Response.Write(message);
        }
Exemple #5
0
        public void DoAnalyze(tlvleaapp _leaveApp, bool _isSaveDetail)
        {
            for (int i = 0; i < lstStaff.Count; i++)
            {
                TotalLvHours = 0;
                TotalLvDays  = 0;

                try
                {
                    DateTime calcStart = AnalStartDate;
                    DateTime calcEnd   = AnalEndDate;
                    DateTime tmpStart  = calcStart;
                    DateTime tmpEnd;

                    //如果请假跨天,需要拆分成多条数据
                    for (float k = 0; k < (calcEnd - calcStart).TotalDays; k++)
                    {
                        if ((calcEnd - tmpStart).TotalDays > 1)
                        {
                            tmpEnd = Convert.ToDateTime(UtilDatetime.FormatDate1(tmpStart.AddDays(1)) + " 00:00:00");
                        }
                        else
                        {
                            tmpEnd = calcEnd;
                        }

                        //取轮班历史
                        List <tatroshi> lstEmpRosterHistory = lstRosterHistory.Where(p => p.emno == lstStaff[i].emno &&
                                                                                     ((p.exdt.HasValue == false) ||
                                                                                      (p.exdt.Value > tmpEnd)) &&
                                                                                     (p.efdt <= tmpStart)
                                                                                     ).ToList();
                        //确定轮班和班次
                        if (lstEmpRosterHistory.Count > 0)
                        {
                            //如果发现多条,则只取第一条
                            tatroshi curRosterHistory = lstEmpRosterHistory[0];

                            List <tatrosdtl> lstEmpRosterDtl = lstRosterDetails.Where(p => p.rscd == curRosterHistory.rscd).ToList();

                            //确定轮班明细和班次
                            tatrosdtl curRosterDtl = getCurrentRoster(curRosterHistory, lstEmpRosterDtl, tmpStart);

                            tatshift curShift = curRosterDtl.tatshift;

                            //分析此天的休假
                            AnalyzeOneDay(lstStaff[i], curRosterDtl, curShift, curRosterHistory, tmpStart, tmpEnd, _leaveApp, _isSaveDetail);

                            tmpStart = tmpEnd;
                        }
                        else
                        {
                            //如果没有定义轮班该如何计算????
                        }
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }
Exemple #6
0
        private void AnalyzeOneDay(vw_employment _emp, tatrosdtl curRosterDtl, tatshift curShift, tatroshi curRosterHistory, DateTime _calcStart, DateTime _calcEnd, tlvleaapp _leaveApp, bool _isSaveDetail)
        {
            store         = new AtCalculationInfo();
            store.EmpInfo = _emp;
            store.CurDay  = _calcStart;

            //curDayR = store.CurDay;

            //取得标准班次设定时间
            analatBll.GetStandardValue(curRosterDtl, curShift, ref store);

            //判断是否是休息日
            analatBll.CheckIsRestDay(curRosterDtl, curShift, curRosterHistory, lstPriCalendar, ref store);

            if (store.IsRestDay == false)
            {
                #region 非休息日
                if ((_calcStart <= store.StdTimeIn) && (_calcEnd >= store.StdTimeOut))
                {
                    //抓班次设定的工作小时数和天数
                    store.LvStart = store.StdTimeIn;
                    store.LvEnd   = store.StdTimeOut;

                    store.LvHours = Convert.ToDouble(curShift.wkhr);
                    store.LvDays  = Convert.ToDouble(curShift.wkda);
                }
                else
                {
                    if (_calcStart <= store.StdTimeIn)
                    {
                        store.LvStart = store.StdTimeIn;
                    }
                    else
                    {
                        store.LvStart = _calcStart;
                    }

                    if (_calcEnd >= store.StdTimeOut)
                    {
                        store.LvEnd = store.StdTimeOut;
                    }
                    else
                    {
                        store.LvEnd = _calcEnd;
                    }

                    store.LvHours = CountLeaveTime(store.LvStart, store.LvEnd, curShift, store);
                    store.LvHours = Math.Round(store.LvHours, 2);
                    //计算天数
                    store.LvDays = Math.Round((store.LvHours / Convert.ToDouble(curShift.wkhr)) * Convert.ToDouble(curShift.wkda), 2);
                }
                #endregion
            }
            else
            {
                #region 休息日
                store.LvHours = 0;
                store.LvDays  = 0;
                #endregion
            }

            TotalLvHours += store.LvHours;
            TotalLvDays  += store.LvDays;

            if ((_isSaveDetail) && (_leaveApp != null) && (store.LvHours > 0))
            {
                //如果需要保存则保存每一条明细到DTL表
                tlvleaapd newdtl = new tlvleaapd();

                newdtl.emno = _emp.emno;
                newdtl.days = store.LvDays;
                newdtl.hurs = store.LvHours;
                newdtl.ltcd = _leaveApp.ltcd;
                newdtl.apno = _leaveApp.apno;
                newdtl.totm = store.LvEnd.Value;
                newdtl.frtm = store.LvStart.Value;

                DoInsert <tlvleaapd>(newdtl);
            }
        }
Exemple #7
0
        private void AnalyzeOneDay(vw_employment _emp, tatrosdtl curRosterDtl, tatshift curShift, tatroshi curRosterHistory, DateTime _calcStart, DateTime _calcEnd, totaplctn _otApp, bool _isSaveDetail)
        {
            store         = new AtCalculationInfo();
            store.EmpInfo = _emp;
            store.CurDay  = _calcStart;

            //curDayR = store.CurDay;

            //取得标准班次设定时间
            analatBll.GetStandardValue(curRosterDtl, curShift, ref store);

            //判断是否是休息日
            analatBll.CheckIsRestDay(curRosterDtl, curShift, curRosterHistory, lstPriCalendar, ref store);

            AnalyzeOT(ref store, curShift, lstOriAtData, _isSaveDetail);

            TotalOTHours += store.OTHours;
        }
Exemple #8
0
        public void ApplyTo(List <vw_employment> _emps, object _obj)
        {
            try
            {
                tatroshi obj = _obj as tatroshi;

                for (int i = 0; i < _emps.Count; i++)
                {
                    if (_emps[i].emno != obj.emno)
                    {
                        List <ColumnInfo> parameters = new List <ColumnInfo>()
                        {
                            new ColumnInfo()
                            {
                                ColumnName = "emno", ColumnValue = _emps[i].emno
                            },
                            new ColumnInfo()
                            {
                                ColumnName = "efdt", ColumnValue = UtilDatetime.FormatDate1(obj.efdt.Value), ColumnType = "datetime"
                            }
                        };

                        tatroshi oldobj = dal.GetSelectedObject(parameters);

                        if (oldobj == null)
                        {
                            //新增
                            tatroshi newobj = new tatroshi();
                            newobj.emno = _emps[i].emno;
                            newobj.efdt = obj.efdt;
                            newobj.exdt = obj.exdt;
                            newobj.iaod = obj.iaod;
                            newobj.rscd = obj.rscd;
                            newobj.sqno = GetMaxsqno("tatroshis", _emps[i].emno).Value + 1;
                            newobj.lmtm = obj.lmtm;
                            newobj.lmur = obj.lmur;

                            if (CheckRosterHistory(newobj))
                            {
                                DoInsert <tatroshi>(newobj);
                            }
                        }
                        else
                        {
                            //更新
                            oldobj.exdt = obj.exdt;
                            oldobj.iaod = obj.iaod;
                            oldobj.rscd = obj.rscd;
                            oldobj.lmtm = obj.lmtm;
                            oldobj.lmur = obj.lmur;

                            if (CheckRosterHistory(oldobj))
                            {
                                DoUpdate <tatroshi>(oldobj);
                            }
                        }
                    }
                }
            }
            catch (UtilException ex)
            {
                throw ex;
            }
            catch (Exception ex)
            {
                throw new UtilException(ex.Message, ex);
            }
        }
Exemple #9
0
 public bool CheckRosterHistory(tatroshi obj)
 {
     return(dal.CheckRosterHistory(obj));
 }