diff --git a/backend/controllers/ContractController.php b/backend/controllers/ContractController.php index c363b4e..090a8e2 100644 --- a/backend/controllers/ContractController.php +++ b/backend/controllers/ContractController.php @@ -60,11 +60,13 @@ class ContractController extends Controller { 'dataProvider' => $dataProvider ] ); } - /** - * Lists all Contract models. - * - * @return mixed - */ + + /** + * Lists all Contract models. + * + * @return mixed + * @throws NotFoundHttpException + */ public function actionIndexCustomer($id) { $model = Customer::findOne ( $id ); @@ -82,13 +84,14 @@ class ContractController extends Controller { 'dataProvider' => $dataProvider ] ); } - - /** - * Displays a single Contract model. - * - * @param integer $id - * @return mixed - */ + + /** + * Displays a single Contract model. + * + * @param integer $id + * @return mixed + * @throws NotFoundHttpException + */ public function actionView($id) { return $this->render ( 'view', [ 'model' => $this->findModel ( $id ) @@ -115,14 +118,15 @@ class ContractController extends Controller { ] ); } } - - /** - * Updates an existing Contract model. - * If update is successful, the browser will be redirected to the 'view' page. - * - * @param integer $id - * @return mixed - */ + + /** + * Updates an existing Contract model. + * If update is successful, the browser will be redirected to the 'view' page. + * + * @param integer $id + * @return mixed + * @throws NotFoundHttpException + */ public function actionUpdate($id) { $model = $this->findModel ( $id ); @@ -217,7 +221,13 @@ class ContractController extends Controller { 'index' ] ); } - public function actionDetails($id) { + + /** + * @param $id + * @return string + * @throws NotFoundHttpException + */ + public function actionDetails($id) { $contract = Contract::findOne ( $id ); // ticket_installment_request diff --git a/backend/models/ContractSearch.php b/backend/models/ContractSearch.php index 43408c4..1a977ce 100644 --- a/backend/models/ContractSearch.php +++ b/backend/models/ContractSearch.php @@ -2,6 +2,7 @@ namespace backend\models; +use common\components\Helper; use Yii; use yii\base\Model; use yii\data\ActiveDataProvider; @@ -15,6 +16,7 @@ class ContractSearch extends Contract { public $customer_name; + public $card_number; /** * @inheritdoc @@ -23,7 +25,7 @@ class ContractSearch extends Contract { return [ [['id_contract', 'id_customer', 'status', 'flag', 'part_paid', 'part_count', 'part_required', 'id_ticket_type'], 'integer'], - [['customer_name' ], 'safe'], + [['customer_name' ,'card_number'], 'safe'], ]; } @@ -65,7 +67,8 @@ class ContractSearch extends Contract $query->from('contract'); $query->innerJoin('user' ,'user.id = contract.id_user'); $query->innerJoin('customer' ,'customer.id_customer = contract.id_customer'); - + $query->leftJoin('card as card' ,'card.id_card = customer.id_customer_card'); + $dataProvider = new ActiveDataProvider([ 'query' => $query, @@ -133,6 +136,9 @@ class ContractSearch extends Contract // $query->where('0=1'); return $dataProvider; } + if ( isset($this->card_number)){ + $this->card_number = Helper::fixAsciiChars($this->card_number); + } $query->andFilterWhere([ 'contract.id_contract' => $this->id_contract, @@ -147,6 +153,7 @@ class ContractSearch extends Contract 'contract.created_at' => $this->created_at, 'contract.updated_at' => $this->updated_at, 'contract.id_ticket_type' => $this->id_ticket_type, + 'card.number' => $this->card_number, ]); $query->andFilterWhere(['like', 'customer.name', $this->customer_name]); diff --git a/backend/views/contract/_search.php b/backend/views/contract/_search.php index 1d77246..395ca2b 100644 --- a/backend/views/contract/_search.php +++ b/backend/views/contract/_search.php @@ -26,6 +26,7 @@ use yii\widgets\ActiveForm; field($model, 'customer_name')->label('Vendég neve') ?>
+ field($model, 'card_number')->label('Kártyaszám') ?>
diff --git a/changelog.txt b/changelog.txt index e9834be..7748701 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,5 @@ +-0.1.11 + - add rest application and ge -0.1.10 - allow card read log for account(s) in reception2 -0.1.09 diff --git a/common/config/bootstrap.php b/common/config/bootstrap.php index ecc13e5..94280a8 100644 --- a/common/config/bootstrap.php +++ b/common/config/bootstrap.php @@ -3,3 +3,4 @@ Yii::setAlias('common', dirname(__DIR__)); Yii::setAlias('frontend', dirname(dirname(__DIR__)) . '/frontend'); Yii::setAlias('backend', dirname(dirname(__DIR__)) . '/backend'); Yii::setAlias('console', dirname(dirname(__DIR__)) . '/console'); +Yii::setAlias('rest', dirname(dirname(__DIR__)) . '/rest'); \ No newline at end of file diff --git a/common/config/params.php b/common/config/params.php index b259bac..df281ef 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.1.10', + 'version' => 'v0.1.11', 'company' => 'movar',//gyor 'company_name' => "Freimann Kft.", 'product_visiblity' => 'account',// on reception which products to display. account or global diff --git a/common/models/Ticket.php b/common/models/Ticket.php index 1b742d6..9c65928 100644 --- a/common/models/Ticket.php +++ b/common/models/Ticket.php @@ -3,7 +3,6 @@ namespace common\models; use Yii; -use yii\db\ActiveRecord; use yii\db\Query; use yii\db\Expression; use common\components\Helper; @@ -36,6 +35,7 @@ use common\components\Helper; * @property string $original_end; * * @property \common\models\Card card + * @property \common\models\Ticket transfer */ class Ticket extends \common\models\BaseFitnessActiveRecord { @@ -241,18 +241,23 @@ class Ticket extends \common\models\BaseFitnessActiveRecord } - /** - * @param \common\models\Card $card the card to which we are looking for - * - * @return array|\yii\db\ActiveRecord[] - */ - public static function readActive($card){ + /** + * @param \common\models\Card $card the card to which we are looking for + * + * @param \DateTime $validOnDay on which day must be the ticket valid + * @return array|\yii\db\ActiveRecord[] + */ + public static function readActive($card, $validOnDay = null){ if ( $card == null ) return []; $query = Ticket::find(); - $today = date('Y-m-d'); + if (!isset( $validOnDay ) ){ + $today = date('Y-m-d'); + }else{ + $today = $validOnDay->format('Y-m-d'); + } $query->andWhere(['ticket.id_card' => $card->id_card]); $query->andWhere( 'ticket.start <= :today' ,[ 'today' => $today] ); diff --git a/common/models/TicketInstallmentRequest.php b/common/models/TicketInstallmentRequest.php index 152b1af..ffacd06 100644 --- a/common/models/TicketInstallmentRequest.php +++ b/common/models/TicketInstallmentRequest.php @@ -135,14 +135,6 @@ class TicketInstallmentRequest extends \yii\db\ActiveRecord $started_at = $contract->started_at; $date = \DateTime::createFromFormat("Y-m-d H:i:s", $started_at, new \DateTimeZone( 'UTC')); $date = DateUtil::addMonth( $date,$this->priority + 1 ); -// $date = \DateTime::createFromFormat("Y-m-d H:i:s", $this->request_target_time_at, new \DateTimeZone( 'UTC')); -// $date = DateUtil::addMonth( $date, 1 ); -// $date->modify("+1 month"); -// $date->modify("-1 day"); - -// $date = \DateTime::createFromFormat("Y-m-d H:i:s", $this->request_target_time_at, new \DateTimeZone( 'UTC')); -// $date->modify("+1 month"); -// $date->modify("-1 day"); $date->setTime(0, 0, 0); @@ -201,7 +193,6 @@ class TicketInstallmentRequest extends \yii\db\ActiveRecord if ( $status == static::$STATUS_ACCEPTED || $status == static::$STATUS_ACCEPTED_MANUAL){ if ( !$this->isStatusAccepted() ){ $contract->part_paid = $contract->part_paid +1; -// $tranfer = $this->addTransfer(); $result = Transfer::sellContractTicket($contract, $this, Account::findOne(1), Transfer::STATUS_PAID, Transfer::PAYMENT_METHOD_TRANSFER); $transfer = $result[0]; $ticket = $result[1]; @@ -236,15 +227,6 @@ class TicketInstallmentRequest extends \yii\db\ActiveRecord } } -// protected function applyNewTicketState($partRequired = false){ -// if ( $partRequired ){ -// $this->ticket->setPartRequired($this); -// } -// $this->ticket->applyTicketInstallmentRequest($this); -// $this->ticket->save(false); -// } - - /** * @return Transfer */ @@ -340,7 +322,11 @@ class TicketInstallmentRequest extends \yii\db\ActiveRecord TicketInstallmentRequest::$STATUS_ACCEPTED_MANUAL=> 'Személyesen fizetve', ]; } - + + /** + * @param $id_status + * @return mixed|string + */ public static function toStatusName($id_status){ $result = "Ismeretlen"; $statuses = TicketInstallmentRequest::statuses(); @@ -349,7 +335,10 @@ class TicketInstallmentRequest extends \yii\db\ActiveRecord } return $result; } - + + /** + * @return mixed|string + */ public function getStatusName(){ return static::toStatusName($this->status); } diff --git a/common/models/User.php b/common/models/User.php index ce1414d..b90bb21 100644 --- a/common/models/User.php +++ b/common/models/User.php @@ -71,6 +71,8 @@ class User extends ActiveRecord implements IdentityInterface */ public static function findIdentityByAccessToken($token, $type = null) { + $authorization = base64_decode($token); + \Yii::info("findIdentityByAccessToken", $authorization); throw new NotSupportedException('"findIdentityByAccessToken" is not implemented.'); } diff --git a/console/controllers/ContractController.php b/console/controllers/ContractController.php new file mode 100644 index 0000000..316f244 --- /dev/null +++ b/console/controllers/ContractController.php @@ -0,0 +1,151 @@ + $cardNumber]); + if (!isset($card)) { + throw new Exception("Card not found: " . $cardNumber); + } + + $this->info("Card loaded"); + $this->info($card->id_card); + $this->info($card->number); + + $customer = Customer::findOne(['id_customer_card' => $card->id_card]); + if (!isset($customer)) { + throw new Exception("Customer not found for card: " . $cardNumber); + } + + $this->info("Customer loaded"); + $this->info($customer->id_customer); + $this->info($customer->name); + + + // find latest contract for customer + /** @var \common\models\Contract $contract */ + $contract = Contract::find() + ->andWhere(['id_customer' => $customer->id_customer]) + ->orderBy(['created_at' => SORT_DESC]) + ->limit(1) + ->one(); + + if (!isset($contract)) { + throw new Exception("Contract not found for customer: " . $customer->id_customer); + } + + $this->info("Contract loaded"); + $this->info($contract->id_contract); + $this->info(Contract::toFlangName($contract->flag)); + + $parts = TicketInstallmentRequest::findAll(['id_contract' => $contract->id_contract]); + $this->info("Parts loaded"); + + $tx = \Yii::$app->db->beginTransaction(); + try { + if (!$contract->isFlagActive()) { + $contract->flag = Contract::$FLAG_ACTIVE; + $I_CONTRACT = "Contract - change flag " . Contract::toStatusName($contract->flag) . "=>" . + Contract::toStatusName(Contract::$FLAG_ACTIVE); + $contract->save(false); + $this->info($I_CONTRACT); + } + + foreach ($parts as $part) { + $this->info("Part #" . $part->priority . " ->" . TicketInstallmentRequest::toStatusName($part->status)); + if ($part->status == TicketInstallmentRequest::$STATUS_CANCELED) { + $part->status = TicketInstallmentRequest::$STATUS_PENDING; + $part->request_processed_at = null; + $part->save(false); + $this->info("Change status: " + . TicketInstallmentRequest::toStatusName(TicketInstallmentRequest::$STATUS_CANCELED) + . "->" + . TicketInstallmentRequest::toStatusName(TicketInstallmentRequest::$STATUS_PENDING) + ); + } else if ($part->isStatusAccepted()) { + $this->info("loading ticket: #" .$part->id_ticket); + $ticket = null; + try{ + /** @var \common\models\Ticket $ticket */ + // $ticket = Ticket::findOne(['id_ticket' => $part->id_ticket]); + }catch (\Throwable $e){ + \Yii::info("Failed to load ticket: " . $e->getMessage()); + } + if (isset($ticket)) { + $this->info("Ticket found: " . $ticket->id_ticket . "/" . $ticket->ticetType->name); + if ($ticket->status == Ticket::STATUS_DELETED) { + $ticket->status = Ticket::STATUS_ACTIVE; + $ticket->save(false); + $this->info("Ticket restored: "); + $this->info($ticket->id_ticket); + $this->info(Ticket::toStatusName(Ticket::STATUS_DELETED) + . "->" + . Ticket::toStatusName(Ticket::STATUS_ACTIVE) + ); + + } + /** @var \common\models\Transfer $transfer */ + $transfer = $ticket->transfer; + if ($transfer->status == Transfer::STATUS_STORNO) { + $transfer->status = Transfer::STATUS_PAID; + $transfer->save(false); + + $this->info("Restore transfer: "); + $this->info($transfer->id_transfer); + $this->info(Transfer::toStatusName(Transfer::STATUS_STORNO) + . "->" + . Ticket::toStatusName(Transfer::STATUS_PAID) + ); + + if (!isset($transfer->paid_at)) { + $cart = new ShoppingCart(); + $cart->id_customer = $contract->customer->id_customer; + $cart->id_transfer = $transfer->id_transfer; + if (!$cart->save(false)) { + /** @noinspection SpellCheckingInspection */ + $E_FAILED_TO_SAVE = "Vendég kosár hozzárendelés sikertelen!"; + \Yii::error($E_FAILED_TO_SAVE); + throw new \Exception($E_FAILED_TO_SAVE); + } + } + } + }else{ + \Yii::info("Ticket not found"); + } + } + } + $tx->commit(); + $this->info("Ready"); + } catch (\Throwable $e) { + $tx->rollBack(); + } + + } + + + private function info($msg) + { + echo $msg . "\n"; + } + +} \ No newline at end of file diff --git a/console/migrations/m180829_155430_add_rest_user.php b/console/migrations/m180829_155430_add_rest_user.php new file mode 100644 index 0000000..f1c69f9 --- /dev/null +++ b/console/migrations/m180829_155430_add_rest_user.php @@ -0,0 +1,44 @@ +username = "discount_system"; + $user->email = "discount_system@rocho-net.hu"; + $user->setPassword("NmqFb\ivjtX1=yT*Aw5Y"); + $user->generateAuthKey(); + $user->save(); + + $role = Yii::$app->authManager->createRole('discount_system'); + Yii::$app->authManager->add($role); + Yii::$app->authManager->assign($role, $user->id); + } + + public function down() + { + echo "m180829_155430_add_rest_user 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/doc/cutler_kartya_grafika.zip b/doc/cutler_kartya_grafika.zip new file mode 100644 index 0000000..94ce6f9 Binary files /dev/null and b/doc/cutler_kartya_grafika.zip differ diff --git a/docker/start.sh b/docker/start.sh index 1a10592..7240894 100644 --- a/docker/start.sh +++ b/docker/start.sh @@ -9,5 +9,6 @@ docker run \ -p 86:80 \ --name fitness-web \ --hostname test.fintess_web.hu \ + --link mariadb1:mariadb1 \ -e XDEBUG_CONFIG="idekey=PHPSTORM" \ docker_fitness-ub-php-7:latest diff --git a/environments/dev/rest/config/main-local.php b/environments/dev/rest/config/main-local.php new file mode 100644 index 0000000..d9e3809 --- /dev/null +++ b/environments/dev/rest/config/main-local.php @@ -0,0 +1,21 @@ + [ + 'request' => [ + // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation + 'cookieValidationKey' => '', + ], + ], +]; + +if (!YII_ENV_TEST) { + // configuration adjustments for 'dev' environment + $config['bootstrap'][] = 'debug'; + $config['modules']['debug'] = 'yii\debug\Module'; + + $config['bootstrap'][] = 'gii'; + $config['modules']['gii'] = 'yii\gii\Module'; +} + +return $config; diff --git a/environments/dev/rest/config/params-local.php b/environments/dev/rest/config/params-local.php new file mode 100644 index 0000000..d0b9c34 --- /dev/null +++ b/environments/dev/rest/config/params-local.php @@ -0,0 +1,3 @@ +run(); diff --git a/environments/dev/rest/web/index.php b/environments/dev/rest/web/index.php new file mode 100644 index 0000000..6038167 --- /dev/null +++ b/environments/dev/rest/web/index.php @@ -0,0 +1,18 @@ +run(); diff --git a/environments/index.php b/environments/index.php index 0b7ad7c..b766657 100644 --- a/environments/index.php +++ b/environments/index.php @@ -36,6 +36,8 @@ return [ 'backend/web/assets', 'frontend/runtime', 'frontend/web/assets', + 'rest/runtime', + 'rest/web/assets', ], 'setExecutable' => [ 'yii', @@ -44,6 +46,7 @@ return [ 'setCookieValidationKey' => [ 'backend/config/main-local.php', 'frontend/config/main-local.php', + 'rest/config/main-local.php', ], ], 'Production' => [ @@ -53,6 +56,8 @@ return [ 'backend/web/assets', 'frontend/runtime', 'frontend/web/assets', + 'rest/runtime', + 'rest/web/assets', ], 'setExecutable' => [ 'yii', @@ -60,6 +65,7 @@ return [ 'setCookieValidationKey' => [ 'backend/config/main-local.php', 'frontend/config/main-local.php', + 'rest/config/main-local.php', ], ], 'rochonet' => [ @@ -69,6 +75,8 @@ return [ 'backend/web/assets', 'frontend/runtime', 'frontend/web/assets', + 'rest/runtime', + 'rest/web/assets', ], 'setExecutable' => [ 'yii', @@ -76,6 +84,7 @@ return [ 'setCookieValidationKey' => [ 'backend/config/main-local.php', 'frontend/config/main-local.php', + 'rest/config/main-local.php', ], ], ]; diff --git a/environments/prod/rest/config/main-local.php b/environments/prod/rest/config/main-local.php new file mode 100644 index 0000000..af46ba3 --- /dev/null +++ b/environments/prod/rest/config/main-local.php @@ -0,0 +1,9 @@ + [ + 'request' => [ + // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation + 'cookieValidationKey' => '', + ], + ], +]; diff --git a/environments/prod/rest/config/params-local.php b/environments/prod/rest/config/params-local.php new file mode 100644 index 0000000..d0b9c34 --- /dev/null +++ b/environments/prod/rest/config/params-local.php @@ -0,0 +1,3 @@ +run(); diff --git a/frontend/config/main.php b/frontend/config/main.php index 8d20607..6781f21 100644 --- a/frontend/config/main.php +++ b/frontend/config/main.php @@ -13,14 +13,14 @@ return [ 'bootstrap' => ['log'], 'controllerNamespace' => 'frontend\controllers', 'components' => [ - 'assetsAutoCompress' => - [ - 'class' => '\iisns\assets\AssetsCompressComponent', - 'enabled' => true, - 'jsCompress' => true, - 'cssFileCompile' => true, - 'jsFileCompile' => true, - ], +// 'assetsAutoCompress' => +// [ +// 'class' => '\iisns\assets\AssetsCompressComponent', +// 'enabled' => true, +// 'jsCompress' => true, +// 'cssFileCompile' => true, +// 'jsFileCompile' => true, +// ], 'request' => [ 'enableCsrfValidation'=>false, ], diff --git a/frontend/controllers/ContractController.php b/frontend/controllers/ContractController.php index 8970686..cf45042 100644 --- a/frontend/controllers/ContractController.php +++ b/frontend/controllers/ContractController.php @@ -65,13 +65,14 @@ class ContractController extends Controller { 'dataProvider' => $dataProvider ] ); } - - /** - * Displays a single Contract model. - * - * @param integer $id - * @return mixed - */ + + /** + * Displays a single Contract model. + * + * @param integer $id + * @return mixed + * @throws NotFoundHttpException + */ public function actionView($id) { $model = $this->findModel ( $id ); $customer = $model->customer; @@ -110,14 +111,15 @@ class ContractController extends Controller { ] ); } } - - /** - * Updates an existing Contract model. - * If update is successful, the browser will be redirected to the 'view' page. - * - * @param integer $id - * @return mixed - */ + + /** + * Updates an existing Contract model. + * If update is successful, the browser will be redirected to the 'view' page. + * + * @param integer $id + * @return mixed + * @throws NotFoundHttpException + */ public function actionUpdate($id) { $model = $this->findModel ( $id ); @@ -132,14 +134,16 @@ 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 - * @return mixed - */ + + /** + * Deletes an existing Contract model. + * If deletion is successful, the browser will be redirected to the 'index' page. + * + * @param integer $id + * @return mixed + * @throws NotFoundHttpException + * @throws \yii\db\StaleObjectException + */ public function actionDelete($id) { $this->findModel ( $id )->delete (); @@ -196,10 +200,15 @@ class ContractController extends Controller { 'id' => $contract->id_contract ] ); } - - /** - * EGY RÉSZLET KIFIZETÉSE - */ + + /** + * Cancel contract. + * @param $id + * @param $flag + * @return \yii\web\Response + * @throws NotFoundHttpException + * @throws \yii\db\Exception + */ public function actionCancel($id,$flag) { $contract = $this->findModel ( $id ); @@ -235,7 +244,8 @@ class ContractController extends Controller { $productBuntetes = Product::find ()->andWhere ( [ 'product_number' => Product::$BUNTETES ] )->one (); - + + // if there is a fee , generate fee and put it to the shopping cart if (isset ( $productBuntetes )) { if ($buntetes > 0) { @@ -286,7 +296,12 @@ class ContractController extends Controller { ] ); } - public function actionMake($id) { + /** + * @param $id + * @return string|\yii\web\Response + * @throws \yii\db\Exception + */ + public function actionMake($id) { $customer = Customer::findOne ( $id ); if (! isset ( $customer )) { @@ -326,8 +341,13 @@ class ContractController extends Controller { 'model' => $model ] ); } - - public function actionContract($id){ + + /** + * @param $id + * @throws NotFoundHttpException + * @throws \yii\base\InvalidConfigException + */ + public function actionContract($id){ $model = $this->findModel($id); //$mpdf=new \mPDF('utf-8', 'A4'); diff --git a/rest/assets/AppAsset.php b/rest/assets/AppAsset.php new file mode 100644 index 0000000..0344d6a --- /dev/null +++ b/rest/assets/AppAsset.php @@ -0,0 +1,30 @@ + + * @since 2.0 + */ +class AppAsset extends AssetBundle +{ + public $basePath = '@webroot'; + public $baseUrl = '@web'; + public $css = [ + 'css/site.css', + ]; + public $js = [ + 'js/app.js', + ]; + public $depends = [ + 'yii\web\YiiAsset', + 'yii\bootstrap\BootstrapAsset', + ]; +} diff --git a/rest/assets/config-assets.php b/rest/assets/config-assets.php new file mode 100644 index 0000000..84d80b2 --- /dev/null +++ b/rest/assets/config-assets.php @@ -0,0 +1,37 @@ + 'java -jar compiler.jar --js {from} --js_output_file {to} --warning_level QUIET', + // Adjust command/callback for CSS files compressing: + 'cssCompressor' => 'java -jar yuicompressor.jar --type css {from} -o {to}', + // The list of asset bundles to compress: + 'bundles' => [ + 'rest\assets\AppAsset', + 'yii\web\YiiAsset', + 'yii\web\JqueryAsset', + 'yii\bootstrap\BootstrapAsset', + 'yii\bootstrap\BootstrapPluginAsset' + ], + // Asset bundle for compression output: + 'targets' => [ + 'allRest' => [ + 'class' => 'rest\assets\MyAsset' , + 'basePath' => '@webroot/assets', + 'baseUrl' => '@web/assets', + 'js' => 'js/all-{hash}.js', + 'css' => 'css/all-{hash}.css', + ], + ], + // Asset manager configuration: + 'assetManager' => [ + 'basePath' => '@webroot/assets', + 'baseUrl' => '@web/assets', + ], +]; \ No newline at end of file diff --git a/rest/config/.gitignore b/rest/config/.gitignore new file mode 100644 index 0000000..20da318 --- /dev/null +++ b/rest/config/.gitignore @@ -0,0 +1,2 @@ +main-local.php +params-local.php \ No newline at end of file diff --git a/rest/config/bootstrap.php b/rest/config/bootstrap.php new file mode 100644 index 0000000..b3d9bbc --- /dev/null +++ b/rest/config/bootstrap.php @@ -0,0 +1 @@ + 'app-rest', + 'name' =>'Fitness recepció', + 'basePath' => dirname(__DIR__), + 'bootstrap' => ['log'], + 'controllerNamespace' => 'rest\controllers', + 'components' => [ + 'request' => [ + 'enableCsrfValidation'=>false, + 'csrfParam' => '_csrf-rest', + 'parsers' => [ + 'application/json' => 'yii\web\JsonParser', + ] + ], + 'user' => [ + 'identityClass' => 'common\models\User', + 'enableSession' => false, + 'enableAutoLogin' => false, + 'loginUrl' => null, + ], + 'log' => [ + 'traceLevel' => YII_DEBUG ? 3 : 0, + 'targets' => [ + [ + 'class' => 'yii\log\FileTarget', + 'levels' => ['error', 'warning'], + ], + ], + ], + 'errorHandler' => [ + 'errorAction' => 'site/error', + ], + ], + 'params' => $params, +]; diff --git a/rest/config/params.php b/rest/config/params.php new file mode 100644 index 0000000..7f754b9 --- /dev/null +++ b/rest/config/params.php @@ -0,0 +1,4 @@ + 'admin@example.com', +]; diff --git a/rest/controllers/CustomerController.php b/rest/controllers/CustomerController.php new file mode 100644 index 0000000..fcd21a8 --- /dev/null +++ b/rest/controllers/CustomerController.php @@ -0,0 +1,103 @@ +andWhere(['or', + ['and', ['in', 'card.number', [$number]], "trim(coalesce(card.number, '')) <>'' "], + ['and', ['in', 'card.rfid_key', [$number]], "trim(coalesce(card.rfid_key, '')) <>'' "], + + ]); + + $card = $query->one(); + + if (!isset($card)) { + throw new NotFoundHttpException("Kártya nem található"); + } + + $customer = $card->customer; + + if (!isset($customer)) { + throw new NotFoundHttpException("Vendég nem található"); + } + + if (isset($lastXDays)) { + if (!is_numeric($lastXDays)) { + throw new BadRequestHttpException("lastXDays paraméter hibás"); + } + if ($lastXDays > 6 || $lastXDays < 1) { + throw new BadRequestHttpException("lastXDays paraméter érték hibás"); + } + } + + // check if has valid ticket today + /** @var \common\models\Card $card */ + $tickets = Ticket::readActive($card); + $hasValidTicket = count($tickets) > 0; + + if (isset($lastXDays)) { + // try to find any valid ticket in the lastXDays + $minusDay = 1; + while (!$hasValidTicket && $minusDay <= $lastXDays) { + /** @var integer $minusDay */ + $day = $this->getDateMinusDays($minusDay); + $tickets = Ticket::readActive($card, $day); + $hasValidTicket = count($tickets) > 0; + $minusDay = $minusDay + 1; + } + } + + $result = [ + 'discount' => $hasValidTicket + ]; + + if (isset($customer)) { + $result['card_number'] = $card->number; + $result['name'] = $customer->name; + $result['provider'] = \Yii::$app->id; + } + + return $result; + } + + /** + * @param $minusDays + * @return \DateTime + * @throws \Exception + */ + private function getDateMinusDays($minusDays) + { + $date = new \DateTime('now'); + $date->sub(new \DateInterval('P' . $minusDays . 'D')); + $date->setTime(0, 0, 0); + return $date; + } + +} \ No newline at end of file diff --git a/rest/controllers/RestController.php b/rest/controllers/RestController.php new file mode 100644 index 0000000..b368c2a --- /dev/null +++ b/rest/controllers/RestController.php @@ -0,0 +1,37 @@ + HttpBasicAuth::className(), + 'auth' => [$this, 'auth'] + ]; + return $behaviors; + } + + public function auth($username, $password) + { + try { + $user = User::findOne(['username' => $username]); + if ($user->validatePassword($password)) { + return $user; + } + } catch (\Exception $e) { + \Yii::error("Failed to load user: " . $e->getMessage()); + } + return null; + } + + +} \ No newline at end of file diff --git a/rest/controllers/SiteController.php b/rest/controllers/SiteController.php new file mode 100644 index 0000000..694c213 --- /dev/null +++ b/rest/controllers/SiteController.php @@ -0,0 +1,124 @@ + [ + 'class' => AccessControl::className(), + 'only' => ['logout' ], + 'rules' => [ + + [ + 'actions' => ['logout'], + 'allow' => true, + 'roles' => ['@'], + ], + ], + ], + 'verbs' => [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'logout' => ['post'], + ], + ], + ]; + } + + /** + * @inheritdoc + */ + public function actions() + { + return [ + 'error' => [ + 'class' => 'yii\web\ErrorAction', + ], + 'captcha' => [ + 'class' => 'yii\captcha\CaptchaAction', + 'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null, + ], + ]; + } + + /** + * Displays homepage. + * + * @return mixed + */ + public function actionIndex() + { + return $this->render('index'); + } + + /** + * Logs in a user. + * + * @return mixed + */ + public function actionLogin() + { + if (!\Yii::$app->user->isGuest) { + return $this->goHome(); + } + + $model = new LoginForm(); + if ($model->load(Yii::$app->request->post()) && $model->login()) { + + $geoip = Helper::getGeoIp(); + + $message = ""; + $user = User::findOne(\Yii::$app->user->id); + if ( isset($geoip)){ + $ip = isset( $geoip->ip ) ? $geoip->ip : ""; + $city = isset( $geoip->city ) ? $geoip->city : ""; + $message = "Bejelentkezés: " .$user->username. " Ip cím:". $ip . " Város: " . $city; + } + + Log::log([ + 'type' =>Log::$TYPE_LOGIN, + 'message' => $message + ]); + + return $this->redirect(['account/select']); + } else { + return $this->render('login', ['model' => $model,]); + } + } + + + + /** + * Logs out the current user. + * + * @return mixed + */ + public function actionLogout() + { + Yii::$app->user->logout(); + + return $this->goHome(); + } + + + + + +} diff --git a/rest/runtime/.gitignore b/rest/runtime/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/rest/runtime/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/rest/views/layouts/main.php b/rest/views/layouts/main.php new file mode 100644 index 0000000..4483daf --- /dev/null +++ b/rest/views/layouts/main.php @@ -0,0 +1,84 @@ + +beginPage() ?> + + + + + + + <?= Html::encode($this->title) ?> + + head() ?> + + +beginBody() ?> + +
+ 'Web Recepció', + 'brandUrl' => Yii::$app->homeUrl, + 'options' => [ + 'class' => 'navbar-inverse navbar-fixed-top', + ], + ]); + echo Nav::widget([ + 'options' => ['class' => 'navbar-nav navbar-right'], + 'items' => $items, + ]); + NavBar::end(); + ?> + +
+ isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], + ]) ?> + + +
+
+ + + +endBody() ?> + + +endPage() ?> diff --git a/rest/views/site/error.php b/rest/views/site/error.php new file mode 100644 index 0000000..0ba2574 --- /dev/null +++ b/rest/views/site/error.php @@ -0,0 +1,27 @@ +title = $name; +?> +
+ +

title) ?>

+ +
+ +
+ +

+ The above error occurred while the Web server was processing your request. +

+

+ Please contact us if you think this is a server error. Thank you. +

+ +
diff --git a/rest/views/site/index.php b/rest/views/site/index.php new file mode 100644 index 0000000..6aa245e --- /dev/null +++ b/rest/views/site/index.php @@ -0,0 +1,14 @@ +title = 'My Yii Application'; +?> +
+ +
+

Web Recepció

+

Üdvözöljük Web Recepció oldalunkon!

+
+ +
diff --git a/rest/views/site/login.php b/rest/views/site/login.php new file mode 100644 index 0000000..9e14e0f --- /dev/null +++ b/rest/views/site/login.php @@ -0,0 +1,39 @@ +title = Yii::t('common/site' ,'Login'); +$this->params['breadcrumbs'][] = $this->title; +?> +
+

title) ?>

+ +

Please fill out the following fields to login:

+ +
+
+ 'login-form']); ?> + + field($model, 'username') ?> + + field($model, 'password')->passwordInput() ?> + + field($model, 'rememberMe')->checkbox() ?> + +
+ . +
+ +
+ 'btn btn-primary', 'name' => 'login-button']) ?> +
+ + +
+
+
diff --git a/rest/web/.gitignore b/rest/web/.gitignore new file mode 100644 index 0000000..25c74e6 --- /dev/null +++ b/rest/web/.gitignore @@ -0,0 +1,2 @@ +/index.php +/index-test.php diff --git a/rest/web/css/site.css b/rest/web/css/site.css new file mode 100644 index 0000000..698be70 --- /dev/null +++ b/rest/web/css/site.css @@ -0,0 +1,91 @@ +html, +body { + height: 100%; +} + +.wrap { + min-height: 100%; + height: auto; + margin: 0 auto -60px; + padding: 0 0 60px; +} + +.wrap > .container { + padding: 70px 15px 20px; +} + +.footer { + height: 60px; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + padding-top: 20px; +} + +.jumbotron { + text-align: center; + background-color: transparent; +} + +.jumbotron .btn { + font-size: 21px; + padding: 14px 24px; +} + +.not-set { + color: #c55; + font-style: italic; +} + +/* add sorting icons to gridview sort links */ +a.asc:after, a.desc:after { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + padding-left: 5px; +} + +a.asc:after { + content: /*"\e113"*/ "\e151"; +} + +a.desc:after { + content: /*"\e114"*/ "\e152"; +} + +.sort-numerical a.asc:after { + content: "\e153"; +} + +.sort-numerical a.desc:after { + content: "\e154"; +} + +.sort-ordinal a.asc:after { + content: "\e155"; +} + +.sort-ordinal a.desc:after { + content: "\e156"; +} + +.grid-view th { + white-space: nowrap; +} + +.hint-block { + display: block; + margin-top: 5px; + color: #999; +} + +.error-summary { + color: #a94442; + background: #fdf7f7; + border-left: 3px solid #eed3d7; + padding: 10px 20px; + margin: 0 0 15px 0; +} diff --git a/rest/web/favicon.ico b/rest/web/favicon.ico new file mode 100644 index 0000000..580ed73 Binary files /dev/null and b/rest/web/favicon.ico differ diff --git a/rest/web/profile/.gitkeep b/rest/web/profile/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/rest/web/robots.txt b/rest/web/robots.txt new file mode 100644 index 0000000..6f27bb6 --- /dev/null +++ b/rest/web/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: \ No newline at end of file