Browse Source

计算工资
调整

leiy 1 year ago
parent
commit
2942b3b17f

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

@@ -539,11 +539,11 @@ namespace OASystem.API.OAMethodLib
                                         Date_range date_Range = attendance.date_range;
 
                                         //筛选 不在工作日内的假勤申请
-                                        if (startDt >= date_Range.new_begin_dt || Convert.ToDateTime( date_Range.new_end_dt.ToString("yyyy-MM-dd")) > endDt)
+                                        if ( Convert.ToDateTime(date_Range.new_begin_dt) < startDt  || Convert.ToDateTime(date_Range.new_end_dt.ToString("yyyy-MM-dd")) > endDt)
                                         {
                                             continue;
                                         }
-                                       
+
                                         string leave_starttime = date_Range.new_begin_dt.ToString("HH:mm");
                                         string leave_endtime = date_Range.new_end_dt.ToString("HH:mm");
 
@@ -581,62 +581,96 @@ namespace OASystem.API.OAMethodLib
                                             {
                                                 if (slice_info != null)
                                                 {
-                                                    if (slice_info.day_items.Count > 1)
+                                                    if (slice_info.day_items != null)
                                                     {
-
-                                                        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;
-
-                                                        decimal startTime11 = slice_info.day_items[0].duration;
-                                                        decimal startTime11_11 = startTime11 / 3600.00M;
-                                                        decimal endTime11 = slice_info.day_items[slice_info.day_items.Count - 1].duration;
-                                                        decimal endTime11_11 = endTime11 / 3600.00M;
-                                                        if (startTime11_11 == 3.00M )
-                                                        {
-                                                            startTime1 = "09:00";
-                                                        }else if (startTime11_11 == 4.50M)
+                                                        if (slice_info.day_items.Count > 1)
                                                         {
-                                                            startTime1 = "12:00";
-                                                        }
-                                                        else if (startTime11_11 == 7.50M)
-                                                        {
-                                                            startTime1 = "09:00";
-                                                        }
 
-                                                        if (endTime11_11 == 3.00M)
-                                                        {
-                                                            endTime1 = "12:00";
-                                                        }
-                                                        else if (endTime11_11 == 4.50M)
-                                                        {
-                                                            endTime1 = "18:00";
+                                                            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;
+
+                                                            decimal startTime11 = slice_info.day_items[0].duration;
+                                                            decimal startTime11_11 = startTime11 / 3600.00M;
+                                                            decimal endTime11 = slice_info.day_items[slice_info.day_items.Count - 1].duration;
+                                                            decimal endTime11_11 = endTime11 / 3600.00M;
+                                                            if (startTime11_11 == 3.00M)
+                                                            {
+                                                                startTime1 = "09:00";
+                                                            }
+                                                            else if (startTime11_11 == 4.50M)
+                                                            {
+                                                                startTime1 = "12:00";
+                                                            }
+                                                            else if (startTime11_11 == 7.50M)
+                                                            {
+                                                                startTime1 = "09:00";
+                                                            }
+
+                                                            if (endTime11_11 == 3.00M)
+                                                            {
+                                                                endTime1 = "12:00";
+                                                            }
+                                                            else if (endTime11_11 == 4.50M)
+                                                            {
+                                                                endTime1 = "18:00";
+                                                            }
+                                                            else if (endTime11_11 == 7.50M)
+                                                            {
+                                                                endTime1 = "18:00";
+                                                            }
+
                                                         }
-                                                        else if (endTime11_11 == 7.50M)
+                                                        else
                                                         {
-                                                            endTime1 = "18:00";
+                                                            decimal qjLongTime = slice_info.duration / 3600.00M;
+                                                            if (qjLongTime == 4.50M)
+                                                            {
+                                                                startTime1 = "12:00";
+                                                                endTime1 = "18:00:00";
+                                                            }
+                                                            else if (qjLongTime == 3.00M)
+                                                            {
+                                                                startTime1 = "09:00";
+                                                                endTime1 = "12:00:00";
+                                                            }
+                                                            else if (qjLongTime % 7.50M == 0)
+                                                            {
+                                                                startTime1 = "09:00";
+                                                                endTime1 = "18:00:00";
+                                                            }
                                                         }
-
                                                     }
                                                     else
                                                     {
-                                                        decimal qjLongTime = slice_info.duration / 3600.00M;
-                                                        if (qjLongTime == 4.50M)
-                                                        {
-                                                            startTime1 = "12:00";
-                                                            endTime1 = "18:00:00";
-                                                        }
-                                                        else if (qjLongTime == 3.00M)
+                                                        if (new_duration % 1 == 0)
                                                         {
                                                             startTime1 = "09:00";
-                                                            endTime1 = "12:00:00";
+                                                            endTime1 = "18:00";
                                                         }
                                                     }
                                                 }
+                                                else
+                                                {
+                                                    if (new_duration % 1 == 0)
+                                                    {
+                                                        startTime1 = "09:00";
+                                                        endTime1 = "18:00";
+                                                    }
+                                                }
+                                            
                                             }
                                             else
                                             {
-                                                startTime1 = date_Range_new_begin_dt.ToString("HH:mm:ss");
-                                                endTime1 = date_Range_new_end_dt.ToString("HH:mm:ss");
+                                                if (new_duration % 1 == 0)
+                                                {
+                                                    startTime1 = "09:00";
+                                                    endTime1 = "18:00";
+                                                }
+                                                else
+                                                {
+                                                    startTime1 = date_Range_new_begin_dt.ToString("HH:mm:ss");
+                                                    endTime1 = date_Range_new_end_dt.ToString("HH:mm:ss");
+                                                }
                                             }
                                         }
                                         else if (date_Range.type == "hour")
@@ -1327,7 +1361,7 @@ namespace OASystem.API.OAMethodLib
 
                     if (date_Range_type == "halfday")
                     {
-                        mealDeduction = 10.00M * Math.Ceiling(duration); //餐补扣款 
+                        mealDeduction = 10.00M * Math.Floor(duration); //餐补扣款 
                         if (duration % 1 == 0) //整天
                         {
                             typeDeduction = ConvertToDecimal(personalkLeave_dailywage_day * duration);
@@ -1344,13 +1378,22 @@ namespace OASystem.API.OAMethodLib
                                 if (sjDetails != null)
                                 {
                                     Slice_info sj_slice_Info = sjDetails.SliceInfo;
-                                    decimal sjLongTime = (sj_slice_Info.duration / 3600.00M);
-                                    typeDeduction = (personalkLeave_dailywage_day / 7.50M) * sjLongTime;
+                                    if (sj_slice_Info != null)
+                                    {
+                                        decimal sjLongTime = (sj_slice_Info.duration / 3600.00M);
+                                        typeDeduction = (personalkLeave_dailywage_day / 7.50M) * sjLongTime;
+                                    }
+                                }
+
+                                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);
@@ -1586,8 +1629,6 @@ namespace OASystem.API.OAMethodLib
                         }
                     }
                 }
-
-                
             }
         }
 

+ 7 - 1
OASystem/OASystem.Domain/ViewModels/PersonnelModule/WageSheetView.cs

@@ -523,7 +523,13 @@ namespace OASystem.Domain.ViewModels.PersonnelModule
         /// <summary>
         /// 扣款金额
         /// </summary>
-        public decimal Deduction { get; set; }
+        public decimal Deduction { get; set; } = 0.00M;
+
+
+        /// <summary>
+        /// 餐补扣款金额
+        /// </summary>
+        public decimal MealDeduction { get; set; } = 0.00M;
 
         /// <summary>
         /// 开始时间