diff --git a/backend/controllers/CheckPriceController.php b/backend/controllers/CheckPriceController.php
index 03222a6..d654787 100755
--- a/backend/controllers/CheckPriceController.php
+++ b/backend/controllers/CheckPriceController.php
@@ -10,7 +10,7 @@ use yii\data\ActiveDataProvider;
use yii\filters\AccessControl;
use backend\components\base\BaseController;
use yii\filters\VerbFilter;
-use backend\models\Details;
+use common\models\Details;
use backend\models\ImportersFiles;
use backend\models\Importers;
use yii\base\ErrorException;
diff --git a/backend/controllers/DetailsController.php b/backend/controllers/DetailsController.php
index 16f1056..164d876 100755
--- a/backend/controllers/DetailsController.php
+++ b/backend/controllers/DetailsController.php
@@ -105,7 +105,8 @@ class DetailsController extends Controller
$model = $this->findModel($IMPORT_ID, $BRAND, $ARTICLE);
if ($model->load(Yii::$app->request->post()) && $model->save()) {
- return $this->redirect(['view', 'IMPORT_ID' => $model->IMPORT_ID, 'BRAND' => $model->BRAND, 'ARTICLE' => $model->ARTICLE]);
+ //return $this->redirect(['view', 'IMPORT_ID' => $model->IMPORT_ID, 'BRAND' => $model->BRAND, 'ARTICLE' => $model->ARTICLE]);
+ return $this->redirect(['index']);
} else {
return $this->render('update', [
'model' => $model,
diff --git a/backend/controllers/ParserController.php b/backend/controllers/ParserController.php
index 4ea6de8..6d312db 100755
--- a/backend/controllers/ParserController.php
+++ b/backend/controllers/ParserController.php
@@ -1,7 +1,7 @@
- = $form->field($model, 'IMPORT_ID')->textInput() ?>
+ = $form->field($model, 'IMPORT_ID')->dropDownList( ArrayHelper::map( Importers::find()->orderBy('name')->all(), 'id','name' ) ) ?>
= $form->field($model, 'BRAND')->textInput(['maxlength' => true]) ?>
@@ -30,11 +32,11 @@ use yii\widgets\ActiveForm;
= $form->field($model, 'GROUP')->textInput(['maxlength' => true]) ?>
- = $form->field($model, 'timestamp')->textInput() ?>
- = Html::submitButton($model->isNewRecord ? 'Добавить' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
+ = Html::submitButton($model->isNewRecord ? 'Добавить' : 'Редактировать', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
+ = Html::a('Вернуться', ['index'], ['class' => 'btn btn-primary']) ?>
diff --git a/backend/views/details/index.php b/backend/views/details/index.php
index a06abe3..6649cb4 100755
--- a/backend/views/details/index.php
+++ b/backend/views/details/index.php
@@ -7,7 +7,7 @@ use yii\grid\GridView;
/* @var $searchModel common\models\DetailsSearch */
/* @var $dataProvider yii\data\ActiveDataProvider */
-$this->title = 'Список запчастей';
+$this->title = 'Товары поставщиков';
$this->params['breadcrumbs'][] = $this->title;
?>
@@ -16,7 +16,7 @@ $this->params['breadcrumbs'][] = $this->title;
render('_search', ['model' => $searchModel]); ?>
- = Html::a('Создать', ['create'], ['class' => 'btn btn-success']) ?>
+ = Html::a('Добавить', ['create'], ['class' => 'btn btn-success']) ?>
= GridView::widget([
@@ -27,7 +27,10 @@ $this->params['breadcrumbs'][] = $this->title;
['class' => 'yii\grid\SerialColumn'],
'ARTICLE',
'BRAND',
- 'IMPORT_ID',
+
+ ['attribute' => 'IMPORT_ID',
+ 'value' => function($model){return $model->importer;}],
+
'DESCR',
'BOX',
'ADD_BOX',
@@ -35,7 +38,8 @@ $this->params['breadcrumbs'][] = $this->title;
'GROUP',
// 'timestamp',
- ['class' => 'yii\grid\ActionColumn'],
+ ['class' => 'yii\grid\ActionColumn',
+ 'template' => '{update},{delete}'],
],
]); ?>
diff --git a/backend/views/details/update.php b/backend/views/details/update.php
index ffcb10a..3af4981 100755
--- a/backend/views/details/update.php
+++ b/backend/views/details/update.php
@@ -5,7 +5,7 @@ use yii\helpers\Html;
/* @var $this yii\web\View */
/* @var $model common\models\Details */
-$this->title = 'Update Details: ' . ' ' . $model->IMPORT_ID;
+$this->title = 'Редактирование записи: ' . ' ' . $model->IMPORT_ID;
$this->params['breadcrumbs'][] = ['label' => 'Details', 'url' => ['index']];
$this->params['breadcrumbs'][] = ['label' => $model->IMPORT_ID, 'url' => ['view', 'IMPORT_ID' => $model->IMPORT_ID, 'BRAND' => $model->BRAND, 'ARTICLE' => $model->ARTICLE]];
$this->params['breadcrumbs'][] = 'Update';
diff --git a/backend/views/parser/index.php b/backend/views/parser/index.php
index 337b8b8..c74f8d6 100755
--- a/backend/views/parser/index.php
+++ b/backend/views/parser/index.php
@@ -24,7 +24,7 @@ if ( $model->mode ) {
Загрузка прайсов поставщиков
- = $form->field($model, 'importer_id')->dropDownList(ArrayHelper::map( Importers::find()->all(), 'id','name' )); ?>
+ = $form->field($model, 'importer_id')->dropDownList(ArrayHelper::map( Importers::find()->orderBy('name')->all(), 'id','name' )); ?>
field($model, 'delete_price')->checkbox(['label' => 'Загрузить с удалением старого прайса']);
diff --git a/common/components/PriceWriter.php b/common/components/PriceWriter.php
index c0babec..ccdeaba 100755
--- a/common/components/PriceWriter.php
+++ b/common/components/PriceWriter.php
@@ -12,7 +12,7 @@ namespace common\components;
use yii\base\ErrorException;
use backend\models\ImportersFiles;
use backend\models\Importers;
-use backend\models\Details;
+use common\models\Details;
use common\components\ModelArrayValidator;
/**
diff --git a/common/components/parsers/CustomConverter.php b/common/components/parsers/CustomConverter.php
index 51febe5..e61e8e4 100755
--- a/common/components/parsers/CustomConverter.php
+++ b/common/components/parsers/CustomConverter.php
@@ -3,7 +3,7 @@ namespace common\components\parsers;
use common\components\CustomVarDamp;
use common\components\parsers\Converter;
-use backend\models\Details;
+use common\models\Details;
use backend\models\DetailsCrosses;
use backend\models\ImportersPrefix;
diff --git a/common/models/Details.php b/common/models/Details.php
new file mode 100644
index 0000000..9fcece7
--- /dev/null
+++ b/common/models/Details.php
@@ -0,0 +1,163 @@
+ $this->IMPORT_ID])->name;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function rules()
+ {
+ return [
+ [['BRAND', 'ARTICLE', 'PRICE', 'DESCR', 'BOX'], 'required' , 'on' => ['default','form_upload_validation']],
+ // [['PRICE'], 'number', 'on' => 'default'],
+ [['PRICE'], \common\components\CommaNumberValidator::className(), 'on' => 'default'],
+ [['BOX'], 'integer' , 'on' => 'default'],
+ [['timestamp'], 'safe' , 'on' => 'default'],
+ [['BRAND', 'ARTICLE'], 'string', 'max' => 100 , 'on' => 'default'],
+ [['FULL_ARTICLE'], 'string', 'max' => 150 , 'on' => 'default'],
+ [['DESCR', 'GROUP'], 'string', 'max' => 200 , 'on' => 'default']
+ ];
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function attributeLabels()
+ {
+ return [
+ 'ID' => Yii::t('app', 'ID'),
+ 'IMPORT_ID' => Yii::t('app', 'ПОСТАВЩИК'),
+ 'Importer' => Yii::t('app', 'ПОСТАВЩИК'),
+ 'BRAND' => Yii::t('app', 'БРЕНД'),
+ 'ARTICLE' => Yii::t('app', 'АРТИКУЛ'),
+ 'FULL_ARTICLE' => Yii::t('app', 'Full Article'),
+ 'PRICE' => Yii::t('app', 'ЦЕНА'),
+ 'DESCR' => Yii::t('app', 'ОПИСАНИЕ'),
+ 'BOX' => Yii::t('app', 'НАЛИЧИЕ'),
+ 'ADD_BOX' => Yii::t('app', 'В ПУТИ'),
+ 'GROUP' => Yii::t('app', 'ГРУППА RG'),
+ 'timestamp' => Yii::t('app', 'Timestamp'),
+ ];
+ }
+
+ /**
+ *удаление (если $delete_price установлен)б а затем вставка данных с апдейтом прямымыми запросоми SQL
+ * @param $data - массив вставляемых данных, вставка будет прозводится пакетами размером указанным в константе BATCH
+ * @param $importer_id - (int) - идентификатор поставщика у которого будет сперва удалены прайсы а потом вставлены из массива $data
+ * @throws \yii\db\Exception
+ */
+ public function manualInsert($data, $importer_id)
+ {
+ if ($this->delete_price) {
+ // запустим пакетное удаление всех прайсов поставщика
+ $conditions = "IMPORT_ID = {$importer_id}";
+ $this->manualDelete( $conditions );
+ }
+ $this->manualInsertWithUpdate($data);
+
+ }
+
+ /**
+ * вставка данных с апдейтом прямым запросом SQL
+ * @param $data - массив вставляемых данный, вставка будет прозводится пакетами размером указанным в константе BATCH
+ * @throws \yii\db\Exception
+ */
+ private function manualInsertWithUpdate($data)
+ {
+ $table_name = self::tableName();
+ $keys_arr = array_keys($data[0]);
+ // найдем те поля которые не являются ключами. Их нужно будет при дубляже апдейтить
+ $fields_arr_to_update = array_diff($keys_arr, explode('~~', $this::KEY_COLUMN ));
+
+ $query_update = ' on duplicate key update ';
+ foreach ($fields_arr_to_update as $field) {
+ $query_update .= "[[{$field}]] = values([[{$field}]]),";
+ }
+ // удалим последнюю запятую
+ $query_update = substr($query_update, 0, strlen($query_update) - 1);
+
+ // запросы будем выполнять пакетами
+ // размер пакета установлен в константе
+ // разобъем массив на пакеты и будем их проходить
+ $data = array_chunk($data, $this::BATCH);
+ foreach ($data as $current_batch_array) {
+
+ //воспользуемся пакетной вставкой от фреймворка
+ $query_insert = Yii::$app->db->createCommand()->batchInsert($table_name, $keys_arr, $current_batch_array)->sql;
+
+ // добавим фрагмент с апдейтом при дубляже
+ $query = "{$query_insert} {$query_update}";
+ // \common\components\CustomVarDamp::dumpAndDie($query);
+ Yii::$app->db->createCommand($query)->execute();
+
+ }
+ }
+
+ public function manualDelete( $conditions, $params = [] )
+ {
+ do {
+ $query = Yii::$app->db->createCommand()->delete( self::tableName(), $conditions, $params )->sql . ' Limit ' . $this::BATCH;
+// try {
+ $res = Yii::$app->db->createCommand($query)->execute();
+// } catch (\Exception $e) {
+// throw new \ErrorException('Ошибка удаления товаров '.$e->getMessage());
+// }
+ } while ($res);
+
+ return true;
+ }
+
+}
--
libgit2 0.21.4