]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
fix daily_paiment query - get latest record from EmployeePayment
authorJoySystem_v <fvv2011@gmail.com>
Thu, 8 Aug 2024 13:04:48 +0000 (16:04 +0300)
committerJoySystem_v <fvv2011@gmail.com>
Thu, 8 Aug 2024 13:04:48 +0000 (16:04 +0300)
erp24/actions/motivation/GetSalaryAction.php
erp24/actions/motivation/SumSalaryAction.php
erp24/services/MotivationService.php

index 5fa26fda4c53bebbb7a8d5949b718002ff2aba9a..126279d6b228d245db03ef8fa95071c2f5d7f182 100644 (file)
@@ -24,7 +24,7 @@ class GetSalaryAction extends Action
             $year = $model->year;
             $month = $model->month;
         $records = [];
-        $vacationSum = 0;
+
 
         $model = new DynamicModel(compact('store_id', 'month', 'year'));
         $model->addRule(['store_id', 'month', 'year'], 'required')
@@ -59,10 +59,13 @@ class GetSalaryAction extends Action
             $weeklyRecords = MotivationService::getTimetableFactRecordsByDateAndStore($startDate, $endDate, $store_id);
             $weeklyVacationSum = MotivationService::getVacationsSum($startDate, $endDate, $store_id);
 
-            $weeklyTotalSalary = 0;
+            $weeklyTotalSalary = 0.0;
             $recordsWithAdditionalData = [];
             foreach ($weeklyRecords as $record) {
-                $payment = EmployeePayment::findOne(['admin_id' => $record->admin_id]);
+                $payment = EmployeePayment::find()
+                    ->where(['admin_id' => $record->admin_id])
+                    ->orderBy(['date' => SORT_DESC]) // Сортировка по полю date от самой поздней записи к самой ранней
+                    ->one();
                 $dailyPayment = $payment ? $payment->daily_payment : null;
 
                 $admin = Admin::findOne(['id' => $record->admin_id]);
@@ -95,14 +98,17 @@ class GetSalaryAction extends Action
         $startOfMonth = sprintf("%s-%02d-01", $year, $month);
         $endOfMonth = (new DateTime("$year-$month-01"))->format('Y-m-t');
 
-        $monthlyTotalSalary = 0;
-        $monthlyVacationSum = 0;
+        $monthlyTotalSalary = 0.0;
+
 
         $monthlyRecords = MotivationService::getTimetableFactRecordsByDateAndStore($startOfMonth, $endOfMonth, $store_id);
         $monthlyVacationSum = MotivationService::getVacationsSum($startOfMonth, $endOfMonth, $store_id);
 
         foreach ($monthlyRecords as $record) {
-            $payment = EmployeePayment::findOne(['admin_id' => $record->admin_id]);
+            $payment = EmployeePayment::find()
+                ->where(['admin_id' => $record->admin_id])
+                ->orderBy(['date' => SORT_DESC]) // Сортировка по полю date от самой поздней записи к самой ранней
+                ->one();
             $dailyPayment = $payment ? $payment->daily_payment : null;
 
             $monthlyTotalSalary += !empty($record->salary_shift) ? $record->salary_shift : $dailyPayment;
index 60053002eff1135c6837e374ef4217986958e3f0..f13af742c8abe3a0bd6de965f73fca6f8dbfb04d 100644 (file)
@@ -44,10 +44,13 @@ class SumSalaryAction extends \yii\base\Action
             $records = MotivationService::getTimetableFactRecordsByDateAndStore($startDate, $endDate, $store_id);
             $vacationSum = MotivationService::getVacationsSum($startDate, $endDate, $store_id);
 
-            $totalSalary = 0;
+            $totalSalary = 0.0;
             foreach ($records as $record) {
-                $payment = EmployeePayment::findOne(['admin_id' => $record->admin_id]);
-                $dailyPayment = $payment ? $payment->daily_payment : null;
+                $payment = EmployeePayment::find()
+                    ->where(['admin_id' => $record->admin_id])
+                    ->orderBy(['date' => SORT_DESC]) // Сортировка по полю date от самой поздней записи к самой ранней
+                    ->one();
+                $dailyPayment = $payment ? $payment->daily_payment : 0.0;
 
                 // Если $record->salary_shift имеет значение, учитываем его и не добавляем dailyPayment
                 if (!empty($record->salary_shift)) {
index 1acf981ed2214d8ccb0a1a00f1568786f3f29920..e1ae70c1adde0aad2656f7a6f3697ec077d89570 100644 (file)
@@ -348,7 +348,7 @@ class MotivationService
         return $records;
     }
 
-    public static function getVacationsSum($startDate, $endDate, $store_id)
+    public static function getVacationsSum($startDate, $endDate, $store_id):float
     {
         // Делаем запрос к таблице Timetable для получения записей с slot_type_id = 2
         $records = Timetable::find()
@@ -360,15 +360,19 @@ class MotivationService
 
         // Проверяем, есть ли записи
         if (empty($records)) {
-            return 0; // Возвращаем 0, если записей нет
+            return 0.0; // Возвращаем 0, если записей нет
         }
 
 
 
-        $vacationsSum = 0;
+        $vacationsSum = 0.0;
         foreach ($records as $record) {
-            $payment = EmployeePayment::findOne(['admin_id' => $record->admin_id]);
-            $dailyPayment = $payment ? $payment->daily_payment : null;
+            // Находим самую позднюю запись по admin_id
+            $payment = EmployeePayment::find()
+                ->where(['admin_id' => $record->admin_id])
+                ->orderBy(['date' => SORT_DESC])
+                ->one();
+            $dailyPayment = $payment ? $payment->daily_payment : 0.0;
 
 
             $vacationsSum += $dailyPayment;
@@ -480,15 +484,19 @@ class MotivationService
     }
 
 
-    public static function calculateTotalSalary($startDate, $endDate, $storeId)
+    public static function calculateTotalSalary($startDate, $endDate, $storeId):float
     {
         $records = self::getTimetableFactRecordsByDateAndStore($startDate, $endDate, $storeId);
         $vacationSum = self::getVacationsSum($startDate, $endDate, $storeId);
 
-        $totalSalary = 0;
+        $totalSalary = 0.0;
         foreach ($records as $record) {
-            $payment = EmployeePayment::findOne(['admin_id' => $record->admin_id]);
-            $dailyPayment = $payment ? $payment->daily_payment : null;
+            // Находим самую позднюю запись по admin_id
+            $payment = EmployeePayment::find()
+                ->where(['admin_id' => $record->admin_id])
+                ->orderBy(['date' => SORT_DESC])
+                ->one();
+            $dailyPayment = $payment ? $payment->daily_payment : 0.0;
 
             if (!empty($record->salary_shift)) {
                 $totalSalary += $record->salary_shift;