Exemple #1
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 #2
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 #3
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);
            }
        }