///<summary>
        ///</summary>
        public void GetHourDesType(OutApplicationItem item, int accountid, out decimal putong, out decimal shuangxiu,
                                   out decimal jieri)
        {
            jieri     = 0m;
            putong    = 0m;
            shuangxiu = 0m;
            DateTime from = item.FromDate;
            DateTime to   = item.ToDate;

            _CalculateDays      = new CalculateDays(BllInstance.SpecialDateBllInstance.GetAllSpecialDate(null));
            _PlanDutyDetailList = _PlanDutyDal.GetPlanDutyDetailByAccount(accountid, from, to);

            CalculateOutCityHour calculateOutCityHour = new CalculateOutCityHour(from, to, accountid);

            calculateOutCityHour.Excute();
            foreach (DayAttendance attendance in calculateOutCityHour.DayAttendanceList)
            {
                PlanDutyDetail planDutyDetail =
                    PlanDutyDetail.GetPlanDutyDetailByDate(_PlanDutyDetailList, attendance.Date);
                if (_CalculateDays.IsNationalHoliday(attendance.Date))
                {
                    jieri += attendance.Hours;
                }

                else if (planDutyDetail.PlanDutyClass.IsWeek)
                {
                    shuangxiu += attendance.Hours;
                }
                else
                {
                    putong += attendance.Hours;
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 初始化调休,将出差信息变成一条条调休记录
        /// </summary>
        /// <returns></returns>
        private List <AdjustRest> InitAdjustRestList()
        {
            List <AdjustRest>     adjustRestList      = new List <AdjustRest>();
            DateTime              from                = _OutApplicationItem.FromDate;
            DateTime              to                  = _OutApplicationItem.ToDate;
            CalculateDays         _CalculateDays      = new CalculateDays(BllInstance.SpecialDateBllInstance.GetAllSpecialDate(null));
            List <PlanDutyDetail> _PlanDutyDetailList =
                new PlanDutyDal().GetPlanDutyDetailByAccount(_AccountID, from, to);

            CalculateOutCityHour calculateOutCityHour = new CalculateOutCityHour(from, to, _AccountID);

            calculateOutCityHour.Excute();
            foreach (DayAttendance attendance in calculateOutCityHour.DayAttendanceList)
            {
                PlanDutyDetail planDutyDetail =
                    PlanDutyDetail.GetPlanDutyDetailByDate(_PlanDutyDetailList, attendance.Date);
                AdjustRest ar = new AdjustRest();
                ar.AdjustYear = attendance.Date;
                if (_CalculateDays.IsNationalHoliday(attendance.Date))
                {
                    //节日
                    ar.SurplusHours = attendance.Hours * _AdjustRule.OutCityJieRiRate;
                }

                else if (planDutyDetail.PlanDutyClass.IsWeek)
                {
                    //双休
                    ar.SurplusHours = attendance.Hours * _AdjustRule.OutCityShuangXiuRate;
                }
                else
                {
                    //普通
                    ar.SurplusHours = 0; //attendance.Hours*_AdjustRule.OutCityPuTongRate;
                }
                adjustRestList.Add(ar);
            }
            return(adjustRestList);
        }
Ejemplo n.º 3
0
        private void JudgeOverWorkType()
        {
            if (_PlanDutyDetailList == null)
            {
                HrmisUtility.ThrowException(HrmisUtility._OverWorkType_Not_OneDay);
            }
            else
            {
                PlanDutyDetail planDutyDetail = InitDate();
                if (_CalculateDays.IsNationalHoliday(_From))
                {
                    OverWorkType = OverWorkType.JieRi;
                }

                else if (planDutyDetail.PlanDutyClass.IsWeek)
                {
                    OverWorkType = OverWorkType.ShuangXiu;
                }
                else
                {
                    OverWorkType = OverWorkType.PuTong;
                }
            }
        }
Ejemplo n.º 4
0
        private decimal Calculate(DateTime from, DateTime to)
        {
            // -1 全部;0 新增;1 提交;2 审核不通过;3 审核通过;4 取消请假;5 拒绝取消假期;6 批准取消假期;7 审核中;8 审核取消中
            if (_RequestStatus == RequestStatus.New ||
                _RequestStatus == RequestStatus.Submit ||
                _RequestStatus == RequestStatus.Approving ||
                _RequestStatus == RequestStatus.CancelApproving ||
                _RequestStatus == RequestStatus.Cancelled)
            {
                _LeaveRequestTypeName = _LeaveRequestTypeName + "(" + _RequestStatus.Name + ")";
            }
            decimal costHour = 0m;

            if (from >= to)
            {
                DayAttendance dayAttendance =
                    new DayAttendance(_LeaveRequestTypeID, _LeaveRequestTypeName, 0, 0, from, "", CalendarType.Leave);
                dayAttendance.FromTime = from;
                dayAttendance.ToTime   = to;
                _DayAttendanceList.Add(dayAttendance);
                return(0);
            }
            int      days = (to.Date - from.Date).Days;
            DateTime date = from;

            for (int i = 0; i <= days; i++)
            {
                PlanDutyDetail detail = PlanDutyDetail.GetPlanDutyDetailByDate(_PlanDutyDetailList, date);

                if (detail != null && detail.PlanDutyClass != null)
                {
                    InitDateTime(detail);
                    DateTime fromtemp = _MorningStart;
                    DateTime totemp   = _AfternoonEnd;
                    if (i == 0)
                    {
                        fromtemp = from;
                    }
                    if (i == days)
                    {
                        totemp = to;
                    }
                    decimal hour;
                    //排除双休日,节假日
                    if (_IncludeLegalHoliday && _CalculateDays.IsNationalHoliday(date))
                    {
                        if (detail.PlanDutyClass.IsWeek)
                        {
                            hour      = _OneDayMaxHour;
                            costHour += hour;
                        }
                        else
                        {
                            hour      = CalculateOneDay(fromtemp, totemp);
                            costHour += hour;
                        }
                        DayAttendance dayAttendance =
                            new DayAttendance(_LeaveRequestTypeID, _LeaveRequestTypeName, hour, 0, date, "",
                                              CalendarType.Leave);
                        dayAttendance.FromTime = from;
                        dayAttendance.ToTime   = to;
                        _DayAttendanceList.Add(dayAttendance);
                    }
                    else if (_IncludeRestDay && detail.PlanDutyClass.IsWeek && !_CalculateDays.IsNationalHoliday(date))
                    {
                        hour      = _OneDayMaxHour;
                        costHour += hour;
                        DayAttendance dayAttendance =
                            new DayAttendance(_LeaveRequestTypeID, _LeaveRequestTypeName, hour, 0, date, "",
                                              CalendarType.Leave);
                        dayAttendance.FromTime = from;
                        dayAttendance.ToTime   = to;
                        _DayAttendanceList.Add(dayAttendance);
                    }
                    else if (!detail.PlanDutyClass.IsWeek)
                    {
                        hour      = CalculateOneDay(fromtemp, totemp);
                        costHour += hour;
                        DayAttendance dayAttendance =
                            new DayAttendance(_LeaveRequestTypeID, _LeaveRequestTypeName, hour, 0, date, "",
                                              CalendarType.Leave);
                        dayAttendance.FromTime = from;
                        dayAttendance.ToTime   = to;
                        _DayAttendanceList.Add(dayAttendance);
                    }
                    date = date.AddDays(1);
                }
            }
            return(costHour);
        }
Ejemplo n.º 5
0
        public static List <CalendarADay> Turn(List <LeaveRequest> originalDataList,
                                               List <PlanDutyDetail> planDutyDetailList, List <SpecialDate> specialList, List <CalendarADay> retList)
        {
            CalculateDays _CalculateDays = new CalculateDays(specialList);

            foreach (LeaveRequest originalData in originalDataList)
            {
                foreach (LeaveRequestItem originalDataItem in originalData.LeaveRequestItems)
                {
                    DateTime from     = originalDataItem.FromDate;
                    DateTime to       = originalDataItem.ToDate;
                    decimal  costHour = 0m;
                    if (from >= to)
                    {
                        CreateLeaveRequestInfoInADay(retList, from, 0, originalData, originalDataItem, from, to);
                    }
                    int      days = (to.Date - from.Date).Days;
                    DateTime date = from;
                    for (int i = 0; i <= days; i++)
                    {
                        PlanDutyDetail detail = PlanDutyDetail.GetPlanDutyDetailByDate(planDutyDetailList, date);
                        if (detail != null && detail.PlanDutyClass != null)
                        {
                            DateTime dtMorningStart, dtAfternoonEnd;
                            InitDateTime(from, to, detail, out dtMorningStart, out dtAfternoonEnd);
                            DateTime fromtemp =
                                new DateTime(date.Year, date.Month, date.Day, dtMorningStart.Hour,
                                             dtMorningStart.Minute, dtMorningStart.Second);
                            DateTime totemp =
                                new DateTime(date.Year, date.Month, date.Day, dtAfternoonEnd.Hour,
                                             dtAfternoonEnd.Minute, dtAfternoonEnd.Second);
                            if (i == 0)
                            {
                                fromtemp = from;
                            }
                            if (i == days)
                            {
                                totemp = to;
                            }
                            decimal hour;
                            //排除双休日,节假日
                            if (originalData.LeaveRequestType.IncludeLegalHoliday == LegalHoliday.Include &&
                                _CalculateDays.IsNationalHoliday(date))
                            {
                                if (detail.PlanDutyClass.IsWeek)
                                {
                                    hour      = Utility._OneDayMaxHour;
                                    costHour += hour;
                                }
                                else
                                {
                                    hour      = Utility.CalculateOneDay(fromtemp, totemp, originalData.LeaveRequestType.LeastHour, detail);
                                    costHour += hour;
                                }
                                CreateLeaveRequestInfoInADay(retList, date, hour, originalData, originalDataItem, fromtemp,
                                                             totemp);
                            }
                            else if (originalData.LeaveRequestType.IncludeLegalHoliday == LegalHoliday.Include &&
                                     detail.PlanDutyClass.IsWeek && !_CalculateDays.IsNationalHoliday(date))
                            {
                                hour      = Utility._OneDayMaxHour;
                                costHour += hour;
                                CreateLeaveRequestInfoInADay(retList, date, hour, originalData, originalDataItem, fromtemp,
                                                             totemp);
                            }

                            else if (!detail.PlanDutyClass.IsWeek)
                            {
                                hour      = Utility.CalculateOneDay(fromtemp, totemp, originalData.LeaveRequestType.LeastHour, detail);
                                costHour += hour;
                                CreateLeaveRequestInfoInADay(retList, date, hour, originalData, originalDataItem, fromtemp,
                                                             totemp);
                            }
                        }
                        date = date.AddDays(1);
                    }
                }
            }

            return(retList);
        }