Przeglądaj źródła

计算工资 4.3

leiy 1 rok temu
rodzic
commit
1becd668ac

+ 32 - 14
OASystem/OASystem.Api/OAMethodLib/PayrollComputation.cs

@@ -116,10 +116,10 @@ namespace OASystem.API.OAMethodLib
                     pm_wsInfo.TrafficSubsidies + pm_wsInfo.InformationSecurityFee + pm_wsInfo.OperationBonus + pm_wsInfo.SpecialAllowance + pm_wsInfo.OtherSubsidies + pm_wsInfo.GroupCost;
 
                 // 日薪 = *计算方式:日平均工资 = 月工资/当月应出勤天数。
-                decimal dailyWage = amountPayable / work_days;
+                decimal dailyWage = ConvertToDecimal(amountPayable / work_days);
 
                 // 病假日薪 *计算方式:日平均工资 = 成都市最低工资标准的80%/当月应出勤天数。 短期病假=当月15天内 
-                decimal sickLeave_dailywage = _chengDuMinimumWage / work_days;
+                decimal sickLeave_dailywage = ConvertToDecimal(_chengDuMinimumWage / work_days);
 
                 //病假 一天扣款  
                 sickLeave_deduction = dailyWage - sickLeave_dailywage;
@@ -171,6 +171,7 @@ namespace OASystem.API.OAMethodLib
                     //continue;
                 }
 
+
                 List<Ex_Items> ex_Items = new List<Ex_Items>();//假勤 And 打卡备注集合
                 Ex_Items ex_Items_jq = new Ex_Items() { Type = "假勤" };   //假勤
                 List<Ex_Item> ex_ItemInfos = new List<Ex_Item>();
@@ -196,6 +197,12 @@ namespace OASystem.API.OAMethodLib
                             int leaveType = int.Parse(optionsItems[0].key);  //key 请假子类型 id
                             Date_range date_Range = attendance.date_range;
 
+                            //筛选 不在工作日内的假勤申请
+                            if (startDt >= date_Range.new_begin_dt && date_Range.new_end_dt <= endDt)
+                            {
+                                continue;
+                            }
+
                             decimal thisTypeDeduction = 0.00M;//当前类型扣款
                             string leave_starttime = date_Range.new_begin_dt.ToString("HH:mm");
                             string leave_endtime = date_Range.new_end_dt.ToString("HH:mm");
@@ -207,16 +214,18 @@ namespace OASystem.API.OAMethodLib
                             if (leaveTypeData != null) { typeName = leaveTypeData.name; }
                             //计算请假类型扣款金额
 
-                            int new_duration = 0;
+                            decimal new_duration = 0.00M;
                             if (date_Range.type == "halfday")
                             {
-                                new_duration =date_Range.new_duration / 86400;
+                                new_duration = Convert.ToDecimal(date_Range.new_duration) / 86400M;
                             }
                             else if (date_Range.type == "hour")
                             {
-                                new_duration =date_Range.new_duration / 3600;
+                                new_duration = Convert.ToDecimal(date_Range.new_duration) / 3600M;
                             }
                             decimal leave_meals = 0.00M;
+
+                            //计算餐补 假勤类型扣款
                             CalculateTypeFee(leaveType, date_Range.type, leave_starttime, leave_endtime, amountPayable, work_days, new_duration, 
                                 out leave_meals, out thisTypeDeduction);
 
@@ -645,6 +654,18 @@ namespace OASystem.API.OAMethodLib
             return _result;
         }
 
+
+        /// <summary>
+        /// decimal 保留两位小数 不四舍五入
+        /// </summary>
+        /// <param name="number"></param>
+        /// <returns></returns>
+        private static decimal ConvertToDecimal(decimal number)
+        {
+            return Convert.ToDecimal(number.ToString("0.00"));
+        }
+
+
         /// <summary>
         /// 获取请假类型
         /// </summary>
@@ -701,15 +722,12 @@ namespace OASystem.API.OAMethodLib
             typeDeduction = 0;
             mealDeduction = 0;
 
-            //处理时长
-            if (duration == 7) duration = 7.50M;
-
             string am_starttime = "08:59";
             string am_endtime = "13:01";
 
             
 
-            decimal personalkLeave_dailywage_day = amountPayable / work_days; //日薪 = 事假日薪 *计算方式:日平均工资 = 当月应发工资 /当月应出勤天数。
+            decimal personalkLeave_dailywage_day = ConvertToDecimal( amountPayable / work_days); //日薪 = 事假日薪 *计算方式:日平均工资 = 当月应发工资 /当月应出勤天数。
 
             //半小时单位
             decimal halfHour = Convert.ToDecimal(7.5) / Convert.ToDecimal(0.5);
@@ -721,7 +739,7 @@ namespace OASystem.API.OAMethodLib
                     break;
                 case 2: //2事假
                     // 事假日薪 *计算方式:日平均工资 = 当月应发工资 /当月应出勤天数。 
-                    decimal personalkLeave_dailywage_halfhour = personalkLeave_dailywage_day / halfHour; //事假单位 0.5小时
+                    decimal personalkLeave_dailywage_halfhour = ConvertToDecimal( personalkLeave_dailywage_day / halfHour); //事假单位 0.5小时
 
                     if (date_Range_type == "halfday")
                     {
@@ -738,10 +756,10 @@ namespace OASystem.API.OAMethodLib
                             if (startTime.CompareTo(am_starttime) > 0 && startTime.CompareTo(am_endtime) < 0)
                             {
                                 //处理结束时间
-                                if (endTime.CompareTo(am_starttime) > 0 && endTime.CompareTo(am_endtime) > 0)
-                                {
+                                //if (endTime.CompareTo(am_starttime) > 0 && endTime.CompareTo(am_endtime) > 0)
+                                //{
                                     mealDeduction = 10; //餐补扣款
-                                }
+                                //}
                             }
                         }
                         else if (duration > 7.5M) //多天计算
@@ -776,7 +794,7 @@ namespace OASystem.API.OAMethodLib
                 case 3: //3病假
                     // 病假日薪 *计算方式:日平均工资 = 成都市最低工资标准的80% /当月应出勤天数。 短期病假=当月15天内 
 
-                    decimal chengDuMinimumWage_halrHour = _chengDuMinimumWage / work_days / halfHour;
+                    decimal chengDuMinimumWage_halrHour = ConvertToDecimal( _chengDuMinimumWage / work_days) / halfHour;
                     decimal sickLeave_dailywage_halfhour_deduction = personalkLeave_dailywage_day - chengDuMinimumWage_halrHour; //病假单位 0.5小时 扣款金额
 
                     if (date_Range_type == "halfday")

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

@@ -370,7 +370,7 @@ namespace OASystem.Domain.ViewModels.PersonnelModule
         /// <summary>
         /// 请假时长
         /// </summary>
-        public int Duration { get; set; }
+        public decimal Duration { get; set; }
 
         /// <summary>
         /// 请假时长,单位小时