|  | @@ -736,7 +736,7 @@ namespace OASystem.API.OAMethodLib
 | 
	
		
			
				|  |  |                                      int leaveType = leave_item.TypeId;
 | 
	
		
			
				|  |  |                                      decimal new_duration = leave_item.New_Duration;
 | 
	
		
			
				|  |  |                                      //计算餐补 假勤类型扣款
 | 
	
		
			
				|  |  | -                                    CalculateTypeFee(leaveDetails,leaveType, leave_item.DtType, leave_item.StartDt, leave_item.EndDt, amountPayable, work_days,
 | 
	
		
			
				|  |  | +                                    CalculateTypeFee1(leaveDetails,leaveType, leave_item.DtType, leave_item.StartDt, leave_item.EndDt, amountPayable, work_days,
 | 
	
		
			
				|  |  |                                          new_duration,out leave_meals, out thisTypeDeduction);
 | 
	
		
			
				|  |  |                                      if (leave_meals != 0)
 | 
	
		
			
				|  |  |                                      {
 | 
	
	
		
			
				|  | @@ -1276,6 +1276,7 @@ namespace OASystem.API.OAMethodLib
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          /// <summary>
 | 
	
		
			
				|  |  |          /// 计算类型费用
 | 
	
		
			
				|  |  | +        /// 病假 事假 计算 按天计算
 | 
	
		
			
				|  |  |          /// </summary>
 | 
	
		
			
				|  |  |          /// <param name="leaveType">
 | 
	
		
			
				|  |  |          /// 1年假;2事假;3病假;4调休假;5婚假;6产假;7陪产假;8其他;9丧假
 | 
	
	
		
			
				|  | @@ -1289,7 +1290,261 @@ namespace OASystem.API.OAMethodLib
 | 
	
		
			
				|  |  |          /// <param name="duration"></param>
 | 
	
		
			
				|  |  |          /// <param name="mealDeduction"></param>
 | 
	
		
			
				|  |  |          /// <param name="typeDeduction"></param>
 | 
	
		
			
				|  |  | -        public static void CalculateTypeFee(List<LeaveDetails> leaveDetails,int leaveType, string date_Range_type, DateTime startTime, DateTime endTime,
 | 
	
		
			
				|  |  | +        public static void CalculateTypeFee1(List<LeaveDetails> leaveDetails, int leaveType, string date_Range_type, DateTime startTime, DateTime endTime,
 | 
	
		
			
				|  |  | +            decimal amountPayable, int work_days, decimal duration, out decimal mealDeduction, out decimal typeDeduction)
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            typeDeduction = 0;
 | 
	
		
			
				|  |  | +            mealDeduction = 0;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            string am_starttime = "08:59";
 | 
	
		
			
				|  |  | +            string am_endtime = "13:01";
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            decimal personalkLeave_dailywage_day = amountPayable / work_days; //日薪 = 事假日薪 *计算方式:日平均工资 = 当月应发工资 /当月应出勤天数。
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            //半小时单位
 | 
	
		
			
				|  |  | +            decimal halfHour = 7.50M / 0.50M;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            switch (leaveType)
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +                case 1: //年假
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    if (date_Range_type == "halfday")
 | 
	
		
			
				|  |  | +                    {
 | 
	
		
			
				|  |  | +                        if (duration >= 0.5M && duration <= 1M) //一天
 | 
	
		
			
				|  |  | +                        {
 | 
	
		
			
				|  |  | +                            var njItem = leaveDetails.Where(it => it.StartDt.ToString("yyyy-MM-dd") == startTime.ToString("yyyy-MM-dd") &&
 | 
	
		
			
				|  |  | +                                                      it.EndDt.ToString("yyyy-MM-dd") == endTime.ToString("yyyy-MM-dd")).ToList();
 | 
	
		
			
				|  |  | +                            if (njItem.Count > 1)
 | 
	
		
			
				|  |  | +                            {
 | 
	
		
			
				|  |  | +                                if (njItem[0].StartDt == startTime)
 | 
	
		
			
				|  |  | +                                {
 | 
	
		
			
				|  |  | +                                    mealDeduction = 10; //餐补扣款
 | 
	
		
			
				|  |  | +                                }
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +                            else
 | 
	
		
			
				|  |  | +                            {
 | 
	
		
			
				|  |  | +                                mealDeduction = 10; //餐补扣款 
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                        else // 多天
 | 
	
		
			
				|  |  | +                        {
 | 
	
		
			
				|  |  | +                            var njManyDaysItem = leaveDetails.Where(it => it.StartDt.ToString("yyyy-MM-dd") == startTime.ToString("yyyy-MM-dd")).ToList();
 | 
	
		
			
				|  |  | +                            if (njManyDaysItem.Count > 1)
 | 
	
		
			
				|  |  | +                            {
 | 
	
		
			
				|  |  | +                                var njManyDaysItem1 = njManyDaysItem.Where(it => it.StartDt != startTime).ToList();
 | 
	
		
			
				|  |  | +                                if (njManyDaysItem1.Count > 0)
 | 
	
		
			
				|  |  | +                                {
 | 
	
		
			
				|  |  | +                                    if (njManyDaysItem1[0].Unit.Equals("天"))
 | 
	
		
			
				|  |  | +                                    {
 | 
	
		
			
				|  |  | +                                        mealDeduction = 10 * Math.Floor(duration);
 | 
	
		
			
				|  |  | +                                    }
 | 
	
		
			
				|  |  | +                                    else if (njManyDaysItem1[0].Unit.Equals("小时") && njManyDaysItem1[0].New_Duration >= 3)
 | 
	
		
			
				|  |  | +                                    {
 | 
	
		
			
				|  |  | +                                        mealDeduction = 10 * Math.Floor(duration);
 | 
	
		
			
				|  |  | +                                    }
 | 
	
		
			
				|  |  | +                                    else
 | 
	
		
			
				|  |  | +                                    {
 | 
	
		
			
				|  |  | +                                        mealDeduction = 10 * Math.Ceiling(duration);
 | 
	
		
			
				|  |  | +                                    }
 | 
	
		
			
				|  |  | +                                }
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +                            else
 | 
	
		
			
				|  |  | +                            {
 | 
	
		
			
				|  |  | +                                mealDeduction = 10 * Math.Ceiling(duration);
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    break;
 | 
	
		
			
				|  |  | +                case 2: //2事假
 | 
	
		
			
				|  |  | +                    // 事假日薪 *计算方式:日平均工资 = 当月应发工资 /当月应出勤天数。 
 | 
	
		
			
				|  |  | +                    decimal personalkLeave_dailywage_halfhour = personalkLeave_dailywage_day / 7.50M; //事假单位 0.5小时
 | 
	
		
			
				|  |  | +                   
 | 
	
		
			
				|  |  | +                    if (date_Range_type == "halfday")
 | 
	
		
			
				|  |  | +                    {
 | 
	
		
			
				|  |  | +                        mealDeduction = 10.00M * Math.Floor(duration); //餐补扣款 
 | 
	
		
			
				|  |  | +                        if (duration % 1 == 0) //整天
 | 
	
		
			
				|  |  | +                        {
 | 
	
		
			
				|  |  | +                            typeDeduction = ConvertToDecimal(personalkLeave_dailywage_day * duration);
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                        else //多含 半天 另外处理
 | 
	
		
			
				|  |  | +                        {
 | 
	
		
			
				|  |  | +                            decimal sj_wholeDay = Math.Floor(duration); //整天
 | 
	
		
			
				|  |  | +                            decimal sj_halfDay = duration % 1; //半天
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                            if (sj_halfDay > 0)
 | 
	
		
			
				|  |  | +                            {
 | 
	
		
			
				|  |  | +                                typeDeduction = (personalkLeave_dailywage_day / 0.50M) * duration;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                                LeaveDetails sjDetailsMeal = leaveDetails.Where(it => it.EndDt == startTime).FirstOrDefault();
 | 
	
		
			
				|  |  | +                                if (sjDetailsMeal == null)
 | 
	
		
			
				|  |  | +                                {
 | 
	
		
			
				|  |  | +                                    mealDeduction += 10.00M;
 | 
	
		
			
				|  |  | +                                }
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +                            else
 | 
	
		
			
				|  |  | +                            {
 | 
	
		
			
				|  |  | +                                typeDeduction = personalkLeave_dailywage_day * sj_wholeDay;
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +                            typeDeduction = ConvertToDecimal(typeDeduction);
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    else if (date_Range_type == "hour")
 | 
	
		
			
				|  |  | +                    {
 | 
	
		
			
				|  |  | +                        decimal leave_halfHour = Convert.ToDecimal(duration) / Convert.ToDecimal(0.5);
 | 
	
		
			
				|  |  | +                        typeDeduction = ConvertToDecimal(personalkLeave_dailywage_halfhour * leave_halfHour);
 | 
	
		
			
				|  |  | +                        //duration = 11M;
 | 
	
		
			
				|  |  | +                        if (duration >= 3 && duration < 7.5M) //单天请假三小时
 | 
	
		
			
				|  |  | +                        {
 | 
	
		
			
				|  |  | +                            mealDeduction = 10; //餐补扣款
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                        else if (duration >= 7.5M) //多天计算
 | 
	
		
			
				|  |  | +                        {
 | 
	
		
			
				|  |  | +                            decimal leave_halfHour1 = Convert.ToDecimal(duration) / Convert.ToDecimal(0.5);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                            decimal leaveDays = duration / 7.5M;
 | 
	
		
			
				|  |  | +                            if (leaveDays % 1 == 0)
 | 
	
		
			
				|  |  | +                            {
 | 
	
		
			
				|  |  | +                                typeDeduction = ConvertToDecimal(personalkLeave_dailywage_day * leaveDays);
 | 
	
		
			
				|  |  | +                                mealDeduction = 10 * leaveDays; //餐补扣款
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +                            else
 | 
	
		
			
				|  |  | +                            {
 | 
	
		
			
				|  |  | +                                typeDeduction = personalkLeave_dailywage_day * Convert.ToInt32(leaveDays);
 | 
	
		
			
				|  |  | +                                decimal sy_shijiaunit = leave_halfHour1 - Convert.ToDecimal(15.00M * Convert.ToInt32(leaveDays));
 | 
	
		
			
				|  |  | +                                if (sy_shijiaunit > 0)
 | 
	
		
			
				|  |  | +                                {
 | 
	
		
			
				|  |  | +                                    typeDeduction += ConvertToDecimal(personalkLeave_dailywage_halfhour * sy_shijiaunit);
 | 
	
		
			
				|  |  | +                                }
 | 
	
		
			
				|  |  | +                                mealDeduction = 10 * Convert.ToInt32(leaveDays);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                                //得到最后一天的请假时间 是否有餐补
 | 
	
		
			
				|  |  | +                                int lastHours = (Convert.ToDateTime(endTime) - Convert.ToDateTime("09:00")).Hours;
 | 
	
		
			
				|  |  | +                                if (lastHours >= 3)
 | 
	
		
			
				|  |  | +                                {
 | 
	
		
			
				|  |  | +                                    mealDeduction += 10; //餐补扣款
 | 
	
		
			
				|  |  | +                                }
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    break;
 | 
	
		
			
				|  |  | +                case 3: //3病假
 | 
	
		
			
				|  |  | +                        // 病假日薪 *计算方式:日平均工资 = 成都市最低工资标准的80% /当月应出勤天数。 短期病假=当月15天内 
 | 
	
		
			
				|  |  | +                    decimal chengDuMinimumWage_Day = _chengDuMinimumWage / work_days;
 | 
	
		
			
				|  |  | +                    decimal chengDuMinimumWage_halrHour = chengDuMinimumWage_Day / 7.50M;
 | 
	
		
			
				|  |  | +                    decimal sickLeave_dailywage_halfhour_deduction1 = (personalkLeave_dailywage_day / 7.50M) - chengDuMinimumWage_halrHour; //病假单位 0.5小时 扣款金额
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    if (date_Range_type == "halfday")
 | 
	
		
			
				|  |  | +                    {
 | 
	
		
			
				|  |  | +                        mealDeduction = 10.00M * Math.Ceiling(duration); //餐补扣款 
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        decimal pl_dailywage_day = personalkLeave_dailywage_day - chengDuMinimumWage_Day;
 | 
	
		
			
				|  |  | +                        if (duration % 1 == 0) //整天
 | 
	
		
			
				|  |  | +                        {
 | 
	
		
			
				|  |  | +                            typeDeduction = ConvertToDecimal(pl_dailywage_day * duration);
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                        else //多含 半天 另外处理
 | 
	
		
			
				|  |  | +                        {
 | 
	
		
			
				|  |  | +                            if (duration % 1 > 0)
 | 
	
		
			
				|  |  | +                            {
 | 
	
		
			
				|  |  | +                                typeDeduction = (pl_dailywage_day / 0.50M) * duration;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                                LeaveDetails bjDetailsMeal = leaveDetails.Where(it => it.EndDt == startTime).FirstOrDefault();
 | 
	
		
			
				|  |  | +                                if (bjDetailsMeal == null)
 | 
	
		
			
				|  |  | +                                {
 | 
	
		
			
				|  |  | +                                    mealDeduction += 10.00M;
 | 
	
		
			
				|  |  | +                                }
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                            typeDeduction = ConvertToDecimal(typeDeduction);
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    else if (date_Range_type == "hour")
 | 
	
		
			
				|  |  | +                    {
 | 
	
		
			
				|  |  | +                        decimal sickLeave_halfHour = duration / 0.5M;
 | 
	
		
			
				|  |  | +                        typeDeduction = ConvertToDecimal(sickLeave_dailywage_halfhour_deduction1 * sickLeave_halfHour);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                        if (duration >= 3 && duration < 7.5M) //单天请假三小时 && 请假时间在上午 则没有餐补
 | 
	
		
			
				|  |  | +                        {
 | 
	
		
			
				|  |  | +                            mealDeduction = 10; //餐补扣款
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                        else if (duration >= 7.5M) //多天计算
 | 
	
		
			
				|  |  | +                        {
 | 
	
		
			
				|  |  | +                            decimal sickLeave_halfHour1 = duration / 0.5M;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                            decimal leaveDays = Convert.ToDecimal(duration / 7.5M);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                            typeDeduction = ConvertToDecimal(sickLeave_dailywage_halfhour_deduction1 * sickLeave_halfHour1);
 | 
	
		
			
				|  |  | +                            if (leaveDays % 1 == 0)
 | 
	
		
			
				|  |  | +                            {
 | 
	
		
			
				|  |  | +                                mealDeduction = 10 * leaveDays; //餐补扣款
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +                            else
 | 
	
		
			
				|  |  | +                            {
 | 
	
		
			
				|  |  | +                                mealDeduction = 10 * Convert.ToInt32(leaveDays);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                                typeDeduction = ConvertToDecimal(sickLeave_dailywage_halfhour_deduction1 * Convert.ToInt32(leaveDays));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                                decimal sy_bingjiaunit = sickLeave_halfHour1 - Convert.ToDecimal(15.00M * Convert.ToInt32(leaveDays));
 | 
	
		
			
				|  |  | +                                if (sy_bingjiaunit > 0)
 | 
	
		
			
				|  |  | +                                {
 | 
	
		
			
				|  |  | +                                    typeDeduction += ConvertToDecimal(sickLeave_dailywage_halfhour_deduction1 * sy_bingjiaunit);
 | 
	
		
			
				|  |  | +                                }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                                //得到最后一天的请假时间 是否有餐补
 | 
	
		
			
				|  |  | +                                int lastHours = (Convert.ToDateTime(endTime) - Convert.ToDateTime("09:00")).Hours;
 | 
	
		
			
				|  |  | +                                if (lastHours >= 3)
 | 
	
		
			
				|  |  | +                                {
 | 
	
		
			
				|  |  | +                                    mealDeduction += 10; //餐补扣款
 | 
	
		
			
				|  |  | +                                }
 | 
	
		
			
				|  |  | +                            }
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    break;
 | 
	
		
			
				|  |  | +                case 4: //4调休假
 | 
	
		
			
				|  |  | +                    CalculateTypeFeeSub(leaveDetails, date_Range_type, startTime, endTime, duration, out mealDeduction);
 | 
	
		
			
				|  |  | +                    break;
 | 
	
		
			
				|  |  | +                case 5: //5婚假
 | 
	
		
			
				|  |  | +                    CalculateTypeFeeSub(leaveDetails, date_Range_type, startTime, endTime, duration, out mealDeduction);
 | 
	
		
			
				|  |  | +                    break;
 | 
	
		
			
				|  |  | +                case 6: //6产假
 | 
	
		
			
				|  |  | +                    CalculateTypeFeeSub(leaveDetails, date_Range_type, startTime, endTime, duration, out mealDeduction);
 | 
	
		
			
				|  |  | +                    break;
 | 
	
		
			
				|  |  | +                case 7: //7陪产假
 | 
	
		
			
				|  |  | +                    CalculateTypeFeeSub(leaveDetails, date_Range_type, startTime, endTime, duration, out mealDeduction);
 | 
	
		
			
				|  |  | +                    break;
 | 
	
		
			
				|  |  | +                case 8: //8其他
 | 
	
		
			
				|  |  | +                    CalculateTypeFeeSub(leaveDetails, date_Range_type, startTime, endTime, duration, out mealDeduction);
 | 
	
		
			
				|  |  | +                    break;
 | 
	
		
			
				|  |  | +                case 9: //9丧假
 | 
	
		
			
				|  |  | +                    CalculateTypeFeeSub(leaveDetails, date_Range_type, startTime, endTime, duration, out mealDeduction);
 | 
	
		
			
				|  |  | +                    break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        /// <summary>
 | 
	
		
			
				|  |  | +        /// 计算类型费用
 | 
	
		
			
				|  |  | +        /// 病假 事假 计算 按小时计算
 | 
	
		
			
				|  |  | +        /// </summary>
 | 
	
		
			
				|  |  | +        /// <param name="leaveType">
 | 
	
		
			
				|  |  | +        /// 1年假;2事假;3病假;4调休假;5婚假;6产假;7陪产假;8其他;9丧假
 | 
	
		
			
				|  |  | +        /// </param>
 | 
	
		
			
				|  |  | +        /// <param name="date_Range_type">
 | 
	
		
			
				|  |  | +        /// halfday 全天
 | 
	
		
			
				|  |  | +        /// hour  小时
 | 
	
		
			
				|  |  | +        /// </param>
 | 
	
		
			
				|  |  | +        /// <param name="startTime"></param>
 | 
	
		
			
				|  |  | +        /// <param name="endTime"></param>
 | 
	
		
			
				|  |  | +        /// <param name="duration"></param>
 | 
	
		
			
				|  |  | +        /// <param name="mealDeduction"></param>
 | 
	
		
			
				|  |  | +        /// <param name="typeDeduction"></param>
 | 
	
		
			
				|  |  | +        public static void CalculateTypeFee2(List<LeaveDetails> leaveDetails,int leaveType, string date_Range_type, DateTime startTime, DateTime endTime,
 | 
	
		
			
				|  |  |              decimal amountPayable,int work_days, decimal duration, out decimal mealDeduction, out decimal typeDeduction)
 | 
	
		
			
				|  |  |          {
 | 
	
		
			
				|  |  |              typeDeduction = 0;
 |