From: Vladimir Fomichev Date: Mon, 1 Dec 2025 08:11:46 +0000 (+0300) Subject: Учитываем записи без employee_position_id и сливаем X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=d16e9c71f7b04c3251440484602fa9cfdbe79634;p=erp24_rep%2Fyii-erp24%2F.git Учитываем записи без employee_position_id и сливаем --- 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