浏览代码

计算工资
处理年假 同一天 请多次 餐补扣款的问题

leiy 1 年之前
父节点
当前提交
bd85be7c81
共有 1 个文件被更改,包括 75 次插入5 次删除
  1. 75 5
      OASystem/OASystem.Api/OAMethodLib/PayrollComputation.cs

+ 75 - 5
OASystem/OASystem.Api/OAMethodLib/PayrollComputation.cs

@@ -892,13 +892,34 @@ namespace OASystem.API.OAMethodLib
                                         //出差扣款
                                         decimal cckk = 0.00M;
 
-                                        int days = (int)(date_Range.new_end_dt - date_Range.new_begin_dt).TotalDays;
+                                        int days = (int)(Convert.ToDateTime( date_Range.new_end_dt.ToString("yyyy-MM-dd")) -
+                                                         Convert.ToDateTime(date_Range.new_begin_dt.ToString("yyyy-MM-dd"))).TotalDays;
+
+                                        
+
                                         for (int i = 0; i <= days; i++)
                                         {
                                             DateTime thisDt = date_Range.new_begin_dt.AddDays(i);
-                                            if (thisDt > date_Range.new_end_dt)
+                                            
+                                            //处理开始时间 是否在当天工作时间内
+                                            if (i == 0) //开始时间
                                             {
-                                                continue;
+                                                string ccStartTime = thisDt.ToString("HH:mm:ss");
+                                                if (!IsWorkTime(ccStartTime))
+                                                {
+                                                    continue;
+                                                } 
+                                            }
+
+                                            //处理结束时间 是否在当天工作时间内
+
+                                            if (i == days - 1)
+                                            {
+                                                string ccStartTime = date_Range.new_end_dt.ToString("HH:mm:ss");
+                                                if (!IsWorkTime(ccStartTime))
+                                                {
+                                                    continue;
+                                                }
                                             }
 
                                             Sys_Calendar sys_Calendar = new Sys_Calendar();
@@ -911,7 +932,7 @@ namespace OASystem.API.OAMethodLib
                                             }
                                         }
 
-
+ 
                                         meal_deduction += cckk;
 
 
@@ -1040,6 +1061,28 @@ namespace OASystem.API.OAMethodLib
             return _result;
         }
 
+        /// <summary>
+        /// 是否在工作时间内
+        /// </summary>
+        /// <param name="timeStr"></param>
+        /// <returns></returns>
+        public static bool IsWorkTime(string timeStr) 
+        {
+            string thisDayWorkStartTime = "09:00:00";
+            string thisDayWorkEndTime = "18:00:00";
+
+            TimeSpan dspWorkingDayAM = DateTime.Parse(thisDayWorkStartTime).TimeOfDay;
+            TimeSpan dspWorkingDayPM = DateTime.Parse(thisDayWorkEndTime).TimeOfDay;
+
+            DateTime dt = Convert.ToDateTime(timeStr);
+            TimeSpan dspNow = dt.TimeOfDay;
+            if (dspNow >= dspWorkingDayAM && dspNow <= dspWorkingDayPM)
+            {
+                return true;
+            }
+            return false;
+        }
+
         /// <summary>
         /// decimal 保留两位小数 不四舍五入
         /// </summary>
@@ -1120,7 +1163,34 @@ namespace OASystem.API.OAMethodLib
             switch (leaveType)
             {
                 case 1: //年假
-                    CalculateTypeFeeSub(leaveDetails, date_Range_type, startTime, endTime, duration, out mealDeduction);
+
+                    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 // 多天
+                        {
+                            mealDeduction = 10 * duration;
+                        }
+
+                        
+
+                    }
+
                     break;
                 case 2: //2事假
                     // 事假日薪 *计算方式:日平均工资 = 当月应发工资 /当月应出勤天数。