configuration['record_id']); $update_date = date('Y-m-d H:i:s'); $files_model->time_start = $update_date; // запишем дату начала загрузки if (!$files_model->save()) { throw new \ErrorException(implode(', ', $files_model->getErrors())); } // 2. запишем полученные данные в таблицу товаров (Details) $details_model = new Details(); // только для ручной загрузки, в авто режиме все делает конвертер при первом же проходе (в процессе парсинга) if ($this->mode == 0) { // преобразуем числовые значения foreach ($this->data as &$row) { if(isset( $row['PRICE'] )) $row['PRICE'] = \Yii::$app->converter->convertTo('float',$row['PRICE']); if(isset( $row['BOX'] )) $row['BOX'] = \Yii::$app->converter->convertTo('integer',$row['BOX']); // присвоим полный артикул if( isset( $row['ARTICLE'] ) ) { $row['FULL_ARTICLE'] = $row['ARTICLE']; if ((int)$this->configuration['delete_prefix']) { $row = \Yii::$app->converter->convertTo('Article', $row, ['importer_id' => $this->configuration['importer_id']]); } else { if (isset($row['ARTICLE'])) $row['ARTICLE'] = \Yii::$app->converter->convertTo('Article', $row['ARTICLE']); } } if (isset($row['ADD_BOX'])) $row['ADD_BOX'] = \Yii::$app->converter->convertTo( 'integer', $row['ADD_BOX'] ); // проверим все ли обязательные колонки были указаны пользователем $details_model->load(['Details' => $row]); if (!$details_model->validate()) $details_model->throwStringErrorException( key($this->data) ); } } // дополним данные значением импортера и даты обновления цены $this->data = CustomArrayHelper::addColumns( $this->data, ['IMPORT_ID' => $this->configuration['importer_id'], 'timestamp' => $update_date] ); try { if ( isset($this->configuration['delete_price']) && (int)$this->configuration['delete_price'] ) { $details_model->delete_price = true; } $transaction = \Yii::$app->db->beginTransaction(); //2. попытаемся вставить данные в БД с апдейтом по ключам $details_model->ManualInsert($this->data, $this->configuration['importer_id']); // 3. зафиксируем дату конца загрузки в файлах поставщика if (!$files_model->save()) { $transaction->rollBack(); throw new \ErrorException(implode(', ', $files_model->getErrors())); } // 4. зафиксируем дату загрузки в таблице поставщиков $imp_model = Importers::findOne($this->configuration['importer_id']); $imp_model->price_date_update = $update_date; if (!$imp_model->save()) { $transaction->rollBack(); throw new \ErrorException(implode(', ', $imp_model->getErrors())); } $transaction->commit(); } catch (ErrorException $e) { $transaction->rollBack(); throw new \ErrorException($e->getMessage()); } return true; } }