From 72fc1396741f8f48479d85dbd7d07781f8266783 Mon Sep 17 00:00:00 2001 From: Schneider Roland Date: Thu, 31 Dec 2015 00:19:38 +0100 Subject: [PATCH] add money movement type 'in', add daily transfers --- common/messages/hu/frontend/transfer.php | 3 +- common/models/MoneyMovement.php | 30 +- common/models/Product.php | 4 +- common/models/Transfer.php | 19 +- frontend/components/FrontendMenuStructure.php | 1 + frontend/controllers/TransferController.php | 24 +- frontend/models/TransferListSearch.php | 375 +++++++++++++++++ frontend/views/money-movement/_form.php | 3 + frontend/views/money-movement/index.php | 4 + frontend/views/product/sale.php | 2 + frontend/views/transfer/_search_list.php | 59 +++ frontend/views/transfer/list.php | 379 ++++++++++++++++++ frontend/web/js/product.sell.js | 2 +- 13 files changed, 896 insertions(+), 9 deletions(-) create mode 100644 frontend/models/TransferListSearch.php create mode 100644 frontend/views/transfer/_search_list.php create mode 100644 frontend/views/transfer/list.php diff --git a/common/messages/hu/frontend/transfer.php b/common/messages/hu/frontend/transfer.php index 816b973..720d116 100644 --- a/common/messages/hu/frontend/transfer.php +++ b/common/messages/hu/frontend/transfer.php @@ -28,5 +28,6 @@ return [ 'Update' => 'Módosítás', 'Update {modelClass}: ' => '{modelClass} módosítás: ', 'pieces' => 'db', - 'Transfers Summary' => 'Bevétel' + 'Transfers Summary' => 'Bevétel', + 'Daily transfers' => 'Napi bevételek' ]; diff --git a/common/models/MoneyMovement.php b/common/models/MoneyMovement.php index 4c45d40..9024c0a 100644 --- a/common/models/MoneyMovement.php +++ b/common/models/MoneyMovement.php @@ -27,6 +27,7 @@ class MoneyMovement extends \yii\db\ActiveRecord { const TYPE_OUT = 10; + const TYPE_IN = 20; public $_account; @@ -47,7 +48,7 @@ class MoneyMovement extends \yii\db\ActiveRecord return ArrayHelper::merge( [ [ 'class' => TimestampBehavior::className(), - 'value' => function(){ return date('Y-m-d H:i:s' ); } + 'value' => function(){ return date('Y-m-d H:i:s' , time()); } ], [ 'class' => AccountAwareBehavior::className(), @@ -65,10 +66,11 @@ class MoneyMovement extends \yii\db\ActiveRecord { return [ [['id_account', 'name', 'money'], 'required'], - [['id_account' , 'money'], 'integer'], + [['id_account' , 'money'], 'integer' , 'min' => 0], [['name'], 'string', 'max' => 64], [['comment'], 'string', 'max' => 255], [['id_account'], 'validateAccount'], + [['type'] , 'in','range' => array_keys(MoneyMovement::types())], ]; } @@ -91,6 +93,7 @@ class MoneyMovement extends \yii\db\ActiveRecord 'id_user' => Yii::t('common/money-movement', 'Id User'), 'name' => Yii::t('common/money-movement', 'Name'), 'type' => Yii::t('common/money-movement', 'Type'), + 'humanType' => Yii::t('common/money-movement', 'Type'), 'money' => Yii::t('common/money-movement', 'Money'), 'comment' => Yii::t('common/money-movement', 'Comment'), 'created_at' => Yii::t('common/money-movement', 'Created At'), @@ -100,6 +103,7 @@ class MoneyMovement extends \yii\db\ActiveRecord ]; } + public function afterSave($insert, $changedAttributes){ parent::afterSave($insert, $changedAttributes); if ( $insert) { @@ -114,4 +118,26 @@ class MoneyMovement extends \yii\db\ActiveRecord $transfer->save(); } + public static function types(){ + return [ + self::TYPE_IN => "Betét", + self::TYPE_OUT => "Kivét", + + ]; + } + + public static function typeName($type){ + $types = MoneyMovement::types(); + $result = ""; + if ( array_key_exists($type, $types)){ + $result = $types[$type]; + } + return $result; + } + + + public function getHumanType(){ + return self::typeName($this->type); + } + } diff --git a/common/models/Product.php b/common/models/Product.php index 94c04f7..21bd74a 100644 --- a/common/models/Product.php +++ b/common/models/Product.php @@ -118,9 +118,9 @@ class Product extends \common\models\BaseFitnessActiveRecord { $warehouses = null; if ( $forceIncludeObjectWithId == null){ - $warehouses = Product::find()->andWhere(['status' => Product::STATUS_ACTIVE])->all(); + $warehouses = Product::find()->andWhere(['status' => Product::STATUS_ACTIVE])->orderBy(['product.name' => SORT_ASC])->all(); }else{ - $warehouses = Product::find()->andWhere( ['or', ['status' => Product::STATUS_ACTIVE], ['id_product' => $forceIncludeObjectWithId ] ])->all(); + $warehouses = Product::find()->andWhere( ['or', ['status' => Product::STATUS_ACTIVE], ['id_product' => $forceIncludeObjectWithId ] ])->orderBy(['product.name' => SORT_ASC])->all(); } return $warehouses; diff --git a/common/models/Transfer.php b/common/models/Transfer.php index e76efaf..d0f179e 100644 --- a/common/models/Transfer.php +++ b/common/models/Transfer.php @@ -247,6 +247,19 @@ class Transfer extends \common\models\BaseFitnessActiveRecord return $result; } + + public static function toSignedMoney($dir,$money){ + $m = 1; + $result = $money; + if ( $dir == Transfer::DIRECTION_OUT ){ + $m = -1; + } + + $result = $result * $m; + + return $result; + + } public function toProductSoldString(){ $s = ""; @@ -315,7 +328,11 @@ class Transfer extends \common\models\BaseFitnessActiveRecord $transfer->type = Transfer::TYPE_MONEY_MOVEMENT_OUT; $transfer->status = Transfer::STATUS_PAID; - $transfer->direction = Transfer::DIRECTION_OUT; + if ( $moneyMovement->type == MoneyMovement::TYPE_OUT){ + $transfer->direction = Transfer::DIRECTION_OUT; + }else if ( $moneyMovement->type == MoneyMovement::TYPE_IN ){ + $transfer->direction = Transfer::DIRECTION_IN; + } $transfer->count = null; $transfer->id_object = $moneyMovement->id_money_movement; diff --git a/frontend/components/FrontendMenuStructure.php b/frontend/components/FrontendMenuStructure.php index 78e2f4b..c675559 100644 --- a/frontend/components/FrontendMenuStructure.php +++ b/frontend/components/FrontendMenuStructure.php @@ -67,6 +67,7 @@ class FrontendMenuStructure{ ['label' => Yii::t('frontend/account-state','Open account state'), 'url' => ['/account-state/open'] ], ['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 ] ], ]; if ( $isadmin || Yii::$app->user->can('reception.transfers') ){ diff --git a/frontend/controllers/TransferController.php b/frontend/controllers/TransferController.php index 11ae4f6..2d57342 100644 --- a/frontend/controllers/TransferController.php +++ b/frontend/controllers/TransferController.php @@ -10,6 +10,7 @@ use yii\web\NotFoundHttpException; use yii\filters\VerbFilter; use frontend\models\TransferMoneyMovementSearch; use common\models\Account; +use frontend\models\TransferListSearch; /** * TransferController implements the CRUD actions for Transfer model. @@ -55,13 +56,31 @@ class TransferController extends Controller $dataProvider = $searchModel->search(Yii::$app->request->queryParams); $searchModel->totalsTransfers(Yii::$app->request->queryParams); - - return $this->render('index', [ 'searchModel' => $searchModel, 'dataProvider' => $dataProvider, ]); + + } + + /** + * Lists all Transfer models. + * @return mixed + */ + public function actionList() + { + $searchModel = new TransferListSearch(); + $searchModel->accounts = Account::read(); + $searchModel->load(Yii::$app->request->queryParams); + + $searchModel->search(Yii::$app->request->queryParams); + + + return $this->render('list', [ + 'searchModel' => $searchModel, + ]); + } /** @@ -76,6 +95,7 @@ class TransferController extends Controller ]); } + /** * Creates a new Transfer model. * If creation is successful, the browser will be redirected to the 'view' page. diff --git a/frontend/models/TransferListSearch.php b/frontend/models/TransferListSearch.php new file mode 100644 index 0000000..7472a60 --- /dev/null +++ b/frontend/models/TransferListSearch.php @@ -0,0 +1,375 @@ + 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; + + + /** + * all money gained with ticket sell + * */ + public $ticketMoney; + /** + * all money gained with product sell + * */ + public $productMoney; + /** + * all money gained with product sell grouped by category + * */ + public $productMoneies; + /** + * all money lost by money movement + * */ + public $moneyMovementMoneis; + public $moneyMovementMoney; + /** + * total gained money + * */ + public $total; + + /** + * ticket sale statisitc + * */ + public $ticketStats; + + /** + * money movements by type + * */ + public $moneyMovementsByType; + + public $tickets; + /** + * all product transfer + * */ + public $products; + public $moneyMovements; + + public $productsByCategory; + + + /** + * @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' ] , 'integer'], + ['types', 'each', 'rule' => ['integer']], + ]; + } + + + + /** + * 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->readProductsMoney(); + $this->readMoneyMovementMoney(); + $this->calcTotal(); + + $this->readProductsByCategory(); + $this->readProductsByCategoryDetailed(); + $this->readTicketStas(); + $this->readMoneyMovementsStats(); + + + $this->readTickets(); + $this->readProducts(); + $this->readMoneyMovements(); + + } + + protected function calcTotal(){ + $this->total = 0; + $this->total += $this->ticketMoney; + $this->total += $this->productMoney; + $this->total += $this->moneyMovementMoneis; + } + + + protected function addQueryFilters($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->andFilterWhere([ + 'transfer.id_account' => $this->id_account, + 'transfer.type' => $this->type, + 'transfer.id_user' => $this->id_user, + ]); + + $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 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->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"); + $this->addQueryFilters($query); + $this->ticketMoney = $query->scalar(); + } + + 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"); + $this->addQueryFilters($query); + + $this->productMoney = $query->scalar(); + + } + + + protected function readMoneyMovementMoney(){ + $query = (new \yii\db\Query()); + $query->select([' coalesce(sum( case when transfer.direction = ' . Transfer::DIRECTION_IN. ' then transfer.money else -1 * transfer.money end ),0) AS money_movement_money']); + $query->from('transfer'); + $query->andWhere(['transfer.type' => Transfer::TYPE_MONEY_MOVEMENT_OUT]); + $query->innerJoin("money_movement", "money_movement.id_money_movement = transfer.id_object"); + $this->addQueryFilters($query); + + $this->moneyMovementMoneis = $query->scalar(); + } + protected function readMoneyMovementsStats(){ + $query = (new \yii\db\Query()); + $query->select([ 'money_movement.type as money_movement_type', ' coalesce(count(transfer.id_transfer),0) AS money_movement_count', 'coalesce(sum( case when transfer.direction = ' . Transfer::DIRECTION_IN. ' then transfer.money else -1 * transfer.money end ),0) AS money_movement_money']); + $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->groupBy(['money_movement.type']); + $this->addQueryFilters($query); + + $this->moneyMovementsByType = $query->all(); + for ($i = 0; $i < count($this->moneyMovementsByType) ;$i++ ){ + $this->moneyMovementsByType[$i]['name'] = MoneyMovement::typeName($this->moneyMovementsByType[$i]['money_movement_type']); + } + } + + protected function readTickets(){ + $query = (new \yii\db\Query()); + $query->select(['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("ticket_type", "ticket.id_ticket_type = ticket_type.id_ticket_type"); + $query->innerJoin("account", "transfer.id_account = account.id_account"); + $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'); + } + + } + + protected function readProducts(){ + + $query = (new \yii\db\Query()); + $query->select([ '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->innerJoin("account", "transfer.id_account = account.id_account"); + $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'); + } + + } + + protected function readMoneyMovements(){ + $query = (new \yii\db\Query()); + $query->select([ 'account.name as account_name', 'transfer.direction as transfer_direction' ,'money_movement.type as money_movement_type', 'transfer.money AS money_movement_money', 'money_movement.name as money_movement_name','transfer.created_at as money_movement_created_at', ]); + $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->orderBy(['transfer.created_at' => SORT_ASC]); + $this->addQueryFilters($query); + + $this->moneyMovements = $query->all(); + + for ($i = 0; $i < count($this->moneyMovements) ;$i++ ){ + $this->moneyMovements[$i]['money_movement_type_name'] = MoneyMovement::typeName($this->moneyMovements[$i]['money_movement_type']); + $this->moneyMovements[$i]['money_movement_created_at'] = Yii::$app->formatter->asDatetime($this->moneyMovements[$i]['money_movement_created_at'], 'yyyy.MM.dd HH:mm:ss'); + $this->moneyMovements[$i]['signed_money'] = Transfer::toSignedMoney($this->moneyMovements[$i]['transfer_direction'],$this->moneyMovements[$i]['money_movement_money']); + } + } + + +} diff --git a/frontend/views/money-movement/_form.php b/frontend/views/money-movement/_form.php index a9680de..8723049 100644 --- a/frontend/views/money-movement/_form.php +++ b/frontend/views/money-movement/_form.php @@ -3,6 +3,7 @@ use yii\helpers\Html; use yii\widgets\ActiveForm; use frontend\components\HtmlHelper; +use common\models\MoneyMovement; /* @var $this yii\web\View */ /* @var $model common\models\MoneyMovement */ @@ -18,6 +19,8 @@ $accountOptions = HtmlHelper::mkAccountOptions($accounts); field($model, 'id_account')->dropDownList($accountOptions) ?> + + field($model, 'type')->dropDownList(MoneyMovement::types()) ?> field($model, 'name')->textInput(['maxlength' => true]) ?> diff --git a/frontend/views/money-movement/index.php b/frontend/views/money-movement/index.php index ef198b8..3c431b0 100644 --- a/frontend/views/money-movement/index.php +++ b/frontend/views/money-movement/index.php @@ -25,6 +25,10 @@ $this->params['breadcrumbs'][] = $this->title; 'accountName', 'userName', + [ + 'attribute' => 'type', + 'value' =>'humanType' + ], 'name', 'money', 'created_at:datetime', diff --git a/frontend/views/product/sale.php b/frontend/views/product/sale.php index 82ebfd8..b857c3e 100644 --- a/frontend/views/product/sale.php +++ b/frontend/views/product/sale.php @@ -78,6 +78,8 @@ $this->params['breadcrumbs'][] = Yii::t('frontend/product', 'Sale'); .table-transfers .product-money{ width: 100px; } + .typeahead.dropdown-menu{ + } diff --git a/frontend/views/transfer/_search_list.php b/frontend/views/transfer/_search_list.php new file mode 100644 index 0000000..7516ffd --- /dev/null +++ b/frontend/views/transfer/_search_list.php @@ -0,0 +1,59 @@ + + +'Mind']+ HtmlHelper::mkAccountOptions( $model->accounts ); +?> + + diff --git a/frontend/views/transfer/list.php b/frontend/views/transfer/list.php new file mode 100644 index 0000000..509336b --- /dev/null +++ b/frontend/views/transfer/list.php @@ -0,0 +1,379 @@ +title = Yii::t ( 'frontend/transfer', 'Daily transfers' ); +$this->params ['breadcrumbs'] [] = $this->title; +?> + + +
+ +

title) ?>

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

Egyszerű összesítés

+ + + + + + + + + + + + + + + + + + + +
BérletekticketMoney?> FT
TermékekproductMoney?> FT
PénzmozgásokmoneyMovementMoneis?> FT
Végösszegtotal?> FT
+
+
+

Közepes összesítés

+ +

Bérletek típus szerint

+ + + + + + + + + + ticketStats as $ticketStat ) { + ?> + + + + + + + +
Bérlet típusMennyiségÖsszeg
Db FT
+ +
+
+ Összesen: ticketMoney; ?> Ft + +
+
+

Termékek kategória szerint

+ + + + + + + + + + productMoneies as $pm ) { + ?> + + + + + + + +
Termék kategóriaMennyiségÖsszeg
Db FT
+
+
+ Összesen: productMoney; ?> Ft + +
+
+ +

Termékek kategória szerint részletes

+ + productsByCategory['categories'] as $categoryHolder ){ + + $products = $categoryHolder['products']; + ?> +

+ + + + + + + + + + + + + + + + + + + + + + + + + +
TermékMennyiségÖsszeg
Db FT
FT
+ +
+
+ Összesen: + productsByCategory['total']; + ?> +
+
+ +

Pénzmozgások típus szerint

+ + + + + + + + + + moneyMovementsByType as $mmStat ) { + ?> + + + + + + + +
Pénzmozgás típusMennyiségÖsszeg
Db FT
+
+
+ Összesen: moneyMovementMoneis; ?> Ft + +
+
+ +
+
+ Végösszeg: total; ?> Ft + +
+
+
+
+

Részletes összesítés

+

Bérletek

+ + + + + + + + + + + + + + tickets as $t ){?> + + + + + + + + + + + + +
KiadvaFizetveKasszaBérlet típusEgység árMennyiségÖsszeg
Ft Db FT
+ tickets ) == 0 ) { + ?> + Nincs találat + + +
+
+ Összesen: ticketMoney; ?> Ft + +
+
+ +

Termék eladások

+ + + + + + + + + + + + + + + products as $p ){?> + + + + + + + + + + + + + +
KiadvaFizetveKasszaKategóriaTermékEgység árMennyiségÖsszeg
Ft Db FT
+ products ) == 0 ) { + ?> + Nincs találat + + +
+
+ Összesen: productMoney; ?> Ft + +
+
+ + +

Pénzmozgások

+ + + + + + + + + + + + moneyMovements as $p ){?> + + + + + + + + + + +
DátumKasszaNévTípusÖsszeg
Ft
+ moneyMovements ) == 0 ) { + ?> + Nincs találat + + +
+
+ Összesen: moneyMovementMoneis; ?> Ft + +
+
+ + +
+
+ Végösszeg: total; ?> Ft + +
+
+
+
+ +
+ + + + + +
diff --git a/frontend/web/js/product.sell.js b/frontend/web/js/product.sell.js index dcdff21..0de8079 100644 --- a/frontend/web/js/product.sell.js +++ b/frontend/web/js/product.sell.js @@ -538,7 +538,7 @@ function ProductSell(o){ var $input = $('#product_search'); $input.typeahead({source: app.defaults.products, autoSelect: true, - items: 12, + items: 20, minLength: 3, // displayText: function (item){ // return item.