From 824130df26556452f6ce8c65af40c933bcd15b29 Mon Sep 17 00:00:00 2001 From: Kavalar Date: Sun, 26 Jan 2025 14:42:47 +0300 Subject: [PATCH] card action --- .../tgbot/controllers/TgBotRestController.php | 11 ++-- .../tgbot/controllers/TgMainController.php | 47 ++++++++++++++++- .../tgbot/middlewares/TgBotAuthMiddleware.php | 12 ++++- .../models/forms/CardActionStep2Form.php | 23 ++++++++ app/modules/tgbot/routs/tgbot.php | 9 +++- app/modules/tgbot/services/TgBotService.php | 2 - app/modules/tgbot/views/tgbot/layout/main.php | 2 +- .../tgbot/views/tgbot/main/card_action.php | 23 -------- .../views/tgbot/main/card_action_step_1.php | 38 ++++++++++++++ .../views/tgbot/main/card_action_step_2.php | 51 ++++++++++++++++++ .../views/tgbot/main/card_action_step_3.php | 30 +++++++++++ kernel/Flash.php | 12 ++++- .../card/conditions/CashbackCondition.php | 42 +++++++++++++++ ...04_change_program_column_at_card_table.php | 29 +++++++++++ ...4_add_column_at_card_transaction_table.php | 31 +++++++++++ kernel/app_modules/card/models/Card.php | 11 ++-- .../app_modules/card/models/CardProgram.php | 5 ++ .../card/models/CardTransaction.php | 4 +- .../card/models/forms/CreateCardForm.php | 2 +- .../forms/CreateCardTransactionForm.php | 2 + .../card/services/CardFileService.php | 2 +- .../app_modules/card/services/CardService.php | 52 +++++++++++++++++-- .../card/services/CardTransactionService.php | 6 ++- kernel/app_modules/card/views/form.php | 4 +- kernel/app_modules/tgbot/models/Tgbot.php | 1 + .../tgbot/services/TgBotService.php | 11 ++++ .../controllers/MigrationController.php | 21 ++++++-- 27 files changed, 430 insertions(+), 53 deletions(-) create mode 100644 app/modules/tgbot/models/forms/CardActionStep2Form.php delete mode 100644 app/modules/tgbot/views/tgbot/main/card_action.php create mode 100644 app/modules/tgbot/views/tgbot/main/card_action_step_1.php create mode 100644 app/modules/tgbot/views/tgbot/main/card_action_step_2.php create mode 100644 app/modules/tgbot/views/tgbot/main/card_action_step_3.php create mode 100644 kernel/app_modules/card/conditions/CashbackCondition.php create mode 100644 kernel/app_modules/card/migrations/2025_01_25_094804_change_program_column_at_card_table.php create mode 100644 kernel/app_modules/card/migrations/2025_01_25_160204_add_column_at_card_transaction_table.php diff --git a/app/modules/tgbot/controllers/TgBotRestController.php b/app/modules/tgbot/controllers/TgBotRestController.php index e7e1be2..05d2e70 100644 --- a/app/modules/tgbot/controllers/TgBotRestController.php +++ b/app/modules/tgbot/controllers/TgBotRestController.php @@ -12,11 +12,16 @@ class TgBotRestController extends \kernel\app_modules\tgbot\controllers\TgBotRes public function actionGetScanBtn(int $id): void { $dialog = Tgbot::where("dialog_id", $id)->first(); + $html = ""; if ($dialog){ - $this->renderApi([ - 'html' => 'Сканировать', - ]); + if ($dialog->status === Tgbot::ADMIN_STATUS){ + $html = 'Сканировать'; + } } + + $this->renderApi([ + 'html' => $html, + ]); } diff --git a/app/modules/tgbot/controllers/TgMainController.php b/app/modules/tgbot/controllers/TgMainController.php index 9acd7dd..40be69d 100644 --- a/app/modules/tgbot/controllers/TgMainController.php +++ b/app/modules/tgbot/controllers/TgMainController.php @@ -2,14 +2,19 @@ namespace app\modules\tgbot\controllers; +use app\modules\tgbot\models\forms\CardActionStep2Form; use app\modules\tgbot\models\Tgbot; use app\modules\tgbot\services\TgBotService; use Cassandra\Decimal; +use kernel\app_modules\card\conditions\CashbackCondition; use kernel\app_modules\card\models\Card; +use kernel\app_modules\card\services\CardService; use kernel\app_modules\tag\service\TagService; use kernel\Controller; +use kernel\Flash; use kernel\helpers\Debug; use kernel\modules\post\models\Post; +use kernel\Request; class TgMainController extends Controller { @@ -47,11 +52,49 @@ class TgMainController extends Controller $this->cgView->render("scanner.php"); } - public function actionCardAction(int $cardId): void + public function actionCardActionStep1(int $cardId): void { $card = Card::where("id", $cardId)->first(); - $this->cgView->render("card_action.php", ['card' => $card]); + $this->cgView->render("card_action_step_1.php", ['card' => $card]); + } + + public function actionCardActionStep2(): void + { + $params = new CardActionStep2Form(); + $request = new Request(); + $params->load($request->get()); + + $this->cgView->render("card_action_step_2.php", ['params' => $params]); + } + + public function actionCardActionStep3(): void + { + $params = new CardActionStep2Form(); + $request = new Request(); + $params->load($request->post()); + + $card = CardService::getCardById($params->getItem("card_id")); + + if ($params->getItem('type') === 'add_money'){ + Flash::setMessage("success", "Баланс пополнен на " . $params->getItem('amount')); + $transaction = CardService::addMoneyToCard($card, (int)$params->getItem('amount')); + } + if ($params->getItem('type') === 'withdraw'){ + Flash::setMessage("success", "С карты списано " . $params->getItem('amount')); + $transaction = CardService::withdrawMoneyFromCard($card, (int)$params->getItem('amount')); + } + if ($params->getItem('type') === 'add_purchase'){ +// Flash::setMessage("success", "С карты списано " . $params->getItem('amount')); +// CardService::withdrawMoneyFromCard($card, (int)$params->getItem('amount')); + $cashback = new CashbackCondition(); + $transaction = $cashback->handler($card, (int)$params->getItem('amount')); + Flash::setMessage("success", "Начислено кешбэк " . $transaction->amount); + } + + $card = $card->fresh(); + + $this->cgView->render("card_action_step_3.php", ['card' => $card, 'transaction' => $transaction ?? null]); } } \ No newline at end of file diff --git a/app/modules/tgbot/middlewares/TgBotAuthMiddleware.php b/app/modules/tgbot/middlewares/TgBotAuthMiddleware.php index 68f6752..89455f6 100644 --- a/app/modules/tgbot/middlewares/TgBotAuthMiddleware.php +++ b/app/modules/tgbot/middlewares/TgBotAuthMiddleware.php @@ -9,7 +9,7 @@ use kernel\Middleware; class TgBotAuthMiddleware extends Middleware { - function handler(): void + public function handler(): void { if(isset($_COOKIE['dialog_id'])) { @@ -23,4 +23,14 @@ class TgBotAuthMiddleware extends Middleware exit(); } + + public function isTgAdmin(): void + { + if (TgBotService::isAdmin()){ + return; + } + + echo "Доступ запрещен"; + exit(); + } } \ No newline at end of file diff --git a/app/modules/tgbot/models/forms/CardActionStep2Form.php b/app/modules/tgbot/models/forms/CardActionStep2Form.php new file mode 100644 index 0000000..19464bd --- /dev/null +++ b/app/modules/tgbot/models/forms/CardActionStep2Form.php @@ -0,0 +1,23 @@ + 'required|min-str-len:3', + 'card_id' => 'required|alpha-numeric', + 'amount' => 'alpha-numeric', + ]; + } + +} \ No newline at end of file diff --git a/app/modules/tgbot/routs/tgbot.php b/app/modules/tgbot/routs/tgbot.php index 43a0f44..75971a6 100644 --- a/app/modules/tgbot/routs/tgbot.php +++ b/app/modules/tgbot/routs/tgbot.php @@ -6,13 +6,18 @@ use kernel\CgRouteCollector; include KERNEL_APP_MODULES_DIR . "/tgbot/routs/tgbot.php"; App::$collector->filter("tg_bot_auth", [\app\modules\tgbot\middlewares\TgBotAuthMiddleware::class, "handler"]); +App::$collector->filter("tg_bot_is_admin", [\app\modules\tgbot\middlewares\TgBotAuthMiddleware::class, "isTgAdmin"]); App::$collector->group(["prefix" => "miniapp"], function (CGRouteCollector $router) { App::$collector->get('/', [\app\modules\tgbot\controllers\TgMainController::class, 'actionMain']); App::$collector->group(["before" => "tg_bot_auth"], function (CGRouteCollector $router){ App::$collector->get('/news', [\app\modules\tgbot\controllers\TgMainController::class, 'actionNews']); App::$collector->get('/promo', [\app\modules\tgbot\controllers\TgMainController::class, 'actionPromo']); - App::$collector->get('/scanner', [\app\modules\tgbot\controllers\TgMainController::class, 'actionScanner']); - App::$collector->get('/card_action/{cardId}', [\app\modules\tgbot\controllers\TgMainController::class, 'actionCardAction']); + App::$collector->group(["before" => "tg_bot_is_admin"], function (CGRouteCollector $router){ + App::$collector->get('/scanner', [\app\modules\tgbot\controllers\TgMainController::class, 'actionScanner']); + App::$collector->get('/card_action/{cardId}', [\app\modules\tgbot\controllers\TgMainController::class, 'actionCardActionStep1']); + App::$collector->get('/card_action_step_2', [\app\modules\tgbot\controllers\TgMainController::class, 'actionCardActionStep2']); + App::$collector->post('/card_action_step_3', [\app\modules\tgbot\controllers\TgMainController::class, 'actionCardActionStep3']); + }); }); }); \ No newline at end of file diff --git a/app/modules/tgbot/services/TgBotService.php b/app/modules/tgbot/services/TgBotService.php index f74292d..585c18b 100644 --- a/app/modules/tgbot/services/TgBotService.php +++ b/app/modules/tgbot/services/TgBotService.php @@ -12,6 +12,4 @@ use kernel\services\ModuleService; class TgBotService extends \kernel\app_modules\tgbot\services\TgBotService { - public static null|Tgbot $currentDialog = null; - } \ No newline at end of file diff --git a/app/modules/tgbot/views/tgbot/layout/main.php b/app/modules/tgbot/views/tgbot/layout/main.php index e933957..eb4d0bc 100644 --- a/app/modules/tgbot/views/tgbot/layout/main.php +++ b/app/modules/tgbot/views/tgbot/layout/main.php @@ -5,7 +5,7 @@ * @var string $title * @var \kernel\CgView $view */ -\Josantonius\Session\Facades\Session::start(); +\kernel\Flash::start(); ?> diff --git a/app/modules/tgbot/views/tgbot/main/card_action.php b/app/modules/tgbot/views/tgbot/main/card_action.php deleted file mode 100644 index 956604e..0000000 --- a/app/modules/tgbot/views/tgbot/main/card_action.php +++ /dev/null @@ -1,23 +0,0 @@ - - -
-
- -
-
- -
- -
\ No newline at end of file diff --git a/app/modules/tgbot/views/tgbot/main/card_action_step_1.php b/app/modules/tgbot/views/tgbot/main/card_action_step_1.php new file mode 100644 index 0000000..36433d3 --- /dev/null +++ b/app/modules/tgbot/views/tgbot/main/card_action_step_1.php @@ -0,0 +1,38 @@ + + +
+
+ +
+
+
+
+ Баланс: balance ?> +
+
+ +
+ +
+
+ +
+
+ +
\ No newline at end of file diff --git a/app/modules/tgbot/views/tgbot/main/card_action_step_2.php b/app/modules/tgbot/views/tgbot/main/card_action_step_2.php new file mode 100644 index 0000000..56f2993 --- /dev/null +++ b/app/modules/tgbot/views/tgbot/main/card_action_step_2.php @@ -0,0 +1,51 @@ +beginForm( "/miniapp/card_action_step_3"); + +$form->field(class: \itguild\forms\inputs\Hidden::class, name: "card_id", params: [ + 'value' => $params->getItem("card_id") +]) + ->render(); + +$form->field(class: \itguild\forms\inputs\Hidden::class, name: "type", params: [ + 'value' => $params->getItem("type") +]) + ->render(); + +$form->field(class: \itguild\forms\inputs\TextInput::class, name: "amount", params: [ + 'class' => "form-control", + 'placeholder' => 'Количество', +]) + ->setLabel("Количество") + ->render(); + +?> +
+
+ field(\itguild\forms\inputs\Button::class, name: "btn-submit", params: [ + 'class' => "btn btn-primary ", + 'value' => 'Отправить', + 'typeInput' => 'submit' + ]) + ->render(); + ?> +
+
+ field(\itguild\forms\inputs\Button::class, name: "btn-reset", params: [ + 'class' => "btn btn-warning", + 'value' => 'Сбросить', + 'typeInput' => 'reset' + ]) + ->render(); + ?> +
+
+endForm(); \ No newline at end of file diff --git a/app/modules/tgbot/views/tgbot/main/card_action_step_3.php b/app/modules/tgbot/views/tgbot/main/card_action_step_3.php new file mode 100644 index 0000000..7cd2de3 --- /dev/null +++ b/app/modules/tgbot/views/tgbot/main/card_action_step_3.php @@ -0,0 +1,30 @@ + + +
+
+ +
+
+
+
+ Баланс: balance ?> +
+
+
+ +
\ No newline at end of file diff --git a/kernel/Flash.php b/kernel/Flash.php index 83efc3f..7d59ac8 100644 --- a/kernel/Flash.php +++ b/kernel/Flash.php @@ -9,12 +9,13 @@ class Flash public static function setMessage(string $type, string $msg): void { - Session::start(); + self::start(); Session::set($type, $msg); } public static function getMessage(string $type): string { + self::start(); $msg = Session::get($type, false); Session::remove($type); @@ -23,7 +24,16 @@ class Flash public static function hasMessage(string $type): bool { + self::start(); + return Session::has($type); } + public static function start() + { + if (!Session::isStarted()){ + Session::start(); + } + } + } \ No newline at end of file diff --git a/kernel/app_modules/card/conditions/CashbackCondition.php b/kernel/app_modules/card/conditions/CashbackCondition.php new file mode 100644 index 0000000..3c1b315 --- /dev/null +++ b/kernel/app_modules/card/conditions/CashbackCondition.php @@ -0,0 +1,42 @@ +cardProgram->cardProgramConditions; + if ($conditions){ + foreach ($conditions as $condition){ + if ($condition->type === "cashback"){ + $transactionForm = new CreateCardTransactionForm(); + $transactionForm->load([ + 'from' => 1001, + 'to' => $card->id, + 'amount' => $this->calcPercent($amount, $condition->value), + 'type' => 1, + 'status' => 1, + ]); + $transactionService = new CardTransactionService(); + + return $transactionService->create($transactionForm); + } + } + } + + return false; + } + + private function calcPercent($price, $percent): int + { + return round($price * ($percent / 100)); + } + +} \ No newline at end of file diff --git a/kernel/app_modules/card/migrations/2025_01_25_094804_change_program_column_at_card_table.php b/kernel/app_modules/card/migrations/2025_01_25_094804_change_program_column_at_card_table.php new file mode 100644 index 0000000..1797655 --- /dev/null +++ b/kernel/app_modules/card/migrations/2025_01_25_094804_change_program_column_at_card_table.php @@ -0,0 +1,29 @@ +schema->table('card', function(Blueprint $table) { + $table->renameColumn('program', 'card_program_id'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + \kernel\App::$db->schema->table('card', function(Blueprint $table) { + $table->renameColumn('card_program_id', 'program'); + }); + } +}; diff --git a/kernel/app_modules/card/migrations/2025_01_25_160204_add_column_at_card_transaction_table.php b/kernel/app_modules/card/migrations/2025_01_25_160204_add_column_at_card_transaction_table.php new file mode 100644 index 0000000..323e1ad --- /dev/null +++ b/kernel/app_modules/card/migrations/2025_01_25_160204_add_column_at_card_transaction_table.php @@ -0,0 +1,31 @@ +schema->table('card_transaction', function(Blueprint $table) { + $table->integer("from_balance")->after("from")->default(0); + $table->integer("to_balance")->after("to")->default(0); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + \kernel\App::$db->schema->table('card_transaction', function(Blueprint $table) { + $table->dropColumn("from_balance"); + $table->dropColumn("to_balance"); + }); + } +}; diff --git a/kernel/app_modules/card/models/Card.php b/kernel/app_modules/card/models/Card.php index 3627efb..9510074 100644 --- a/kernel/app_modules/card/models/Card.php +++ b/kernel/app_modules/card/models/Card.php @@ -14,7 +14,7 @@ use kernel\modules\user\models\User; * @property int $payment_type * @property int $bank_id * @property int $info - * @property int $program + * @property int $card_program_id * @property int $cvc * @property int $pin * @property int $card_template_id @@ -28,7 +28,7 @@ class Card extends Model protected $table = 'card'; - protected $fillable = ['user_id', 'payment_type', 'balance', 'bank_id', 'info', 'program', 'cvc', 'pin', 'username', 'card_template_id', 'card_file_id', 'status']; + protected $fillable = ['user_id', 'payment_type', 'balance', 'bank_id', 'info', 'card_program_id', 'cvc', 'pin', 'username', 'card_template_id', 'card_file_id', 'status']; public static function labels(): array { @@ -46,7 +46,7 @@ class Card extends Model 'balance' => 'Баланс', 'bank_id' => 'ID банка', 'info' => 'Информация о банке', - 'program' => 'Программа', + 'card_program_id' => 'Программа', 'cvc' => 'CVC', 'pin' => 'PIN', 'username' => 'Username', @@ -72,6 +72,11 @@ class Card extends Model return $this->belongsTo(CardTemplate::class); } + public function cardProgram(): \Illuminate\Database\Eloquent\Relations\BelongsTo + { + return $this->belongsTo(related: CardProgram::class); + } + public function cardFile(): \Illuminate\Database\Eloquent\Relations\BelongsTo { return $this->belongsTo(CardFile::class); diff --git a/kernel/app_modules/card/models/CardProgram.php b/kernel/app_modules/card/models/CardProgram.php index bd5472a..123de6f 100644 --- a/kernel/app_modules/card/models/CardProgram.php +++ b/kernel/app_modules/card/models/CardProgram.php @@ -37,6 +37,11 @@ class CardProgram extends Model ]; } + public function cardProgramConditions(): \Illuminate\Database\Eloquent\Relations\HasMany + { + return $this->hasMany(CardProgramConditions::class); + } + /** * @return string[] */ diff --git a/kernel/app_modules/card/models/CardTransaction.php b/kernel/app_modules/card/models/CardTransaction.php index 314cb88..73b63f5 100644 --- a/kernel/app_modules/card/models/CardTransaction.php +++ b/kernel/app_modules/card/models/CardTransaction.php @@ -7,6 +7,8 @@ use Illuminate\Database\Eloquent\Model; /** * @property integer $from * @property integer $to + * @property integer $from_balance + * @property integer $to_balance * @property integer $amount * @property integer $type * @property integer $status @@ -20,7 +22,7 @@ class CardTransaction extends Model protected $table = 'card_transaction'; - protected $fillable = ['from', 'to', 'amount', 'type', 'status']; + protected $fillable = ['from', 'from_balance', 'to', 'to_balance', 'amount', 'type', 'status']; public static function labels(): array { diff --git a/kernel/app_modules/card/models/forms/CreateCardForm.php b/kernel/app_modules/card/models/forms/CreateCardForm.php index af91fb6..9e8ac1a 100644 --- a/kernel/app_modules/card/models/forms/CreateCardForm.php +++ b/kernel/app_modules/card/models/forms/CreateCardForm.php @@ -23,7 +23,7 @@ class CreateCardForm extends FormModel 'balance' => 'alpha-numeric', 'bank_id' => 'required|alpha-numeric', 'info' => 'required|alpha-numeric', - 'program' => 'required|alpha-numeric', + 'card_program_id' => 'required|alpha-numeric', 'cvc' => 'required|alpha-numeric', 'pin' => 'required|alpha-numeric', 'username' => 'required|min-str-len:5|max-str-len:20', diff --git a/kernel/app_modules/card/models/forms/CreateCardTransactionForm.php b/kernel/app_modules/card/models/forms/CreateCardTransactionForm.php index 7e78541..cb978ad 100644 --- a/kernel/app_modules/card/models/forms/CreateCardTransactionForm.php +++ b/kernel/app_modules/card/models/forms/CreateCardTransactionForm.php @@ -19,7 +19,9 @@ class CreateCardTransactionForm extends FormModel // ]; return [ 'from' => 'required|alpha-numeric', + 'from_balance' => 'alpha-numeric', 'to' => 'required|alpha-numeric', + 'to_balance' => 'alpha-numeric', 'amount' => 'required|alpha-numeric', 'type' => 'required|alpha-numeric', 'status' => '' diff --git a/kernel/app_modules/card/services/CardFileService.php b/kernel/app_modules/card/services/CardFileService.php index 306b051..293df4d 100644 --- a/kernel/app_modules/card/services/CardFileService.php +++ b/kernel/app_modules/card/services/CardFileService.php @@ -57,7 +57,7 @@ class CardFileService if ($card->cardTemplate) { $formatter = BankFormatter::create(); - $customer = BankFactory::create()->paymentType($card->payment_type)->bank($card->bank_id, $card->info, $card->program)->client($card->id); + $customer = BankFactory::create()->paymentType($card->payment_type)->bank($card->bank_id, $card->info, $card->card_program_id)->client($card->id); $cardNumber = CardNumber::generate($customer, $formatter); //Card diff --git a/kernel/app_modules/card/services/CardService.php b/kernel/app_modules/card/services/CardService.php index 4bc3688..0542b6c 100644 --- a/kernel/app_modules/card/services/CardService.php +++ b/kernel/app_modules/card/services/CardService.php @@ -5,6 +5,8 @@ namespace kernel\app_modules\card\services; use DragonCode\CardNumber\CardNumber; use DragonCode\CardNumber\Factories\BankFactory; use DragonCode\CardNumber\Formatters\BankFormatter; +use kernel\app_modules\card\models\CardTransaction; +use kernel\app_modules\card\models\forms\CreateCardTransactionForm; use kernel\helpers\Debug; use kernel\app_modules\card\models\Card; use kernel\FormModel; @@ -14,10 +16,12 @@ use kernel\modules\user\models\User; class CardService { protected CardFileService $cardFileService; + protected CardTransactionService $cardTransactionService; public function __construct() { $this->cardFileService = new CardFileService(); + $this->cardTransactionService = new CardTransactionService(); } public function create(FormModel $form_model): false|Card @@ -28,7 +32,7 @@ class CardService $model->payment_type = $form_model->getItem('payment_type') ?? 2; $model->bank_id = $form_model->getItem('bank_id') ?? 232; $model->info = $form_model->getItem('info') ?? 42; - $model->program = $form_model->getItem('program') ?? 71; + $model->card_program_id = $form_model->getItem('card_program_id') ?? 71; $model->balance = $form_model->getItem('balance') ?? 0; $model->cvc = $form_model->getItem('cvc') ?? 101; $model->pin = $form_model->getItem('pin') ?? 1111; @@ -56,7 +60,7 @@ class CardService $card->payment_type = $form_model->getItem('payment_type'); $card->bank_id = $form_model->getItem('bank_id'); $card->info = $form_model->getItem('info'); - $card->program = $form_model->getItem('program'); + $card->card_program_id = $form_model->getItem('card_program_id'); $card->balance = $form_model->getItem('balance'); $card->cvc = $form_model->getItem('cvc'); $card->pin = $form_model->getItem('pin'); @@ -81,12 +85,44 @@ class CardService return false; } + public static function addMoneyToCard(Card $card, int $amount): CardTransaction + { + $transactionForm = new CreateCardTransactionForm(); + $transactionForm->load([ + 'from' => 1001, + 'to' => $card->id, + 'amount' => $amount, + 'type' => 1, + 'status' => 1, + ]); + + $transactionService = new CardTransactionService(); + + return $transactionService->create($transactionForm); + } + + public static function withdrawMoneyFromCard(Card $card, int $amount): CardTransaction + { + $transactionForm = new CreateCardTransactionForm(); + $transactionForm->load([ + 'from' => $card->id, + 'to' => 1001, + 'amount' => $amount, + 'type' => 1, + 'status' => 1, + ]); + + $transactionService = new CardTransactionService(); + + return $transactionService->create($transactionForm); + } + public static function createCardPNG(Card $card): false|string { if ($card->cardTemplate) { $formatter = BankFormatter::create(); - $customer = BankFactory::create()->paymentType($card->payment_type)->bank($card->bank_id, $card->info, $card->program)->client($card->id); + $customer = BankFactory::create()->paymentType($card->payment_type)->bank($card->bank_id, $card->info, $card->card_program_id)->client($card->id); $cardNumber = CardNumber::generate($customer, $formatter); //Card @@ -110,6 +146,16 @@ class CardService return false; } + public static function getCardById(int $id) + { + $card = Card::find($id); + if ($card) { + return $card; + } + + return false; + } + public static function userHasCard(int $userId): bool { $card = Card::where("user_id", $userId)->first(); diff --git a/kernel/app_modules/card/services/CardTransactionService.php b/kernel/app_modules/card/services/CardTransactionService.php index 34109fd..8a621f4 100644 --- a/kernel/app_modules/card/services/CardTransactionService.php +++ b/kernel/app_modules/card/services/CardTransactionService.php @@ -24,6 +24,7 @@ class CardTransactionService $this->errors[] = ["error_id" => 3, "error_msg" => "Sender not found"]; return false; } + $model->from_balance = $fromCard->balance; } if ($toId !== 1001){ @@ -32,6 +33,7 @@ class CardTransactionService $this->errors[] = ["error_id" => 3, "error_msg" => "Recipient not found"]; return false; } + $model->to_balance = $toCard->balance; } if ($fromId !== 1001){ @@ -49,11 +51,11 @@ class CardTransactionService // $model->slug = Slug::createSlug($form_model->getItem('title'), Card::class); // Генерация уникального slug if ($model->save()) { - if ($fromCard){ + if (isset($fromCard)){ $fromCard->balance = $fromCard->balance - (int)$form_model->getItem('amount'); $fromCard->save(); } - if ($toCard){ + if (isset($toCard)){ $toCard->balance = $toCard->balance + (int)$form_model->getItem('amount'); $toCard->save(); } diff --git a/kernel/app_modules/card/views/form.php b/kernel/app_modules/card/views/form.php index fcfb6b1..a3d50c3 100644 --- a/kernel/app_modules/card/views/form.php +++ b/kernel/app_modules/card/views/form.php @@ -58,9 +58,9 @@ $form->field(\itguild\forms\inputs\TextInput::class, 'info', [ ->setLabel("Информация") ->render(); -$form->field(class: \itguild\forms\inputs\Select::class, name: "program", params: [ +$form->field(class: \itguild\forms\inputs\Select::class, name: "card_program_id", params: [ 'class' => "form-control", - 'value' => $model->program ?? '' + 'value' => $model->card_program_id ?? '' ]) ->setLabel("Программа") ->setOptions(\kernel\app_modules\card\services\CardProgramService::getProgramList()) diff --git a/kernel/app_modules/tgbot/models/Tgbot.php b/kernel/app_modules/tgbot/models/Tgbot.php index 9d02763..de0608f 100644 --- a/kernel/app_modules/tgbot/models/Tgbot.php +++ b/kernel/app_modules/tgbot/models/Tgbot.php @@ -18,6 +18,7 @@ class Tgbot extends Model { const DISABLE_STATUS = 0; const ACTIVE_STATUS = 1; + const ADMIN_STATUS = 9; protected $table = 'tgbot'; diff --git a/kernel/app_modules/tgbot/services/TgBotService.php b/kernel/app_modules/tgbot/services/TgBotService.php index 6beeab8..f3987ec 100644 --- a/kernel/app_modules/tgbot/services/TgBotService.php +++ b/kernel/app_modules/tgbot/services/TgBotService.php @@ -11,6 +11,8 @@ use kernel\services\ModuleService; class TgBotService { + public static null|Tgbot $currentDialog = null; + public function create(FormModel $form_model): false|Tgbot { $model = new Tgbot(); @@ -45,4 +47,13 @@ class TgBotService return false; } + public static function isAdmin(): bool + { + if (self::$currentDialog->status === Tgbot::ADMIN_STATUS){ + return true; + } + + return false; + } + } \ No newline at end of file diff --git a/kernel/console/controllers/MigrationController.php b/kernel/console/controllers/MigrationController.php index 02bb565..bf23da5 100644 --- a/kernel/console/controllers/MigrationController.php +++ b/kernel/console/controllers/MigrationController.php @@ -71,10 +71,15 @@ class MigrationController extends ConsoleController $dmr = new DatabaseMigrationRepository(App::$db->capsule->getDatabaseManager(), 'migration'); $m = new Migrator($dmr, App::$db->capsule->getDatabaseManager(), new Filesystem()); - if (\kernel\App::$db->schema->hasTable('option')) { - $migrationPaths = array_merge($this->moduleService->getModulesMigrationsPaths(), [ROOT_DIR . '/migrations']); - } else { - $migrationPaths = [ROOT_DIR . '/migrations']; + if (isset($this->argv['path'])){ + $migrationPaths = [ROOT_DIR . $this->argv['path']]; + } + else { + if (\kernel\App::$db->schema->hasTable('option')) { + $migrationPaths = array_merge($this->moduleService->getModulesMigrationsPaths(), [ROOT_DIR . '/migrations']); + } else { + $migrationPaths = [ROOT_DIR . '/migrations']; + } } $res = $m->run($migrationPaths); @@ -94,7 +99,13 @@ class MigrationController extends ConsoleController $m = new Migrator($dmr, App::$db->capsule->getDatabaseManager(), new Filesystem()); //$migrationPaths = array_merge(App::$migrationsPaths, [WORKSPACE_DIR . '/console/migrations']); - $migrationPaths = [ROOT_DIR . '/migrations']; + if (isset($this->argv['path'])){ + $migrationPaths = [ROOT_DIR . $this->argv['path']]; + } + else { + $migrationPaths = [ROOT_DIR . '/migrations']; + } + $res = $m->rollback($migrationPaths, ['step' => $step]); print_r($step); foreach ($res as $re) {