]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Учитываем записи без employee_position_id и сливаем
authorVladimir Fomichev <vladimir.fomichev@erp-flowers.ru>
Mon, 1 Dec 2025 08:11:46 +0000 (11:11 +0300)
committerVladimir Fomichev <vladimir.fomichev@erp-flowers.ru>
Mon, 1 Dec 2025 08:11:46 +0000 (11:11 +0300)
erp24/commands/AdminController.php

index a2b29af36f90306252e13b4b3c80d829f60d3cd5..6ea8193173f3b3dd6e028b0a6853310b16868da4 100644 (file)
@@ -71,10 +71,11 @@ class AdminController extends Controller {
             ->orderBy(['admin_id' => SORT_ASC, 'date' => SORT_ASC])
             ->all();
 
-        echo "Найдено записей: " . count($payments) . "\n";
+        echo "Найдено записей с employee_position_id: " . count($payments) . "\n";
 
         $updated = 0;
         $deleted = 0;
+        $merged = 0;
         $processedAdmins = [];
 
         foreach ($payments as $payment) {
@@ -82,14 +83,51 @@ class AdminController extends Controller {
 
             // Если это первая запись для этого сотрудника за ноябрь
             if (!isset($processedAdmins[$adminId])) {
-                // Обновляем дату на первое число месяца
-                $payment->date = $targetDate;
-                if ($payment->save()) {
-                    $updated++;
-                    $processedAdmins[$adminId] = $payment->id;
-                    echo "Обновлена запись ID {$payment->id} для сотрудника {$adminId}: дата установлена {$targetDate}\n";
+                // Проверяем, есть ли уже запись на целевую дату (без employee_position_id)
+                $existingPayment = EmployeePayment::find()
+                    ->where(['admin_id' => $adminId, 'date' => $targetDate])
+                    ->andWhere(['employee_position_id' => null])
+                    ->one();
+
+                if ($existingPayment) {
+                    // Проверяем, совпадают ли оклады - можно слить
+                    $sameSalary = $existingPayment->monthly_salary == $payment->monthly_salary
+                        && $existingPayment->daily_payment == $payment->daily_payment;
+
+                    if ($sameSalary) {
+                        // Оклады совпадают - обновляем существующую запись, добавляя employee_position_id
+                        $existingPayment->employee_position_id = $payment->employee_position_id;
+                        if ($existingPayment->save()) {
+                            echo "Слияние: запись ID {$existingPayment->id} обновлена employee_position_id из ID {$payment->id}\n";
+                            $merged++;
+                        }
+                        // Удаляем дубликат с другой датой
+                        $payment->delete();
+                        $deleted++;
+                        $processedAdmins[$adminId] = $existingPayment->id;
+                    } else {
+                        // Оклады разные - удаляем старую запись без должности, используем новую
+                        echo "Оклады разные у {$adminId}: старая ({$existingPayment->monthly_salary}/{$existingPayment->daily_payment}) vs новая ({$payment->monthly_salary}/{$payment->daily_payment})\n";
+                        $existingPayment->delete();
+                        $deleted++;
+                        // Теперь можем сохранить с новой датой
+                        $payment->date = $targetDate;
+                        if ($payment->save()) {
+                            $updated++;
+                            $processedAdmins[$adminId] = $payment->id;
+                            echo "Обновлена запись ID {$payment->id} для сотрудника {$adminId}\n";
+                        }
+                    }
                 } else {
-                    echo "Ошибка сохранения {$payment->id} для сотрудника {$adminId}";
+                    // Нет конфликтующей записи - просто обновляем дату
+                    $payment->date = $targetDate;
+                    if ($payment->save()) {
+                        $updated++;
+                        $processedAdmins[$adminId] = $payment->id;
+                        echo "Обновлена запись ID {$payment->id} для сотрудника {$adminId}: дата установлена {$targetDate}\n";
+                    } else {
+                        echo "Ошибка сохранения {$payment->id} для сотрудника {$adminId}: " . implode(', ', $payment->getFirstErrors()) . "\n";
+                    }
                 }
             } else {
                 // Если уже есть запись для этого сотрудника, удаляем дубликат
@@ -102,6 +140,7 @@ class AdminController extends Controller {
 
         echo "\nМиграция завершена:\n";
         echo "Обновлено записей: {$updated}\n";
+        echo "Слито записей: {$merged}\n";
         echo "Удалено дубликатов: {$deleted}\n";
     }
 }
\ No newline at end of file