コード例 #1
0
ファイル: FregatImport.php プロジェクト: vovancho/baseportal
 private static function MaterialDo(&$Material, &$Matlog, $row)
 {
     $result = false;
     // Присваиваем значения свойств материальной ценности из Excel в массив атрибутов
     $xls_attributes_material = self::xls_attributes_material($row);
     // Проверяем, что ТипНоменклатуры Материалов принадлежат к "Продукты питания" или "Прочие материальные запасы"
     $material_assigned = self::$os || !self::$os && in_array($xls_attributes_material['material_tip_nomenklaturi'], ['Продукты питания', 'Прочие материальные запасы']) ? true : false;
     if ($material_assigned) {
         // Находим материальную ценность в базе по коду 1С, если не находим создаем новую запись
         $find_ar = Material::model()->Find('material_1c = :material_1c', [':material_1c' => $xls_attributes_material['material_1c']]);
         if ($find_ar !== null) {
             $Material = $find_ar;
         }
         self::$material_number_xls = $xls_attributes_material['material_number'];
         self::$material_price_xls = $xls_attributes_material['material_price'];
         // Если материальная ценность найдена
         if (!$Material->isNewRecord) {
             $Material->material_price = floatval($Material->material_price);
             // т.к. $Material->material_price = "~.00"
             $Material->material_number = floatval($Material->material_number);
             // т.к. $Material->material_number = "1.000"
             // Убераем атрибуты, чтобы он не попали в $diff_attr
             unset($xls_attributes_material['material_tip_nomenklaturi']);
             unset($xls_attributes_material['material_number']);
             unset($xls_attributes_material['material_price']);
             // Массив заполняется измененными значениями атрибутов материальной ценности
             $diff_attr = array_diff_assoc($xls_attributes_material, $Material->attributes);
         }
         // Если новая запись или произошли изменения в текущей
         if ($Material->isNewRecord || count((array) $diff_attr) > 0) {
             $Material->attributes = $xls_attributes_material;
             // material_name1с - Наименование из Excel файла. material_name - Изменяемое наименование пользователем в БД
             if ($Material->material_name === '' || $Material->material_name === NULL) {
                 $Material->material_name = $Material->material_name1c;
             }
             $Matlog->attributes = $xls_attributes_material;
             $Matlog->material_number = self::$material_number_xls;
             $Matlog->material_price = self::$material_price_xls;
             $Matlog->matvid_name = Matvid::model()->findbyPk($Material->id_matvid)->matvid_name;
             $Matlog->izmer_name = Izmer::model()->findbyPk($Material->id_izmer)->izmer_name;
             $Matlog->material_writeoff = 'Нет';
             $Matlog->matlog_message = $Material->isNewRecord ? 'Запись добавлена' : 'Запись изменена: ';
             if (!$Material->isNewRecord) {
                 foreach ($diff_attr as $attr => $value) {
                     $Matlog->matlog_message .= '[' . Material::model()->getAttributeLabel($attr) . '] = "' . $value . '", ';
                 }
             }
             // Валидируем значения модели и пишем в лог
             $result = self::ImportValidate($Material, $Matlog);
         } else {
             // Если изменения не внесены пишем в лог
             $Matlog->attributes = $Material->attributes;
             $Matlog->matvid_name = Matvid::model()->findbyPk($Material->id_matvid)->matvid_name;
             $Matlog->izmer_name = Izmer::model()->findbyPk($Material->id_izmer)->izmer_name;
             $Matlog->material_writeoff = $Material->material_writeoff === '1' ? 'Да' : 'Нет';
             // Добавляем в лог не измененные значения ActiveRecord
             $result = self::JustAddToLog($Material, $Matlog);
         }
     } else {
         self::$logreport_missed += 1;
     }
     return $result;
 }