From e7b16f20ce22b67107cf0cdf683e5b613b2d9aa2 Mon Sep 17 00:00:00 2001 From: Roland Schneider Date: Wed, 23 Mar 2016 08:15:37 +0100 Subject: [PATCH 1/6] add inventory changes --- backend/assets/InventoryItemIndexAsset.php | 31 ++++++ backend/controllers/InventoryController.php | 4 +- .../controllers/InventoryItemController.php | 94 ++++++++++++++++++- backend/models/InventoryItemForm.php | 4 +- backend/models/InventoryItemSearch.php | 45 +++++---- backend/views/inventory-item/_form.php | 2 - backend/views/inventory-item/_search.php | 32 ++----- backend/views/inventory-item/index.php | 32 +++++-- backend/views/inventory-item/update.php | 36 ++++++- backend/views/inventory/_form.php | 9 ++ backend/web/js/inventory.item.index.js | 58 ++++++++++++ common/models/Inventory.php | 49 +++++++++- common/models/InventoryItem.php | 17 +++- common/models/Product.php | 32 +++++++ ...er__inventory__add__column__id_account.php | 30 ++++++ 15 files changed, 413 insertions(+), 62 deletions(-) create mode 100644 backend/assets/InventoryItemIndexAsset.php create mode 100644 backend/web/js/inventory.item.index.js create mode 100644 console/migrations/m160321_082725_alter__inventory__add__column__id_account.php diff --git a/backend/assets/InventoryItemIndexAsset.php b/backend/assets/InventoryItemIndexAsset.php new file mode 100644 index 0000000..27f1ec7 --- /dev/null +++ b/backend/assets/InventoryItemIndexAsset.php @@ -0,0 +1,31 @@ + + * @since 2.0 + */ +class InventoryItemIndexAsset extends AssetBundle +{ + public $basePath = '@webroot'; + public $baseUrl = '@web'; + public $css = [ + ]; + public $js = [ + 'js/app.js', + 'js/inventory.item.index.js', + ]; + public $depends = [ + 'backend\assets\AppAsset', + 'yii\jui\JuiAsset', + 'common\assets\TypeAheadAsset', + ]; +} diff --git a/backend/controllers/InventoryController.php b/backend/controllers/InventoryController.php index 432469c..7fba9f3 100644 --- a/backend/controllers/InventoryController.php +++ b/backend/controllers/InventoryController.php @@ -86,12 +86,12 @@ class InventoryController extends Controller $model->id_user = \Yii::$app->user->id; if ($model->load(Yii::$app->request->post()) && $model->save()) { - return $this->redirect(['view', 'id' => $model->id_inventory]); +// return $this->redirect(['view', 'id' => $model->id_inventory]); } else { + } return $this->render('create', [ 'model' => $model, ]); - } } /** diff --git a/backend/controllers/InventoryItemController.php b/backend/controllers/InventoryItemController.php index f5d1fb0..1091b42 100644 --- a/backend/controllers/InventoryItemController.php +++ b/backend/controllers/InventoryItemController.php @@ -10,6 +10,8 @@ use yii\web\NotFoundHttpException; use yii\filters\VerbFilter; use backend\models\InventoryItemForm; use common\models\Inventory; +use yii\helpers\Url; +use common\models\Product; /** * InventoryItemController implements the CRUD actions for InventoryItem model. @@ -42,14 +44,95 @@ class InventoryItemController extends Controller $searchModel = new InventoryItemSearch(['inventory' => $inventory]); $dataProvider = $searchModel->search(Yii::$app->request->queryParams); + + $productOptions = Product::buildProductAndInventoryGroupList(); + + if ($searchModel->output == 'xls') { + $this->downloadIndexXls($dataProvider); + }else{ + Url::remember(Url::current(),"inventory-item-index"); + } + return $this->render('index', [ 'model' => $inventory, 'searchModel' => $searchModel, 'dataProvider' => $dataProvider, + 'productOptions' =>$productOptions ]); } + + protected function downloadIndexXls($dataProvider){ + + + $defs = [['item_created_at', 'Létrehozva'], + ['item_name', 'Termék/Termék csoport'], + ['user_username', 'Felhasználó'], + ['item_count_prev', 'Előző leltár (db)'], + ['item_count_sold', 'Eladott mennyiség (db)'], + ['item_count_in', 'Beszerzett mennyiség (db)'], + ['item_count', 'Leltározott mennyiség (db)'], + ['item_difference', 'Különbség (db)'], + ['item_count_system', 'Rendszer szerinti mennyiség (db)'], + ]; + $cols = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P']; + + $models = $dataProvider->getModels (); + $objPHPExcel = new \PHPExcel (); + + $sheet = $objPHPExcel->setActiveSheetIndex ( 0 ); + /** + * Termék azonosító Termék neve Termék szám Termék vonalkód Termék raktáron Termék eladva + */ + $row = 1; + $col = 0; + foreach ( $defs as $def ) { + $sheet->setCellValue ( $cols [$col] . $row, $def [1] ); + $col ++; + } + + foreach ( $models as $model ) { + $row ++; + $col = 0; + foreach ( $defs as $def ) { + $sheet->setCellValue ( $cols [$col] . $row, $model[$def [0]] ); + $col ++; + } + } + + $styleArray = array ( + 'font' => array ( + 'bold' => true + ) + ); + // 'color' => array('rgb' => 'FF0000'), + // 'size' => 15, + // 'name' => 'Verdana' + + + + foreach ( range ( 'A', 'I' ) as $columnID ) { + $sheet->getColumnDimension ( $columnID )->setAutoSize ( true ); + $sheet->getStyle ( $columnID . '1' )->applyFromArray ( $styleArray ); + } + + // Redirect output to a client’s web browser (Excel5) + header ( 'Content-Type: application/vnd.ms-excel' ); + header ( 'Content-Disposition: attachment;filename="leltar.xls"' ); + header ( 'Cache-Control: max-age=0' ); + // If you're serving to IE 9, then the following may be needed + header ( 'Cache-Control: max-age=1' ); + // If you're serving to IE over SSL, then the following may be needed + header ( 'Expires: Mon, 26 Jul 1997 05:00:00 GMT' ); // Date in the past + header ( 'Last-Modified: ' . gmdate ( 'D, d M Y H:i:s' ) . ' GMT' ); // always modified + header ( 'Cache-Control: cache, must-revalidate' ); // HTTP/1.1 + header ( 'Pragma: public' ); // HTTP/1.0 + $objWriter = \PHPExcel_IOFactory::createWriter ( $objPHPExcel, 'Excel5' ); + $objWriter->save ( 'php://output' ); + exit (); + } + /** * Displays a single InventoryItem model. * @param integer $id @@ -93,12 +176,21 @@ class InventoryItemController extends Controller public function actionUpdate($id) { $model = $this->findModel($id); + $inventory = Inventory::findOne($model->id_inventory); if ($model->load(Yii::$app->request->post()) && $model->save()) { - return $this->redirect(['view', 'id' => $model->id_inventory_item]); + + $prev = Url::previous("inventory-item-index"); + if ( isset($prev)){ + return $this->redirect($prev); + }else{ + return $this->redirect([ 'index', 'id' => $inventory->id_inventory ]); + } + } else { return $this->render('update', [ 'model' => $model, + 'inventory' => $inventory, ]); } } diff --git a/backend/models/InventoryItemForm.php b/backend/models/InventoryItemForm.php index 8ef2ce4..59f92cd 100644 --- a/backend/models/InventoryItemForm.php +++ b/backend/models/InventoryItemForm.php @@ -89,7 +89,6 @@ class InventoryItemForm extends Model{ } public function save(){ - if ( $this->validate()) { $this->loadLastInventory(); @@ -128,10 +127,9 @@ class InventoryItemForm extends Model{ $this->inventory_item = $item; return true; - } - return false; } + protected function loadProductIn(){ $query = new Query(); $query->select(['sum(procurement.count) as total_in']); diff --git a/backend/models/InventoryItemSearch.php b/backend/models/InventoryItemSearch.php index ef2ea49..31d45ec 100644 --- a/backend/models/InventoryItemSearch.php +++ b/backend/models/InventoryItemSearch.php @@ -20,7 +20,10 @@ use common\models\Inventory; class InventoryItemSearch extends InventoryItem { public $inventory; - + public $output; + public $item_name; + public $item_type; + public $item_id; /** * @inheritdoc */ @@ -28,6 +31,10 @@ class InventoryItemSearch extends InventoryItem { return [ [['id_inventory_item', 'id_inventory', 'count_in', 'count_sold', 'count', 'type', 'id_product', 'id_inventory_group', 'id_user'], 'integer'], + ['output', 'string'], + ['item_name', 'string'], + ['item_type', 'string'], + ['item_id', 'integer'], ]; } @@ -50,6 +57,7 @@ class InventoryItemSearch extends InventoryItem public function search($params) { $query = new Query(); + $query->select([ 'inventory_item.id_inventory_item as item_id_inventory_item', 'inventory_item.created_at as item_created_at', @@ -65,6 +73,7 @@ class InventoryItemSearch extends InventoryItem 'inventory_prev.name as inventory_prev_name', new Expression('(inventory_item.count - ( inventory_item.count_prev + inventory_item.count_in - inventory_item.count_sold )) as item_difference'), ]); + $query->from(InventoryItem::tableName()); @@ -78,9 +87,19 @@ class InventoryItemSearch extends InventoryItem $query->andWhere( ['inventory_item.id_inventory' => $this->inventory->id_inventory] ); + $this->load($params); + + if (!$this->validate()) { + // uncomment the following line if you do not want to return any records when validation fails + // $query->where('0=1'); + return $dataProvider; + } + $dataProvider = new ActiveDataProvider( ['query' => $query , + 'pagination' => ( empty($this->output) ? [] : false ), 'sort' => [ + 'defaultOrder' => ['item_name' => SORT_ASC], 'attributes' => Helper::mkYiiSortItems([ ['item_created_at', 'item_created_at'], ['item_name', 'item_name'], @@ -100,22 +119,16 @@ class InventoryItemSearch extends InventoryItem ] ] ); - $this->load($params); + - if (!$this->validate()) { - // uncomment the following line if you do not want to return any records when validation fails - // $query->where('0=1'); - return $dataProvider; - } - - $query->andFilterWhere([ - 'inventory_item.id_inventory_item' => $this->id_inventory_item, - 'inventory_item.type' => $this->type, - 'inventory_item.id_product' => $this->id_product, - 'inventory_item.id_inventory_group' => $this->id_inventory_group, - 'inventory_item.id_user' => $this->id_user, - 'inventory_item.created_at' => $this->created_at, - ]); + if ( !empty($this->item_type) && is_numeric($this->item_id) ){ + if ( $this->item_type == 'product'){ + $query->andFilterWhere(['product.id_product' => $this->item_id]); + }else if ( $this->item_type == 'group' ){ + $query->andFilterWhere(['inventory_group.id_inventory_group' => $this->item_id]); + } + } + return $dataProvider; } diff --git a/backend/views/inventory-item/_form.php b/backend/views/inventory-item/_form.php index 0343c8d..e804144 100644 --- a/backend/views/inventory-item/_form.php +++ b/backend/views/inventory-item/_form.php @@ -12,8 +12,6 @@ use yii\widgets\ActiveForm; - field($model, 'name')->textInput(['autocomplete' => 'off']) ?> - field($model, 'id_product')->hiddenInput()->label(false) ?> field($model, 'type')->hiddenInput()->label(false) ?> field($model, 'count')->textInput() ?> diff --git a/backend/views/inventory-item/_search.php b/backend/views/inventory-item/_search.php index 1491d16..9214ca1 100644 --- a/backend/views/inventory-item/_search.php +++ b/backend/views/inventory-item/_search.php @@ -11,36 +11,22 @@ use yii\widgets\ActiveForm;