diff --git a/backend/controllers/CardController.php b/backend/controllers/CardController.php index 2aff649..78b57de 100644 --- a/backend/controllers/CardController.php +++ b/backend/controllers/CardController.php @@ -389,10 +389,18 @@ class CardController extends \backend\controllers\BackendController { $command = $connection->createCommand( Ticket::$SQL_UPDATE ); $result = $command->execute(); \Yii::info("Tickets updated: " . $result ); - - \Yii::$app->session->setFlash('success', 'Módosított bérletek száma: ' . $result); - + + $command = $connection->createCommand( Card::$SQL_CLEARS_STATUS_DOOR ); + $result = $command->execute(); + \Yii::info("Door flag cleared: " . $result ); + + $command = $connection->createCommand( Card::$SQL_FIX_KEY_STATUS ); + $result = $command->execute(); + \Yii::info("Key flag fixed: " . $result ); + + + } return $this->render("recalculate"); diff --git a/backend/controllers/ContractController.php b/backend/controllers/ContractController.php index 73d8248..6e41790 100644 --- a/backend/controllers/ContractController.php +++ b/backend/controllers/ContractController.php @@ -137,13 +137,17 @@ class ContractController extends Controller { ] ); } } - + /** * Deletes an existing Contract model. * If deletion is successful, the browser will be redirected to the 'index' page. - * - * @param integer $id + * + * @param integer $id * @return mixed + * @throws Exception + * @throws NotFoundHttpException + * @throws \Exception + * @throws \yii\db\Exception */ public function actionDelete($id) { $model = $this->findModel ( $id ); diff --git a/backend/models/CardSearch.php b/backend/models/CardSearch.php index 19e8035..5972894 100644 --- a/backend/models/CardSearch.php +++ b/backend/models/CardSearch.php @@ -63,7 +63,7 @@ class CardSearch extends Card 'customer.name as customer_name' , 'customer.id_customer as customer_id_customer', 'key.number as key_number', - 'card.flag as card_flag', + 'card.validity as card_validity', ]); @@ -107,7 +107,7 @@ class CardSearch extends Card 'asc' => ['key.number' => SORT_ASC ], 'desc' => ['key.number' => SORT_DESC], ], - 'card_flag' => [ + 'card_validity' => [ 'asc' => ['card.flag' => SORT_ASC ], 'desc' => ['card.flag' => SORT_DESC], ], diff --git a/backend/views/card/index.php b/backend/views/card/index.php index 3c9f955..2c8632f 100644 --- a/backend/views/card/index.php +++ b/backend/views/card/index.php @@ -69,10 +69,10 @@ $this->params['breadcrumbs'][] = $this->title; 'label' => 'Kulcs száma' ], [ - 'attribute' => 'card_flag', + 'attribute' => 'card_validity', 'label' => 'Info', 'value' => function ($model, $key, $index, $column){ - return Helper::getArrayValue(DoorLog::getCardFlagTexts(), $model['card_flag'], "Ismeretlen ok"); + return Helper::getArrayValue(DoorLog::getCardFlagTexts(), $model['card_validity'], "Ismeretlen ok"); } ], diff --git a/changelog.txt b/changelog.txt index ab10f13..c623f54 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,7 @@ +-0.0.90 + - add new trigger, flag/flag_out changes changes + - flag state page for reception + - add today views for transfer, account_state on reception -0.0.89 - fix TransferPayout overridePaymentMethod array_search returns 0 for first element which false false... diff --git a/common/components/DateUtil.php b/common/components/DateUtil.php index 7cc9e58..4e05d84 100644 --- a/common/components/DateUtil.php +++ b/common/components/DateUtil.php @@ -12,6 +12,34 @@ use yii\i18n\Formatter; class DateUtil { + /** + * Get UTC today @00:00:00 . + * Helper method to generate date for mysql + * + * @return \DateTime + */ + public static function todayStart( ){ + $d2 = new \DateTime(); + $d2->setTimezone( new \DateTimeZone( "UTC" ) ); + $d2->setTime(0, 0, 0); + return $d2; + } + + /** + * Get UTC t @00:00:00 . + * Helper method to generate date for mysql + * + * @return \DateTime + */ + public static function tomorrowStart( ){ + $d2 = new \DateTime(); + $d2->add(new \DateInterval('P1D')); + $d2->setTimezone( new \DateTimeZone( "UTC" ) ); + $d2->setTime(0, 0, 0); + return $d2; + } + + public static function addMonth($timestamp, $monthCount = 1) { @@ -65,4 +93,12 @@ class DateUtil return $formatter->asDatetime($dateTimeObject); } + public static function formatDateUtc($dateTimeObject) + { + $formatter = new Formatter; + $formatter->datetimeFormat = 'php:Y-m-d'; + $formatter->timeZone = 'UTC'; + return $formatter->asDatetime($dateTimeObject); + } + } \ No newline at end of file diff --git a/common/components/Helper.php b/common/components/Helper.php index aee7908..4d6f2b9 100644 --- a/common/components/Helper.php +++ b/common/components/Helper.php @@ -320,6 +320,17 @@ class Helper { public static function isTicketCreatePriceEditable() { return \Yii::$app->params ['ticket_create_price_editable'] == true ; } + + public static function isReceptionTransferListToday(){ + return \Yii::$app->params['reception_transfer_list_only_today']; + } + public static function isReceptionAccountStateIndexToday(){ + return \Yii::$app->params['reception_account_state_index_only_today']; + } + + public static function isReceptionTransferIndexEnabled(){ + return !Helper::isReceptionTransferListToday(); + } public static function getRealUserIp() { $client = @$_SERVER ['HTTP_CLIENT_IP']; @@ -385,7 +396,13 @@ class Helper { } return $flag; } - + + public static function isBitOn($flag,$n){ + $result = +$flag & (1 << +$n) ; + $result = $result > 0; + return $result ; + } + public static function generateRandomString($length = 6,$characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWX' ) { $charactersLength = strlen($characters); diff --git a/common/config/params.php b/common/config/params.php index 59ae6a1..c61348d 100644 --- a/common/config/params.php +++ b/common/config/params.php @@ -5,7 +5,7 @@ return [ 'supportEmail' => 'rocho02@gmail.com', 'infoEmail' => 'info@rocho-net.hu', 'user.passwordResetTokenExpire' => 3600, - 'version' => 'v0.0.89', + 'version' => 'v0.0.90', 'company' => 'movar',//gyor 'company_name' => "Freimann Kft.", 'product_visiblity' => 'account',// on reception which products to display. account or global @@ -30,6 +30,9 @@ return [ * Hány napig láthatják visszamenőleg a recepciósok az adatokat * */ 'reception_visibility_days' => 3, + 'reception_account_state_index_only_today' => false, + 'reception_transfer_list_only_today' => false, + 'backend_skin' => 'skin-red', //skin-green /**User cart module on/off*/ 'user_cart_on' => true, diff --git a/common/models/Card.php b/common/models/Card.php index f6160ea..7b87adc 100644 --- a/common/models/Card.php +++ b/common/models/Card.php @@ -15,6 +15,7 @@ use common\components\Helper; * @property integer $flag * @property string $created_at * @property string $updated_at + * @property int flag_out */ class Card extends \common\models\BaseFitnessActiveRecord { @@ -30,7 +31,32 @@ class Card extends \common\models\BaseFitnessActiveRecord public static $FLAG_TICKET = 0; - public static $FLAG_STATUS = 1; + public static $FLAG_DOOR = 1; + public static $FLAG_KEY = 2; + public static $FLAG_STATUS = 3; + + /** + * This script is used in daily scripts, to clear the flag door log status + * + * @var string + */ + public static $SQL_CLEARS_STATUS_DOOR = " + UPDATE card set flag = ( flag & ~(1 << 1 ) ), flag_out= ( flag_out & ~(1 << 1 ) ) where card.type <> 50 + "; + + public static $SQL_FIX_KEY_STATUS = " + update card as c1 + left join card_key_assignment k + on k.id_card = c1.id_card + set flag = CASE WHEN k.id_key is null then (c1.flag | 1 << 2) else ( c1.flag & ~(1 << 2 ) ) end, + flag_out = CASE WHEN k.id_key is null then ( c1.flag_out & ~(1 << 2 )) else (c1.flag_out | 1 << 2 ) end + WHERE c1.type <> 50 + "; + + public static $SQL_CLEARS_STATUS_DOOR_IN = " + UPDATE card set flag = ( flag & ~(1 << 1 ) ) WHERE card.type <> 50 and card.id_card = :id + "; + /** * @inheritdoc */ @@ -175,13 +201,17 @@ class Card extends \common\models\BaseFitnessActiveRecord return ; } $db = \Yii::$app->db; + $command = $db->createCommand(Ticket::$SQL_UPDATE_CARD,[':id' => $id]); $command->execute(); + + $command = $db->createCommand(Card::$SQL_CLEARS_STATUS_DOOR_IN,[':id' => $id]); + $command->execute(); } public function beforeSave($insert) { if (parent::beforeSave($insert)){ - $this->flag = Helper::setBit($this->flag, Card::$FLAG_STATUS, ( $this->status != Card::STATUS_ACTIVE)); + $this->flag = Helper::setBit( $this->flag , Card::$FLAG_STATUS, ( $this->status != Card::STATUS_ACTIVE ) ); return true; } return false; @@ -189,7 +219,42 @@ class Card extends \common\models\BaseFitnessActiveRecord public function getFlagText(){ - return Helper::getArrayValue(DoorLog::getCardFlagTexts(), $this->flag, "Ismeretlen"); + return Helper::getArrayValue(DoorLog::getCardFlagTexts(), $this->validity, "Ismeretlen"); } - + + public function setFlagsHasKey($hasKey){ + + $pos = Card::$FLAG_KEY; + $this->flag = $hasKey ? ( $this->flag & ~(1 << $pos) ) : ( $this->flag | 1 << $pos ); + $this->flag_out = $hasKey ? ( $this->flag_out | 1 << $pos ) : ( $this->flag_out & ~(1 << $pos) ); + \Yii::info("flag has key: ".$this->flag .";".$this->flag_out); + } + + + public function isFlagValidity(){ + return Helper::isBitOn($this->flag,Card::$FLAG_TICKET); + } + + public function isFlagDoor(){ + return Helper::isBitOn($this->flag,Card::$FLAG_DOOR); + } + + public function isFlagKey(){ + return Helper::isBitOn($this->flag,Card::$FLAG_KEY); + } + + public function isFlagStatus(){ + return Helper::isBitOn($this->flag,Card::$FLAG_STATUS); + } + + public function isFlagOutDoor(){ + return Helper::isBitOn($this->flag_out,Card::$FLAG_DOOR); + } + + public function isFlagOutKey(){ + return Helper::isBitOn($this->flag_out,Card::$FLAG_KEY); + } + + + } diff --git a/common/models/DoorLog.php b/common/models/DoorLog.php index 9c473db..c4dc53a 100644 --- a/common/models/DoorLog.php +++ b/common/models/DoorLog.php @@ -188,7 +188,7 @@ class DoorLog extends \yii\db\ActiveRecord $dlog->id_account = Account::readDefault(); if ( $dlog->direction == 0){ - $dlog->card_flag = $card->flag; + $dlog->card_flag = $card->validity; }else{ $dlog->card_flag = -1; } diff --git a/common/models/Ticket.php b/common/models/Ticket.php index 81635f1..8f9dd1e 100644 --- a/common/models/Ticket.php +++ b/common/models/Ticket.php @@ -47,7 +47,8 @@ class Ticket extends \common\models\BaseFitnessActiveRecord order by id_card desc ) as t on t.id_card = c1.id_card - SET c1.flag = case when t.id_card is null then ( c1.flag | 1 << 0 ) else ( c1.flag & ~(1 << 0) ) end + SET c1.validity = case when t.id_card is null then ( c1.validity | 1 << 0 ) else ( c1.validity & ~(1 << 0) ) end + , c1.flag = case when t.id_card is null then ( c1.flag | 1 << 0 ) else ( c1.flag & ~(1 << 0) ) end , c1.id_ticket_current = case when t.id_ticket is null then null else t.id_ticket end WHERE c1.type <> 50"; @@ -63,7 +64,8 @@ class Ticket extends \common\models\BaseFitnessActiveRecord order by id_card desc ) as t on t.id_card = c1.id_card - SET c1.flag = case when t.id_card is null then ( c1.flag | 1 << 0 ) else ( c1.flag & ~(1 << 0) ) end + SET c1.validity = case when t.id_card is null then ( c1.validity | 1 << 0 ) else ( c1.validity & ~(1 << 0) ) end + ,c1.flag = case when t.id_card is null then ( c1.flag | 1 << 0 ) else ( c1.flag & ~(1 << 0) ) end , c1.id_ticket_current = case when t.id_ticket is null then null else t.id_ticket end WHERE c1.type <> 50 and c1.id_card = :id"; diff --git a/common/models/TicketInstallmentRequest.php b/common/models/TicketInstallmentRequest.php index f300390..152b1af 100644 --- a/common/models/TicketInstallmentRequest.php +++ b/common/models/TicketInstallmentRequest.php @@ -336,7 +336,7 @@ class TicketInstallmentRequest extends \yii\db\ActiveRecord TicketInstallmentRequest::$STATUS_SENT=> 'Beküldve', TicketInstallmentRequest::$STATUS_CANCELED=> 'Törölve', TicketInstallmentRequest::$STATUS_REJECTED=> 'Visszautasítva', - TicketInstallmentRequest::$STATUS_ACCEPTED=> 'Sikeresen beszedés', + TicketInstallmentRequest::$STATUS_ACCEPTED=> 'Sikeres beszedés', TicketInstallmentRequest::$STATUS_ACCEPTED_MANUAL=> 'Személyesen fizetve', ]; } diff --git a/console/controllers/DoorlogController.php b/console/controllers/DoorlogController.php index fd58b0e..c6d2b76 100644 --- a/console/controllers/DoorlogController.php +++ b/console/controllers/DoorlogController.php @@ -75,7 +75,7 @@ class DoorlogController extends Controller{ $card = $subject->card; - echo "in:" . $subject->usage_count. " | out:" . $subject->count_move_out . " | max: " .$subject->max_usage_count. " | card flag: " . $card->flag ."\n"; + echo "in:" . $subject->usage_count. " | out:" . $subject->count_move_out . " | max: " .$subject->max_usage_count. " | card validity: " . $card->validity ."\n"; } diff --git a/console/controllers/ProductConsoleController.php b/console/controllers/ProductConsoleController.php new file mode 100644 index 0000000..658645f --- /dev/null +++ b/console/controllers/ProductConsoleController.php @@ -0,0 +1,25 @@ +db; - $command = $connection->createCommand ( Ticket::$SQL_UPDATE ); + + $command = $connection->createCommand ( Card::$SQL_CLEARS_STATUS_DOOR ); + $result = $command->execute (); + \Yii::info ( "Tickets updated flag door: " . $result ); + + $command = $connection->createCommand ( Ticket::$SQL_UPDATE ); $result = $command->execute (); \Yii::info ( "Tickets updated: " . $result ); - echo "Tickets updated: " . $result; + + + $command = $connection->createCommand ( Card::$SQL_FIX_KEY_STATUS ); + $result = $command->execute (); } /** diff --git a/console/migrations/m160919_061627_alter__table__card__add__column__validity.php b/console/migrations/m160919_061627_alter__table__card__add__column__validity.php new file mode 100644 index 0000000..f32c848 --- /dev/null +++ b/console/migrations/m160919_061627_alter__table__card__add__column__validity.php @@ -0,0 +1,30 @@ +addColumn("card", "validity", "int default 0"); + } + + public function down() + { + echo "m160919_061627_alter__table__card__add__column__validity cannot be reverted.\n"; + + return false; + } + + /* + // Use safeUp/safeDown to run migration code within a transaction + public function safeUp() + { + } + + public function safeDown() + { + } + */ +} diff --git a/cutler_daily.sh b/cutler_daily.sh index a28c4aa..eb2839a 100644 --- a/cutler_daily.sh +++ b/cutler_daily.sh @@ -1,3 +1,4 @@ +#!/usr/bin/env bash php /var/www/virtual/fitnessadmin.hu/htdocs/cutler/yii ticket/index php /var/www/virtual/fitnessadmin.hu/htdocs/cutler/yii ticket/daily \ No newline at end of file diff --git a/frontend/components/FrontendMenuStructure.php b/frontend/components/FrontendMenuStructure.php index 9bdfd3c..c8c116f 100644 --- a/frontend/components/FrontendMenuStructure.php +++ b/frontend/components/FrontendMenuStructure.php @@ -11,117 +11,127 @@ use backend\models\AccountSearch; use common\models\Account; use common\components\Helper; -class FrontendMenuStructure{ - - public $menuItems; - public $start;//start date and time - public $tomorrow;//tomorrow date and time - - public $startDate;//start date - public $tomorrowDate;//tomorrow date - public $yesterDay;//yesterday date - - public function __construct(){ - $this->menuItems = []; - - $this->yesterDay = \Yii::$app->formatter->asDatetime( strtotime('yesterday UTC') ); - $this->start = \Yii::$app->formatter->asDatetime( strtotime('today UTC') ); - $this->tomorrow = Yii::$app->formatter->asDatetime( strtotime('tomorrow UTC') ); - $this->startDate = Yii::$app->formatter->asDate( strtotime('today UTC') ); - $this->tomorrowDate = Yii::$app->formatter->asDate( strtotime('tomorrow UTC') ); - - Yii::info("Start date is : ". $this->start); - - - - if ( $this->isLogged() ){ - $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' )); - } - } +class FrontendMenuStructure +{ - } - - - - protected function can($authItem){ - $result = false; - if (\Yii::$app->user->can($authItem)) { - $result = true; - } - return $result; - } - - - protected function isLogged(){ - return !Yii::$app->user->isGuest; - } - - - protected function addRecepcio(){ - if ( $this->isLogged() ){ - - $isadmin =Yii::$app->user->can('admin') ||Yii::$app->user->can('employee'); - - $this->menuItems[] = ['label' => Yii::t('frontend/customer','Reception'), 'url' => ['/customer/reception'] ]; - - $items = [ - ['label' => Yii::t('frontend/account-state','Default account'), 'url' => ['/account/select'] ], - ['label' => Yii::t('frontend/account-state', 'Account states'), 'url' => ['/account-state/index' ,'AccountstateSearch[id_account]' => Account::readDefault(), 'AccountstateSearch[start]' => $this->yesterDay] ], - ['label' => Yii::t('frontend/account-state','Open account state'), 'url' => ['/account-state/open'] ], - ['label' => Yii::t('frontend/account-state','Close account state'), 'url' => ['/account-state/close'] ], - - ['label' => Yii::t('frontend/money-movement','Money movements'), 'url' => [ '/money-movement/index', 'MoneyMovementSearch[start]' => $this->start, 'MoneyMovementSearch[end]' => $this->tomorrow ] ], - - ]; - - if ( Helper::isCompanyMovar() ){ - $items[] = ['label' => Yii::t('frontend/transfer','Daily transfers'), 'url' => [ '/transfer/list', 'TransferListSearch[id_account]' => Account::readDefault(), 'TransferListSearch[start]' => $this->start, 'TransferListSearch[end]' => $this->tomorrow ] ]; - $items[] = ['label' => Yii::t('frontend/transfer','Sales detailed'), 'url' => [ '/transfer/sale', 'TransferSaleSearch[id_user]' =>\Yii::$app->user->id, 'TransferSaleSearch[id_account]' => Account::readDefault(), 'TransferSaleSearch[start]' => $this->start, 'TransferSaleSearch[end]' => $this->tomorrow ] ]; - $items[] = ['label' => Yii::t('frontend/transfer','Ticket sale detailed'), 'url' => [ '/transfer/tickets','TransferTicketSearch[id_user]' =>\Yii::$app->user->id, 'TransferTicketSearch[id_account]' => Account::readDefault(), 'TransferTicketSearch[start]' => $this->start, 'TransferTicketSearch[end]' => $this->tomorrow ] ]; - } - -// if ( $isadmin || Yii::$app->user->can('reception.transfers') ){ - $items[] = ['label' => Yii::t('frontend/transfer','Transfers'), 'url' => ['/transfer/index', 'TransferSearch[id_user]' =>\Yii::$app->user->id, 'TransferSearch[id_account]' => Account::readDefault(), 'TransferSearch[start]' => $this->start, 'TransferSearch[end]' => $this->tomorrow ] ]; - //$items[] = ['label' => Yii::t('frontend/collection','Collections'), 'url' => ['/collection/index' , 'CollectionSearch[start]' =>$this->start,'CollectionSearch[end]' => $this->tomorrow ] ]; -// } - - $items[] = ['label' => Yii::t('frontend/card','Vendégek'), 'url' => [ '/card/index' ] ]; + public $menuItems; + public $start;//start date and time + public $tomorrow;//tomorrow date and time + + public $startDate;//start date + public $tomorrowDate;//tomorrow date + public $yesterDay;//yesterday date + + public function __construct() + { + $this->menuItems = []; + + $this->yesterDay = \Yii::$app->formatter->asDatetime(strtotime('yesterday UTC')); + $this->start = \Yii::$app->formatter->asDatetime(strtotime('today UTC')); + $this->tomorrow = Yii::$app->formatter->asDatetime(strtotime('tomorrow UTC')); + $this->startDate = Yii::$app->formatter->asDate(strtotime('today UTC')); + $this->tomorrowDate = Yii::$app->formatter->asDate(strtotime('tomorrow UTC')); + + Yii::info("Start date is : " . $this->start); + + + if ($this->isLogged()) { + $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')); + } + } + + } + + + protected function can($authItem) + { + $result = false; + if (\Yii::$app->user->can($authItem)) { + $result = true; + } + return $result; + } + + + protected function isLogged() + { + return !Yii::$app->user->isGuest; + } + + + protected function addRecepcio() + { + if ($this->isLogged()) { + + $isadmin = Yii::$app->user->can('admin') || Yii::$app->user->can('employee'); + + $this->menuItems[] = ['label' => Yii::t('frontend/customer', 'Reception'), 'url' => ['/customer/reception']]; + + $items = []; + + $items[] = ['label' => Yii::t('frontend/account-state', 'Default account'), 'url' => ['/account/select']]; + + + if ( Helper::isReceptionAccountStateIndexToday() ){ + $items[] = ['label' => Yii::t('frontend/account-state', 'Account states'), 'url' => ['/account-state/today' ]]; + }else{ + $items[] = ['label' => Yii::t('frontend/account-state', 'Account states'), 'url' => ['/account-state/index', 'AccountstateSearch[id_account]' => Account::readDefault(), 'AccountstateSearch[start]' => $this->yesterDay]]; + } + + $items[] = ['label' => Yii::t('frontend/account-state', 'Open account state'), 'url' => ['/account-state/open']]; + $items[] = ['label' => Yii::t('frontend/account-state', 'Close account state'), 'url' => ['/account-state/close']]; + $items[] = ['label' => Yii::t('frontend/money-movement', 'Money movements'), 'url' => ['/money-movement/index', 'MoneyMovementSearch[start]' => $this->start, 'MoneyMovementSearch[end]' => $this->tomorrow]]; + + + if (Helper::isCompanyMovar()) { + $items[] = ['label' => Yii::t('frontend/transfer', 'Daily transfers'), 'url' => ['/transfer/list', 'TransferListSearch[id_account]' => Account::readDefault(), 'TransferListSearch[start]' => $this->start, 'TransferListSearch[end]' => $this->tomorrow]]; + $items[] = ['label' => Yii::t('frontend/transfer', 'Sales detailed'), 'url' => ['/transfer/sale', 'TransferSaleSearch[id_user]' => \Yii::$app->user->id, 'TransferSaleSearch[id_account]' => Account::readDefault(), 'TransferSaleSearch[start]' => $this->start, 'TransferSaleSearch[end]' => $this->tomorrow]]; + $items[] = ['label' => Yii::t('frontend/transfer', 'Ticket sale detailed'), 'url' => ['/transfer/tickets', 'TransferTicketSearch[id_user]' => \Yii::$app->user->id, 'TransferTicketSearch[id_account]' => Account::readDefault(), 'TransferTicketSearch[start]' => $this->start, 'TransferTicketSearch[end]' => $this->tomorrow]]; + } + + if ( Helper::isReceptionTransferListToday()){ + $items[] = ['label' => Yii::t('frontend/transfer', 'Transfers'), 'url' => ['/transfer/today', ]]; + }else{ + $items[] = ['label' => Yii::t('frontend/transfer', 'Transfers'), 'url' => ['/transfer/index', 'TransferSearch[id_user]' => \Yii::$app->user->id, 'TransferSearch[id_account]' => Account::readDefault(), 'TransferSearch[start]' => $this->start, 'TransferSearch[end]' => $this->tomorrow]]; + } + + $items[] = ['label' => Yii::t('frontend/card', 'Vendégek'), 'url' => ['/card/index']]; // $items[] = ['label' => Yii::t('frontend/card','Leltár'), 'url' => [ '/product/inventory' ] ]; // $items[] = ['label' => Yii::t('frontend/card','Leltár'), 'url' => [ '/inventory/index' ] ]; - - - $this->menuItems[] = ['label' => Yii::t('frontend/account', 'Account'), - 'items' => $items - - - - - ]; - } - } - - - protected function addLoginMainMenu(){ - if (Yii::$app->user->isGuest) { - $mainMenuItem= ['label' => Yii::t('frontend/site','Login'), 'url' => ['/site/login']]; - } else { - $mainMenuItem= [ - 'label' => Yii::t('frontend/transfer','Logout'). '(' . Yii::$app->user->identity->username . ')', - 'url' => ['/site/logout'], - 'linkOptions' => ['data-method' => 'post'] - ]; - } - $this->menuItems[] = $mainMenuItem; - } - - - public function run(){ - $this->addRecepcio(); - $this->addLoginMainMenu(); - return $this->menuItems; - } - - + + + $this->menuItems[] = ['label' => Yii::t('frontend/account', 'Account'), + 'items' => $items + + + ]; + } + } + + + protected function addLoginMainMenu() + { + if (Yii::$app->user->isGuest) { + $mainMenuItem = ['label' => Yii::t('frontend/site', 'Login'), 'url' => ['/site/login']]; + } else { + $mainMenuItem = [ + 'label' => Yii::t('frontend/transfer', 'Logout') . '(' . Yii::$app->user->identity->username . ')', + 'url' => ['/site/logout'], + 'linkOptions' => ['data-method' => 'post'] + ]; + } + $this->menuItems[] = $mainMenuItem; + } + + + public function run() + { + $this->addRecepcio(); + $this->addLoginMainMenu(); + return $this->menuItems; + } + + } \ No newline at end of file diff --git a/frontend/controllers/AccountStateController.php b/frontend/controllers/AccountStateController.php index 403fdd7..e2038a1 100644 --- a/frontend/controllers/AccountStateController.php +++ b/frontend/controllers/AccountStateController.php @@ -2,12 +2,13 @@ namespace frontend\controllers; +use common\components\DateUtil; +use frontend\models\AccountstateSearchToday; use Yii; use common\models\AccountState; use frontend\models\AccountstateSearch; use yii\web\Controller; use yii\web\NotFoundHttpException; -use yii\filters\VerbFilter; use common\models\Account; use common\components\DailyListing; use common\models\User; @@ -45,13 +46,18 @@ class AccountStateController extends Controller { ]; } - - /** - * Lists all AccountState models. - * - * @return mixed - */ + + /** + * Lists all AccountState models. + * @return mixed + * @throws NotFoundHttpException + */ public function actionIndex() { + + if ( Helper::isReceptionAccountStateIndexToday()){ + throw new NotFoundHttpException(); + } + $searchModel = new AccountstateSearch (); $searchModel->accounts = Account::read (); @@ -64,7 +70,24 @@ class AccountStateController extends Controller { 'dataProvider' => $dataProvider ] ); } - + + /** + * Lists all AccountState models. + * @return mixed + * @throws NotFoundHttpException + */ + public function actionToday() { + + $searchModel = new AccountstateSearchToday(); + + $dataProvider = $searchModel->search ( Yii::$app->request->queryParams ); + + return $this->render ( 'today', [ + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider + ] ); + } + /** * Creates a new AccountState model. * If creation is successful, the browser will be redirected to the 'view' page. @@ -92,9 +115,14 @@ class AccountStateController extends Controller { $mail->sednMail(); } - + $redirectTo = 'index'; + + if ( Helper::isReceptionAccountStateIndexToday() ){ + $redirectTo = 'today'; + } + return $this->redirect ( [ - 'index' + $redirectTo ] ); } else { @@ -139,9 +167,16 @@ class AccountStateController extends Controller { $mail = new AccountStateMail(['model' => $model,'controller' => $this]); $mail->sednMail(); } - - return $this->redirect ( [ - 'index' + + $redirectTo = 'index'; + + if ( Helper::isReceptionAccountStateIndexToday() ){ + $redirectTo = 'today'; + } + + + return $this->redirect ( [ + $redirectTo ] ); // return $this->redirect(['view', 'id' => $model->id_account_state]); } else { @@ -179,7 +214,14 @@ class AccountStateController extends Controller { * @throws NotFoundHttpException if the model cannot be found */ protected function findModel($id) { - if (($model = AccountState::findOne ( $id )) !== null) { + $query = AccountState::find(); + $query->andWhere(['id_account_state'=> $id]); + if ( Helper::isReceptionAccountStateIndexToday()){ + $query->andWhere(['id_user'=>\Yii::$app->user->id]); + $query->andWhere(['>=','account_state.created_at', DateUtil::formatDateUtc(DateUtil::todayStart()) ]); + } + $model = $query->one(); + if ( $model !== null ) { return $model; } else { throw new NotFoundHttpException ( 'The requested page does not exist.' ); @@ -256,7 +298,7 @@ class AccountStateController extends Controller { $details = null; if ($accountState->isTypeClose ()) { - $prev; + $prev = null; if ($accountState->type == AccountState::TYPE_CLOSE) { if (isset ( $accountState->prev_state )) { $prev = AccountState::findOne ( $accountState->prev_state ); @@ -311,7 +353,7 @@ class AccountStateController extends Controller { if ($accountState->isTypeClose ()) { - $prev; + $prev = null; if ($accountState->type == AccountState::TYPE_CLOSE) { if (isset ( $accountState->prev_state )) { $prev = AccountState::findOne ( $accountState->prev_state ); diff --git a/frontend/controllers/CardController.php b/frontend/controllers/CardController.php index e370207..6eab957 100644 --- a/frontend/controllers/CardController.php +++ b/frontend/controllers/CardController.php @@ -90,6 +90,14 @@ class CardController extends Controller 'dataProvider' => $dataProvider, ]); } + + public function actionInfo($id_card){ + + $card = $this->findModel($id_card); + + + return $this->render("info",['card' => $card]); + } diff --git a/frontend/controllers/CustomerController.php b/frontend/controllers/CustomerController.php index 15e384e..19cbcdb 100644 --- a/frontend/controllers/CustomerController.php +++ b/frontend/controllers/CustomerController.php @@ -143,12 +143,14 @@ class CustomerController extends Controller } } -/** - * Updates an existing Customer model. - * If update is successful, the browser will be redirected to the 'view' page. - * @param integer $id - * @return mixed - */ + /** + * Updates an existing Customer model. + * If update is successful, the browser will be redirected to the 'view' page. + * @param null $number + * @return mixed + * @throws NotFoundHttpException + * @internal param int $id + */ public function actionUpdate($number = null) { $card = null; diff --git a/frontend/controllers/TransferController.php b/frontend/controllers/TransferController.php index ce8ebbd..ffa954d 100644 --- a/frontend/controllers/TransferController.php +++ b/frontend/controllers/TransferController.php @@ -2,6 +2,7 @@ namespace frontend\controllers; +use frontend\models\TransferSearchToday; use Yii; use common\models\Transfer; use frontend\models\TransferSearch; @@ -71,12 +72,18 @@ class TransferController extends Controller 'dataProvider' => $dataProvider, ]); } + /** * Lists all Transfer models. * @return mixed + * @throws NotFoundHttpException */ public function actionIndex() { + if ( !Helper::isReceptionTransferIndexEnabled()){ + throw new NotFoundHttpException(); + } + $searchModel = new TransferSearch(); $searchModel->accounts = Account::read(); $searchModel->load(Yii::$app->request->queryParams); @@ -90,6 +97,27 @@ class TransferController extends Controller 'dataProvider' => $dataProvider, ]); + } + + /** + * Lists all Transfer models. + * @return mixed + */ + public function actionToday() + { + $searchModel = new TransferSearchToday(); + $searchModel->id_account = Account::readDefault(); + $searchModel->load(Yii::$app->request->queryParams); + + $dataProvider = $searchModel->search(Yii::$app->request->queryParams); + + //$searchModel->totalsTransfers(Yii::$app->request->queryParams); + + return $this->render('today', [ + 'searchModel' => $searchModel, + 'dataProvider' => $dataProvider, + ]); + } /** diff --git a/frontend/models/AccountstateSearchToday.php b/frontend/models/AccountstateSearchToday.php new file mode 100644 index 0000000..f2d9377 --- /dev/null +++ b/frontend/models/AccountstateSearchToday.php @@ -0,0 +1,85 @@ + $query, + 'sort' => false + ]); + + $this->load($params); + + if (!$this->validate()) { + // uncomment the following line if you do not want to return any records when validation fails + $query->where('0=1'); + return $dataProvider; + } + + + $query->innerJoinWith('account'); + $query->innerJoinWith('account.userAccountAssignments'); + $query->andWhere(['user_account_assignment.id_user' => Yii::$app->user->id]); + $query->andWhere([ + 'account_state.id_user' => \Yii::$app->user->id, + 'account_state.id_account' => Account::readDefault() + ]); + + $query->andWhere( [ '>=','account_state.created_at', DateUtil::formatDateUtc( DateUtil::todayStart() ) ] ); + + $query->orderBy( 'account_state.created_at desc' ); + + $query->limit = 20; + + return $dataProvider; + } +} diff --git a/frontend/models/KeyToggleForm.php b/frontend/models/KeyToggleForm.php index 5b87abe..9e97cf3 100644 --- a/frontend/models/KeyToggleForm.php +++ b/frontend/models/KeyToggleForm.php @@ -15,6 +15,9 @@ use common\models\Card; /** * ContactForm is the model behind the contact form. * + * @property \common\models\Card $card + * @property \common\models\Key $key + * */ class KeyToggleForm extends Model { @@ -97,6 +100,9 @@ class KeyToggleForm extends Model $assignment->save(false); \Yii::$app->session->setFlash ( 'success', 'Kulcs kiadva!' ); + $this->card->setFlagsHasKey(true); + $this->card->save(false); + Log::log([ 'type' =>Log::$TYPE_KEY_ASSIGN, 'message' => 'Kulcs kiadás - Kártya/Kulcs/Vendég:' .$this->card->number ."/" .$this->keyModel->number . "/".$this->customer->name, @@ -113,6 +119,8 @@ class KeyToggleForm extends Model public function unassign(){ CardKeyAssignment::deleteAll(['id_key' => $this->keyModel->id_key]); + $this->card->setFlagsHasKey(false); + $this->card->save(false); \Yii::$app->session->setFlash ( 'success', 'Kulcs visszaadva!' ); } diff --git a/frontend/models/ReceptionForm.php b/frontend/models/ReceptionForm.php index 30a9f66..c24db87 100644 --- a/frontend/models/ReceptionForm.php +++ b/frontend/models/ReceptionForm.php @@ -117,7 +117,7 @@ class ReceptionForm extends Model $dlog->id_account = Account::readDefault(); - $dlog->card_flag = $this->card->flag; + $dlog->card_flag = $this->card->validity; $dlog->created_at = date('Y-m-d H:i:s'); $dlog->save(false); diff --git a/frontend/models/TransferSearchToday.php b/frontend/models/TransferSearchToday.php new file mode 100644 index 0000000..8c9c0f9 --- /dev/null +++ b/frontend/models/TransferSearchToday.php @@ -0,0 +1,117 @@ + ['integer']], + ]; + } + + + /** + * Creates data provider instance with search query applied + * + * @param array $params + * @return ActiveDataProvider + * @throws NotFoundHttpException + */ + public function search($params) + { + + if ( !isset( $this->id_account ) ){ + throw new NotFoundHttpException("Kassza nem található"); + } + + + $this->timestampStart = DateUtil::formatDateUtc( DateUtil::todayStart() ) ; + $this->timestampEnd = DateUtil::formatDateUtc( DateUtil::tomorrowStart() ); + $query = Transfer::find(); + + $dataProvider = new ActiveDataProvider([ + 'query' => $query, + ]); + + + + $this->load($params); + + + if (!$this->validate()) { + // uncomment the following line if you do not want to return any records when validation fails + $query->where('0=1'); + } + $query->andWhere( ['or',['id_user' => Yii::$app->user->id ] , ['paid_by' => Yii::$app->user->id],] ); + $query->andWhere(['transfer.id_account' => $this->id_account]); + + $query->andFilterWhere([ + 'type' => $this->type, + ]); + + $query->andFilterWhere(['in' ,'type', $this->types]); + + $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]); + + + return $dataProvider; + } + + public function totalsTransfers($params){ + $accountTotals = []; + $fullTotal = [ + 'label' => Yii::t('common/transfer', 'Total'), + 'money' => 0 + ]; + + + $accounts = Account::find()->orderBy("name asc")->all(); + $accountMap = ArrayHelper::map( $accounts ,'id_account','name' ); + $idUser = Yii::$app->user->id; + + + $this->totals = Transfer::mkTotals($this->timestampStart, $this->timestampEnd, $idUser, $this->types, $this->id_account, $accounts, $accountMap); + + + } + +} diff --git a/frontend/views/account-state/_search_today.php b/frontend/views/account-state/_search_today.php new file mode 100644 index 0000000..d071eb1 --- /dev/null +++ b/frontend/views/account-state/_search_today.php @@ -0,0 +1,64 @@ + +'Mind']+ HtmlHelper::mkAccountOptions( $model->accounts ); +$userOptions = ['' => 'Mind'] + HtmlHelper::mkOptions($model->users,'id','username'); +$typeOptions = ['' => 'Mind'] + AccountState::types(); +?> + diff --git a/frontend/views/account-state/today.php b/frontend/views/account-state/today.php new file mode 100644 index 0000000..b9cc4df --- /dev/null +++ b/frontend/views/account-state/today.php @@ -0,0 +1,37 @@ +title = Yii::t('frontend/account-state', 'Account States'); +$this->params['breadcrumbs'][] = $this->title; +?> + + +
+ +

title) ?>

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

+ 'btn btn-success']) ?> + 'btn btn-success']) ?> +

+ + $dataProvider, + 'itemView' => '_item_view' + ])?> + +
diff --git a/frontend/views/account-state/view.php b/frontend/views/account-state/view.php index 93ed468..4be174d 100644 --- a/frontend/views/account-state/view.php +++ b/frontend/views/account-state/view.php @@ -24,7 +24,11 @@ if ( $model ->type == AccountState::TYPE_OPEN ){ }else{ $this->title = "Kassza zárás"; } -$this->params['breadcrumbs'][] = ['label' => Yii::t('frontend/account-state', 'Account States'), 'url' => ['index']]; +if ( \common\components\Helper::isReceptionAccountStateIndexToday()){ + $this->params['breadcrumbs'][] = ['label' => Yii::t('frontend/account-state', 'Account States'), 'url' => ['today']]; +}else{ + $this->params['breadcrumbs'][] = ['label' => Yii::t('frontend/account-state', 'Account States'), 'url' => ['index']]; +} $this->params['breadcrumbs'][] = $this->title; ?> diff --git a/frontend/views/card/info.php b/frontend/views/card/info.php new file mode 100644 index 0000000..94b39ef --- /dev/null +++ b/frontend/views/card/info.php @@ -0,0 +1,69 @@ +title = "Kártya info"; +$this->params['breadcrumbs'][] = $this->title; +?> + + $card]) ?> + + +

Belépés jelző

+ +

Kilépés jelző

+ diff --git a/frontend/views/common/_customer_tab.php b/frontend/views/common/_customer_tab.php index 41478fe..e45a3c0 100644 --- a/frontend/views/common/_customer_tab.php +++ b/frontend/views/common/_customer_tab.php @@ -21,6 +21,7 @@ $items = [ [ 'Kulcsok', ['key/index', 'id_card' => $card->id_card] ], [ 'Szerződések', ['contract/index', 'id_card' => $card->id_card ]], [ 'Kosár', ['transfer/customer-cart', 'id_card' => $card->id_card ]], + [ 'Kártya', ['card/info', 'id_card' => $card->id_card ]], ]; diff --git a/frontend/views/common/_reception_ticket.php b/frontend/views/common/_reception_ticket.php index c690c10..a468b91 100644 --- a/frontend/views/common/_reception_ticket.php +++ b/frontend/views/common/_reception_ticket.php @@ -1,7 +1,7 @@ @@ -22,7 +22,7 @@ if ( count($model->tickets) > 0 ){ if ( isset($model->card)){ if ( isset($model->customer)){ - if ( $model->card->flag == 0 ){ + if ( $model->card->validity == 0 ){ if ( isset($ticket)){ echo Html::beginTag("div",['class'=>"alert alert-success" , "role"=>"alert"]); echo Html::beginTag("strong",[ ]); @@ -53,7 +53,7 @@ if ( isset($model->card)){ echo "Kártya korlátozás:"; echo "
"; echo Html::beginTag("strong",[ ]); - echo Helper::getArrayValue(DoorLog::getCardFlagTexts(), $model->card->flag, "Ismeretlen ok") ; + echo Helper::getArrayValue(DoorLog::getCardFlagTexts(), $model->card->validity, "Ismeretlen ok") ; echo Html::endTag("strong"); echo Html::endTag("div"); } diff --git a/frontend/views/transfer/_search_today.php b/frontend/views/transfer/_search_today.php new file mode 100644 index 0000000..ac5c27a --- /dev/null +++ b/frontend/views/transfer/_search_today.php @@ -0,0 +1,36 @@ + + + + diff --git a/frontend/views/transfer/today.php b/frontend/views/transfer/today.php new file mode 100644 index 0000000..50ac776 --- /dev/null +++ b/frontend/views/transfer/today.php @@ -0,0 +1,32 @@ +title = Yii::t('frontend/transfer', 'Transfers'); +$this->params['breadcrumbs'][] = $this->title; +?> + +
+

title) ?>

+ render('_search_today', ['model' => $searchModel]); ?> + $dataProvider, + 'itemView' => '_view' , + 'itemOptions' => ['class' => 'item-transfer'] + ] ) + ?> +
diff --git a/trigger_door_log_flag_out.sql b/trigger_door_log_flag_out.sql new file mode 100644 index 0000000..d10ed0b --- /dev/null +++ b/trigger_door_log_flag_out.sql @@ -0,0 +1,179 @@ +DROP TRIGGER IF EXISTS trigger_inc_ticket_usage_count; +DELIMITER $$ +CREATE TRIGGER trigger_inc_ticket_usage_count +AFTER INSERT ON `door_log` FOR EACH ROW +begin + /*DECLARE p_usage_count Integer;*/ + DECLARE p_count_all Integer; + DECLARE p_count_all_2 Integer; + DECLARE p_from DATETIME; + DECLARE p_usage_count Integer; + DECLARE p_max_usage_count Integer; + DECLARE p_mo_ticket_id Integer; -- ticket id at moving out + DECLARE p_mo_ticket_max_usage_count Integer; -- ticket max usage count at moving out + DECLARE p_allow_multiple_enter boolean; -- flag, if we allow multiple enter per day + DECLARE p_allow_enter boolean; + -- fejlesztői log törlése + delete from devlog; + + /*van vendég és kártya*/ + IF NEW.id_customer is not null and NEW.id_card is not null + THEN + -- BEMOZÁG folyamatban - érvényes bérlettel + IF (NEW.direction = 7 or New.direction = 3 ) and NEW.id_ticket_current is not null + then + INSERT INTO devlog ( msg) values('belepes feldoglozas indit'); + /*Mai belépések számának betöltése */ + select count(*) into @p_count_all from door_log where created_at >= CURDATE() and id_ticket_current = New.id_ticket_current and ( direction = 7 or direction = 3); + INSERT INTO devlog ( msg) values( concat( 'count all' ,@p_count_all ) ); + + /*Ha a main napon ez az első belépés*/ + IF @p_count_all = 1 + THEN + /*Beolvasás usage_count és max_usage_count */ + select usage_count, max_usage_count into @p_usage_count ,@p_max_usage_count from ticket where id_ticket = NEW.id_ticket_current; + + /*Növeljük a usage count-ot a bérleten*/ + update ticket set usage_count = usage_count +1 where id_ticket = NEW.id_ticket_current; + + /*Log írása*/ + INSERT INTO log (type,message, app, id_ticket, id_door_log,created_at, updated_at) + values( + 30, concat('Bérlet használat (elotte: ',@p_usage_count, ' > utana: ' , @p_usage_count +1 , ' max: ', @p_max_usage_count, ')' ), ' trigger_inc_ticket',New.id_ticket_current, New.id_door_log,now(),now()); + else + /* + Innentől kezdve biztos, hogy nem ez az első belépés az aktuális napon. + Ki kell számolnunk hányadik 3 órás intervallumban vagyunk az első belépéstől számítva. + Pl. ha 06:00 kor volt az első belépés, akkor 07: 30 még nem von le újabb használatot, + de a 09:00 már igen + + ( HOUR( TIMEDIFF( min(created_at) , now() ) ) /3 ) -> napi első b + */ + select min(created_at) + INTERVAL (3 * FLOOR( ( ( HOUR( TIMEDIFF( min(created_at) , now() ) ) /3 ) ) ) ) hour as last_date + into @p_from + from door_log + where created_at > CURDATE() and id_customer is not null and id_ticket_current = NEW.id_ticket_current and ( direction = 7 or direction = 3); + + -- Belépések számának betöltése az aktuális 3 órás intervalumban + select count(*) into @p_count_all_2 from door_log where created_at >= @p_from and id_ticket_current = New.id_ticket_current and ( direction = 7 or direction = 3); + + INSERT INTO devlog ( msg) values(CONCAT( 'Belépések száma az aktuális 3 órás intervalumban: ', @p_count_all_2) ); + + -- Ha az első belépéstől számítot aktuális 3 órás intervallumban ez az elős belépés, akkor növeljük a használatot + IF @p_count_all_2 = 1 + THEN + INSERT INTO devlog ( msg) values( 'Az aktuális intervallumban ez az első belépés, usage_count növelése' ); + -- A bérlet usage_count és max_usage_count betöltése + select usage_count, max_usage_count into @p_usage_count ,@p_max_usage_count from ticket where id_ticket = NEW.id_ticket_current; + -- A bérlet usage_count növelése + update ticket set usage_count = usage_count +1 where id_ticket = New.id_ticket_current; + -- log írása + INSERT INTO log (type,message, app, id_ticket, id_door_log,created_at, updated_at) + values( + 40, concat('Bérlet használat/egy nap tobbszori (elotte: ',@p_usage_count, ' > utana: ' , @p_usage_count +1 , ' max: ', @p_max_usage_count, ')' ), ' trigger_inc_ticket',New.id_ticket_current, New.id_door_log,now(),now()); + END IF; -- end @p_count_all_2 = 1 + END IF; -- @p_count_all > 1 + End IF; -- vége bemozgás érvényes bérlettel end type == 7 or 3 ( move in ) + + -- KILÉPÉS -- count_move_out beállítása usage_count-ra + IF NEW.direction = 5 or New.direction = 1 -- type move out + then + INSERT INTO devlog ( msg) values('Kilépés van folyamatban, kilépések számának beállítása'); + update ticket set count_move_out = usage_count where id_ticket = NEW.id_ticket_current; + END IF; -- end type move out + + INSERT INTO devlog ( msg) values( 'Kártya validáció módosítása' ); + -- KÁRTYA VALIDÁCIÓ - validity [0|1] , flag | 1 << [0|1] + UPDATE card as c1 + left JOIN ( select ticket.id_card as id_card , max(ticket.id_ticket) as id_ticket + from ticket + where ticket.start <= CURDATE() + and ticket.end >= curdate() + and ticket.status = 10 + and ticket.count_move_out < ticket.max_usage_count + and ticket.id_card = New.id_card + group by id_card + order by id_card desc ) as t + on t.id_card = c1.id_card + SET c1.validity = case when t.id_card is null then ( c1.validity | 1 << 0 ) else ( c1.validity & ~(1 << 0) ) end + , c1.flag = case when t.id_card is null then ( c1.flag | 1 << 0 ) else ( c1.flag & ~(1 << 0) ) end + , c1.id_ticket_current = case when t.id_ticket is null then null else t.id_ticket end + WHERE c1.type <> 50 and c1.id_card = New.id_card; + + + -- KILÉPÉS van folyamatban - kilépés flag_out kikapcsolása, belépés flag bekapcsolása , ha van érvényes bérlet + IF NEW.direction = 5 or New.direction = 1 -- type move out + then + + -- AKTUÁLIS ÉRVÉNYES BÉRLET AZONOSÍTÓ BETÖLTÉSE + -- meg kell néznünk, hogy engedélyezett -e a napi többszöri belépés + -- ezt a aktuális bérlet max_usage_count mezője állapítja meg + select max(ticket.id_ticket) into @p_mo_ticket_id + from ticket + where ticket.start <= CURDATE() + and ticket.end >= curdate() + and ticket.status = 10 + and ticket.count_move_out < ticket.max_usage_count + and ticket.id_card = New.id_card + group by id_card + order by id_card desc; + + -- alapertelmezesben a belépés engedélyezve van + set @p_allow_enter = true; + + + /* + -- NAPI TÖBSZÖRI BELÉPÉS FIGYELÉSE ITT - CSAK MÉSGEM KELLETT + + set @p_allow_multiple_enter = true; + + set @p_count_all = 0; + set @p_mo_ticket_max_usage_count = 9999; + IF @p_mo_ticket_id IS NOT NULL + THEN + select max_usage_count into @p_mo_ticket_max_usage_count from ticket where id_ticket = @p_mo_ticket_id; + + select coalesce(count(*),0) into @p_count_all from door_log where created_at >= CURDATE() and id_ticket_current = @p_mo_ticket_id and ( direction = 7 or direction = 3); + + IF @p_mo_ticket_max_usage_count > 30 THEN + set @p_allow_multiple_enter = false; + END IF; -- end allow mulitple enter + else + set @p_allow_multiple_enter = true; + END IF; -- END TICKET IS THERE + + -- Ha nincs engedélyezve a napi többszöri belépés, és már egyszer beléptünk + -- akkor további belépés nem lesz lehetséges + IF @p_allow_multiple_enter = false AND @p_count_all >= 1 + THEN + set @p_allow_enter = false; + END IF; + */ + + INSERT INTO devlog ( msg) values( concat( 'Kilépés: Aktuális bérlet/belépések száma/többszire belépés on/belépés on: ' + , coalesce(@p_mo_ticket_id,''),'/', coalesce(@p_count_all,'') , '/', coalesce(@p_allow_multiple_enter,''),'/', coalesce(@p_allow_enter,'' ) ) ); + + update card set + flag_out = ( flag_out | 1 << 1 ) , -- nem léphet ki ( 1. bit beállíátsa 1-re ) + flag = case when @p_allow_enter then ( flag & ~(1 << 1) ) else ( flag | 1 << 1 ) end + WHERE type <> 50 and id_card = New.id_card; + + END IF; + + -- BELÉPÉS van folyamatban - kilépés flag_out bekapcsolása, belépés flag kikapcsolása + IF (NEW.direction = 7 or New.direction = 3 ) and NEW.id_ticket_current is not null + THEN + INSERT INTO devlog ( msg) values( 'kilépés flag_out bekapcsolása, belépés flag kikapcsolása' ); + update card set + flag_out = ( flag_out & ~(1 << 1 ) ) , -- kilpés engedélyezése ( 1. bit beállítása 0-ra ) + flag = ( flag | 1 << 1 ) -- belépés nem lehetséges ( 1.bit beállítsa 1-re ) + WHERE type <> 50 and id_card = New.id_card; + END IF; -- END - BELÉPÉS - KILÉPÉS KAPCSOLÓ BEKPACSOLÁSA + + END IF; -- VAN VENDÉG , VAN KÁRTYA +END; +$$ +DELIMITER ; + + +