コード例 #1
0
ファイル: FregatImport.php プロジェクト: vovancho/baseportal
 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;
 }