[ 'class' => VerbFilter::className(), 'actions' => [ 'delete' => ['post'], ], ], ]; } /** * Lists all InventoryItem models. * @param $id * @return mixed * @throws NotFoundHttpException */ public function actionIndex($id) { $inventory = Inventory::findOne($id); if (!isset($inventory)) { throw new NotFoundHttpException("Leltár nem található"); } $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 ]); } /** * @param $dataProvider */ 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']; /** @noinspection PhpUndefinedMethodInspection */ $models = $dataProvider->getModels(); /** @noinspection PhpUndefinedClassInspection */ $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 /** @noinspection PhpUndefinedClassInspection */ $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output'); exit (); } /** * Displays a single InventoryItem model. * @param integer $id * @return mixed */ public function actionView($id) { return $this->render('view', [ 'model' => $this->findModel($id), ]); } /** * Creates a new InventoryItem model. * If creation is successful, the browser will be redirected to the 'view' page. * @param Integer $id the item id * @return mixed * @throws \Exception */ public function actionCreate($id) { $model = new InventoryItemForm([ 'id_inventory' => $id ]); $model->read(); if ($model->load(Yii::$app->request->post()) && $model->save()) { return $this->redirect(['inventory-item/index', 'id' => $model->inventory->id_inventory]); } else { return $this->render('create', [ 'model' => $model, ]); } } /** * Updates an existing InventoryItem model. * If update is successful, the browser will be redirected to the 'view' page. * @param integer $id * @return mixed * @throws NotAcceptableHttpException * @throws NotFoundHttpException */ public function actionUpdate($id) { $model = $this->findModel($id); $inventory = Inventory::findOne($model->id_inventory); if (!$inventory->isOpen()) { throw new NotAcceptableHttpException("A leltár elem nem található"); } if ($model->load(Yii::$app->request->post()) && $model->validate()) { $model->recalculateTotalPriceBrutto(); $model->save(false); $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, ]); } } /** * @param integer $id the inventory item id * @return string * @throws Exception * @throws NotAcceptableHttpException * @throws NotFoundHttpException */ public function actionUpdateItem($id) { $model = $this->findModel($id); $inventory = Inventory::findOne($model->id_inventory); if (Yii::$app->request->getIsAjax()) { $arr = [ 'id_inventory_item' => $model->id_inventory_item, 'productName' => $model->productName, 'count' => $model->count, 'type' => $model->type ]; return json_encode($arr); } else { if ($model->load(Yii::$app->request->post()) && $model->validate()) { $model->recalculateTotalPriceBrutto(); if ( $model->save(false) ){ \Yii::$app->session->setFlash('success', "Mennyiség elmentve: " . $model->productName . ' - ' .$model->count . ' db'); }else{ \Yii::error("Nem sikerült elmenteni a leltár element."); throw new Exception("Nem sikerült elmenteni a leltár element"); } return $this->redirect(['update-item', 'id' => $model->id_inventory_item]); } $query = new Query(); $query->select([ 'product.id_product as product_id_product', 'product.name as product_name', 'account.name as account_name', 'product_category.name as product_category_name', 'inventory_item.id_inventory_item as inventory_item_id_inventory_item', ]); $query->from(['product']); $query ->innerJoin("product_category", "product_category.id_product_category = product.id_product_category") ->innerJoin("account", "product.id_account = account.id_account") ->innerJoin("inventory_item", "inventory_item.id_product = product.id_product") ->andWhere(["inventory_item.id_inventory" => $model->id_inventory])->all(); $productsRaw = $query->all(); $products = []; foreach ($productsRaw as $product ){ $arr = []; $arr['id_inventory_item'] = $product['inventory_item_id_inventory_item']; $arr['id_product'] = $product['product_id_product']; $arr['name'] = $product['product_name'] ."( ". $product['account_name'].")"; $arr['product_name'] = $product['account_name'] ; $products[] = $arr; } if (!$inventory->isOpen()) { throw new NotAcceptableHttpException("A leltár elem nem található"); } return $this->render("update_item", [ 'model' => $model, 'inventory' => $inventory, 'products' => $products ]); } } /** * Deletes an existing InventoryItem model. * If deletion is successful, the browser will be redirected to the 'index' page. * @param integer $id * @return mixed */ public function actionDelete($id) { $item = $this->findModel($id); $id_inventory = $item->id_inventory; $item->delete(); return $this->redirect(['index', 'id' => $id_inventory]); } /** * Finds the InventoryItem model based on its primary key value. * If the model is not found, a 404 HTTP exception will be thrown. * @param integer $id * @return InventoryItem the loaded model * @throws NotFoundHttpException if the model cannot be found */ protected function findModel($id) { if (($model = InventoryItem::findOne($id)) !== null) { return $model; } else { throw new NotFoundHttpException('The requested page does not exist.'); } } }