From 595f66382058994e1fb28bbc62853aea96fe06b0 Mon Sep 17 00:00:00 2001 From: Roland Schneider Date: Sun, 3 Jan 2016 18:29:39 +0100 Subject: [PATCH] add hidden account, cart insert/delete add hidden account support add delete/payout buttons to carts add backend product sales with pdf export add frontend product sales with pdf export add frontend ticket sales with pdf export --- backend/components/AdminMenuStructure.php | 1 + backend/controllers/TransferController.php | 45 ++- backend/models/TransferListSearch.php | 9 +- backend/models/TransferSaleSearch.php | 43 +++ backend/models/TransferSearch.php | 8 + backend/views/transfer/_export_btn_sale.php | 29 ++ backend/views/transfer/_result_sale.php | 142 +++++++++ backend/views/transfer/_search_sale.php | 77 +++++ backend/views/transfer/sale.php | 115 +++++++ common/config/main.php | 2 +- common/messages/hu/frontend/product.php | 1 + common/messages/hu/frontend/transfer.php | 5 +- common/models/Account.php | 2 +- common/models/Transfer.php | 1 + common/models/TransferListSearch.php | 13 +- common/models/TransferSaleSearch.php | 286 ++++++++++++++++++ common/models/TransferTicketSearch.php | 230 ++++++++++++++ composer.json | 4 +- composer.lock | 84 ++++- ...ter__table__card__make__number__unique.php | 30 ++ frontend/components/FrontendMenuStructure.php | 2 + frontend/controllers/TransferController.php | 154 ++++++++++ frontend/models/ProductSaleForm.php | 9 + frontend/models/ReceptionForm.php | 2 +- frontend/models/TicketCreate.php | 16 +- frontend/views/product/_sale_form.php | 7 +- frontend/views/product/_user_cart.php | 3 + frontend/views/product/sale.php | 2 + frontend/views/ticket/_form.php | 7 +- frontend/views/ticket/create.php | 2 + frontend/views/transfer/_export_btn_sale.php | 29 ++ .../views/transfer/_export_btn_ticket.php | 29 ++ frontend/views/transfer/_result_sale.php | 142 +++++++++ frontend/views/transfer/_result_ticket.php | 136 +++++++++ frontend/views/transfer/_search_sale.php | 77 +++++ frontend/views/transfer/_search_ticket.php | 78 +++++ frontend/views/transfer/list.php | 2 + frontend/views/transfer/sale.php | 115 +++++++ frontend/views/transfer/search_tickets.php | 77 +++++ frontend/views/transfer/tickets.php | 111 +++++++ frontend/web/js/product.sell.js | 19 +- frontend/web/js/ticket.sell.js | 18 +- frontend/web/js/transferlist.js | 14 + 43 files changed, 2154 insertions(+), 24 deletions(-) create mode 100644 backend/models/TransferSaleSearch.php create mode 100644 backend/views/transfer/_export_btn_sale.php create mode 100644 backend/views/transfer/_result_sale.php create mode 100644 backend/views/transfer/_search_sale.php create mode 100644 backend/views/transfer/sale.php create mode 100644 common/models/TransferSaleSearch.php create mode 100644 common/models/TransferTicketSearch.php create mode 100644 console/migrations/m160103_172422_alter__table__card__make__number__unique.php create mode 100644 frontend/views/transfer/_export_btn_sale.php create mode 100644 frontend/views/transfer/_export_btn_ticket.php create mode 100644 frontend/views/transfer/_result_sale.php create mode 100644 frontend/views/transfer/_result_ticket.php create mode 100644 frontend/views/transfer/_search_sale.php create mode 100644 frontend/views/transfer/_search_ticket.php create mode 100644 frontend/views/transfer/sale.php create mode 100644 frontend/views/transfer/search_tickets.php create mode 100644 frontend/views/transfer/tickets.php diff --git a/backend/components/AdminMenuStructure.php b/backend/components/AdminMenuStructure.php index 7652e58..c39631c 100644 --- a/backend/components/AdminMenuStructure.php +++ b/backend/components/AdminMenuStructure.php @@ -81,6 +81,7 @@ class AdminMenuStructure{ $items = []; $items[] = ['label' => 'Termékek', 'url' => ['/product/index'] ]; $items[] = ['label' => 'Beszerzések', 'url' => ['/procurement/index'] ]; + $items[] = ['label' => 'Részletes eladások', 'url' => ['/transfer/sale' ,'TransferSaleSearch[start]' =>$todayDatetime,'TransferSaleSearch[end]' => $tomorrowDatetime ] ]; $this->menuItems[] = ['label' => 'Termékek', 'url' => $this->emptyUrl, 'items' => $items ]; diff --git a/backend/controllers/TransferController.php b/backend/controllers/TransferController.php index 441934c..5bea588 100644 --- a/backend/controllers/TransferController.php +++ b/backend/controllers/TransferController.php @@ -11,6 +11,9 @@ use common\models\Account; use common\models\User; use backend\models\TransferSummarySearch; use backend\models\TransferListSearch; +use backend\models\TransferSaleSearch; +use common\models\ProductCategory; +use common\models\Product; /** * TransferController implements the CRUD actions for Transfer model. @@ -25,7 +28,7 @@ class TransferController extends \backend\controllers\BackendController 'rules' => [ // allow authenticated users [ - 'actions' => [ 'index','view','summary','list' ], + 'actions' => [ 'index','view','summary','list',"sale","sale-pdf" ], 'allow' => true, 'roles' => ['admin','employee','reception'], ], @@ -78,6 +81,46 @@ class TransferController extends \backend\controllers\BackendController } + /** + * Lists all Transfer models. + * @return mixed + */ + public function actionSale() + { + $searchModel = new TransferSaleSearch(); + $searchModel->accounts = Account::read(); + $searchModel->users = User::read(); + $searchModel->productCategories = ProductCategory::read(); + $searchModel->productOptions = Product::read(); + + $searchModel->search(Yii::$app->request->queryParams); + + + return $this->render('sale', [ + 'searchModel' => $searchModel, + ]); + + } + + public function actionSalePdf(){ + $searchModel = new TransferSaleSearch(); + $searchModel->accounts = Account::read(); + $searchModel->users = User::read(); + $searchModel->productCategories = ProductCategory::read(); + $searchModel->productOptions = Product::read(); + + $searchModel->search(Yii::$app->request->queryParams); + + + $mpdf=new \mPDF('utf-8', 'A4-L'); + $mpdf->WriteHTML($this->renderPartial('_result_sale', [ + 'searchModel' => $searchModel, + ])); + $mpdf->Output('MyPDF.pdf', 'D'); + exit; + + } + /** * Lists all Transfer models. * @return mixed diff --git a/backend/models/TransferListSearch.php b/backend/models/TransferListSearch.php index 0b3f50a..088740b 100644 --- a/backend/models/TransferListSearch.php +++ b/backend/models/TransferListSearch.php @@ -5,6 +5,7 @@ namespace backend\models; use Yii; use common\models\Transfer; use common\components\RoleDefinition; +use common\models\Account; /** * TransferSearch represents the model behind the search form about `common\models\Transfer`. */ @@ -15,7 +16,13 @@ class TransferListSearch extends \common\models\TransferListSearch if ( !RoleDefinition::isAdmin() ){ $query->innerJoin("user_account_assignment",'transfer.id_account = user_account_assignment.id_account' ); $query->andWhere(['user_account_assignment.id_user' => Yii::$app->user->id ]); + $query->andWhere(['account.type' => Account::TYPE_ALL ]); + + if ( RoleDefinition::isReception()){ + $query->andWhere(['transfer.id_user' => Yii::$app->user->id ]); + } + } - } + } } diff --git a/backend/models/TransferSaleSearch.php b/backend/models/TransferSaleSearch.php new file mode 100644 index 0000000..a63f885 --- /dev/null +++ b/backend/models/TransferSaleSearch.php @@ -0,0 +1,43 @@ +innerJoin("user_account_assignment",'transfer.id_account = user_account_assignment.id_account' ); + $query->andWhere(['user_account_assignment.id_user' => Yii::$app->user->id ]); + + if ( RoleDefinition::isReception()){ + $query->andWhere(['transfer.id_user' => Yii::$app->user->id ]); + } + + $query->andWhere(['account.type' => Account::TYPE_ALL ]); + } + + } + + + + + +} diff --git a/backend/models/TransferSearch.php b/backend/models/TransferSearch.php index e2bd2a3..671ac5b 100644 --- a/backend/models/TransferSearch.php +++ b/backend/models/TransferSearch.php @@ -67,11 +67,19 @@ class TransferSearch extends Transfer public function search($params) { $query = Transfer::find(); + + $query->innerJoinWith('account'); if ( !RoleDefinition::isAdmin() ){ $query->innerJoin("user_account_assignment",'transfer.id_account = user_account_assignment.id_account' ); $query->andWhere(['user_account_assignment.id_user' => Yii::$app->user->id ]); + + $query->andWhere(['account.type' => Account::TYPE_ALL ]); + + if ( RoleDefinition::isReception()){ + $query->andWhere(['transfer.id_user' => Yii::$app->user->id ]); + } } $dataProvider = new ActiveDataProvider([ diff --git a/backend/views/transfer/_export_btn_sale.php b/backend/views/transfer/_export_btn_sale.php new file mode 100644 index 0000000..7bc053d --- /dev/null +++ b/backend/views/transfer/_export_btn_sale.php @@ -0,0 +1,29 @@ + + + + + Html::getAttributeValue($model, "start"), + Html::getInputName($model, "end") =>Html::getAttributeValue($model, "end"), + Html::getInputName($model, "id_account") => Html::getAttributeValue($model, "id_account"), + Html::getInputName($model, "id_user") => Html::getAttributeValue($model, "id_user"), + Html::getInputName($model, "category") => Html::getAttributeValue($model, "category"), + Html::getInputName($model, "id_product") => Html::getAttributeValue($model, "id_product"), + Html::getInputName($model, "status") => Html::getAttributeValue($model, "status"), + ] ), + ['class' => 'btn btn-primary']) + ?> + + + diff --git a/backend/views/transfer/_result_sale.php b/backend/views/transfer/_result_sale.php new file mode 100644 index 0000000..33f7002 --- /dev/null +++ b/backend/views/transfer/_result_sale.php @@ -0,0 +1,142 @@ + + +
+ +

Termék eladások

+ + + + + + + + + + + + + + + + + + + + + + + + + +
getAttributeLabel('start')) ?>getAttributeLabel('end')) ?>
getAttributeLabel('id_account')) ?>id_account) ){ + echo"Mind" ; + }else{ + $account = Account::findOne($searchModel->id_account) ; + if ( $account != null ){ + echo $account->name; + } + }?>getAttributeLabel('id_user')) ?>id_user) ){ + echo"Mind" ; + }else{ + $user = User::findOne($searchModel->id_user) ; + if ( $user != null ){ + echo $user->username; + } + }?>
getAttributeLabel('category')) ?>category) ){ + echo"Mind" ; + }else{ + $category = ProductCategory::findOne($searchModel->category) ; + if ( $category != null ){ + echo $category->name; + } + }?>getAttributeLabel('id_product')) ?>id_product) ){ + echo"Mind" ; + }else{ + $product = Product::findOne($searchModel->id_product) ; + if ( $product != null ){ + echo $product->name; + } + }?>
getAttributeLabel('status')) ?>status) ){ + echo"Mind" ; + }else{ + $statuses = Transfer::statuses(); + $status = ""; + if (array_key_exists($searchModel->status, $statuses) ){ + echo $statuses[$searchModel->status]; + } + }?>
+
+
+ Összesen: productMoney; ?> Ft +
+
+ + + + + + + + + + + + + + + + + + products as $p ){?> + + + + + + + + + + + + + + + + +
TKiadvaFizetveKasszaFelhasználóKategóriaTermékEgység árMennyiségÖsszeg
Ft Db FT
+ products ) == 0) { + ?> + Nincs találat + +
diff --git a/backend/views/transfer/_search_sale.php b/backend/views/transfer/_search_sale.php new file mode 100644 index 0000000..c00483a --- /dev/null +++ b/backend/views/transfer/_search_sale.php @@ -0,0 +1,77 @@ + + +'Mind']+ HtmlHelper::mkAccountOptions( $model->accounts ); + $userOptions = ['' => 'Mind'] + HtmlHelper::mkOptions($model->users,'id','username'); + $productOptions = ['' => 'Mind'] + HtmlHelper::mkOptions($model->productOptions,'id_product','name'); + $productCategoryOptions = ['' => 'Mind'] + HtmlHelper::mkOptions($model->productCategories,'id_product_category','name'); + $transferStatusOptions = ['' => 'Mind'] + Transfer::statuses(); +?> + + diff --git a/backend/views/transfer/sale.php b/backend/views/transfer/sale.php new file mode 100644 index 0000000..bc84394 --- /dev/null +++ b/backend/views/transfer/sale.php @@ -0,0 +1,115 @@ +title = Yii::t ( 'frontend/transfer', 'Product sale detailed' ); +$this->params ['breadcrumbs'] [] = $this->title; +?> + + +
+ +

title) ?>

+ render('_search_sale', ['model' => $searchModel]); ?> + render('_export_btn_sale', ['model' => $searchModel]); ?> + + +
+ +

Termék eladások

+
+
+ Összesen: productMoney; ?> Ft +
+
+ + + + + + + + + + + + + + + + + + products as $p ){?> + + + + + + + + + + + + + + + + +
TranzakcióKiadvaFizetveKasszaFelhasználóVásárlóKategóriaTermékEgység árMennyiségÖsszeg
Ft Db FT
+ products ) == 0) { + ?> + Nincs találat + +
+ + + + + +
diff --git a/common/config/main.php b/common/config/main.php index b1ed419..5fea936 100644 --- a/common/config/main.php +++ b/common/config/main.php @@ -24,7 +24,7 @@ return [ 'datetimeFormat' => 'yyyy.MM.dd HH:mm', 'timeFormat' => 'HH:mm', 'locale' => 'hu-Hu', - 'timeZone' => 'UTC', + 'timeZone' => 'Europe/Budapest', 'defaultTimeZone' => 'UTC', 'nullDisplay' => "-", ], diff --git a/common/messages/hu/frontend/product.php b/common/messages/hu/frontend/product.php index 408021f..c841203 100644 --- a/common/messages/hu/frontend/product.php +++ b/common/messages/hu/frontend/product.php @@ -44,6 +44,7 @@ return [ 'Reset' => 'Reset', 'Sale Price' => 'Eladási ár', 'Search' => 'Keresés', + 'Sell' => 'Fizetve', 'Sell product' => 'Termék eladás', 'Stock' => 'Raktáron', 'Stock {stock} lower then {count}!' => 'Raktáron {stock} kevesebb mint {count}!', diff --git a/common/messages/hu/frontend/transfer.php b/common/messages/hu/frontend/transfer.php index 720d116..7bce960 100644 --- a/common/messages/hu/frontend/transfer.php +++ b/common/messages/hu/frontend/transfer.php @@ -29,5 +29,8 @@ return [ 'Update {modelClass}: ' => '{modelClass} módosítás: ', 'pieces' => 'db', 'Transfers Summary' => 'Bevétel', - 'Daily transfers' => 'Napi bevételek' + 'Daily transfers' => 'Napi bevételek', + 'Ticket sale detailed' => 'Bérlet eladás részletes', + 'Product sale detailed' => 'Termék eladás részletes', + 'Sales detailed' => 'Termék eladás részletes', ]; diff --git a/common/models/Account.php b/common/models/Account.php index a51e780..59c9438 100644 --- a/common/models/Account.php +++ b/common/models/Account.php @@ -96,7 +96,7 @@ class Account extends \yii\db\ActiveRecord static function types() { return [ self::TYPE_ALL => Yii::t('common/account', 'Account'), -// self::TYPE_VALUE_HIDDEN => Yii::t('common/account', 'Only the name is visible'), + self::TYPE_VALUE_HIDDEN => Yii::t('common/account', 'Only the name is visible'), ]; } diff --git a/common/models/Transfer.php b/common/models/Transfer.php index 87c1e1f..19c679c 100644 --- a/common/models/Transfer.php +++ b/common/models/Transfer.php @@ -355,6 +355,7 @@ class Transfer extends \common\models\BaseFitnessActiveRecord $transfer->status = $status; $transfer->type = Transfer::TYPE_TICKET; + $transfer->direction = Transfer::DIRECTION_IN; $transfer->id_object = $ticket->id_ticket; diff --git a/common/models/TransferListSearch.php b/common/models/TransferListSearch.php index 4e7f64e..d4da060 100644 --- a/common/models/TransferListSearch.php +++ b/common/models/TransferListSearch.php @@ -157,10 +157,14 @@ class TransferListSearch extends Transfer $query->andWhere(['user_account_assignment.id_user' => Yii::$app->user->id ]); $query->andWhere(['transfer.id_user' => Yii::$app->user->id ]); + + $query->andWhere(['account.type' => Account::TYPE_ALL ]); + } protected function addQueryFilters($query){ - + $query->innerJoin("account", "transfer.id_account = account.id_account"); + $this->addAccountConstraint($query); $query->andFilterWhere([ @@ -323,12 +327,12 @@ class TransferListSearch extends Transfer protected function readTickets(){ $query = (new \yii\db\Query()); - $query->select(['user.username as user_name', 'account.name as account_name','ticket_type.name as ticket_type_name' , 'transfer.count AS ticket_count', 'transfer.money AS ticket_money','transfer.item_price AS ticket_item_price', 'transfer.created_at as ticket_created_at','transfer.paid_at as ticket_paid_at']); + $query->select([ 'customer.name as customer_name', 'user.username as user_name', 'account.name as account_name','ticket_type.name as ticket_type_name' , 'transfer.count AS ticket_count', 'transfer.money AS ticket_money','transfer.item_price AS ticket_item_price', 'transfer.created_at as ticket_created_at','transfer.paid_at as ticket_paid_at']); $query->from('transfer'); $query->andWhere(['transfer.type' => Transfer::TYPE_TICKET]); $query->innerJoin("ticket", "ticket.id_ticket = transfer.id_object"); + $query->innerJoin("customer","customer.id_customer = transfer.id_customer"); $query->innerJoin("ticket_type", "ticket.id_ticket_type = ticket_type.id_ticket_type"); - $query->innerJoin("account", "transfer.id_account = account.id_account"); $query->innerJoin("user", "transfer.id_user = user.id"); $query->orderBy(['transfer.created_at' => SORT_ASC]); $this->addQueryFilters($query); @@ -352,7 +356,7 @@ class TransferListSearch extends Transfer $query->innerJoin("sale", "sale.id_sale = transfer.id_object"); $query->innerJoin("product", "sale.id_product = product.id_product"); $query->innerJoin("product_category", "product.id_product_category = product_category.id_product_category"); - $query->innerJoin("account", "transfer.id_account = account.id_account"); + $query->innerJoin("user", "transfer.id_user = user.id"); $query->orderBy(['transfer.created_at' => SORT_ASC]); $this->addQueryFilters($query); @@ -372,7 +376,6 @@ class TransferListSearch extends Transfer $query->from('transfer'); $query->andWhere(['transfer.type' => Transfer::TYPE_MONEY_MOVEMENT_OUT]); $query->innerJoin("money_movement", "money_movement.id_money_movement = transfer.id_object"); - $query->innerJoin("account", "transfer.id_account = account.id_account"); $query->innerJoin("user", "transfer.id_user = user.id"); $query->orderBy(['transfer.created_at' => SORT_ASC]); $this->addQueryFilters($query); diff --git a/common/models/TransferSaleSearch.php b/common/models/TransferSaleSearch.php new file mode 100644 index 0000000..bdec5fd --- /dev/null +++ b/common/models/TransferSaleSearch.php @@ -0,0 +1,286 @@ +Yii::$app->formatter->datetimeFormat , 'timestampAttribute' => 'timestampStart' ,'timestampAttributeFormat' => 'yyyy-MM-dd HH:mm' ,'timeZone' => 'UTC' ], + [[ 'end' , ], 'date' ,'format' =>Yii::$app->formatter->datetimeFormat , 'timestampAttribute' => 'timestampEnd' ,'timestampAttributeFormat' => 'yyyy-MM-dd HH:mm' ,'timeZone' => 'UTC' ], + + [ [ 'id_account','id_user' ,'category','status','id_product' ] , 'integer'], + ['types', 'each', 'rule' => ['integer']], + ]; + } + + + public function attributeLabels(){ + $result = parent::attributeLabels(); + $result['category'] = "Termék kategória"; + $result['id_product'] = "Termék"; + return $result; + } + + + /** + * Creates data provider instance with search query applied + * + * @param array $params + * + * @return ActiveDataProvider + */ + public function search($params) + { + $query = Transfer::find(); + + $dataProvider = new ActiveDataProvider([ + 'query' => $query, + ]); + + + + $this->load($params); + + + if (!$this->validate()) { + } + + + + $this->readProductsMoney(); + $this->calcTotal(); + +// $this->readProductsByCategory(); +// $this->readProductsByCategoryDetailed(); + + + $this->readProducts(); + + } + + protected function calcTotal(){ + $this->total = 0; + $this->total += $this->productMoney; + } + + + protected function addAccountConstraint($query){ + $query->innerJoin("user_account_assignment",'transfer.id_account = user_account_assignment.id_account' ); + $query->andWhere(['user_account_assignment.id_user' => Yii::$app->user->id ]); + + $query->andWhere(['transfer.id_user' => Yii::$app->user->id ]); + + $query->andWhere(['account.type' => Account::TYPE_ALL ]); + + } + + protected function addQueryFilters($query){ + $query->innerJoin("account", "transfer.id_account = account.id_account"); + + $this->addAccountConstraint($query); + + $query->andFilterWhere([ + 'transfer.id_account' => $this->id_account, + 'transfer.id_user' => $this->id_user, + 'transfer.type' => $this->type, + 'transfer.id_user' => $this->id_user, + 'product_category.id_product_category' => $this->category, + 'transfer.status' => $this->status, + 'product.id_product' => $this->id_product, + ]); + + $created_condition = ['and',[ '>=', 'transfer.created_at', $this->timestampStart ] ,[ '<', 'transfer.created_at', $this->timestampEnd ] ]; + $paid_condition = ['and',[ '>=', 'transfer.paid_at', $this->timestampStart ] ,[ '<', 'transfer.paid_at', $this->timestampEnd ] ]; + + + $query->andFilterWhere(['or' , $created_condition , $paid_condition]); + +// $query->andWhere(['transfer.status' => Transfer::STATUS_PAID]); + + } + + + + protected function readProductsByCategory(){ + + + $query = (new \yii\db\Query()); + $query->select(['coalesce(sum(transfer.money),0) AS product_money', 'coalesce(sum(transfer.count),0) as category_count', 'product_category.name as category_name']); + $query->from('transfer'); + $query->groupBy(['product_category.id_product_category','product_category.name']); + $query->andWhere(['transfer.type' => Transfer::TYPE_PRODUCT]); + $query->innerJoin("sale", "sale.id_sale = transfer.id_object"); + $query->innerJoin("product", "sale.id_product = product.id_product"); + $query->innerJoin("product_category", "product.id_product_category = product_category.id_product_category"); + $this->addQueryFilters($query); + + $this->productMoneies = $query->all(); + + } + + + protected function readProductsByCategoryDetailed(){ + + $formatted = []; + $formatted['categories'] = []; + $formatted['total'] = 0; + $prevCategory = null; + $curCategory = null; + + $category = null; + + $query = (new \yii\db\Query()); + $query->select(['product_category.id_product_category as product_category_id','product_category.name as product_category_name', 'product.name as product_name' ,'coalesce(sum(transfer.money),0) AS product_money', 'coalesce(sum(transfer.count),0) as product_count']); + $query->from('transfer'); + $query->groupBy(['product.id_product','product.name','product_category.id_product_category','product_category.name']); + $query->andWhere(['transfer.type' => Transfer::TYPE_PRODUCT]); + $query->innerJoin("sale", "sale.id_sale = transfer.id_object"); + $query->innerJoin("product", "sale.id_product = product.id_product"); + $query->innerJoin("product_category", "product.id_product_category = product_category.id_product_category"); + $query->orderBy(['product_category.name' => SORT_ASC,'product.name' => SORT_ASC]); + $this->addQueryFilters($query); + + $result = $query->all(); + + foreach ($result as $row){ + $curCategory = $row['product_category_id']; + if ( $curCategory != $prevCategory ){ + //store last category + if ( $category != null ){ + $formatted['categories'][] = $category; + } + $prevCategory = $curCategory; + //create new category + $category = []; + $category['category'] = []; + $category['category']['name'] = $row['product_category_name']; + $category['category']['id'] = $row['product_category_id']; + $category['products'] = []; + $category['total'] = 0; + + } + $category['products'][] = $row; + $category['total'] += $row['product_money']; + $formatted['total'] += $row['product_money']; + + } + + if ( $category != null ){ + $formatted['categories'][]= $category; + } + + $this->productsByCategory = $formatted; + + } + + protected function readProductsMoney(){ + + + $query = (new \yii\db\Query()); + $query->select(['coalesce(sum(transfer.money),0) AS product_money' ]); + $query->from('transfer'); + $query->andWhere(['transfer.type' => Transfer::TYPE_PRODUCT]); + $query->innerJoin("sale", "sale.id_sale = transfer.id_object"); + $query->innerJoin("product", "sale.id_product = product.id_product"); + $query->innerJoin("product_category", "product.id_product_category = product_category.id_product_category"); + $this->addQueryFilters($query); + + $this->productMoney = $query->scalar(); + + } + + + + + + + protected function readProducts(){ + + $query = (new \yii\db\Query()); + $query->select([ 'transfer.id_transfer as id_transfer', 'customer.name as customer_name' ,'user.username as user_name','account.name as account_name' , 'product_category.name as product_category_name', 'product.name as product_name', 'transfer.money AS product_money', 'transfer.count AS product_count', 'transfer.money AS product_money','transfer.item_price AS product_item_price', 'transfer.created_at as product_created_at','transfer.paid_at as product_paid_at']); + $query->from('transfer'); + $query->andWhere(['transfer.type' => Transfer::TYPE_PRODUCT]); + $query->innerJoin("sale", "sale.id_sale = transfer.id_object"); + $query->innerJoin("product", "sale.id_product = product.id_product"); + $query->innerJoin("product_category", "product.id_product_category = product_category.id_product_category"); + $query->leftJoin("customer", "transfer.id_customer = customer.id_customer"); + $query->innerJoin("user", "transfer.id_user = user.id"); + $query->orderBy(['transfer.created_at' => SORT_ASC]); + $this->addQueryFilters($query); + + $this->products = $query->all(); + + for ($i = 0; $i < count($this->products) ;$i++ ){ + $this->products[$i]['product_created_at'] = Yii::$app->formatter->asDatetime($this->products[$i]['product_created_at'], 'yyyy.MM.dd HH:mm:ss'); + $this->products[$i]['product_paid_at'] = empty($this->products[$i]['product_paid_at'] ) ? '-' : Yii::$app->formatter->asDatetime($this->products[$i]['product_paid_at'], 'yyyy.MM.dd HH:mm:ss'); + } + + } + + + + +} diff --git a/common/models/TransferTicketSearch.php b/common/models/TransferTicketSearch.php new file mode 100644 index 0000000..cdbde94 --- /dev/null +++ b/common/models/TransferTicketSearch.php @@ -0,0 +1,230 @@ + 0, 'accounts' =>[] ]; +// public $totalsCreatedAtNotPaid= ['total' => 0, 'accounts' =>[]]; +// public $totalsCreatedAtPaid= ['total' => 0, 'accounts' =>[]]; +// public $totalsPaidAt= ['total' => 0, 'accounts' =>[]]; +// public $totalsPaidAtNotCreatedAt= ['total' => 0, 'accounts' =>[]]; + + + public $totals; + + public $accounts; + + public $types; + + public $users; + + + /** + * all money gained with ticket sell + * */ + public $ticketMoney; + /** + * total gained money + * */ + public $total; + + /** + * ticket sale statisitc + * */ + public $ticketStats; + + public $tickets; + + public $customer; + + public $ticketTypes; + public $id_ticket_type; + + + /** + * @inheritdoc + */ + public function rules() + { + return [ + + [[ 'start', ], 'date', 'format' =>Yii::$app->formatter->datetimeFormat , 'timestampAttribute' => 'timestampStart' ,'timestampAttributeFormat' => 'yyyy-MM-dd HH:mm' ,'timeZone' => 'UTC' ], + [[ 'end' , ], 'date' ,'format' =>Yii::$app->formatter->datetimeFormat , 'timestampAttribute' => 'timestampEnd' ,'timestampAttributeFormat' => 'yyyy-MM-dd HH:mm' ,'timeZone' => 'UTC' ], + + [ [ 'id_account','id_user' ,'id_ticket_type' ] , 'integer'], + ['types', 'each', 'rule' => ['integer']], + [['customer' ] , 'string' , 'max' => 200 ] + ]; + } + + + public function attributeLabels(){ + $result = parent::attributeLabels(); + $result['id_ticket_type'] = 'Bérlet típus'; + $result['customer'] = 'Vendég'; + return $result; + } + + + /** + * Creates data provider instance with search query applied + * + * @param array $params + * + * @return ActiveDataProvider + */ + public function search($params) + { + $query = Transfer::find(); + + $dataProvider = new ActiveDataProvider([ + 'query' => $query, + ]); + + + + $this->load($params); + + + if (!$this->validate()) { + } + + + + $this->readTicketMoney(); + $this->calcTotal(); + + $this->readTicketStas(); + + + $this->readTickets(); + + } + + protected function calcTotal(){ + $this->total = 0; + $this->total += $this->ticketMoney; + } + + + protected function addAccountConstraint($query){ + $query->innerJoin("user_account_assignment",'transfer.id_account = user_account_assignment.id_account' ); + $query->andWhere(['user_account_assignment.id_user' => Yii::$app->user->id ]); + + $query->andWhere(['transfer.id_user' => Yii::$app->user->id ]); + + $query->andWhere(['account.type' => Account::TYPE_ALL ]); + + } + + protected function addQueryFilters($query){ + $query->innerJoin("account", "transfer.id_account = account.id_account"); + + $this->addAccountConstraint($query); + + $query->andFilterWhere([ + 'transfer.id_account' => $this->id_account, + 'transfer.id_user' => $this->id_user, + 'transfer.type' => $this->type, + 'transfer.id_user' => $this->id_user, + 'ticket_type.id_ticket_type' => $this->id_ticket_type, + ]); + + $created_condition = ['and',[ '>=', 'transfer.created_at', $this->timestampStart ] ,[ '<', 'transfer.created_at', $this->timestampEnd ] ]; + $paid_condition = ['and',[ '>=', 'transfer.paid_at', $this->timestampStart ] ,[ '<', 'transfer.paid_at', $this->timestampEnd ] ]; + + + $query->andFilterWhere(['or' , $created_condition , $paid_condition]); + $query->andFilterWhere(['like' , 'LOWER(customer.name)' , strtolower( $this->customer ) ]); + + $query->andWhere(['transfer.status' => Transfer::STATUS_PAID]); + + } + + + protected function readTicketStas(){ + + $query = (new \yii\db\Query()); + $query->select(['ticket_type.name as ticket_type_name' , 'coalesce(sum(abs(transfer.count)),0) AS ticket_count', 'coalesce(sum(abs(transfer.money)),0) AS ticket_money']); + $query->from('transfer'); + $query->andWhere(['transfer.type' => Transfer::TYPE_TICKET]); + $query->innerJoin("ticket", "ticket.id_ticket = transfer.id_object"); + $query->innerJoin("ticket_type", "ticket.id_ticket_type = ticket_type.id_ticket_type"); + $query->innerJoin("customer","customer.id_customer = transfer.id_customer"); + $query->groupBy(['ticket_type.id_ticket_type','ticket_type.name']); + $this->addQueryFilters($query); + + + $this->ticketStats = $query->all(); + } + + + protected function readTicketMoney(){ + + $query = (new \yii\db\Query()); + $query->select([' coalesce(sum(abs(transfer.money)),0) AS ticket_money']); + $query->from('transfer'); + $query->andWhere(['transfer.type' => Transfer::TYPE_TICKET]); + $query->innerJoin("ticket", "ticket.id_ticket = transfer.id_object"); + $query->innerJoin("ticket_type", "ticket.id_ticket_type = ticket_type.id_ticket_type"); + $query->innerJoin("customer","customer.id_customer = transfer.id_customer"); + $this->addQueryFilters($query); + $this->ticketMoney = $query->scalar(); + } + + + + + + + + protected function readTickets(){ + $query = (new \yii\db\Query()); + $query->select([ 'customer.name as customer_name', 'user.username as user_name', 'account.name as account_name','ticket_type.name as ticket_type_name' , 'transfer.count AS ticket_count', 'transfer.money AS ticket_money','transfer.item_price AS ticket_item_price', 'transfer.created_at as ticket_created_at','transfer.paid_at as ticket_paid_at']); + $query->from('transfer'); + $query->andWhere(['transfer.type' => Transfer::TYPE_TICKET]); + $query->innerJoin("ticket", "ticket.id_ticket = transfer.id_object"); + $query->innerJoin("customer","customer.id_customer = transfer.id_customer"); + $query->innerJoin("ticket_type", "ticket.id_ticket_type = ticket_type.id_ticket_type"); + $query->innerJoin("user", "transfer.id_user = user.id"); + $query->orderBy(['transfer.created_at' => SORT_ASC]); + $this->addQueryFilters($query); + + + $this->tickets = $query->all(); + + for ($i = 0; $i < count($this->tickets) ;$i++ ){ + $this->tickets[$i]['ticket_created_at'] = Yii::$app->formatter->asDatetime($this->tickets[$i]['ticket_created_at'], 'yyyy.MM.dd HH:mm:ss'); + $this->tickets[$i]['ticket_paid_at'] = empty($this->tickets[$i]['ticket_paid_at'] ) ? '-' : Yii::$app->formatter->asDatetime($this->tickets[$i]['ticket_paid_at'], 'yyyy.MM.dd HH:mm:ss'); + } + + } + + + + +} diff --git a/composer.json b/composer.json index 99efb4e..2477402 100644 --- a/composer.json +++ b/composer.json @@ -26,7 +26,9 @@ "bower-asset/accounting": "^0.3.2", "dmstr/yii2-adminlte-asset": "2.*", "bassjobsen/bootstrap-3-typeahead": "^4.0", - "bower-asset/webcamjs": "^1.0" + "bower-asset/webcamjs": "^1.0", + "mpdf/mpdf": "^6.0", + "os/php-excel": "^2.1" }, "require-dev": { "yiisoft/yii2-codeception": "*", diff --git a/composer.lock b/composer.lock index 20dc733..bc88bf3 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "fa82e6ba1233a366a5f044d19a7bd69d", - "content-hash": "ea0b9fcfc8a270415b8f9292af1c17d3", + "hash": "e0ae7f422a0ca8c9297c28eefe9acd9b", + "content-hash": "6277b5f664f4bc22c02c689e701964a5", "packages": [ { "name": "almasaeed2010/adminlte", @@ -1802,6 +1802,86 @@ ], "time": "2014-11-09 19:54:17" }, + { + "name": "mpdf/mpdf", + "version": "v6.0.0", + "source": { + "type": "git", + "url": "https://github.com/mpdf/mpdf.git", + "reference": "a15743d030ce3b5b7be36c6e83f76589b27c3f2c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mpdf/mpdf/zipball/a15743d030ce3b5b7be36c6e83f76589b27c3f2c", + "reference": "a15743d030ce3b5b7be36c6e83f76589b27c3f2c", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=4.3.10" + }, + "type": "library", + "autoload": { + "classmap": [ + "mpdf.php", + "classes" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-1.0+" + ], + "authors": [ + { + "name": "Ian Back" + } + ], + "description": "A PHP class to generate PDF files from HTML with Unicode/UTF-8 and CJK support", + "homepage": "http://www.mpdf1.com/mpdf/index.php", + "keywords": [ + "pdf", + "php", + "utf-8" + ], + "time": "2015-03-01 10:27:49" + }, + { + "name": "os/php-excel", + "version": "2.1", + "target-dir": "PHPExcel", + "source": { + "type": "git", + "url": "https://github.com/ouardisoft/PHPExcel.git", + "reference": "1dcb280a82b94943a00d478eac099542aa0be2bd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ouardisoft/PHPExcel/zipball/1dcb280a82b94943a00d478eac099542aa0be2bd", + "reference": "1dcb280a82b94943a00d478eac099542aa0be2bd", + "shasum": "" + }, + "require": { + "php": ">=5.2.6" + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "LOUARDI Abdeltif", + "email": "louardi.abdeltif@yahoo.fr", + "homepage": "http://phphub.net" + } + ], + "description": "PHP Excel Library", + "homepage": "http://github.com/ouardisoft/PHPExcel", + "keywords": [ + "excel" + ], + "time": "2012-05-02 20:42:37" + }, { "name": "rmrevin/yii2-fontawesome", "version": "2.12.2", diff --git a/console/migrations/m160103_172422_alter__table__card__make__number__unique.php b/console/migrations/m160103_172422_alter__table__card__make__number__unique.php new file mode 100644 index 0000000..2bc2de3 --- /dev/null +++ b/console/migrations/m160103_172422_alter__table__card__make__number__unique.php @@ -0,0 +1,30 @@ +execute("ALTER IGNORE TABLE card ADD UNIQUE (number);"); + } + + public function down() + { + echo "m160103_172422_alter__table__card__make__number__unique cannot be reverted.\n"; + + return false; + } + + /* + // Use safeUp/safeDown to run migration code within a transaction + public function safeUp() + { + } + + public function safeDown() + { + } + */ +} diff --git a/frontend/components/FrontendMenuStructure.php b/frontend/components/FrontendMenuStructure.php index 11ce991..ebeb8f7 100644 --- a/frontend/components/FrontendMenuStructure.php +++ b/frontend/components/FrontendMenuStructure.php @@ -69,6 +69,8 @@ class FrontendMenuStructure{ ['label' => Yii::t('frontend/account-state','Close account state'), 'url' => ['/account-state/close'] ], ['label' => Yii::t('frontend/money-movement','Money movements'), 'url' => [ '/money-movement/index', 'MoneyMovementSearch[start]' => $this->start, 'MoneyMovementSearch[end]' => $this->tomorrow ] ], ['label' => Yii::t('frontend/transfer','Daily transfers'), 'url' => [ '/transfer/list', 'TransferListSearch[start]' => $this->start, 'TransferListSearch[end]' => $this->tomorrow ] ], + ['label' => Yii::t('frontend/transfer','Sales detailed'), 'url' => [ '/transfer/sale', 'TransferSaleSearch[start]' => $this->start, 'TransferSaleSearch[end]' => $this->tomorrow ] ], + ['label' => Yii::t('frontend/transfer','Ticket sale detailed'), 'url' => [ '/transfer/tickets', 'TransferTicketSearch[start]' => $this->start, 'TransferTicketSearch[end]' => $this->tomorrow ] ], ]; if ( $isadmin || Yii::$app->user->can('reception.transfers') ){ diff --git a/frontend/controllers/TransferController.php b/frontend/controllers/TransferController.php index 36a3bca..9a5d989 100644 --- a/frontend/controllers/TransferController.php +++ b/frontend/controllers/TransferController.php @@ -11,6 +11,14 @@ use yii\filters\VerbFilter; use frontend\models\TransferMoneyMovementSearch; use common\models\Account; use frontend\models\TransferListSearch; +use common\models\ShoppingCart; +use common\models\UserSoldItem; +use common\models\TransferSaleSearch; +use common\models\User; +use common\models\ProductCategory; +use common\models\Product; +use common\models\TransferTicketSearch; +use common\models\TicketType; /** * TransferController implements the CRUD actions for Transfer model. @@ -24,8 +32,21 @@ class TransferController extends Controller 'class' => VerbFilter::className(), 'actions' => [ 'delete' => ['post'], + 'payout' => ['post'], ], ], + 'access' => [ + 'class' => \yii\filters\AccessControl::className(), + 'rules' => [ + // allow authenticated users + [ +// 'actions' => [ 'index','view','summary','list',"sale","sale-pdf" ], + 'allow' => true, + 'roles' => ['admin','employee','reception'], + ], + // everything else is denied + ], + ], ]; } @@ -154,6 +175,38 @@ class TransferController extends Controller } */ + /** + * Deletes an existing Transfer model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * @param integer $id + * @return mixed + */ + public function actionPayout($id) + { + $transfer = $this->findModel($id); + $connection = \Yii::$app->db; + $transaction = $connection->beginTransaction(); + try { + $transfer->status = Transfer::STATUS_PAID; + $transfer->paid_at = date('Y-m-d H:i:s' ) ; + ShoppingCart::deleteAll([ 'id_transfer' => $transfer->id_transfer]); + UserSoldItem::deleteAll([ 'id_transfer' => $transfer->id_transfer]); + if ( $transfer->save() ){ + \Yii::$app->session->setFlash( 'success','Tranzakció kifizetve' ); + $transaction->commit(); + }else{ + throw new \Exception("Failed to save"); + } + + } catch(Exception $e) { + $transaction->rollback(); + \Yii::$app->session->setFlash( 'danger','Tranzakció kifizetése nem sikerült' ); + } + + + return $this->redirect(Yii::$app->request->referrer); + } + /** * Deletes an existing Transfer model. * If deletion is successful, the browser will be redirected to the 'index' page. @@ -166,6 +219,8 @@ class TransferController extends Controller $connection = \Yii::$app->db; $transaction = $connection->beginTransaction(); try { + ShoppingCart::deleteAll([ 'id_transfer' => $transfer->id_transfer]); + UserSoldItem::deleteAll([ 'id_transfer' => $transfer->id_transfer]); if ( $transfer->delete() ){ \Yii::$app->session->setFlash( 'success','Tranzakció törölve' ); $transaction->commit(); @@ -181,4 +236,103 @@ class TransferController extends Controller return $this->redirect(Yii::$app->request->referrer); } + + + protected function delete($id){ + $transfer = $this->findModel($id); + $connection = \Yii::$app->db; + $transaction = $connection->beginTransaction(); + try { + if ( $transfer->delete() ){ + \Yii::$app->session->setFlash( 'success','Tranzakció törölve' ); + $transaction->commit(); + }else{ + throw new \Exception("Failed to save"); + } + + } catch(Exception $e) { + $transaction->rollback(); + \Yii::$app->session->setFlash( 'danger','Tranzakció törlése nem sikerült' ); + } + } + + + /** + * Lists all Transfer models. + * @return mixed + */ + public function actionSale() + { + $searchModel = new TransferSaleSearch(); + $searchModel->accounts = Account::read(); + $searchModel->users = User::read(); + $searchModel->productCategories = ProductCategory::read(); + $searchModel->productOptions = Product::read(); + + $searchModel->search(Yii::$app->request->queryParams); + + + return $this->render('sale', [ + 'searchModel' => $searchModel, + ]); + + } + + public function actionSalePdf(){ + $searchModel = new TransferSaleSearch(); + $searchModel->accounts = Account::read(); + $searchModel->users = User::read(); + $searchModel->productCategories = ProductCategory::read(); + $searchModel->productOptions = Product::read(); + + $searchModel->search(Yii::$app->request->queryParams); + + + $mpdf=new \mPDF('utf-8', 'A4-L'); + $mpdf->WriteHTML($this->renderPartial('_result_sale', [ + 'searchModel' => $searchModel, + ])); + $mpdf->Output('eladasaim.pdf', 'D'); + exit; + + } + + + /** + * Lists all Transfer models. + * @return mixed + */ + public function actionTickets() + { + $searchModel = new TransferTicketSearch(); + $searchModel->accounts = Account::read(); + $searchModel->users = User::read(); + $searchModel->ticketTypes = TicketType::read(null, Account::readDefault()); + + $searchModel->search(Yii::$app->request->queryParams); + + + return $this->render('tickets', [ + 'searchModel' => $searchModel, + ]); + + } + + public function actionTicketsPdf(){ + $searchModel = new TransferTicketSearch(); + $searchModel->accounts = Account::read(); + $searchModel->users = User::read(); + $searchModel->ticketTypes = TicketType::read(null, Account::readDefault()); + + $searchModel->search(Yii::$app->request->queryParams); + + + $mpdf=new \mPDF('utf-8', 'A4-L'); + $mpdf->WriteHTML($this->renderPartial('_result_ticket', [ + 'searchModel' => $searchModel, + ])); + $mpdf->Output('eladdot_berletek_'. \Yii::$app->formatter->asDatetime(time()).'.pdf', 'D'); + exit; + + } } diff --git a/frontend/models/ProductSaleForm.php b/frontend/models/ProductSaleForm.php index bc9f298..fb36b3e 100644 --- a/frontend/models/ProductSaleForm.php +++ b/frontend/models/ProductSaleForm.php @@ -187,18 +187,27 @@ class ProductSaleForm extends Model protected function saveTransfer(){ $customer = null; + $paid_at; $status = Transfer::STATUS_PAID; if ( $this->isAppendToUserCart() ){ $status = Transfer::STATUS_NOT_PAID; }else if ( $this->isAppendToCustomerCart() ){ $status = Transfer::STATUS_NOT_PAID; $customer = $this->customer; + }else{ + $paid_at = date('Y-m-d H:i:s' ) ; } $this->transfer = Transfer::createProductTransfer($this->sale,$this->account, $this->discount, $this->currency, $this->count, $this->product,$status,$customer); if ( isset($this->comment)){ $this->transfer->comment = $this->comment; } + + if ( isset($paid_at)){ + $this->transfer->paid_at = $paid_at; + } + + $this->transfer->id_user = Yii::$app->user->id; $this->transfer->save(); } diff --git a/frontend/models/ReceptionForm.php b/frontend/models/ReceptionForm.php index 434af1e..e85ef51 100644 --- a/frontend/models/ReceptionForm.php +++ b/frontend/models/ReceptionForm.php @@ -44,7 +44,7 @@ class ReceptionForm extends Model $this->number = str_replace("ö", "0", $this->number); - $this->card = Card::find()->andWhere(['or',[ 'in','number' , [$this->number]], ['in','rfid_key' ,[ $this->number]]])->one(); + $this->card = Card::find()->andWhere(['or', [ 'in','number' , [$this->number]], ['and', ['in','rfid_key' ,[ $this->number] ],"trim(coalesce(rfid_key, '')) <>'' "]])->one(); if ( $this->card != null ){ $this->customer = $this->card->customer; $this->readValidTickets(); diff --git a/frontend/models/TicketCreate.php b/frontend/models/TicketCreate.php index 2824943..ff8d2aa 100644 --- a/frontend/models/TicketCreate.php +++ b/frontend/models/TicketCreate.php @@ -110,11 +110,25 @@ class TicketCreate extends Ticket{ protected function addTransfer(){ $transfer = Transfer::createTicketTransfer($this->_account, $this->_discount, null, 1, $this); -// $transfer->status = Transfer::STATUS_PAID; + + $status = Transfer::STATUS_PAID; + if ( $this->isAppendToUserCart() ){ + $status = Transfer::STATUS_NOT_PAID; + }else if ( $this->isAppendToCustomerCart() ){ + $status = Transfer::STATUS_NOT_PAID; + $customer = $this->customer; + }else { + $status = Transfer::STATUS_PAID; + $transfer->paid_at = date('Y-m-d H:i:s' ) ; + } + $transfer->status = $status; + + if ( isset($this->comment)){ $transfer->comment = $this->comment; } $transfer->id_user = \Yii::$app->user->id; + $transfer->id_customer = $this->customer->id_customer; $transfer->save(); $this->_transfer = $transfer; } diff --git a/frontend/views/product/_sale_form.php b/frontend/views/product/_sale_form.php index 9dea5f8..0baa923 100644 --- a/frontend/views/product/_sale_form.php +++ b/frontend/views/product/_sale_form.php @@ -100,10 +100,13 @@ $discountOptions = mkOptions( ArrayHelper::map($discounts, 'id_discount', 'name'
-
+
+ 'btn btn-danger btn-block', 'id' => 'btn_sell'] );?> +
+
'btn btn-success btn-block', 'id' => 'btn_sell_append'] );?>
-
+
isCardWithCustomer() ){ echo Html::a(Yii::t("frontend/product","Write up"),null,['class' => 'btn btn-success btn-block', 'id' => 'btn_add_to_customer_cart'] ); diff --git a/frontend/views/product/_user_cart.php b/frontend/views/product/_user_cart.php index d86edc8..474a69f 100644 --- a/frontend/views/product/_user_cart.php +++ b/frontend/views/product/_user_cart.php @@ -26,6 +26,9 @@ use kartik\widgets\ActiveForm; + + + diff --git a/frontend/views/product/sale.php b/frontend/views/product/sale.php index 20d95fc..1cd3b0e 100644 --- a/frontend/views/product/sale.php +++ b/frontend/views/product/sale.php @@ -19,6 +19,8 @@ $options = []; $options['lookup_product_url'] = Url::toRoute(['product/lookup']); $options['find_product_url'] = Url::toRoute(['product/find']); $options['url_pay_user_cart'] = Url::toRoute(['product/payout-user-cart']); +$options['url_delete_transaction'] = Url::toRoute(['transfer/delete']); +$options['url_pay_transaction'] = Url::toRoute(['transfer/payout']); $options['user_cart'] = $userTransfers; $options['products'] = $model->products; if ( isset($model->card) ){ diff --git a/frontend/views/ticket/_form.php b/frontend/views/ticket/_form.php index 948e46f..6ef8532 100644 --- a/frontend/views/ticket/_form.php +++ b/frontend/views/ticket/_form.php @@ -67,10 +67,13 @@ use common\models\Account; field($model, 'comment')->textarea(['maxlength' => true]) ?>
-
+
+ 'btn btn-danger btn-block', 'id' => 'btn_sell'] );?> +
+
'btn btn-success btn-block', 'id' => 'btn_add_to_user_cart'] );?>
-
+
isCardWithCustomer() ){ echo Html::a(Yii::t("frontend/ticket","Write up"),null,['class' => 'btn btn-success btn-block', 'id' => 'btn_add_to_customer_cart'] ); diff --git a/frontend/views/ticket/create.php b/frontend/views/ticket/create.php index eebe3fa..c1ed076 100644 --- a/frontend/views/ticket/create.php +++ b/frontend/views/ticket/create.php @@ -31,6 +31,8 @@ $options['types'] = TicketType::modelsToArray($ticketTypes); $options['user_cart'] = $model->userCart; $options['customer_cart'] = $model->customerCart; $options['selected_type'] = count($ticketTypes) > 0 ? $ticketTypes[0]->id_ticket_type : 0; +$options['url_delete_transaction'] = Url::toRoute(['transfer/delete']); +$options['url_pay_transaction'] = Url::toRoute(['transfer/payout']); $this->registerJs ( 'new TicketSell( '. json_encode($options).');' ); ?> diff --git a/frontend/views/transfer/_export_btn_sale.php b/frontend/views/transfer/_export_btn_sale.php new file mode 100644 index 0000000..7bc053d --- /dev/null +++ b/frontend/views/transfer/_export_btn_sale.php @@ -0,0 +1,29 @@ + + + + + Html::getAttributeValue($model, "start"), + Html::getInputName($model, "end") =>Html::getAttributeValue($model, "end"), + Html::getInputName($model, "id_account") => Html::getAttributeValue($model, "id_account"), + Html::getInputName($model, "id_user") => Html::getAttributeValue($model, "id_user"), + Html::getInputName($model, "category") => Html::getAttributeValue($model, "category"), + Html::getInputName($model, "id_product") => Html::getAttributeValue($model, "id_product"), + Html::getInputName($model, "status") => Html::getAttributeValue($model, "status"), + ] ), + ['class' => 'btn btn-primary']) + ?> + + + diff --git a/frontend/views/transfer/_export_btn_ticket.php b/frontend/views/transfer/_export_btn_ticket.php new file mode 100644 index 0000000..c052a2b --- /dev/null +++ b/frontend/views/transfer/_export_btn_ticket.php @@ -0,0 +1,29 @@ + + + + + Html::getAttributeValue($model, "start"), + Html::getInputName($model, "end") =>Html::getAttributeValue($model, "end"), + Html::getInputName($model, "id_account") => Html::getAttributeValue($model, "id_account"), + Html::getInputName($model, "id_user") => Html::getAttributeValue($model, "id_user"), + Html::getInputName($model, "status") => Html::getAttributeValue($model, "status"), + Html::getInputName($model, "customer") => Html::getAttributeValue($model, "customer"), + Html::getInputName($model, "id_ticket_type") => Html::getAttributeValue($model, "id_ticket_type"), + ] ), + ['class' => 'btn btn-primary']) + ?> + + + diff --git a/frontend/views/transfer/_result_sale.php b/frontend/views/transfer/_result_sale.php new file mode 100644 index 0000000..33f7002 --- /dev/null +++ b/frontend/views/transfer/_result_sale.php @@ -0,0 +1,142 @@ + + +
+ +

Termék eladások

+ + + + + + + + + + + + + + + + + + + + + + + + + +
getAttributeLabel('start')) ?>getAttributeLabel('end')) ?>
getAttributeLabel('id_account')) ?>id_account) ){ + echo"Mind" ; + }else{ + $account = Account::findOne($searchModel->id_account) ; + if ( $account != null ){ + echo $account->name; + } + }?>getAttributeLabel('id_user')) ?>id_user) ){ + echo"Mind" ; + }else{ + $user = User::findOne($searchModel->id_user) ; + if ( $user != null ){ + echo $user->username; + } + }?>
getAttributeLabel('category')) ?>category) ){ + echo"Mind" ; + }else{ + $category = ProductCategory::findOne($searchModel->category) ; + if ( $category != null ){ + echo $category->name; + } + }?>getAttributeLabel('id_product')) ?>id_product) ){ + echo"Mind" ; + }else{ + $product = Product::findOne($searchModel->id_product) ; + if ( $product != null ){ + echo $product->name; + } + }?>
getAttributeLabel('status')) ?>status) ){ + echo"Mind" ; + }else{ + $statuses = Transfer::statuses(); + $status = ""; + if (array_key_exists($searchModel->status, $statuses) ){ + echo $statuses[$searchModel->status]; + } + }?>
+
+
+ Összesen: productMoney; ?> Ft +
+
+ + + + + + + + + + + + + + + + + + products as $p ){?> + + + + + + + + + + + + + + + + +
TKiadvaFizetveKasszaFelhasználóKategóriaTermékEgység árMennyiségÖsszeg
Ft Db FT
+ products ) == 0) { + ?> + Nincs találat + +
diff --git a/frontend/views/transfer/_result_ticket.php b/frontend/views/transfer/_result_ticket.php new file mode 100644 index 0000000..f6a07aa --- /dev/null +++ b/frontend/views/transfer/_result_ticket.php @@ -0,0 +1,136 @@ + + +
+ +

Termék eladások

+ + + + + + + + + + + + + + + + + + + + + + + + + +
getAttributeLabel('start')) ?>getAttributeLabel('end')) ?>
getAttributeLabel('id_account')) ?>id_account) ){ + echo"Mind" ; + }else{ + $account = Account::findOne($searchModel->id_account) ; + if ( $account != null ){ + echo $account->name; + } + }?>getAttributeLabel('id_user')) ?>id_user) ){ + echo"Mind" ; + }else{ + $user = User::findOne($searchModel->id_user) ; + if ( $user != null ){ + echo $user->username; + } + }?>
getAttributeLabel('id_ticket_type')) ?>id_ticket_type) ){ + echo"Mind" ; + }else{ + $ticketType = TicketType::findOne($searchModel->id_ticket_type) ; + if ( $ticketType != null ){ + echo $ticketType->name; + } + }?>getAttributeLabel('customer')) ?>customer) ){ + echo"" ; + }else{ + echo Html::encode($searchModel->customer) ; + }?>
getAttributeLabel('status')) ?>status) ){ + echo"Mind" ; + }else{ + $statuses = Transfer::statuses(); + $status = ""; + if (array_key_exists($searchModel->status, $statuses) ){ + echo $statuses[$searchModel->status]; + } + }?>
+
+
+ Összesen: ticketMoney; ?> Ft +
+
+ + + + + + + + + + + + + + + + tickets as $t ){?> + + + + + + + + + + + + + + +
KiadvaFizetveKasszaFelhasználóVendégBérlet típusEgység árMennyiségÖsszeg
Ft Db FT
+ tickets ) == 0) { + ?> + Nincs találat + +
diff --git a/frontend/views/transfer/_search_sale.php b/frontend/views/transfer/_search_sale.php new file mode 100644 index 0000000..c00483a --- /dev/null +++ b/frontend/views/transfer/_search_sale.php @@ -0,0 +1,77 @@ + + +'Mind']+ HtmlHelper::mkAccountOptions( $model->accounts ); + $userOptions = ['' => 'Mind'] + HtmlHelper::mkOptions($model->users,'id','username'); + $productOptions = ['' => 'Mind'] + HtmlHelper::mkOptions($model->productOptions,'id_product','name'); + $productCategoryOptions = ['' => 'Mind'] + HtmlHelper::mkOptions($model->productCategories,'id_product_category','name'); + $transferStatusOptions = ['' => 'Mind'] + Transfer::statuses(); +?> + + diff --git a/frontend/views/transfer/_search_ticket.php b/frontend/views/transfer/_search_ticket.php new file mode 100644 index 0000000..ca2ec56 --- /dev/null +++ b/frontend/views/transfer/_search_ticket.php @@ -0,0 +1,78 @@ + + +'Mind']+ HtmlHelper::mkAccountOptions( $model->accounts ); + $userOptions = ['' => 'Mind'] + HtmlHelper::mkOptions($model->users,'id','username'); + $transferStatusOptions = ['' => 'Mind'] + Transfer::statuses(); + $ticketTypeOptions = ['' => 'Mind'] + HtmlHelper::mkOptions($model->ticketTypes,'id_ticket_type','name'); +?> + + diff --git a/frontend/views/transfer/list.php b/frontend/views/transfer/list.php index b688f85..4015789 100644 --- a/frontend/views/transfer/list.php +++ b/frontend/views/transfer/list.php @@ -245,6 +245,7 @@ td.name{ Fizetve Kassza Felhasználó + Vendég Bérlet típus Egység ár Mennyiség @@ -258,6 +259,7 @@ td.name{ + Ft Db diff --git a/frontend/views/transfer/sale.php b/frontend/views/transfer/sale.php new file mode 100644 index 0000000..34ad890 --- /dev/null +++ b/frontend/views/transfer/sale.php @@ -0,0 +1,115 @@ +title = Yii::t ( 'frontend/transfer', 'Product sale detailed' ); +$this->params ['breadcrumbs'] [] = $this->title; +?> + + +
+ +

title) ?>

+ render('_search_sale', ['model' => $searchModel]); ?> + render('_export_btn_sale', ['model' => $searchModel]); ?> + + +
+ +

Termék eladások

+
+
+ Összesen: productMoney; ?> Ft +
+
+ + + + + + + + + + + + + + + + + + products as $p ){?> + + + + + + + + + + + + + + + + +
TranzakcióKiadvaFizetveKasszaFelhasználóVásárlóKategóriaTermékEgység árMennyiségÖsszeg
Ft Db FT
+ products ) == 0) { + ?> + Nincs találat + +
+ + + + + +
diff --git a/frontend/views/transfer/search_tickets.php b/frontend/views/transfer/search_tickets.php new file mode 100644 index 0000000..c00483a --- /dev/null +++ b/frontend/views/transfer/search_tickets.php @@ -0,0 +1,77 @@ + + +'Mind']+ HtmlHelper::mkAccountOptions( $model->accounts ); + $userOptions = ['' => 'Mind'] + HtmlHelper::mkOptions($model->users,'id','username'); + $productOptions = ['' => 'Mind'] + HtmlHelper::mkOptions($model->productOptions,'id_product','name'); + $productCategoryOptions = ['' => 'Mind'] + HtmlHelper::mkOptions($model->productCategories,'id_product_category','name'); + $transferStatusOptions = ['' => 'Mind'] + Transfer::statuses(); +?> + + diff --git a/frontend/views/transfer/tickets.php b/frontend/views/transfer/tickets.php new file mode 100644 index 0000000..12d6713 --- /dev/null +++ b/frontend/views/transfer/tickets.php @@ -0,0 +1,111 @@ +title = Yii::t ( 'frontend/transfer', 'Ticket sale detailed' ); +$this->params ['breadcrumbs'] [] = $this->title; +?> + + +
+ +

title) ?>

+ render('_search_ticket', ['model' => $searchModel]); ?> + render('_export_btn_ticket', ['model' => $searchModel]); ?> + + +
+ +

Bérlet eladások

+
+
+ Összesen: ticketMoney; ?> Ft +
+
+ + + + + + + + + + + + + + + + tickets as $t ){?> + + + + + + + + + + + + + + +
KiadvaFizetveKasszaFelhasználóVendégBérlet típusEgység árMennyiségÖsszeg
Ft Db FT
+ tickets ) == 0) { + ?> + Nincs találat + +
+ + + + + +
diff --git a/frontend/web/js/product.sell.js b/frontend/web/js/product.sell.js index 4972f0d..0b6f435 100644 --- a/frontend/web/js/product.sell.js +++ b/frontend/web/js/product.sell.js @@ -30,6 +30,8 @@ function ProductSell(o){ customer_cart: [], id_account: null, products : [], + url_delete_transaction : '', + url_pay_transaction : '', }; @@ -55,6 +57,13 @@ function ProductSell(o){ // addDocumentKeypressedListener(); initAutocomplete(); + disalbeMousewheelSpinOnNumberInput(); + } + + function disalbeMousewheelSpinOnNumberInput(){ + $(':input[type=number]').on('mousewheel', function(e){ + e.preventDefault(); + }); } /** @@ -199,7 +208,7 @@ function ProductSell(o){ if ( event.which == 13 ) { event.preventDefault(); event.stopImmediatePropagation(); - $('#productsaleform-id_currency').focus(); + submitSellAndAppend(); } }); } @@ -477,12 +486,16 @@ function ProductSell(o){ function createUserCartTable(){ $(app.defaults.selector_user_cart).transferList({ - 'transfers' : app.defaults.user_cart + 'transfers' : app.defaults.user_cart, + 'url_delete' : app.defaults.url_delete_transaction, + 'url_pay' : app.defaults.url_pay_transaction, }); } function createCustomerCartTable(){ $(app.defaults.selector_customer_cart).transferList({ - 'transfers' : app.defaults.customer_cart + 'transfers' : app.defaults.customer_cart, + 'url_delete' : app.defaults.url_delete_transaction, + 'url_pay' : app.defaults.url_pay_transaction, }); } diff --git a/frontend/web/js/ticket.sell.js b/frontend/web/js/ticket.sell.js index 456ea04..b47cb0b 100644 --- a/frontend/web/js/ticket.sell.js +++ b/frontend/web/js/ticket.sell.js @@ -45,6 +45,8 @@ function TicketSell(o){ /**mark list paid url*/ url_pay_customer_card: '-', url_pay_user_cart: '', + url_delete_transaction: '', + url_pay_transaction: '', }; @@ -91,18 +93,23 @@ function TicketSell(o){ function createUserCartTable(){ $(app.defaults.selector_user_cart).transferList({ - 'transfers' : app.defaults.user_cart + 'transfers' : app.defaults.user_cart, + 'url_delete' : app.defaults.url_delete_transaction, + 'url_pay' : app.defaults.url_pay_transaction, }); } function createCustomerCartTable(){ $(app.defaults.selector_customer_cart).transferList({ - 'transfers' : app.defaults.customer_cart + 'transfers' : app.defaults.customer_cart, + 'url_delete' : app.defaults.url_delete_transaction, + 'url_pay' : app.defaults.url_pay_transaction, }); } function addSellButtons(){ addBehaviourBtnSellAndAppendToUserCart(); addBehaviourBtnAddToCustomerCart(); + addBehaviourBtnSell(); } function addBehaviourBtnSellAndAppendToUserCart(){ @@ -113,6 +120,10 @@ function TicketSell(o){ $('#btn_add_to_customer_cart').on('click',submitAddTicketToCustomerCart); } + function submitSell(){ + $('#ticketcreate-cart').val(''); + $('#ticket_form').submit(); + } function submitAddTicketToUserCart(){ $('#ticketcreate-cart').val('user'); $('#ticket_form').submit(); @@ -123,6 +134,9 @@ function TicketSell(o){ $('#ticket_form').submit(); } + function addBehaviourBtnSell(){ + $('#btn_sell').on('click',submitSell); + } function addBehaviourPayoutUserCart( ){ // $( app.defaults.selector_btn_pay_user_cart ).on('click',function(){ diff --git a/frontend/web/js/transferlist.js b/frontend/web/js/transferlist.js index 7c48c49..a055491 100644 --- a/frontend/web/js/transferlist.js +++ b/frontend/web/js/transferlist.js @@ -1,6 +1,8 @@ $.widget( "fitness.transferList", { options: { transfers: [], + url_delete : '', + url_pay : '', columns: [ { 'label' : 'Idő' }, @@ -8,6 +10,7 @@ $.widget( "fitness.transferList", { { 'label' : 'Ár' }, { 'label' : 'Db' }, { 'label' : 'Összesen' }, + { 'label' : '' }, ], footers: [ { @@ -100,6 +103,14 @@ $.widget( "fitness.transferList", { s += ''; s += transfer.money; s += ''; + s += ''; + s += '
'; + s += ""; + s += '
'; + s += '
'; + s += ""; + s += '
'; + s += ''; s += ''; break; case 'footer': @@ -120,6 +131,9 @@ $.widget( "fitness.transferList", { s += ""; s += footer.total( params.transfers ); s += ""; + s += ""; + s += ""; + s += ""; s += ""; } s += "";