Просмотр исходного кода

计件工资计算成品防护计算规则优化

qiuenguang 11 месяцев назад
Родитель
Сommit
cfc3000566
1 измененных файлов с 33 добавлено и 8 удалено
  1. 33 8
      application/api/controller/StaffSalary.php

+ 33 - 8
application/api/controller/StaffSalary.php

@@ -564,18 +564,43 @@ class StaffSalary extends Api
                     return $value !== $item['sczl_rq'];
                     return $value !== $item['sczl_rq'];
                 });
                 });
             }else{
             }else{
-                //如果出勤天数小于法定天数,按正常计算
-                if(strpos($item['sczl_type'],'成品防护')){
-                    $pieceWorkWage = $data[$key]['达标定额']/1000*$item['千件工价']*$item['Rate'];
-                }else{
-                    if (count($days[$day_bh]) <= $params['days'] && strpos($item['sczl_type'],'成品防护') === false){
-                        $pieceWorkWage = $data[$key]['达标定额']/1000*$item['千件工价']*$item['Rate'];
-                    }else{ //如果出勤天数大于法定天数,达标定额为 0,计件工资为0,超出的部分按加班工资算
+//                //如果出勤天数小于法定天数,按正常计算
+//                if(strpos($item['sczl_type'],'成品防护')){
+//                    $pieceWorkWage = $data[$key]['达标定额']/1000*$item['千件工价']*$item['Rate'];
+//                }else{
+//                    if (count($days[$day_bh]) <= $params['days'] && strpos($item['sczl_type'],'成品防护') === false){
+//                        $pieceWorkWage = $data[$key]['达标定额']/1000*$item['千件工价']*$item['Rate'];
+//                    }else{ //如果出勤天数大于法定天数,达标定额为 0,计件工资为0,超出的部分按加班工资算
+//                        $data[$key]['达标定额'] = '0.00';
+//                        $pieceWorkWage = '0.00';
+//                    }
+//                    $overTimePay = ($item['核算产量'] - $data[$key]['达标定额']) / 1000 *$item['千件工价'] * $item['Rate'] *1.5;
+//                }
+                // 基础计件工资计算公式
+                $baseWage = ($data[$key]['达标定额'] / 1000) * $item['千件工价'] * $item['Rate'];
+
+                // 当有成品防护类型时(直接通过)
+                if (strpos($item['sczl_type'], '成品防护') !== false) {
+                    $pieceWorkWage = $baseWage;
+                }
+                // 没有特殊类型时
+                else {
+                    // 转换为数值类型避免计算错误
+                    $standardQuota = (float)$data[$key]['达标定额'];
+                    // 判断出勤天数是否超限
+                    if (count($days[$day_bh]) > $params['days']) {
+                        // 超限时重置定额
                         $data[$key]['达标定额'] = '0.00';
                         $data[$key]['达标定额'] = '0.00';
                         $pieceWorkWage = '0.00';
                         $pieceWorkWage = '0.00';
+                        $standardQuota = 0; // 同步数值类型
+                    } else {
+                        $pieceWorkWage = $baseWage;
                     }
                     }
-                    $overTimePay = ($item['核算产量'] - $data[$key]['达标定额']) / 1000 *$item['千件工价'] * $item['Rate'] *1.5;
                 }
                 }
+                // 统一计算加班工资(所有情况都会计算)
+                $actualOutput = (float)$item['核算产量'];
+                $overtimeOutput = max($actualOutput - (float)$data[$key]['达标定额'], 0);
+                $overTimePay = ($overtimeOutput / 1000) * $item['千件工价'] * $item['Rate'] * 1.5;
             }
             }
             $data[$key]['个人计件工资'] = number_format($pieceWorkWage,2,'.', '');
             $data[$key]['个人计件工资'] = number_format($pieceWorkWage,2,'.', '');
             $data[$key]['个人加班工资'] = number_format($overTimePay,2,'.', '');
             $data[$key]['个人加班工资'] = number_format($overTimePay,2,'.', '');