Pārlūkot izejas kodu

计算工资
事假 处理时间

leiy 1 gadu atpakaļ
vecāks
revīzija
08ac752d0e
1 mainītis faili ar 66 papildinājumiem un 30 dzēšanām
  1. 66 30
      OASystem/OASystem.Api/OAMethodLib/PayrollComputation.cs

+ 66 - 30
OASystem/OASystem.Api/OAMethodLib/PayrollComputation.cs

@@ -565,6 +565,8 @@ namespace OASystem.API.OAMethodLib
                                             slice_info = vacation.attendance.slice_info;
                                         }
 
+                                        DateTime date_Range_new_begin_dt = date_Range.new_begin_dt;
+                                        DateTime date_Range_new_end_dt = date_Range.new_end_dt;
 
                                         //计算请假类型扣款金额
                                         decimal new_duration = 0.00M;
@@ -572,49 +574,87 @@ 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";
+                                            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 (slice_info != null)
                                                 {
-                                                    decimal qjLongTime = slice_info.duration / 3600.00M;
-                                                    if (qjLongTime == 4.50M)
+                                                    if (slice_info.day_items.Count > 1)
                                                     {
-                                                        startTime1 = "12:00";
-                                                        endTime1 = "18:00: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 (qjLongTime == 3.00M)
+                                                    else
                                                     {
-                                                        startTime1 = "09:00";
-                                                        endTime1 = "12:00: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
                                             {
-                                                startTime1 = date_Range.new_begin_dt.ToString("HH:mm:ss");
-                                                endTime1 = date_Range.new_end_dt.ToString("HH:mm:ss");
+                                                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")
                                         {
                                             new_duration = Convert.ToDecimal(date_Range.new_duration) / 3600.00M;
                                             unit = "小时";
-                                            startTime = date_Range.new_begin_dt.ToString("yyyy-MM-dd HH:mm:ss");
-                                            endTime = date_Range.new_end_dt.ToString("yyyy-MM-dd HH:mm:ss");
-                                            startTime1 = date_Range.new_begin_dt.ToString("HH:mm:ss");
-                                            endTime1 = date_Range.new_end_dt.ToString("HH:mm:ss");
+                                            startTime = date_Range_new_begin_dt.ToString("yyyy-MM-dd HH:mm:ss");
+                                            endTime = date_Range_new_end_dt.ToString("yyyy-MM-dd HH:mm:ss");
+                                            startTime1 = date_Range_new_begin_dt.ToString("HH:mm:ss");
+                                            endTime1 = date_Range_new_end_dt.ToString("HH:mm:ss");
                                         }
 
                                         LeaveDetails leaveDetails1 = new LeaveDetails()
                                         {
                                             TypeId = leaveType,
                                             TypeName = typeName,
-                                            StartDt = Convert.ToDateTime(date_Range.new_begin_dt.ToString("yyyy-MM-dd") + " " + startTime1),
-                                            EndDt = Convert.ToDateTime(date_Range.new_end_dt.ToString("yyyy-MM-dd") + " " + endTime1),
+                                            StartDt = Convert.ToDateTime(date_Range_new_begin_dt.ToString("yyyy-MM-dd") + " " + startTime1),
+                                            EndDt = Convert.ToDateTime(date_Range_new_end_dt.ToString("yyyy-MM-dd") + " " + endTime1),
                                             DtType = date_Range.type,
                                             Unit = unit,
                                             New_Duration = new_duration,
@@ -1271,7 +1311,8 @@ namespace OASystem.API.OAMethodLib
                                     {
                                         mealDeduction = 10 * Math.Ceiling(duration);
                                     }
-                                }                            }
+                                }                            
+                            }
                             else
                             {
                                 mealDeduction = 10 * Math.Ceiling(duration);
@@ -1295,28 +1336,23 @@ namespace OASystem.API.OAMethodLib
                         {
                             decimal sj_wholeDay = Math.Floor(duration); //整天
                             decimal sj_halfDay = duration % 1; //半天
-                            typeDeduction = personalkLeave_dailywage_day * sj_wholeDay;
 
                             if (sj_halfDay > 0)
                             {
                                 LeaveDetails sjDetails = leaveDetails.Where(it => it.StartDt == startTime && it.EndDt == endTime).FirstOrDefault();
-
                                 decimal sjPrice = 0.00M;
                                 if (sjDetails != null)
                                 {
                                     Slice_info sj_slice_Info = sjDetails.SliceInfo;
-                                    decimal sjLongTime = sj_slice_Info.duration / 3600.00M;
-                                    if (sjLongTime == 3.00M)
-                                    {
-                                        typeDeduction = typeDeduction +  (personalkLeave_dailywage_day / 7.50M) * 3.00M;
-                                    }
-                                    else if (sjLongTime == 4.50M)
-                                    {
-                                        typeDeduction = typeDeduction + (personalkLeave_dailywage_day / 7.50M) * 4.50M;
-                                    }
+                                    decimal sjLongTime = (sj_slice_Info.duration / 3600.00M);
+                                    typeDeduction = (personalkLeave_dailywage_day / 7.50M) * sjLongTime;
                                 }
                             }
+                            else
+                            {
 
+                                typeDeduction = personalkLeave_dailywage_day* sj_wholeDay;
+                            }
                             typeDeduction = ConvertToDecimal(typeDeduction);
                         }
                     }