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');
+?>
+
+
+
+ ['list'],
+ 'method' => 'get',
+ ]); ?>
+
+
+
+
+ = $form->field($model, 'start')->widget(DateTimePicker::classname(), [
+ 'pluginOptions' => [
+ 'autoclose'=>true,
+ 'format' => 'yyyy.mm.dd hh:ii'
+ ]
+ ]) ?>
+
+
+
+ = $form->field($model, 'end') ->widget(DateTimePicker::classname(), [
+ 'pluginOptions' => [
+ 'autoclose'=>true,
+ 'format' => 'yyyy.mm.dd hh:ii'
+ ]
+ ]) ?>
+
+
+
+
+ = $form->field($model, 'id_account')->dropDownList($accountOptions) ?>
+
+
+ = $form->field($model, 'id_user')->dropDownList($userOptions) ?>
+
+
+
+
+ = Html::submitButton(Yii::t('frontend/transfer', 'Search'), ['class' => 'btn btn-primary']) ?>
+
+
+
+
+
+
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;
+?>
+
+
+
+
+
= Html::encode($this->title) ?>
+ render('_search_list', ['model' => $searchModel]); ?>
+
+
+
+
+
+
+
+
+
+
+
Egyszerű összesítés
+
+
+
+ | Bérletek |
+ ticketMoney?> FT |
+
+
+ | Termékek |
+ productMoney?> FT |
+
+
+ | Pénzmozgások |
+ moneyMovementMoneis?> FT |
+
+
+ | Végösszeg |
+ total?> FT |
+
+
+
+
+
+
Közepes összesítés
+
+
Bérletek típus szerint
+
+
+
+ | Bérlet típus |
+ Mennyiség |
+ Összeg |
+
+
+
+ ticketStats as $ticketStat ) {
+ ?>
+
+ |
+ Db |
+ FT |
+
+
+
+
+
+
+
+ Összesen: ticketMoney; ?> Ft
+
+
+
+
Termékek kategória szerint
+
+
+
+ | Termék kategória |
+ Mennyiség |
+ Összeg |
+
+
+
+ productMoneies as $pm ) {
+ ?>
+
+ |
+ Db |
+ FT |
+
+
+
+
+
+
+ Összesen: productMoney; ?> Ft
+
+
+
+
+
Termékek kategória szerint részletes
+
+ productsByCategory['categories'] as $categoryHolder ){
+
+ $products = $categoryHolder['products'];
+ ?>
+
+
+
+
+
+ | Termék |
+ Mennyiség |
+ Összeg |
+
+
+
+
+
+
+ |
+ Db |
+ FT |
+
+
+
+
+ |
+ |
+ FT |
+
+
+
+
+
+
+ Összesen:
+ productsByCategory['total'];
+ ?>
+
+
+
+
Pénzmozgások típus szerint
+
+
+
+ | Pénzmozgás típus |
+ Mennyiség |
+ Összeg |
+
+
+
+ moneyMovementsByType as $mmStat ) {
+ ?>
+
+ |
+ Db |
+ FT |
+
+
+
+
+
+
+ Összesen: moneyMovementMoneis; ?> Ft
+
+
+
+
+
+
+ Végösszeg: total; ?> Ft
+
+
+
+
+
+
Részletes összesítés
+
+
Bérletek
+
+
+
+ | Kiadva |
+ Fizetve |
+ Kassza |
+ Felhasználó |
+ Bérlet típus |
+ Egység ár |
+ Mennyiség |
+ Összeg |
+
+
+
+ tickets as $t ){?>
+
+ | |
+ |
+ |
+ |
+ |
+ Ft |
+ Db |
+ FT |
+
+
+
+
+
+ tickets ) == 0 ) {
+ ?>
+ Nincs találat
+
+
+
+
+ Összesen: ticketMoney; ?> Ft
+
+
+
+
+
+
Termék eladások
+
+
+
+ | Kiadva |
+ Fizetve |
+ Kassza |
+ Felhasználó |
+ Kategória |
+ Termék |
+ Egység ár |
+ Mennyiség |
+ Összeg |
+
+
+
+ products as $p ){?>
+
+ | |
+ |
+ |
+ |
+ |
+ |
+ Ft |
+ Db |
+ FT |
+
+
+
+
+
+ products ) == 0 ) {
+ ?>
+ Nincs találat
+
+
+
+
+ Összesen: productMoney; ?> Ft
+
+
+
+
+
+
Pénzmozgások
+
+
+
+ | Dátum |
+ Kassza |
+ Felhasználó |
+ Név |
+ Típus |
+ Összeg |
+
+
+
+ moneyMovements as $p ){?>
+
+ | |
+ |
+ |
+ |
+ |
+ 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);
© = Yii::$app->name ?> = Yii::$app->params['version'] ?> Fitness - WebAdmin = date('Y') ?>
-
= Yii::powered() ?>
+
+
+
+
+ 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{
| Kiadva |
Fizetve |
Kassza |
+ Felhasználó |
Bérlet típus |
Egység ár |
Mennyiség |
@@ -248,13 +254,14 @@ td.name{
tickets as $t ){?>
- | |
- |
- |
- |
- Ft |
- Db |
- FT |
+ |
+ |
+ |
+ |
+ |
+ Ft |
+ Db |
+ FT |
@@ -275,6 +282,11 @@ td.name{
+
Termék eladások
@@ -282,6 +294,7 @@ td.name{
| Kiadva |
Fizetve |
Kassza |
+ Felhasználó |
Kategória |
Termék |
Egység ár |
@@ -295,6 +308,7 @@ td.name{
|
|
|
+ |
|
|
Ft |
@@ -320,13 +334,18 @@ td.name{
-
+
Pénzmozgások
| Dátum |
Kassza |
+ Felhasználó |
Név |
Típus |
Összeg |
@@ -337,6 +356,7 @@ td.name{
| |
|
+ |
|
|
Ft |