private static function MattrafficDo(&$Mattraffic, &$Traflog, $row, $Material, $employee_id) { $result = false; $material_id = $Material->material_id === NULL || $Material->material_id === '' ? -1 : $Material->material_id; $employee_id = $employee_id === NULL || $employee_id === '' ? -1 : $employee_id; $xls_attributes_mattraffic = array_merge(self::xls_attributes_mattraffic($row), ['id_material' => $material_id, 'id_mol' => $employee_id]); // Ищем Материальную ценность закрепленную за сотрудником // recordapply - Проверка актуальности даты операции над материальной ценностью с датой из Excel (1 - Дата актуальна, 0 - Дата не актуальна) // diff_number - Определяет текущее актуальное количество материальной ценности $find_ar = Mattraffic::model()->Find(['select' => '*, case when DATE(mattraffic_date) < :date_xls then true else false end as recordapply, mattraffic_number - :mattraffic_number AS diff_number', 'condition' => 'id_material = :id_material and id_mol = :id_mol', 'params' => [':id_material' => $xls_attributes_mattraffic['id_material'], ':id_mol' => $xls_attributes_mattraffic['id_mol'], ':date_xls' => $xls_attributes_mattraffic['mattraffic_date'], ':mattraffic_number' => $xls_attributes_mattraffic['mattraffic_number']], 'order' => 'mattraffic_date desc']); if ($find_ar !== null) { $Mattraffic = $find_ar; } $Traflog->attributes = $xls_attributes_mattraffic; if (!$Mattraffic->isNewRecord && $Mattraffic->recordapply) { // Если у материальной ценности найден сотрудник и запись актуальна // Разница в количестве (Количество из Excel - количество из БД) $diff_number = $Mattraffic->diff_number; self::$mattraffic_exist = true; // Если материал уже списан, но изменилась дата, просто меняем дату на актуальную if (self::$os && $Material->material_writeoff === '1') { $Mattraffic->mattraffic_date = $xls_attributes_mattraffic['mattraffic_date']; $Traflog->traflog_message .= 'Запись изменена: Дата изменена на "' . $Mattraffic->mattraffic_date . '"'; } else { $Mattraffic = new Mattraffic(); $Mattraffic->attributes = $xls_attributes_mattraffic; $Mattraffic->mattraffic_date = $xls_attributes_mattraffic['mattraffic_date']; $Mattraffic->mattraffic_number = self::$material_number_xls; } // Определяем количество материальной ценности с учетом изменения self::MatNumberChanging($Material, $Traflog, $diff_number, true); // Валидируем значения модели и пишем в лог $result = self::ImportValidate($Mattraffic, $Traflog); } elseif ($Mattraffic->isNewRecord) { // Если у материальной ценности не найден сотрудник, создаем новую операцию $Mattraffic->attributes = $xls_attributes_mattraffic; self::$mattraffic_exist = false; // Количество материальной ценности у разных сотрудников $mat_number = self::GetCountMaterialByID($Material->material_id); if ($mat_number == '-1') { // Если новая материальная ценность $mat_number = self::$material_number_xls; } else { $mat_number += self::$material_number_xls; } // Определяем количество материальной ценности с учетом изменения self::MatNumberChanging($Material, $Traflog, $mat_number, false); // Валидируем значения модели и пишем в лог $result = self::ImportValidate($Mattraffic, $Traflog); } return $result; }