X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=controllers%2FItemsController.php;h=6ed8265a512be2dacfaa07ec0bdfb28c0ab6d2c6;hb=814132459654c202ffd3cef7f3e4f1b0ebe133b7;hp=b6804498e8e5c80c18008e2060678d3ee3d130c3;hpb=f9bf4c7ae3da0b6dc80c1add6ddfb31bbbe356e5;p=invent%2Finvent.git
diff --git a/controllers/ItemsController.php b/controllers/ItemsController.php
index b680449..6ed8265 100644
--- a/controllers/ItemsController.php
+++ b/controllers/ItemsController.php
@@ -48,23 +48,26 @@ class ItemsController extends Controller
* string 'invent'
* string 'model'
* string 'comment'
- * integer|NULL 'type_id'
- * string|NULL 'typeName'
- * string|NULL 'name'
+ * string|NULL 'type'
+ * string|NULL 'netname'
* string|NULL 'os'
* string|NULL 'mac'
* string|NULL 'serial'
* string|NULL 'product'
- * string|NULL 'modelnum'
+ * string|NULL 'modelnumber'
* @return integer|FALSE
*/
public static function addIfNeed($options)
{
+ $result = [
+ 'id' => FALSE,
+ 'error' => Yii::t('items', 'Items: Key field missing "invent" :') . print_r($options, TRUE),
+ ];
// ÐÑли Ñказан инвенÑаÑнÑй номеÑ
if (is_array($options) && isset($options[ 'invent' ]))
{
$item = Items::find()
- ->where([ 'like', 'invent', $options[ 'invent' ]]); // ÐÑем обоÑÑдование Ñ Ð¸Ð½Ð²ÐµÐ½ÑаÑнÑм номеÑом.
+ ->where([ 'invent' => $options[ 'invent' ]]); // ÐÑем обоÑÑдование Ñ Ð¸Ð½Ð²ÐµÐ½ÑаÑнÑм номеÑом.
// ÐÑли Ñказан ÑеÑийнÑй номеÑ
if (isset($options[ 'serial' ])) {
$item = $item->andWhere([ 'like', 'serial', $options[ 'serial' ]]); // ÐÑем дополниÑелÑно Ñ ÑеÑийнÑм номеÑом
@@ -73,47 +76,47 @@ class ItemsController extends Controller
if (count($item) > 0) // ÐапиÑи найденÑ, вÑводим пеÑвÑÑ ÑовпавÑÑÑ
{
- return $item[0]->id;
+ $result[ 'id' ] = $item[ 0 ]->id;
+ $result[ 'error' ] = '';
}
- // ÐнеÑÑнного обоÑÑÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ðµ найдено. Ðобавим новÑÑ Ð·Ð°Ð¿Ð¸ÑÑ
- if (isset($options[ 'model' ]))
+ else
{
- // ÐÑли Ñказан Ñип пÑедмеÑа/обоÑÑдованиÑ
- if (isset($options[ 'typeName' ]))
+ // ÐнеÑÑнного обоÑÑÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ðµ найдено. Ðобавим новÑÑ Ð·Ð°Ð¿Ð¸ÑÑ
+ if (isset($options[ 'model' ]))
{
- $type_id = TypesController::addIfNeed($options[ 'typeName' ]); // ÐайдÑм или добавим Ñип
- // ÐÑли Ñип не добавили
- if($type_id === FALSE)
+ $model = ModelsController::addIfNeed($options);
+ if ($model[ 'id' ] === FALSE)
{
- $type_id = NULL; // Ñделаем его пÑÑÑÑм
+ $result[ 'error' ] .= '
' . $model[ 'error' ];
+ }
+ else
+ {
+ // СоздаÑм новÑÑ Ð·Ð°Ð¿Ð¸ÑÑ Ð¿ÑедмеÑа/обоÑÑдованиÑ
+ $item = new Items();
+ $item->name = isset($options[ 'netName' ]) ? $options[ 'netName' ] : NULL; // СеÑевое имÑ
+
+ $item->model_id = $model[ 'id' ]; // иденÑиÑикаÑÐ¾Ñ Ð¼Ð¾Ð´ÐµÐ»Ð¸ (ÐодгоÑовлено Ð´Ð»Ñ Ð¿ÑеобÑазованиÑ)
+ $item->invent = isset($options[ 'invent' ]) ? $options[ 'invent' ] : NULL; // ÐнвенÑаÑнÑй номеÑ
+ $item->comment = isset($options[ 'comment' ]) ? $options[ 'comment' ] : NULL; // ÐоменÑаÑий
+ $item->os = isset($options[ 'os' ]) ? $options[ 'os' ] : NULL; // ÐпеÑаÑÐ¸Ð¾Ð½Ð½Ð°Ñ ÑиÑÑема
+ $item->mac = isset($options[ 'mac' ]) ? $options[ 'mac' ] : NULL; // MAC-адÑеÑ
+ $item->serial = isset($options[ 'serial' ]) ? $options[ 'serial' ] : NULL; // СеÑийнÑй номеÑ
+ $item->checked = false; // Ðе инвенÑÑизиÑован (ÑÑебÑÐµÑ Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ð¿Ð¾Ñле импоÑÑа)
+ // СоÑ
ÑанÑем запиÑÑ
+ if ($item->validate() && $item->save())
+ {
+ $result[ 'id' ] = $item->id; // ÐозвÑаÑаем иденÑиÑикаÑÐ¾Ñ Ð·Ð°Ð¿Ð¸Ñанного обоÑÑдованиÑ
+ $result[ 'error' ] = '';
+ }
+ else
+ {
+ $result[ 'error' ] .= Yii::t('items', 'Items: Failed to add entry: ') . print_r($item->errors, TRUE) . '
';
+ }
}
- }
- else
- {
- // ÐÑли Ñказан иденÑиÑикаÑÐ¾Ñ Ñипа, Ñкажем его
- $type_id = isset($options[ 'type_id' ]) ? $options[ 'type_id' ] : NULL;
- }
- // СоздаÑм новÑÑ Ð·Ð°Ð¿Ð¸ÑÑ Ð¿ÑедмеÑа/обоÑÑдованиÑ
- $item = new Items();
- $item->name = isset($options[ 'name' ]) ? $options[ 'name' ] : NULL; // СеÑевое имÑ
- $item->model = isset($options[ 'model' ]) ? $options[ 'model' ] : NULL; // Ðаименование
- $item->invent = isset($options[ 'invent' ]) ? $options[ 'invent' ] : NULL; // ÐнвенÑаÑнÑй номеÑ
- $item->comment = isset($options[ 'comment' ]) ? $options[ 'comment' ] : NULL; // ÐоменÑаÑий
- $item->type_id = $type_id; // ÐденÑиÑикаÑÐ¾Ñ Ñипа
- $item->os = isset($options[ 'os' ]) ? $options[ 'os' ] : NULL; // ÐпеÑаÑÐ¸Ð¾Ð½Ð½Ð°Ñ ÑиÑÑема
- $item->mac = isset($options[ 'mac' ]) ? $options[ 'mac' ] : NULL; // MAC-адÑеÑ
- $item->serial = isset($options[ 'serial' ]) ? $options[ 'serial' ] : NULL; // СеÑийнÑй номеÑ
- $item->product = isset($options[ 'product' ]) ? $options[ 'product' ] : NULL; // Ðод обоÑÑдованиÑ
- $item->modelnumber = isset($options[ 'modelnumber' ]) ? $options[ 'modelnumber' ] : NULL; // ÐÐ¾Ð¼ÐµÑ Ð¼Ð¾Ð´ÐµÐ»Ð¸
- $item->checked = false; // Ðе инвенÑÑизиÑован (ÑÑебÑÐµÑ Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ð¿Ð¾Ñле импоÑÑа)
- // СоÑ
ÑанÑем запиÑÑ
- if ($item->validate() && $item->save())
- {
- return $item->id; // ÐозвÑаÑаем иденÑиÑикаÑÐ¾Ñ Ð·Ð°Ð¿Ð¸Ñанного обоÑÑдованиÑ
}
}
}
- return FALSE;
+ return $result;
}
/**
@@ -124,7 +127,7 @@ class ItemsController extends Controller
public function actionPrint()
{
if (! User::canPermission('takingInventory') ) {
- return $this->redirect(['site/index']);
+ return Yii::$app->response->redirect(['site/index']);
}
// СпиÑок пÑедмеÑов/обоÑÑдованиÑ, еÑли еÑÑÑ
$id = Yii::$app->request->get('id');
@@ -209,20 +212,49 @@ class ItemsController extends Controller
if ((! empty($model->qrcheck)) && strpos($model->qrcheck, ',') !== false)
{
$keys = explode(',', $model->qrcheck);
- Items::updateAll([ 'checked' => true ], [ 'invent' => trim($keys[ 0 ]), 'serial' => trim($keys[ 1 ]) ]);
+ $color=''; // ЦвеÑÐ¾Ð²Ð°Ñ Ð¼ÐµÑка по ÑмолÑаниÑ
+ // ÐолÑÑаем вÑе пÑедмеÑÑ/обоÑÑдование Ñ Ñовпадением инвенÑаÑного и ÑеÑийного номеÑов
$items = Items::find()->where([ 'invent' => trim($keys[ 0 ]), 'serial' => trim($keys[ 1 ]) ])->all();
- //$message = '[0] = "' . $keys[0] . '", [1] = "' . $keys[1] . '"
';
- foreach ($items as $row)
+ if (count($items) > 0 )
+ {
+ foreach ($items as $row)
+ {
+ if ($row->checked)
+ {
+ // ÐÑÐ¾Ñ Ð¸Ð½Ð²ÐµÐ½ÑаÑнÑй Ð½Ð¾Ð¼ÐµÑ Ð±Ñл ÑÑÑÑн
+ $color = ' color="#FF0000"';
+ }
+ // ÐÑем меÑÑоположение
+ $moving_id = Moving::find()->select('MAX(id) as id')->groupBy([ 'item_id' ])->where([ 'item_id' => $row->id ])->one()->id;
+ $moving = Moving::find()->where([ 'id' => $moving_id ])->one();
+ // ÐоказÑваем название и меÑÑоположение
+ $message .= $row->models->name . ' (' . $moving->locations->name . ' [' . $moving->regions->name . '])';
+ }
+ }
+ else
{
- $message .= $row->model . ' (' . $row->id . ')';
+ // ÐеизвеÑÑнÑй инвенÑаÑнÑй номеÑ
+ $color = ' color = "#FF8830"';
+ $message .= Yii::t('items', 'Not found!') . ' ' . Yii::t('items', 'Inventory number') . ': ' . trim($keys[ 0 ]);
}
+ // ÐÑмеÑаем пÑоинвенÑаÑизиÑованнÑми вÑе найденнÑе пÑедмеÑÑ/обоÑÑдование
+ Items::updateAll([ 'checked' => TRUE ], [ 'invent' => trim($keys[ 0 ]), 'serial' => trim($keys[ 1 ]) ]);
+
if ($message != '')
- $message = Yii::t('items', 'Checked item(s): ') . $message;
+ if ( $color == ' color = "#FF8830"')
+ {
+ $message = '' . $message . '';
+ }
+ else
+ {
+ $message = '' . Yii::t('items', 'Checked item(s): ') . $message . '';
+ }
$model->qrcheck = '';
}
}
$searchModel = new ItemsSearch();
- $dataProvider = $searchModel->noinvent($model);
+ //$dataProvider = $searchModel->noinvent($model);
+ $dataProvider = $searchModel->noinvent(Yii::$app->request->queryParams);
return $this->render('check', [
'message' => $message,
@@ -238,10 +270,35 @@ class ItemsController extends Controller
*/
public function actionIndex()
{
- if (! User::canPermission('createRecord') ) {
+ if (! User::canPermission('createRecord') )
+ {
return $this->redirect(['site/index']);
}
+ if (isset($_GET[ 'pageSize' ]))
+ {
+ Yii::$app->session['pageSize'] = (int) $_GET[ 'pageSize' ];
+ unset($_GET[ 'pageSize' ]);
+ }
$searchModel = new ItemsSearch();
+ if (isset(Yii::$app->request->queryParams['id']))
+ {
+ $id = Yii::$app->request->queryParams['id'];
+ $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
+ //$dataProvider->query->select(Items::tableName() . '.id');
+ $pageSize = $dataProvider->pagination->pageSize;
+ $dataProvider->pagination = FALSE;
+ $rows = $dataProvider->getModels();
+ $page = 0;
+ foreach ($rows as $key => $val)
+ {
+ if ($id == $val->id)
+ {
+ $page = ceil(($key + 1) / $pageSize);
+ break;
+ }
+ }
+ return $this->redirect(['index', 'page' => $page]);
+ }
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
return $this->render('index', [
@@ -251,11 +308,148 @@ class ItemsController extends Controller
}
/**
+ * ÐмпоÑÑиÑование ÑÑÑок ÑоваÑов из маÑÑива
+ */
+ public function doImport($arrayRows)
+ {
+ // ÐниÑиализаÑÐ¸Ñ ÑÑÑÑÑиков
+ $arrayReturn = [
+ 'countRows' => count($arrayRows),
+ 'countImported' => 0,
+ 'countExists' => 0,
+ 'countErrors' => 0,
+ 'errors' => '',
+ ];
+
+ // ÐÑовеÑка налиÑÐ¸Ñ ÐºÐ»ÑÑевÑÑ
полей
+ if ((!isset($arrayRows[ 0 ][ 'model' ]))
+ || (!isset($arrayRows[ 0 ][ 'type' ]))
+ || (!isset($arrayRows[ 0 ][ 'invent' ]))
+ || (!isset($arrayRows[ 0 ][ 'location' ]))
+ || (!isset($arrayRows[ 0 ][ 'region' ]))
+ || (!isset($arrayRows[ 0 ][ 'date' ]))
+ )
+ {
+ // СообÑение об оÑибке
+ $arrayReturn[ 'countErrors' ] = count($arrayRows);
+ $arrayReturn[ 'errors' ] .= '
' . Yii::t('import', 'Skip all. Key column(s) "model", "type", "invent", "location", "region", "date" not found: ') . print_r($arrayRows[0], TRUE);
+ }
+ else
+ {
+ // ÐÑоÑмоÑÑим веÑÑ Ð¼Ð°ÑÑив
+ foreach($arrayRows as $row)
+ {
+ // ÐÐлÑÑим меÑÑоположениÑ
+ $location = LocationsController::addIfNeed($row); // ÐолÑÑение иденÑиÑикаÑоÑа ÑаÑположениÑ
+ if ( $location[ 'id' ] === FALSE)
+ {
+ // СообÑим об оÑибке
+ $arrayReturn[ 'countErrors' ]++;
+ $arrayReturn[ 'errors' ] .= '
' . $location[ 'error' ];
+ }
+ else
+ {
+ // ÐопÑобÑем найÑи или добавиÑÑ Ð¿ÑедмеÑ/обоÑÑдование
+ $item = $this->addIfNeed($row);
+ if ($item[ 'id' ] === FALSE)
+ {
+ $arrayReturn[ 'countErrors' ]++;
+ $arrayReturn[ 'errors' ] .= '
' . $item[ 'error' ];
+ }
+ else
+ {
+ // ÐÑовеÑка, ÑÑо пÑедмеÑ/обоÑÑдование Ñже бÑли в базе
+ $item = Items::find()->where([ 'id' => $item[ 'id' ]])->one();
+ if ($item->checked === TRUE)
+ {
+ $arrayReturn[ 'countExists' ]++;
+ }
+ else
+ {
+ $state = isset($row[ 'status' ]) ? StatusController::addIfNeed($row) : StatusController::addIfNeed([ 'status' => 'Склад' ]);
+ if ( $state[ 'id' ] === FALSE )
+ {
+ // СообÑим об оÑибке
+ $arrayReturn[ 'countErrors' ]++;
+ $arrayReturn[ 'errors' ] .= '
' . $state[ 'error' ];
+ }
+ else
+ {
+ // ÐовÑй пÑедмеÑ/обоÑÑдование. ÐÑобÑем добавиÑÑ Ð¿ÐµÑвое пеÑемеÑение
+ // ÐÑовеÑка ÑÑо поÑледнее пеÑемеÑение Ñакое же, как и импоÑÑиÑÑемое
+ $moving = Moving::find()->where([ 'item_id' => $item[ 'id' ]])->all();
+ $flag = false;
+ if (count($moving) > 0)
+ {
+ // ÐÑизнак, ÑÑо поÑледнее пеÑемеÑение Ñовпало Ñ Ð¸Ð¼Ð¿Ð¾ÑÑиÑÑемÑм
+ $flag = $moving[ count($moving) - 1 ]->location_id == $location[ 'id' ];
+ }
+ // ÐÑовеÑим, ÑÑо ÑÑÑеÑÑвÑÑÑÐ°Ñ Ð·Ð°Ð¿Ð¸ÑÑ Ð¿ÐµÑемеÑÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÑÑе добавлÑемой
+ $moving = Moving::find()->where([ 'item_id' => $item[ 'id' ]])->andWhere([ '>', 'date', $row[ 'date' ]])->all();
+ if ($flag || count($moving) > 0)
+ {
+ // ÐобавлÑÑÑ Ð·Ð°Ð¿Ð¸ÑÑ Ð´Ð¾ ÑÑÑеÑÑвÑÑÑиÑ
нелÑзÑ.
+ $arrayReturn[ 'countExists' ]++;
+ }
+ else
+ {
+ // ÐÑовеÑим, еÑÑÑ Ð»Ð¸ Ñже Ñакое пеÑемеÑение
+ $moving = Moving::find()->where([ 'item_id' => $item[ 'id' ], 'date' => $row[ 'date' ]])->orderBy([ 'id' => SORT_ASC ])->all();
+ if (count($moving) == 0)
+ {
+ // Такой ÑÑанзакÑии Ð½ÐµÑ ÐµÑÑ.
+ $moving = new Moving();
+ $moving->date = $row[ 'date' ];
+ $moving->state_id = $state[ 'id' ];
+ $moving->item_id = $item[ 'id' ];
+ $moving->location_id = $location[ 'id' ];
+ $moving->comment = Yii::t('import', 'Import: {comment}', $row);
+
+ if ($moving->validate() && $moving->save())
+ {
+ // ÐапиÑаали пеÑвое движение
+ $arrayReturn[ 'countImported' ]++;
+ }
+ else
+ {
+ // ÐапиÑÑ Ð½Ðµ ÑдалаÑÑ, пÑобÑем ÑдалиÑÑ Ð¿ÑедмеÑ/обоÑÑдование
+ Items::find()->where([ 'id' => $item[ 'id' ], 'checked' => FALSE ])->one()->delete();
+ // СообÑим об оÑибке
+ $arrayReturn[ 'countErrors' ]++;
+ $arrayReturn[ 'errors' ] .= '
' . Yii::t('import', 'Moving: {date} (') . $moving->errors['date'][0]. Yii::t('import', '), Inventory number:{invent}, model: {model}, location: {location} ( {region} )' , $row);
+ }
+ }
+ else
+ {
+ // Такое пеÑемеÑение Ñже бÑло
+ $arrayReturn[ 'countExists' ]++;
+ // Удаление дÑбликаÑов, еÑли вдÑÑг они обÑазовалиÑÑ
+ if (count($moving) > 1)
+ {
+ // пеÑебеÑÑм вÑе запиÑи Ñо вÑоÑой и Ñдалим иÑ
.
+ for ($i = 1; $i < count($moving); $i++)
+ {
+ $moving[$i]->delete();
+ }
+ }
+ }
+ }
+ unset($moving);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // ÐозвÑÐ°Ñ ÑезÑлÑÑаÑа импоÑÑа
+ return $arrayReturn;
+ }
+
+ /**
* ÐмпоÑÑ Ð´Ð°Ð½Ð½ÑÑ
из Ñайла csv
- * СÑÑÑкÑÑÑа Ñайла даннÑÑ
пÑи вÑгÑÑзке из 1С:
+ * СÑÑÑкÑÑÑа Ñайла даннÑÑ
пÑи вÑгÑÑзке из 1С: (Ðолонки могÑÑ Ð¼ÐµÐ½ÑÑÑÑÑ.
* | â п/п | | ÐÑедмеÑ/обоÑÑдование | | | | | | | ÐнвенÑаÑнÑй Ð½Ð¾Ð¼ÐµÑ | ÐаÑеÑиалÑно оÑвеÑÑвенное лиÑо | | | ÐеÑÑо ÑазмеÑÐµÐ½Ð¸Ñ | Регион/подÑазделение | ÐолиÑеÑÑво |
- * | 0 | 1| 2 | 3| 4| 5| 6| 7| 8| 9 |10 |11|12|13 |14 |15 |
- * | A | B| C | D| E| F| G| H| I| J | K | L| M| N | O | P |
* Так как 1С из коÑобки не ÑÐ¼ÐµÐµÑ Ð²ÑгÑÑжаÑÑ ÑоÑÐ¼Ñ Ð² .csv, Ñо пÑиÑ
одиÑÑÑ ÑнаÑала вÑгÑÑзиÑÑ Ð² .xls(x), и Ñже из MS Excel/Lible office Calc ÑоÑ
ÑанÑÑÑ Ð² .csv
*/
public function actionImport()
@@ -264,31 +458,30 @@ class ItemsController extends Controller
return $this->redirect(['site/index']);
}
$model = new Import();
- $count = 0;
- $counti = 0;
- $skip = 0;
- $existi = 0;
- $errors = '';
$message = '';
$searchModel = new ItemsSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
if (Yii::$app->request->isPost)
{
- $nppColumnName = Yii::t('import', 'No. in order');
- $itemColumnName = Yii::t('import', 'Primary means');
- $netColumnName = Yii::t('import', 'Network name');
- $inventColumnName = Yii::t('import', 'Inventory number');
- $molColumnName = Yii::t('import', 'Financially responsible person');
- $osColumnName = Yii::t('import', 'Operation system');
- $macColumnName = Yii::t('import', 'MAC address');
- $serialColumnName = Yii::t('import', 'Serial number');
- $ProdictColumnName = Yii::t('import', 'Product number');
- $modelNumberColumnName = Yii::t('import', 'Model number');
- $dateColumnName = Yii::t('import', 'Date of acceptance for registration');
- $locationColumnName = Yii::t('import', 'Location');
- $regionColumnName = Yii::t('import', 'Region');
- $typeColumnName = Yii::t('import', 'Type');
-
+ $rows = [];
+ $columns = [];
+ $columnsNames = [
+ 'npp' => Yii::t('import', 'No. in order'),
+ 'model' => Yii::t('import', 'Primary means'),
+ 'netname' => Yii::t('import', 'Network name'),
+ 'invent' => Yii::t('import', 'Inventory number'),
+ 'comment' => Yii::t('import', 'Financially responsible person'),
+ 'os' => Yii::t('import', 'Operation system'),
+ 'mac' => Yii::t('import', 'MAC address'),
+ 'serial' => Yii::t('import', 'Serial number'),
+ 'product' => Yii::t('import', 'Product number'),
+ 'modelnumber' => Yii::t('import', 'Model number'),
+ 'date' => Yii::t('import', 'Date of acceptance for registration'),
+ 'location' => Yii::t('import', 'Location'),
+ 'region' => Yii::t('import', 'Region'),
+ 'type' => Yii::t('import', 'Type'),
+ 'status' => Yii::t('import', 'State'),
+ ];
$model->filecsv = UploadedFile::getInstance($model, 'filecsv');
if ($model->upload())
{
@@ -298,197 +491,126 @@ class ItemsController extends Controller
{
if (strcasecmp($model->filecsv->extension, 'csv') === 0 )
{
- while (($row = fgetcsv($handle, 1024, ';')) !== false )
+ // ÐоÑÑÑоÑное ÑÑение CSV Ñайла
+ while (($row = fgetcsv($handle, 2048, ';')) !== false )
{
- if (intval($row[ 0 ]) . '' == $row[ 0 ])
+ // Ðока не ÑобÑÐ°Ð½Ñ Ð¸Ð½Ð´ÐµÐºÑÑ ÑÑолбÑов из Ñапки
+ if (count($columns) == 0)
{
- $location = $row[ 13 ];
- $region = $row[ 14 ];
- $count++;
- $location_id = LocationsController::addIfNeed([ 'name' => $location, 'region' => $region ]);
- if ($location_id !== FALSE)
+ // ÐÑем ÑÑÑÐ¾ÐºÑ Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ¾Ð¼ ÑаблиÑÑ
+ if ( stripos($row[0], $columnsNames[ 'npp' ]) !== FALSE )
{
- $invent = $row[ 9 ];
- if (count(Items::find()->where([ 'like', 'invent', $invent ])->all()) == 0)
+ // ÐеÑебиÑаем вÑе колонки
+ foreach ($row as $key => $item)
{
- $model_ = $row[ 2 ];
- $comment = Yii::t('moving', 'Imported. {comment}', [ 'comment' => $row[ 10 ] ]);
- $item_id = $this::addIfNeed([ 'invent' => $invent, 'model' => $model_, 'comment' => $comment ]);
- if ( $item_id !== FALSE)
+ // ÐеÑебиÑаем вÑе Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ¾Ð² колонок
+ foreach($columnsNames as $name => $text)
{
- $date = date('d.m.Y');
- $state_id = StatusController::addIfNeed([ 'name' => 'Склад' ]);
- if ($state_id === FALSE)
- {
- $state_id = NULL;
- } // СоÑÑоÑние пÑедмеÑа/обоÑÑдование
-
- $moving = new Moving();
- $moving->date = $date;
- $moving->item_id = $item_id;
- $moving->state_id = $state_id;
- $moving->location_id = $location_id;
- $moving->comment = $comment;
- if ($moving->validate() && $moving->save())
+ // ÐÑли название Ñовпало,
+ if (stripos($item, $text) !== FALSE)
{
- $counti++;
- } // Ðобавление пеÑемеÑение
- else
- {
- Items::find([ 'id' => $item_id ])->delete();
- $skip++;
- $errors .= '
Ðвижение: ' . implode(';', $row);
- } // Ðе ÑдалоÑÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ð¿ÐµÑемеÑение
- unset($moving);
+ // СоÑ
ÑанÑем индек колонки
+ $columns[ $name ] = $key;
+ }
}
- } // ÐÑедмеÑ/обоÑÑдование добавлено
+ }
+ }
+ }
+ else
+ {
+ // ÐеÑебиÑаем пÑедмеÑÑ/обоÑÑдование (ÐÐ¾Ð¼ÐµÑ Ð¿Ð¾ поÑÑÐ´ÐºÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ бÑÑÑ ÑелÑм ÑиÑлом)
+ if (ctype_digit(str_replace(' ', '', $row[ $columns[ 'npp' ]])))
+ {
+ // ÐаполнÑем оÑеÑеднÑÑ ÑÑÑÐ¾ÐºÑ Ð´Ð»Ñ ÑаблиÑÑ
+ $line = [];
+ foreach ($columns as $key => $index)
+ {
+ $line[ $key ] = trim(str_replace("\t", ' ', $row[ $index ])); // ÐаменÑем ÑабÑлÑÑоÑÑ Ð½Ð° пÑÐ¾Ð±ÐµÐ»Ñ Ð¸ ÑдалÑем ведÑÑие и ведомÑе пÑобелÑ.
+ }
+ // ÐбÑабоÑка даÑÑ
+ if (isset($line[ 'date' ]))
+ {
+ if ($line[ 'date' ] == '#NULL!') $line[ 'date' ] = date('d.m.Y');
+ }
else
{
- $existi++;
- } // ÐÑедмеÑ/обоÑÑдование Ñже еÑÑÑ
+ $line[ 'date' ] = date('d.m.Y');
+ }
+ array_push($rows, $line);
}
- else
- {
- $skip++;
- $errors .= '
ÐеÑÑо ÑаÑположениÑ: ' . implode(';', $row);
- } // не ÑдалоÑÑ Ð½Ð°Ð¹Ñи или добавиÑÑ Ð¼ÐµÑÑо ÑазмеÑениÑ
- } // СÑÑока Ñ Ð´Ð°Ð½Ð½Ñми
+ }
} // ÐеÑÐµÐ±Ð¾Ñ ÑÑÑок Ñайла
- } else // xls ÑайлÑ
+ }
+ else // xls(x) ÑайлÑ
{
- $fileName = 'upload/' . $model->filecsv->baseName . '.' . $model->filecsv->extension;
$inputFileType = \PHPExcel_IOFactory::identify($fileName); // ÐолÑÑение Ñипа даннÑÑ
в Ñайле
$excelReader = \PHPExcel_IOFactory::createReader($inputFileType); // Создание поÑока ÑÑÐµÐ½Ð¸Ñ Ð¸Ð· Ñайла
$excelObj = $excelReader->load($fileName); // ÐÑкÑÑÑие Ñайла
$worksheet = $excelObj->getSheet(0); // РабоÑаем ÑолÑко Ñ Ð¿ÐµÑвÑм лиÑÑом (обÑÑно ÑÑда вÑгÑÑÐ¶Ð°ÐµÑ 1С)
// ÐндекÑÑ ÑÑеек
- $modelInd = NULL;
- $nameInd = NULL;
- $inventInd = NULL;
- $commentInd = NULL;
- $osInd = NULL;
- $macInd = NULL;
- $serialInd = NULL;
- $productInd = NULL;
- $modelnumberInd = NULL;
- $dateInd = NULL;
- $locationInd = NULL;
- $regionInd = NULL;
- $typeInd = NULL;
// Цикл по вÑем ÑÑÑокам
- $rowNum = 0;
- $lastColumn = $worksheet->getHighestColumn();
foreach ($worksheet->getRowIterator() as $row)
{
- $rowNum++;
$cellIterator = $row->getCellIterator(); // ÐолÑÑаем иÑеÑаÑÐ¾Ñ ÑÑеек в ÑÑÑоке
$cellIterator->setIterateOnlyExistingCells(FALSE); // УказÑваем пÑовеÑÑÑÑ Ð´Ð°Ð¶Ðµ не ÑÑÑановленнÑе ÑÑейки
-
- //$myRow = []; // ÐаÑÑив ÑÑеек иÑклÑÑиÑелÑно Ð´Ð»Ñ ÑеÑÑиÑованиÑ
- $flag = FALSE; // ÐÑизнак ÑÑÑоки Ñапки
- if ($inventInd === NULL) // Ðока не найдена Ñапка, пÑовеÑÑем ÑÑÑокÑ
- foreach($cellIterator as $key => $cell)
+
+ if (count($columns) == 0) // Ðока не найдена Ñапка, пÑовеÑÑем ÑÑÑокÑ
+ {
+ $flag = FALSE;
+ foreach ($cellIterator as $key => $item)
{
- if (($key == 'A') && (stripos($cell->getValue(), 'â') !== FALSE) ) $flag = TRUE; // ÐÑли ÑÑÑока Ñапка, ÑÑÑановим Ñлаг
-
- if ($flag) // РабоÑаем Ñ Ñапкой
+ if (($key == 'A') && (stripos($item->getCalculatedValue(), $columnsNames[ 'npp' ]) !== FALSE)) $flag = TRUE;
+ if ($flag)
{
- $counti = $rowNum;
- $val = $cell->getValue(); // ÐолÑÑаем знаÑение ÑÑейки
- if (stripos($val, 'ÐÑновное ÑÑедÑÑво') !== FALSE) $modelInd = $key; // ФикÑиÑÑем колонкÑ, в коÑоÑой пÑедмеÑ/обоÑÑдование
- if (stripos($val, 'СеÑевое имÑ') !== FALSE) $nameInd = $key; // ФикÑиÑÑем колонкÑ, в коÑоÑой ÑеÑевое имÑ
- if (stripos($val, 'ÐнвенÑаÑнÑй номеÑ') !== FALSE) $inventInd = $key; // ФикÑиÑÑем колонкÑ, в коÑоÑой инвенÑаÑнÑй номеÑ
- if (stripos($val, 'ÐÐÐ') !== FALSE) $commentInd = $key; // ФикÑиÑÑем колонкÑ, в коÑоÑой ÐомменÑаÑии
- if (stripos($val, 'ÐпеÑаÑÐ¸Ð¾Ð½Ð½Ð°Ñ ÑиÑÑема') !== FALSE) $osInd = $key; // ФикÑиÑÑем колонкÑ, в коÑоÑой опеÑаÑÐ¸Ð¾Ð½Ð½Ð°Ñ ÑиÑÑема
- if (stripos($val, 'СеÑевой адÑеÑ') !== FALSE) $macInd = $key; // ФикÑиÑÑем колонкÑ, в коÑоÑой ÑеÑевой адÑеÑ
- if (stripos($val, 'СеÑийнÑй номеÑ') !== FALSE) $serialInd = $key; // ФикÑиÑÑем колонкÑ, в коÑоÑой ÑеÑийнÑй номеÑ
- if (stripos($val, 'Ðод пÑодÑкÑа') !== FALSE) $productInd = $key; // ФикÑиÑÑем колонкÑ, в коÑоÑой код пÑодÑкÑа
- if (stripos($val, 'ÐÐ¾Ð¼ÐµÑ Ð¼Ð¾Ð´ÐµÐ»Ð¸') !== FALSE) $modelnumberInd = $key; // ФикÑиÑÑем колонкÑ, в коÑоÑой Ð½Ð¾Ð¼ÐµÑ Ð¼Ð¾Ð´ÐµÐ»Ð¸
- if (stripos($val, 'ÐаÑа') !== FALSE) $dateInd = $key; // ФикÑиÑÑем колонкÑ, в коÑоÑой даÑа поÑÑановки на ÑÑÑÑ
- if (stripos($val, 'ÐФÐ') !== FALSE) $locationInd = $key; // ФикÑиÑÑем колонкÑ, в коÑоÑой меÑÑо Ñ
ÑанениÑ
- if (stripos($val, 'ÐеÑÑо Ñ
ÑанениÑ') !== FALSE) $regionInd = $key; // ФикÑиÑÑем колонкÑ, в коÑоÑой Ñегион/подÑазделение
- if (stripos($val, 'Тип') !== FALSE) $typeInd = $key; // ФикÑиÑÑем колонкÑ, в коÑоÑой Ñип обоÑÑдованиÑ
+ foreach ($columnsNames as $name => $text)
+ {
+ if (stripos($item->getCalculatedValue(), $text) !== FALSE)
+ {
+ $columns[ $name ] = $key;
+ }
+ }
}
-
- //array_push($myRow, '['.$key.']:' . $cell->getValue()); // Ðаполнение маÑÑива ÑÑеек
}
+ }
else
{
- $npp = str_replace(' ', '', $worksheet->getCell('A'.$rowNum)->getValue());
- if (ctype_digit($npp))
+ $flag = FALSE;
+ $line = [];
+ foreach ($cellIterator as $key => $item)
{
- if (($modelInd === NULL) || ($inventInd === NULL) || ($locationInd === NULL) || ($regionInd === NULL))
+ if ($key == $columns[ 'npp' ])
{
- $errors .= '
одно из важнÑÑ
полей оÑÑÑÑÑÑвÑеÑ';
- break;
+ $npp = str_replace(' ', '', $item->getCalculatedValue());
+ if (ctype_digit($npp)) $flag = TRUE;
}
- $location = $worksheet->getCell($locationInd . $rowNum)->getValue();
- $region = $worksheet->getCell($regionInd . $rowNum)->getValue();
- $location_id = LocationsController::addIfNeed([ 'name' => $location, 'region' => $region ]); // ÐолÑÑение иденÑиÑикаÑоÑа ÑаÑположениÑ
- if ($location_id !== FALSE)
+ if ($flag)
{
- $count++; // ÐоÑÑиÑаем ÑÑÑÐ¾ÐºÑ Ð¾Ð±Ð¾ÑÑдованиÑ
- $invent = $worksheet->getCell($inventInd . $rowNum)->getValue(); // ÐнвенÑаÑнÑй номеÑ
- if (count(Items::find()->where([ 'like', 'invent', $invent ])->all()) == 0)
- {
- $model_ = $worksheet->getCell($modelInd . $rowNum)->getValue();
- $comment = $commentInd !== NULL ? Yii::t('moving', 'Imported. {comment}', [ 'comment' => $worksheet->getCell($commentInd . $rowNum)->getValue() ]) : NULL; // ÐомменÑаÑии
- $item_id = ($typeInd !== NULL ?
- $this::addIfNeed([ 'invent' => $invent, 'model' => $model_, 'comment' => $comment, 'typeName' => $worksheet->getCell($typeInd . $rowNum)->getValue() ]) :
- $this::addIfNeed([ 'invent' => $invent, 'model' => $model_, 'comment' => $comment ])); // ÐолÑÑение иденÑиÑикаÑоÑа обоÑÑдованиÑ
- if ($item_id !== FALSE)
- {
- $date = $dateInd !== NULL ? $worksheet->getCell($dateInd . $rowNum)->getValue() : date('d.m.Y');
- if ($date == '#NULL!') $date = date('d.m.Y');
-
- $state_id = StatusController::addIfNeed([ 'name' => 'Склад' ]);
- if ($state_id === FALSE)
- {
- $state_id = NULL;
- } // СоÑÑоÑние пÑедмеÑа/обоÑÑдование
-
- $moving = new Moving();
- $moving->date = $date;
- $moving->item_id = $item_id;
- $moving->state_id = $state_id;
- $moving->location_id = $location_id;
- $moving->comment = $comment;
- if ($moving->validate() && $moving->save())
- {
- $counti++;
- } // Ðобавление пеÑемеÑение
- else
- {
- Items::find([ 'id' => $item_id, 'checked' => FALSE ])->one()->delete();
- $skip++;
- $errors .= '
Ðвижение: ('. implode('===',$moving->errors['date']) . '::' . $moving->date .')' . implode(';', $worksheet->rangeToArray('A' . $rowNum . ':' . $lastColumn . $rowNum, NULL, NULL, FALSE)[0]);
- } // Ðе ÑдалоÑÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ð¿ÐµÑемеÑение
- unset($moving);
- }
- } // ÐÑедмеÑ/обоÑÑдование добавлено
- else
+ foreach($columns as $keym => $index)
{
- $existi++;
- } // ÐÑедмеÑ/обоÑÑдование Ñже еÑÑÑ
+ if ($index == $key) $line[ $keym ] = trim(str_replace("\t", ' ', $item->getCalculatedValue()));
+ }
}
- else
- {
- $skip++;
- $errors .= '
ÐеÑÑо ÑаÑположениÑ: ' . implode(';', $worksheet->rangeToArray('A' . $rowNum . ':' . $lastColumn . $rowNum, NULL, NULL, FALSE)[0]);
- } // не ÑдалоÑÑ Ð½Ð°Ð¹Ñи или добавиÑÑ Ð¼ÐµÑÑо ÑазмеÑениÑ
}
- else
+ if ($flag)
{
- $skip++;
+ if (isset($line[ 'date' ]))
+ {
+ if ($line[ 'date' ] == '#NULL!') $line[ 'date' ] = date('d.m.Y');
+ }
+ else
+ {
+ $line[ 'date' ] = date('d.m.Y');
+ }
+ array_push($rows, $line);
}
}
}
}
fclose($handle);
+ $res = $this->doImport($rows);
}
- $message .= Yii::t('items', 'Read {count} records.
Imported {counti} Items.
Exists {exist} Items.
Error read {skip} records.
{errors}',
- [ 'counti' => $counti, 'count' => $count, 'exist' => $existi, 'skip' => $skip, 'errors' => $errors ]);
+ $message .= Yii::t('items', 'Read {countRows} records.
Imported {countImported} Items.
Exists {countExists} Items.
Error read {countErrors} records.
{errors}', $res);
}
}
return $this->render('import',[
@@ -508,7 +630,7 @@ class ItemsController extends Controller
public function actionView($id)
{
if (! User::canPermission('updateRecord') ) {
- return $this->redirect(['index']);
+ return $this->redirect([ 'index', 'id' => $id ]);
}
return $this->render('view', [
'model' => $this->findModel($id),