From d16e9c71f7b04c3251440484602fa9cfdbe79634 Mon Sep 17 00:00:00 2001 From: Vladimir Fomichev Date: Mon, 1 Dec 2025 11:11:46 +0300 Subject: [PATCH] =?utf8?q?=D0=A3=D1=87=D0=B8=D1=82=D1=8B=D0=B2=D0=B0=D0=B5?= =?utf8?q?=D0=BC=20=D0=B7=D0=B0=D0=BF=D0=B8=D1=81=D0=B8=20=D0=B1=D0=B5?= =?utf8?q?=D0=B7=20employee=5Fposition=5Fid=20=D0=B8=20=D1=81=D0=BB=D0=B8?= =?utf8?q?=D0=B2=D0=B0=D0=B5=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- erp24/commands/AdminController.php | 55 +++++++++++++++++++++++++----- 1 file changed, 47 insertions(+), 8 deletions(-) diff --git a/erp24/commands/AdminController.php b/erp24/commands/AdminController.php index a2b29af3..6ea81931 100644 --- a/erp24/commands/AdminController.php +++ b/erp24/commands/AdminController.php @@ -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 -- 2.39.5