Browse Source

工资计算
相关接口调整

leiy 1 year ago
parent
commit
f94e016b4e
1 changed files with 47 additions and 15 deletions
  1. 47 15
      OASystem/OASystem.Api/OAMethodLib/PayrollComputation.cs

+ 47 - 15
OASystem/OASystem.Api/OAMethodLib/PayrollComputation.cs

@@ -759,7 +759,9 @@ namespace OASystem.API.OAMethodLib
                                         //    continue;
                                         //}
 
-                                        if (Convert.ToDateTime(date_Range.new_begin_dt) < startDt || Convert.ToDateTime(date_Range.new_begin_dt) > endDt)
+                                        //假期只要开始时间,结束时间在计算时间范围 即纳入计算 
+                                        if ((Convert.ToDateTime(date_Range.new_begin_dt) < startDt || Convert.ToDateTime(date_Range.new_begin_dt) > endDt) &&
+                                            (Convert.ToDateTime(date_Range.new_end_dt) < startDt || Convert.ToDateTime(date_Range.new_end_dt) > endDt))
                                         {
                                              continue;
                                         }
@@ -793,11 +795,34 @@ namespace OASystem.API.OAMethodLib
                                         if (date_Range.type == "halfday")
                                         {
                                             new_duration = Convert.ToDecimal(date_Range.new_duration) / 86400.00M;
+
+                                            if (date_Range.new_begin_dt < startDt)
+                                            {
+                                                decimal new_duration_count = new_duration;
+                                                new_duration = 0.00M;
+
+                                                for (int i = 0; i < new_duration_count; i++)
+                                                {
+                                                    DateTime thisDt = date_Range.new_begin_dt.AddDays(i);
+                                                    Sys_Calendar sys_Calendar = new Sys_Calendar();
+                                                    sys_Calendar = sys_Calendars.Where(it => it.Dt == thisDt.ToString("yyyy-MM-dd")).FirstOrDefault();
+                                                    if (sys_Calendar != null)
+                                                    {
+                                                        if (sys_Calendar.IsWorkDay)
+                                                        {
+
+                                                            new_duration++;
+                                                        }
+                                                    }
+                                                }
+                                            }
+
+
                                             unit = "天";
                                             startTime = date_Range_new_begin_dt.ToString("yyyy-MM-dd") + " 09:00";
                                             endTime = date_Range_new_end_dt.ToString("yyyy-MM-dd") + " 18:00";
 
-                                            if (new_duration >= 0.50M)
+                                            if (new_duration > 0.50M)
                                             {
                                                 if (slice_info != null)
                                                 {
@@ -805,7 +830,6 @@ namespace OASystem.API.OAMethodLib
                                                     {
                                                         if (slice_info.day_items.Count > 1)
                                                         {
-
                                                             date_Range_new_begin_dt = slice_info.day_items[0].daytimeDt;
                                                             date_Range_new_end_dt = slice_info.day_items[slice_info.day_items.Count - 1].daytimeDt;
 
@@ -1255,7 +1279,7 @@ namespace OASystem.API.OAMethodLib
                                         Date_range date_Range = attendance.date_range;
 
                                         //筛选 不在工作日内的假勤申请
-                                        if (date_Range.new_begin_dt < startDt   || date_Range.new_end_dt < endDt)
+                                        if (date_Range.new_begin_dt < startDt   || date_Range.new_end_dt > endDt)
                                         {
                                             continue;
                                         }
@@ -1278,10 +1302,10 @@ namespace OASystem.API.OAMethodLib
                                         {
                                             new_duration = Convert.ToDecimal(date_Range.new_duration) / 86400.00M;
                                             unit = "天";
-                                            startTime = date_Range.new_begin_dt.ToString("yyyy-MM-dd") + " 09:00";
-                                            endTime = date_Range.new_begin_dt.ToString("yyyy-MM-dd") + " 18:00";
-                                            startTime1 = "09:00:00";
-                                            endTime1 = "18:00:00";
+                                            startTime = date_Range.new_begin_dt.ToString("yyyy-MM-dd") + " 00:00";
+                                            endTime = date_Range.new_end_dt.ToString("yyyy-MM-dd") + " 00:00";
+                                            startTime1 = "00:00:00";
+                                            endTime1 = "00:00:00";
                                         }
                                         else if (date_Range.type == "hour")
                                         {
@@ -1307,20 +1331,28 @@ namespace OASystem.API.OAMethodLib
                                             //处理开始时间 是否在当天工作时间内
                                             if (i == 0) //开始时间
                                             {
-                                                string ccStartTime = thisDt.ToString("HH:mm:ss");
-                                                if (!IsWorkTime(ccStartTime))
+
+                                                if (!date_Range.type.Equals("halfday"))
                                                 {
-                                                    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))
+                                                if (!date_Range.type.Equals("halfday"))
                                                 {
-                                                    continue;
+                                                    string ccStartTime = date_Range.new_end_dt.ToString("HH:mm:ss");
+                                                    if (!IsWorkTime(ccStartTime))
+                                                    {
+                                                        continue;
+                                                    }
                                                 }
                                             }