leiy 1 год назад
Родитель
Сommit
87f7c25221

+ 34 - 1
OASystem/OASystem.Api/Controllers/PersonnelModuleController.cs

@@ -199,7 +199,40 @@ namespace OASystem.API.Controllers
         {
             try
             {
-                _result = await _wageSheetRep.Post_WageSheet_AddOrEditAsync(dto);
+                Pm_WageSheet pm_WageSheet = new Pm_WageSheet();
+                pm_WageSheet = _mapper.Map<Pm_WageSheet>(dto);
+                pm_WageSheet.LastUpdateUserId = dto.CreateUserId;
+
+                #region 计算工资
+
+                //月工资
+                decimal salary = pm_WageSheet.Basic + pm_WageSheet.Floats + pm_WageSheet.PostAllowance + pm_WageSheet.InformationSecurityFee + pm_WageSheet.OtherSubsidies;
+                //扣款合计
+                decimal totalDeduction = pm_WageSheet.SickLeave + pm_WageSheet.SomethingFalse + pm_WageSheet.LateTo + pm_WageSheet.LeaveEarly + pm_WageSheet.Absenteeism + pm_WageSheet.NotPunch +
+                                         pm_WageSheet.ReservedFunds + pm_WageSheet.WithholdingInsurance + pm_WageSheet.OtherDeductions + pm_WageSheet.OtherDeductions;
+
+                //实发合计 不含个税
+                if (pm_WageSheet.RegularDays >= pm_WageSheet.WorkDays )
+                {
+                    pm_WageSheet.RegularDays = pm_WageSheet.WorkDays;
+                    salary = salary = salary + pm_WageSheet.Mealsupplement;
+                }
+                else
+                {
+                    salary = salary = (PayrollComputation.ConvertToDecimal(salary / pm_WageSheet.WorkDays) * pm_WageSheet.RegularDays) + pm_WageSheet.Mealsupplement;
+                }
+
+                
+                decimal actualTotal = salary - totalDeduction;
+                pm_WageSheet.Should = salary;
+                pm_WageSheet.TotalDeductions = totalDeduction;
+                pm_WageSheet.TotalRealHair = actualTotal;
+                pm_WageSheet.AfterTax = actualTotal - pm_WageSheet.WithholdingTax;
+
+                #endregion
+
+
+                _result = await _wageSheetRep.Post_WageSheet_AddOrEditAsync(dto, pm_WageSheet);
                 if (_result.Code != 0)
                 {
                     return Ok(JsonView(false, _result.Msg));

+ 9 - 8
OASystem/OASystem.Api/OAMethodLib/PayrollComputation.cs

@@ -76,9 +76,6 @@ namespace OASystem.API.OAMethodLib
 
             try
             {
-                
-
-
                 foreach (var pm_wsInfo in pm_WageSheetDattaSources)
                 {
                     string itemName = userNames.Where(it => it.Id == pm_wsInfo.UserId).FirstOrDefault().CnName;
@@ -116,10 +113,10 @@ namespace OASystem.API.OAMethodLib
                     Summary_Info? summary_Info = checkInData.summary_info;
                     if (summary_Info == null) { continue; }
 
-                    //int work_days = summary_Info.work_days -1;   //应出勤天数 
+                    int dk_work_days = summary_Info.work_days -1;   //应出勤天数 
                     //int regular_days = summary_Info.regular_days - 1;  //正常出勤天数
 
-                    meal_subsidy = work_days * 10; //应发放餐补
+                    meal_subsidy = dk_work_days * 10; //应发放餐补
 
                     #region 计算日工资 正常日薪 事假日薪 病假日薪
 
@@ -628,7 +625,11 @@ namespace OASystem.API.OAMethodLib
                     #region 应发合计 实发合计 扣款合计(假勤扣款,其他扣款,社保扣款,公积金代扣,个税扣款)
 
                     decimal mealTotal = meal_subsidy - meal_deduction;  //餐补
-                    decimal salaryTotal = amountPayable + mealTotal;    //应发合计
+                    if (dk_work_days >= work_days)
+                    {
+                        dk_work_days = work_days;
+                    }
+                    decimal salaryTotal = (dk_work_days * dailyWage) + mealTotal;    //应发合计
 
                     //扣款合计 不含个税
                     decimal eductionTotal = sickLeaveTotal + personalLeaveTotal + beLate_deduction + early_deduction + absenteeism_deduction + unprinted_deduction + other_deduction +
@@ -642,7 +643,7 @@ namespace OASystem.API.OAMethodLib
                     pm_wsInfo.StartDate = startDt.ToString("yyyy-MM-dd");
                     pm_wsInfo.EndDate = endDt.AddDays(-1).ToString("yyyy-MM-dd");
                     pm_wsInfo.WorkDays = work_days;        //当月应出勤天数
-                    //pm_wsInfo.RegularDays = regular_days;  //当月正常出勤天数
+                    pm_wsInfo.RegularDays = dk_work_days;  //当月正常出勤天数
 
                     pm_wsInfo.SickLeave = sickLeaveTotal;           //病假
                     pm_wsInfo.SomethingFalse = personalLeaveTotal;  //事假
@@ -690,7 +691,7 @@ namespace OASystem.API.OAMethodLib
         /// </summary>
         /// <param name="number"></param>
         /// <returns></returns>
-        private static decimal ConvertToDecimal(decimal number)
+        public static decimal ConvertToDecimal(decimal number)
         {
             return Convert.ToDecimal(number.ToString("0.00"));
         }

+ 2 - 30
OASystem/OASystem.Infrastructure/Repositories/PersonnelModule/WageSheetRepository.cs

@@ -100,30 +100,9 @@ namespace OASystem.Infrastructure.Repositories.PersonnelModule
         /// 修改
         /// </summary>
         /// <returns></returns>
-        public async Task<Result> Post_WageSheet_AddOrEditAsync(WageAddOrEditDto dto)
+        public async Task<Result> Post_WageSheet_AddOrEditAsync(WageAddOrEditDto dto,Pm_WageSheet pm_WageSheet)
         {
-            Pm_WageSheet pm_WageSheet = new Pm_WageSheet();
-            pm_WageSheet = _mapper.Map<Pm_WageSheet>(dto);
-            pm_WageSheet.LastUpdateUserId = dto.CreateUserId;
-
-            #region 计算工资
-
-            //应发合计 
-            decimal salary = pm_WageSheet.Basic + pm_WageSheet.Floats + pm_WageSheet.PostAllowance + pm_WageSheet.InformationSecurityFee + pm_WageSheet.OtherSubsidies;
-            //扣款合计
-            decimal totalDeduction = pm_WageSheet.SickLeave + pm_WageSheet.SomethingFalse + pm_WageSheet.LateTo + pm_WageSheet.LeaveEarly + pm_WageSheet.Absenteeism + pm_WageSheet.NotPunch +
-                                     pm_WageSheet.ReservedFunds + pm_WageSheet.WithholdingInsurance + pm_WageSheet.OtherDeductions + pm_WageSheet.OtherDeductions;
-
-            //实发合计 不含个税
-            salary = salary + pm_WageSheet.Mealsupplement;
-            decimal actualTotal = salary - totalDeduction;
-            pm_WageSheet.Should = salary ;
-            pm_WageSheet.TotalDeductions = totalDeduction;
-            pm_WageSheet.TotalRealHair = actualTotal;
-            pm_WageSheet.AfterTax = actualTotal - pm_WageSheet.WithholdingTax;
-
-            #endregion
-
+            
 
             if (dto.Status == 1) //添加
             {
@@ -145,13 +124,6 @@ namespace OASystem.Infrastructure.Repositories.PersonnelModule
             }
             else if(dto.Status == 2) //修改
             {
-                //修改时 更改其他 费用基数时 假勤 费用也将更改 
-                if (string.IsNullOrEmpty(dto.Ex_ItemsRemark))
-                {
-                    List<Ex_Items> ex_Items = new List<Ex_Items>();
-
-                }
-
                 int update = await _sqlSugar.Updateable(pm_WageSheet)
                                             .IgnoreColumns(it =>  new { it.CreateUserId, it.CreateTime,it.DeleteUserId,it.DeleteTime })
                                             .WhereColumns(it => new { it.Id })