From f59eadd8cca6b9e2d401219ba0df573d9231612b Mon Sep 17 00:00:00 2001 From: Schneider Roland Date: Thu, 31 Dec 2015 13:52:22 +0100 Subject: [PATCH] fix account_state ( collection_money ), display product/ticket on reception only for selected account, add daily transfers (reception/admin) --- backend/components/AdminMenuStructure.php | 7 +- backend/controllers/TransferController.php | 20 +- backend/models/TransferListSearch.php | 21 + backend/views/layouts/content.php | 5 + backend/views/transfer/_search_list.php | 63 +++ backend/views/transfer/list.php | 399 ++++++++++++++++++ common/config/main.php | 7 +- common/models/AccountState.php | 81 +++- common/models/Product.php | 29 +- common/models/TicketType.php | 6 +- common/models/Transfer.php | 19 +- common/models/TransferListSearch.php | 390 +++++++++++++++++ common/views/common/_account_statistic.php | 7 + ...t_state__add__column__collection_money.php | 27 ++ .../AccountStateBanknoteCountWidget.php | 49 ++- frontend/components/FrontendMenuStructure.php | 7 +- .../controllers/AccountStateController.php | 3 + frontend/controllers/ProductController.php | 5 +- frontend/controllers/TicketController.php | 2 +- frontend/models/TransferListSearch.php | 356 +--------------- frontend/views/account-state/close.php | 1 - frontend/views/layouts/main.php | 9 +- frontend/views/product/sale.php | 3 +- frontend/views/ticket/create.php | 1 + frontend/views/transfer/_view.php | 4 + frontend/views/transfer/list.php | 36 +- 26 files changed, 1153 insertions(+), 404 deletions(-) create mode 100644 backend/models/TransferListSearch.php create mode 100644 backend/views/transfer/_search_list.php create mode 100644 backend/views/transfer/list.php create mode 100644 common/models/TransferListSearch.php create mode 100644 console/migrations/m151231_095117_alter__table__account_state__add__column__collection_money.php diff --git a/backend/components/AdminMenuStructure.php b/backend/components/AdminMenuStructure.php index fc27946..7652e58 100644 --- a/backend/components/AdminMenuStructure.php +++ b/backend/components/AdminMenuStructure.php @@ -36,8 +36,8 @@ class AdminMenuStructure{ $today = \Yii::$app->formatter->asDate( strtotime('today UTC') ); $tomorrow = \Yii::$app->formatter->asDate( ( 60 *60 *24 + time())); - $todayDatetime = \Yii::$app->formatter->asDatetime( strtotime('today UTC') ); - $tomorrowDatetime = \Yii::$app->formatter->asDatetime( strtotime('tomorrow UTC') ); + $todayDatetime = \Yii::$app->formatter->asDatetime( strtotime('today') ); + $tomorrowDatetime = \Yii::$app->formatter->asDatetime( strtotime('tomorrow') ); ///////////////////////////// @@ -89,7 +89,8 @@ class AdminMenuStructure{ ///////////////////////////// $items = []; $items[] = ['label' => 'Tranzakciók', 'url' => ['/transfer/index' , 'TransferSearch[start]' =>$today,'TransferSearch[end]' => $tomorrow ] ]; - $items[] = ['label' => 'Bevétel', 'url' => ['/transfer/summary' , 'TransferSummarySearch[start]' =>$today,'TransferSummarySearch[end]' => $tomorrow ] ]; +// $items[] = ['label' => 'Bevétel', 'url' => ['/transfer/summary' , 'TransferSummarySearch[start]' =>$today,'TransferSummarySearch[end]' => $tomorrow ] ]; + $items[] = ['label' => 'Napi bevételek', 'url' => ['/transfer/list', 'TransferListSearch[start]' =>$todayDatetime,'TransferListSearch[end]' => $tomorrowDatetime ] ]; $items[] = ['label' => 'Kassza müveletek', 'url' => ['/account-state/index'] ]; $items[] = ['label' => 'Zárások', 'url' => ['/collection/index' , 'CollectionSearch[start]' =>$todayDatetime,'CollectionSearch[end]' => $tomorrowDatetime ] ]; $this->menuItems[] = ['label' => 'Pénzügy', 'url' => $this->emptyUrl, diff --git a/backend/controllers/TransferController.php b/backend/controllers/TransferController.php index b7f7217..441934c 100644 --- a/backend/controllers/TransferController.php +++ b/backend/controllers/TransferController.php @@ -10,6 +10,7 @@ use yii\filters\VerbFilter; use common\models\Account; use common\models\User; use backend\models\TransferSummarySearch; +use backend\models\TransferListSearch; /** * TransferController implements the CRUD actions for Transfer model. @@ -24,7 +25,7 @@ class TransferController extends \backend\controllers\BackendController 'rules' => [ // allow authenticated users [ - 'actions' => [ 'index','view','summary' ], + 'actions' => [ 'index','view','summary','list' ], 'allow' => true, 'roles' => ['admin','employee','reception'], ], @@ -58,7 +59,24 @@ class TransferController extends \backend\controllers\BackendController ]); } + /** + * Lists all Transfer models. + * @return mixed + */ + public function actionList() + { + $searchModel = new TransferListSearch(); + $searchModel->accounts = Account::read(); + $searchModel->users = User::read(); + $searchModel->search(Yii::$app->request->queryParams); + + + return $this->render('list', [ + 'searchModel' => $searchModel, + ]); + + } /** * Lists all Transfer models. diff --git a/backend/models/TransferListSearch.php b/backend/models/TransferListSearch.php new file mode 100644 index 0000000..0b3f50a --- /dev/null +++ b/backend/models/TransferListSearch.php @@ -0,0 +1,21 @@ +innerJoin("user_account_assignment",'transfer.id_account = user_account_assignment.id_account' ); + $query->andWhere(['user_account_assignment.id_user' => Yii::$app->user->id ]); + } + } + +} diff --git a/backend/views/layouts/content.php b/backend/views/layouts/content.php index d38d50d..e7c991c 100644 --- a/backend/views/layouts/content.php +++ b/backend/views/layouts/content.php @@ -22,5 +22,10 @@ use dmstr\widgets\Alert; diff --git a/backend/views/transfer/_search_list.php b/backend/views/transfer/_search_list.php new file mode 100644 index 0000000..c5e6ddf --- /dev/null +++ b/backend/views/transfer/_search_list.php @@ -0,0 +1,63 @@ + + +'Mind']+ HtmlHelper::mkAccountOptions( $model->accounts ); + $userOptions = ['' => 'Mind'] + HtmlHelper::mkOptions($model->users,'id','username'); +?> + + diff --git a/backend/views/transfer/list.php b/backend/views/transfer/list.php new file mode 100644 index 0000000..b688f85 --- /dev/null +++ b/backend/views/transfer/list.php @@ -0,0 +1,399 @@ +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 ){?> + + + + + + + + + + + + + +
KiadvaFizetveKasszaFelhasználóBé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 ){?> + + + + + + + + + + + + + + +
KiadvaFizetveKasszaFelhasználóKategóriaTermékEgység árMennyiségÖsszeg
Ft Db FT
+ products ) == 0 ) { + ?> + Nincs találat + + +
+
+ Összesen: productMoney; ?> Ft + +
+
+ + +

Pénzmozgások

+ + + + + + + + + + + + + moneyMovements as $p ){?> + + + + + + + + + + + +
DátumKasszaFelhasználóNévTípusÖsszeg
Ft
+ moneyMovements ) == 0 ) { + ?> + Nincs találat + + +
+
+ Összesen: moneyMovementMoneis; ?> Ft + +
+
+ + +
+
+ Végösszeg: total; ?> Ft + +
+
+
+
+ +
+ + + + + +
diff --git a/common/config/main.php b/common/config/main.php index bbc7e4a..3dc1cda 100644 --- a/common/config/main.php +++ b/common/config/main.php @@ -1,7 +1,10 @@ dirname(dirname(__DIR__)) . '/vendor', // 'language' => 'hu-HU', + 'timezone' => 'Europe/Budapest', 'language' => 'hu', 'components' => [ 'cache' => [ @@ -21,8 +24,8 @@ return [ 'datetimeFormat' => 'yyyy.MM.dd HH:mm', 'timeFormat' => 'HH:mm', 'locale' => 'hu-Hu', - 'timeZone' => 'UTC', - 'defaultTimeZone' => 'UTC' , + 'timeZone' => 'EUROPE/BUDAPEST', + 'defaultTimeZone' => 'EUROPE/BUDAPEST', 'nullDisplay' => "-", ], 'authManager' => [ diff --git a/common/models/AccountState.php b/common/models/AccountState.php index 8368dfd..6ee5cfb 100644 --- a/common/models/AccountState.php +++ b/common/models/AccountState.php @@ -26,6 +26,7 @@ use yii\helpers\ArrayHelper; * @property integer $banknote_10000_ft * @property integer $banknote_20000_ft * @property integer $id_user + * @property integer $collection_money * @property string $created_at * @property string $updated_at */ @@ -53,6 +54,7 @@ class AccountState extends \common\models\BaseFitnessActiveRecord [['id_account', 'type', 'money', 'banknote_5_ft', 'banknote_10_ft', 'banknote_20_ft', 'banknote_50_ft', 'banknote_100_ft', 'banknote_200_ft', 'banknote_500_ft', 'banknote_1000_ft', 'banknote_2000_ft', 'banknote_5000_ft', 'banknote_10000_ft', 'banknote_20000_ft' ], 'integer'], [['comment' ], 'string' ,'max' => 255], [['prev_state' ], 'integer'], + [['id_account'] , 'validatePrevState'], ]; } @@ -87,6 +89,11 @@ class AccountState extends \common\models\BaseFitnessActiveRecord ]; } + public function validatePrevState($attribute,$params){ + + + } + public static function banknoteValues() { return [ @@ -124,6 +131,10 @@ class AccountState extends \common\models\BaseFitnessActiveRecord return $this->hasOne( User::className(), ["id" =>"id_user" ] ); } + public function getPrevObject(){ + return $this->hasOne( AccountState::className(), ["id_account_state" =>"prev_state" ] ); + } + public function getUserName(){ $result = ""; $user = $this->user; @@ -164,40 +175,45 @@ class AccountState extends \common\models\BaseFitnessActiveRecord * @param $type int the type of accountstate to load * @param $user $id of user to load the account * */ - public static function readLast($type, $user = null){ + public static function readLast($type, $user = null,$account = null){ $result = null; $query = AccountState::find(); - //filter user - if ( isset($user)){ - $query->innerJoinWith("account"); - $query->innerJoinWith("account.userAccountAssignments"); - $query->andWhere(['user_account_assignment.id_user' => Yii::$app->user->id]); - } //filter type if ( isset($type)){ $query->andWhere(['account_state.type' => $type]); } - //filter last - $query->join("INNER JOIN ", - "(select max(created_at) as cdate, id_account from account_state group by id_account) as sq1" - ,"sq1.cdate = account_state.created_at and sq1.id_account = account_state.id_account"); + if ( $account ){ + $query->andWhere(["account_state.id_account" => $account ]); + } + + $query->limit(1); + $query->orderBy(['created_at' => SORT_DESC]); - $result = $query->all(); + $result = $query->one(); return $result; } function beforeSave($insert){ $result = parent::beforeSave($insert); if ( $result ){ + $start = null; + $end = null; $prev = null; + $this->prev_money = 0; - if ( isset($this->prev_state) ){ - $prev = AccountState::findOne($this->prev_state); + if ( $this->type == AccountState::TYPE_CLOSE){ + $lastOpen = AccountState::readLast(AccountState::TYPE_OPEN,null, $this->id_account); + if ( $lastOpen != null ){ + $start = $lastOpen->created_at; + $this->prev_state = $lastOpen->id_account_state; + $this->prev_money = $lastOpen->money; + } + $end = date("Y-m-d H:i:s"); + $this->collection_money = Transfer::readPaid($start, $end, Yii::$app->user->id); + + } - if ( $prev != null){ - $this->prev_money = $prev->money; - } } return $result; @@ -205,12 +221,39 @@ class AccountState extends \common\models\BaseFitnessActiveRecord public function hasDifferenceToPrevState(){ $result = false; - if ( isset( $this->prev_state ) && $this->type == self::TYPE_OPEN){ - $result = $this->prev_money != $this->money; + if ( $this->type == self::TYPE_CLOSE){ + $result = ( $this->prev_money + $this->collection_money) != $this->money; } return $result; } + public function hasPlus(){ + $result = false; + if ( $this->type == self::TYPE_CLOSE){ + $result = ( $this->prev_money + $this->collection_money) < $this->money; + } + return $result; + } + + public function hasMinus(){ + $result = false; + if ( $this->type == self::TYPE_CLOSE){ + $result =( $this->prev_money + $this->collection_money) > $this->money; + } + return $result; + } + + public function getSignedDiff(){ + $result = $this->money - ( $this->prev_money + $this->collection_money); + return $result; + } + + public function getExpected(){ + $result = $this->prev_money + $this->collection_money ; + return $result; + } + + public static function readLastForUser($type){ return static::readLast($type, Yii::$app->user->id); } diff --git a/common/models/Product.php b/common/models/Product.php index 21bd74a..057bddb 100644 --- a/common/models/Product.php +++ b/common/models/Product.php @@ -126,7 +126,33 @@ class Product extends \common\models\BaseFitnessActiveRecord { return $warehouses; } - public static function findProduct($query){ + /** + * $param int $forceIncludeAccount id warehouse, that should be included in list, even if it is inactive + * */ + public static function readForDefaultAccount($forceIncludeObjectWithId = null){ + $result = null; + + $account = Account::readDefault(); + + if ( $forceIncludeObjectWithId == null){ + $query = Product::find()->andWhere(['status' => Product::STATUS_ACTIVE])->orderBy(['product.name' => SORT_ASC]); + if ( $account ) + $query->andWhere(["product.id_account" => $account]); + + $result = $query->all(); + }else{ + $query = Product::find()->andWhere( ['or', ['status' => Product::STATUS_ACTIVE], ['id_product' => $forceIncludeObjectWithId ] ])->orderBy(['product.name' => SORT_ASC]); + if ( $account ) + $query->andWhere(["product.id_account" => $account]); + + $result = $query->all(); + + } + + return $result; + } + + public static function findProduct($query, $account = null){ $result = []; $product = null; @@ -137,6 +163,7 @@ class Product extends \common\models\BaseFitnessActiveRecord { ['barcode' => $query ], ] )->andWhere(['status' =>Product::STATUS_ACTIVE]) + ->andFilterWhere(['product.id_account' => $account]) ->all(); diff --git a/common/models/TicketType.php b/common/models/TicketType.php index efe3c1b..831514e 100644 --- a/common/models/TicketType.php +++ b/common/models/TicketType.php @@ -198,13 +198,13 @@ class TicketType extends \common\models\BaseFitnessActiveRecord { /** * $param int $forceIncludeAccount id account, that should be included in list, even if it is inactive * */ - public static function read($forceIncludeObjectWithId = null){ + public static function read($forceIncludeObjectWithId = null, $account = null){ $ticketTypes = null; if ( $forceIncludeObjectWithId == null){ - $ticketTypes = TicketType::find()->andWhere(['status' => self::STATUS_ACTIVE])->all(); + $ticketTypes = TicketType::find()->andWhere(['status' => self::STATUS_ACTIVE])->andFilterWhere(['ticket_type.id_account' => $account])->all(); }else{ - $ticketTypes = TicketType::find()->andWhere( ['or', ['status' => self::STATUS_ACTIVE], ['id_ticket_type' => $forceIncludeObjectWithId ] ])->all(); + $ticketTypes = TicketType::find()->andWhere( ['or', ['status' => self::STATUS_ACTIVE], ['id_ticket_type' => $forceIncludeObjectWithId ] ])->andFilterWhere(['ticket_type.id_account' => $account])->all(); } return $ticketTypes; diff --git a/common/models/Transfer.php b/common/models/Transfer.php index d0f179e..6785ea1 100644 --- a/common/models/Transfer.php +++ b/common/models/Transfer.php @@ -59,7 +59,7 @@ class Transfer extends \common\models\BaseFitnessActiveRecord 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' ); } ], [ 'class' => DiscountAwareBehavior::className(), @@ -168,7 +168,7 @@ class Transfer extends \common\models\BaseFitnessActiveRecord }else if ( $this->type == Transfer::TYPE_PRODUCT ){ $result = $this->productName; }else if ( $this->type == Transfer::TYPE_MONEY_MOVEMENT_OUT ){ - $result = "Pénz kivétel - " . $this->moneyMovement->name; + $result = $this->moneyMovement->humanType; } return $result; } @@ -677,4 +677,19 @@ class Transfer extends \common\models\BaseFitnessActiveRecord return $result; } + + public static function readPaid($start,$end,$idUser){ + $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 transfer_money']); + $query->from('transfer'); + $query->andWhere(['transfer.id_user' => $idUser ]); + + $created_condition = ['and',[ '>=', 'transfer.created_at', $start ] ,[ '<', 'transfer.created_at', $end ] ]; + $paid_condition = ['and',[ '>=', 'transfer.paid_at', $start] ,[ '<', 'transfer.paid_at', $end ] ]; + + $query->andFilterWhere(['or' , $created_condition , $paid_condition]); + $query->andWhere(['transfer.status' => Transfer::STATUS_PAID]); + + return $query->scalar(); + } } diff --git a/common/models/TransferListSearch.php b/common/models/TransferListSearch.php new file mode 100644 index 0000000..4e7f64e --- /dev/null +++ b/common/models/TransferListSearch.php @@ -0,0 +1,390 @@ + 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; + /** + * 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','id_user' ] , '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 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 ]); + } + + protected function addQueryFilters($query){ + + $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, + ]); + + $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(['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("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); + + + $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([ '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->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); + + $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([ 'user.username as user_name','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->innerJoin("user", "transfer.id_user = user.id"); + $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/common/views/common/_account_statistic.php b/common/views/common/_account_statistic.php index 7f54d89..0062183 100644 --- a/common/views/common/_account_statistic.php +++ b/common/views/common/_account_statistic.php @@ -1,6 +1,12 @@ +
+ +
+ \ No newline at end of file diff --git a/console/migrations/m151231_095117_alter__table__account_state__add__column__collection_money.php b/console/migrations/m151231_095117_alter__table__account_state__add__column__collection_money.php new file mode 100644 index 0000000..51fec62 --- /dev/null +++ b/console/migrations/m151231_095117_alter__table__account_state__add__column__collection_money.php @@ -0,0 +1,27 @@ +addColumn("account_state", "collection_money", "int"); + } + + public function down() + { + } + + /* + // Use safeUp/safeDown to run migration code within a transaction + public function safeUp() + { + } + + public function safeDown() + { + } + */ +} diff --git a/frontend/components/AccountStateBanknoteCountWidget.php b/frontend/components/AccountStateBanknoteCountWidget.php index a874368..154867e 100644 --- a/frontend/components/AccountStateBanknoteCountWidget.php +++ b/frontend/components/AccountStateBanknoteCountWidget.php @@ -18,7 +18,11 @@ class AccountStateBanknoteCountWidget extends Widget{ $panelStyleClas = 'panel-default'; if ( $this->model->hasDifferenceToPrevState()){ - $panelStyleClas = 'panel-danger'; + if ( $this->model->hasPlus()){ + $panelStyleClas = 'panel-success'; + }else if ( $this->model->hasMinus() ){ + $panelStyleClas = 'panel-danger'; + } } $s = ""; @@ -27,8 +31,51 @@ class AccountStateBanknoteCountWidget extends Widget{ $s .= "Kassza művelet - " . $this->model->typeName; $s .= Html::endTag("div"); $s .= Html::beginTag("div",['class' => 'panel-body '] ); + + + $s .= $this->generateInfoRow(); $s .= $this->generateNotes(); + + if ( $this->model->hasDifferenceToPrevState()){ + + $ft = " Ft"; + $s .= DetailView::widget([ + 'model' => $this->model, + 'template' =>"{label}{value} ", + 'attributes' => [ + [ + 'label' => "Előző nyitás ideje", + 'value' => $this->model->prevObject ? \Yii::$app->formatter->asDatetime( $this->model->prevObject->created_at) : "-", + ], + [ + 'label' => "Előzőleg nyitott", + 'value' => $this->model->prevObject ? $this->model->user->username : "-", + ], + [ + 'label' => "Előző nyitás összege", + 'value' => $this->model->prev_money.$ft + ], + [ + 'label' => "Bevételek összesen utolsó nyitás óta", + 'value' => $this->model->collection_money .$ft + ], + [ + 'label' => "Zárás összege", + 'value' => $this->model->money.$ft + ], + [ + 'label' => "Várt összeg", + 'value' => $this->model->expected.$ft + ], + [ + 'label' => "Különbözet", + 'value' => $this->model->signedDiff.$ft + ], + ] + ]); + } + $s .= $this->generateComment(); $s .= Html::endTag("div"); $s .= Html::endTag("div"); diff --git a/frontend/components/FrontendMenuStructure.php b/frontend/components/FrontendMenuStructure.php index c675559..11ce991 100644 --- a/frontend/components/FrontendMenuStructure.php +++ b/frontend/components/FrontendMenuStructure.php @@ -7,6 +7,7 @@ use yii\helpers\Html; use common\models\MoneyMovement; use yii\db\Query; use common\models\AccountState; +use backend\models\AccountSearch; class FrontendMenuStructure{ @@ -20,8 +21,8 @@ class FrontendMenuStructure{ public function __construct(){ $this->menuItems = []; - $this->start = Yii::$app->formatter->asDatetime( strtotime('today UTC') ); - $this->tomorrow = Yii::$app->formatter->asDatetime( strtotime('tomorrow UTC') ); + $this->start = \Yii::$app->formatter->asDatetime( strtotime('today') ); + $this->tomorrow = Yii::$app->formatter->asDatetime( strtotime('tomorrow') ); $this->startDate = Yii::$app->formatter->asDate( strtotime('today UTC') ); $this->tomorrowDate = Yii::$app->formatter->asDate( strtotime('tomorrow UTC') ); @@ -30,7 +31,7 @@ class FrontendMenuStructure{ if ( $this->isLogged() ){ - $lastAccountState = AccountState::find()->andWhere(['id_user' => Yii::$app->user->id])->orderBy(['account_state.created_at' => SORT_DESC])->limit(1)->one(); + $lastAccountState = AccountState::find()->andWhere(['id_user' => Yii::$app->user->id])->andWhere(['type' => AccountState::TYPE_OPEN ])->orderBy(['account_state.created_at' => SORT_DESC])->limit(1)->one(); if ( isset($lastAccountState) ){ $this->start = Yii::$app->formatter->asDatetime(strtotime( $lastAccountState->created_at . ' UTC' )); } diff --git a/frontend/controllers/AccountStateController.php b/frontend/controllers/AccountStateController.php index d5b3229..4974f2e 100644 --- a/frontend/controllers/AccountStateController.php +++ b/frontend/controllers/AccountStateController.php @@ -84,6 +84,8 @@ class AccountStateController extends Controller */ public function actionClose() { + $lastStates = AccountState::readLastForUser(AccountState::TYPE_OPEN ); + $lastStates = AccountState::modelsToArray($lastStates); $model = new AccountState(); $model->type = AccountState::TYPE_CLOSE; $model->id_user = Yii::$app->user->id; @@ -97,6 +99,7 @@ class AccountStateController extends Controller return $this->render('close', [ 'model' => $model, 'accounts' => $accounts, + 'lastStates' => $lastStates, ]); } } diff --git a/frontend/controllers/ProductController.php b/frontend/controllers/ProductController.php index 866a2dc..a26bf59 100644 --- a/frontend/controllers/ProductController.php +++ b/frontend/controllers/ProductController.php @@ -82,7 +82,7 @@ class ProductController extends Controller $model->customer = $this->customer; $model->card = $this->card; - $products = Product::read(); + $products = Product::readForDefaultAccount(); $products = Product::modelToMapIdName($products); $model->products = $products; @@ -199,7 +199,7 @@ class ProductController extends Controller public function actionLookup($query = null) { $result = []; - $product = Product::findProduct($query); + $product = Product::findProduct($query, Account::readDefault()); $product = Product::modelToArray($product); $result['product'] = $product; @@ -207,7 +207,6 @@ class ProductController extends Controller \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; - return $result; } diff --git a/frontend/controllers/TicketController.php b/frontend/controllers/TicketController.php index 0e72397..073a9b1 100644 --- a/frontend/controllers/TicketController.php +++ b/frontend/controllers/TicketController.php @@ -97,7 +97,7 @@ class TicketController extends FrontendController $discounts = Discount::read(); - $ticketTypes = TicketType::read(); + $ticketTypes = TicketType::read(null, Account::readDefault()); $accounts = Account::readAccounts(); diff --git a/frontend/models/TransferListSearch.php b/frontend/models/TransferListSearch.php index 7472a60..6d164f9 100644 --- a/frontend/models/TransferListSearch.php +++ b/frontend/models/TransferListSearch.php @@ -16,360 +16,8 @@ use common\models\MoneyMovement; /** * TransferSearch represents the model behind the search form about `common\models\Transfer`. */ -class TransferListSearch extends Transfer +class TransferListSearch extends \common\models\TransferListSearch { - - public $start; - public $end; - - public $timestampStart; - public $timestampEnd; - -// public $totalsCreatedAt = ['total' => 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/account-state/close.php b/frontend/views/account-state/close.php index 8d792e1..2378870 100644 --- a/frontend/views/account-state/close.php +++ b/frontend/views/account-state/close.php @@ -13,7 +13,6 @@ $this->params['breadcrumbs'][] = $this->title; AccountStateAsset::register($this); $options = []; - $this->registerJs ( 'new AccountState( '. json_encode($options).');' ); ?>
diff --git a/frontend/views/layouts/main.php b/frontend/views/layouts/main.php index 8725ef0..121b260 100644 --- a/frontend/views/layouts/main.php +++ b/frontend/views/layouts/main.php @@ -68,7 +68,14 @@ AppAsset::register($this);

© name ?> params['version'] ?> Fitness - WebAdmin

-

+
+
+ +
+ Az oldalon szereplő adatok csak tájékoztató jellegűek.
+ Az adatok helyességéért és igazságtartalmáért felelősséget nem vállalunk.
+ Az oldal nem használható hivatalos adatforrásként.
+
diff --git a/frontend/views/product/sale.php b/frontend/views/product/sale.php index b857c3e..20d95fc 100644 --- a/frontend/views/product/sale.php +++ b/frontend/views/product/sale.php @@ -6,6 +6,7 @@ use frontend\assets\ProductSellAsset; use frontend\components\ReceptionWidget; use yii\bootstrap\ActiveForm; use yii\helpers\Url; +use yii\helpers\ArrayHelper; /* @var $this yii\web\View */ /* @var $form yii\bootstrap\ActiveForm */ @@ -82,7 +83,7 @@ $this->params['breadcrumbs'][] = Yii::t('frontend/product', 'Sale'); } - + $receptionForm, 'route' => ['customer/reception'] ] )?>
diff --git a/frontend/views/ticket/create.php b/frontend/views/ticket/create.php index cb033a4..eebe3fa 100644 --- a/frontend/views/ticket/create.php +++ b/frontend/views/ticket/create.php @@ -30,6 +30,7 @@ $options['clear_cart_url'] = Url::toRoute(['product/clear-list']); $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; $this->registerJs ( 'new TicketSell( '. json_encode($options).');' ); ?> diff --git a/frontend/views/transfer/_view.php b/frontend/views/transfer/_view.php index 4c9d727..d4d11e4 100644 --- a/frontend/views/transfer/_view.php +++ b/frontend/views/transfer/_view.php @@ -1,6 +1,7 @@ formatter;
getAttributeLabel( 'type') ?>
+ +
Megnevezés
+
getAttributeLabel( 'id_user') ?>
diff --git a/frontend/views/transfer/list.php b/frontend/views/transfer/list.php index 509336b..b688f85 100644 --- a/frontend/views/transfer/list.php +++ b/frontend/views/transfer/list.php @@ -232,6 +232,11 @@ td.name{

Részletes összesítés

+

Bérletek

@@ -239,6 +244,7 @@ td.name{ + @@ -248,13 +254,14 @@ td.name{ tickets as $t ){?> - - - - - - - + + + + + + + + @@ -275,6 +282,11 @@ td.name{ +

Termék eladások

Kiadva Fizetve KasszaFelhasználó Bérlet típus Egység ár Mennyiség
Ft Db FT Ft Db FT
@@ -282,6 +294,7 @@ td.name{ + @@ -295,6 +308,7 @@ td.name{ + @@ -320,13 +334,18 @@ td.name{ - +

Pénzmozgások

Kiadva Fizetve KasszaFelhasználó Kategória Termék Egység ár Ft
+ @@ -337,6 +356,7 @@ td.name{ +
Dátum KasszaFelhasználó Név Típus Összeg
Ft