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 @@
+
+
+
+
+
+ Баланс: = $card->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 @@
+
+
+
+
+
+ Баланс: = $card->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) {