From 9123eed007e48696e572ab67b901e6aec74d5d77 Mon Sep 17 00:00:00 2001 From: Nurmuhammet Allanov Date: Thu, 29 May 2025 22:39:52 +0500 Subject: [PATCH] wip --- .../Api/CardTransactionController.php | 38 ---- app/Http/Controllers/ApiTesterController.php | 2 + .../Order/Card/CardBalance/CardBalance.php | 25 +++ .../Order/Card/Requisite/CardRequisite.php | 2 +- .../Actions/DownloadCardBalance.php | 94 ++++++++++ .../Order/Card/CardBalance/CardBalance.php | 174 ++++++++++++++++++ .../CardBalance/Views/card-balance.blade.php | 67 +++++++ .../Actions/DownloadCardRequisite.php | 9 +- .../Order/Card/Requisite/CardRequisite.php | 2 - .../Concerns/CardRequisiteFieldsForDetail.php | 4 +- app/Repos/System/Nova/NovaMenuRepo.php | 2 + ...5_29_202242_create_card_balances_table.php | 38 ++++ lang/tk.json | 6 +- ok.html | 12 -- 14 files changed, 413 insertions(+), 62 deletions(-) delete mode 100644 app/Http/Controllers/Api/CardTransactionController.php create mode 100644 app/Models/Order/Card/CardBalance/CardBalance.php create mode 100644 app/Nova/Resources/Order/Card/CardBalance/Actions/DownloadCardBalance.php create mode 100644 app/Nova/Resources/Order/Card/CardBalance/CardBalance.php create mode 100644 app/Nova/Resources/Order/Card/CardBalance/Views/card-balance.blade.php create mode 100644 database/migrations/2025_05_29_202242_create_card_balances_table.php delete mode 100644 ok.html diff --git a/app/Http/Controllers/Api/CardTransactionController.php b/app/Http/Controllers/Api/CardTransactionController.php deleted file mode 100644 index 1271202..0000000 --- a/app/Http/Controllers/Api/CardTransactionController.php +++ /dev/null @@ -1,38 +0,0 @@ -fetchApi( - // passport_serie: $transaction->passport_serie, - // passport_id: $transaction->passport_id, - // card_number_masked: Str::mask($transaction->card_number, '*', 6, 6), - // card_expire_date: $transaction->card_month.'/'.substr($transaction->card_year, 2), - // start_date: $start_date->format('d.m.Y'), - // end_date: $end_date->format('d.m.Y'), - // ); - - // /** @var ResponseTypes\AzatApiClientInfoAllResponse */ - // $data = Str::isJson($response) - // ? json_decode($response) - // : emptyClass(errCode: 1, message: 'Connection issue to VP'); - - // return view('orders.cards.card-transaction.download-card-transaction', [ - // 'transaction' => $data - // ]); - } -} diff --git a/app/Http/Controllers/ApiTesterController.php b/app/Http/Controllers/ApiTesterController.php index 3cc2dfb..fda685e 100644 --- a/app/Http/Controllers/ApiTesterController.php +++ b/app/Http/Controllers/ApiTesterController.php @@ -3,6 +3,8 @@ namespace App\Http\Controllers; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Blade; +use Mpdf\Mpdf; class ApiTesterController extends Controller { diff --git a/app/Models/Order/Card/CardBalance/CardBalance.php b/app/Models/Order/Card/CardBalance/CardBalance.php new file mode 100644 index 0000000..44ae54a --- /dev/null +++ b/app/Models/Order/Card/CardBalance/CardBalance.php @@ -0,0 +1,25 @@ +first(); + + /** @var \App\Nova\Resources\Order\Card\CardTransaction\Actions\ResponseTypes\AzatApiClientInfoAllResponse */ + $data = $this->fetchApi($model); + + if ($data->errCode != 0) { + return ActionResponse::danger($data->message); + } + + return Action::modal('modal-response', [ + 'title' => __('Card balance'), + 'html' => Blade::render( + file_get_contents(app_path('Nova/Resources/Order/Card/CardBalance/Views/card-balance.blade.php')), + ['data' => $data] + ) + ]); + } + + /** + * Get the fields available on the action. + * + * @param \Laravel\Nova\Http\Requests\NovaRequest $request + * @return array + */ + public function fields(NovaRequest $request) + { + return []; + } + + /** + * Fetch api + * + * @param \App\Models\Order\Card\Requisite\CardRequisite $model + */ + public function fetchApi($model) + { + $date = today()->format('d.m.Y'); + + $response = DownloadCardTransaction::make()->fetchApi( + passport_serie: $model->passport_serie, + passport_id: $model->passport_id, + card_number_masked: Str::mask($model->card_number, '*', 6, 6), + card_expire_date: $model->card_month.'/'.substr($model->card_year, 2), + start_date: $date, + end_date: $date, + ); + + return Str::isJson($response) + ? json_decode($response) + : emptyClass(errCode: 1, message: 'Connection issue to VP'); + } +} diff --git a/app/Nova/Resources/Order/Card/CardBalance/CardBalance.php b/app/Nova/Resources/Order/Card/CardBalance/CardBalance.php new file mode 100644 index 0000000..4929535 --- /dev/null +++ b/app/Nova/Resources/Order/Card/CardBalance/CardBalance.php @@ -0,0 +1,174 @@ + + */ + public static $model = \App\Models\Order\Card\CardBalance\CardBalance::class; + + /** + * The single value that should be used to represent the resource when being displayed. + * + * @var string + */ + public static $title = 'unique_id'; + + /** + * The columns that should be searched. + * + * @var array + */ + public static $search = [ + 'unique_id', + ]; + + /** + * Get the displayable label of the resource. + */ + public static function label(): string + { + return __('Card balances'); + } + + /** + * Get the displayable singular label of the resource. + */ + public static function singularLabel(): string + { + return __('Card balance'); + } + + /** + * Build an "index" query for the given resource. + * + * @param \Illuminate\Database\Eloquent\Builder<\App\Models\Order\Card\CardBalance\CardBalance> $query + * @return \Illuminate\Database\Eloquent\Builder<\App\Models\Order\Card\CardBalance\CardBalance> + */ + public static function indexQuery(NovaRequest $request, $query): Builder + { + /** @var \App\Models\User */ + $user = $request->user(); + + if ($user->isAdmin()) { + return $query; + } + + if ($user->isOperator() && count($user->branches()->pluck('branches.id')) < 1) { + return $query->whereIn('branch_id', $user->branches()->pluck('branches.id')); + } + + return $query->where('user_id', $user->id); + } + + /** + * Get the fields displayed by the resource. + * + * @param \Laravel\Nova\Http\Requests\NovaRequest $request + * @return array + */ + public function fields(NovaRequest $request): array + { + return [ + ID::make()->sortable(), + + Hidden::make('user_id') + ->default(auth()->id()) + ->hideWhenUpdating(), + + Select::make(__('Passport serie'), 'passport_serie') + ->displayUsingLabels() + ->searchable() + ->options(PassportRepo::values()) + ->size('w-1/2') + ->rules('required'), + + NovaInputmask::make(__('Passport id'), 'passport_id') + ->mask('999999') + ->size('w-1/2') + ->rules('required', 'numeric', 'digits:6'), + + NovaInputmask::make(__('Card number'), 'card_number') + ->mask('9999-9999-9999-9999') + ->storeRawValue() + ->size('md:w-1/2') + ->rules('required', 'digits:16'), + + Select::make(__('Card').' '.__('Expiration month'), 'card_month') + ->searchable() + ->options(DateHelperRepository::staticNumberMonths()) + ->size('md:w-1/4') + ->rules('required'), + + Select::make(__('Card').' '.__('Expiration year'), 'card_year') + ->searchable() + ->options(DateHelperRepository::staticNumberYears()) + ->size('md:w-1/4') + ->rules('required'), + ]; + } + + /** + * Get the cards available for the request. + * + * @param \Laravel\Nova\Http\Requests\NovaRequest $request + * @return array + */ + public function cards(NovaRequest $request) + { + return []; + } + + /** + * Get the filters available for the resource. + * + * @param \Laravel\Nova\Http\Requests\NovaRequest $request + * @return array + */ + public function filters(NovaRequest $request) + { + return []; + } + + /** + * Get the lenses available for the resource. + * + * @param \Laravel\Nova\Http\Requests\NovaRequest $request + * @return array + */ + public function lenses(NovaRequest $request) + { + return []; + } + + /** + * Get the actions available for the resource. + * + * @param \Laravel\Nova\Http\Requests\NovaRequest $request + * @return array + */ + public function actions(NovaRequest $request) + { + return [ + DownloadCardBalance::make() + ->icon('arrow-down-tray') + ->sole(), + ]; + } +} diff --git a/app/Nova/Resources/Order/Card/CardBalance/Views/card-balance.blade.php b/app/Nova/Resources/Order/Card/CardBalance/Views/card-balance.blade.php new file mode 100644 index 0000000..d3774ad --- /dev/null +++ b/app/Nova/Resources/Order/Card/CardBalance/Views/card-balance.blade.php @@ -0,0 +1,67 @@ + + + + + + Document + + + + +
+
+
+
+
+ +
+
+

Nexus Bank

+

Premium Card

+
+
+
+
+

+ {{ __('Card number') }} +

+
+

+ {{ $data->cardPan }} +

+
+
+
+
+

+ {{ __('Card holder name') }} +

+

+ {{ $data->clientName }} +

+
+
+

+ Senesi +

+

+ {{ $data->expDate }} +

+
+
+
+
+

+ {{ __('Money Balance') }} +

+
+ {{--

{{ $data-> }}

--}} +
+
+
+
+
+ + diff --git a/app/Nova/Resources/Order/Card/Requisite/Actions/DownloadCardRequisite.php b/app/Nova/Resources/Order/Card/Requisite/Actions/DownloadCardRequisite.php index 939f48a..7d4c81c 100644 --- a/app/Nova/Resources/Order/Card/Requisite/Actions/DownloadCardRequisite.php +++ b/app/Nova/Resources/Order/Card/Requisite/Actions/DownloadCardRequisite.php @@ -5,7 +5,6 @@ namespace App\Nova\Resources\Order\Card\Requisite\Actions; use App\Nova\Resources\Order\Card\CardTransaction\Actions\DownloadCardTransaction; use Illuminate\Bus\Queueable; use Illuminate\Queue\InteractsWithQueue; -use Illuminate\Support\Carbon; use Illuminate\Support\Collection; use Illuminate\Support\Facades\File; use Illuminate\Support\Str; @@ -60,7 +59,7 @@ class DownloadCardRequisite extends Action /** * Fetch api * - * @param \App\Models\Order\Card\Requisite\CardRequisite $model + * @param \App\Models\Order\Card\Requisite\CardRequisite $model */ public function fetchApi($model) { @@ -77,14 +76,14 @@ class DownloadCardRequisite extends Action return Str::isJson($response) ? json_decode($response) - : emptyClass(errCode: 1, message: 'Connection issue to VP');; + : emptyClass(errCode: 1, message: 'Connection issue to VP'); } /** * Generate file * - * @param \App\Models\Order\Card\Requisite\CardRequisite $model - * @param \App\Nova\Resources\Order\Card\CardTransaction\Actions\ResponseTypes\AzatApiClientInfoAllResponse $data + * @param \App\Models\Order\Card\Requisite\CardRequisite $model + * @param \App\Nova\Resources\Order\Card\CardTransaction\Actions\ResponseTypes\AzatApiClientInfoAllResponse $data */ public function generateFile($model, $data) { diff --git a/app/Nova/Resources/Order/Card/Requisite/CardRequisite.php b/app/Nova/Resources/Order/Card/Requisite/CardRequisite.php index 0f125ce..7686910 100644 --- a/app/Nova/Resources/Order/Card/Requisite/CardRequisite.php +++ b/app/Nova/Resources/Order/Card/Requisite/CardRequisite.php @@ -13,7 +13,6 @@ use App\Nova\Resources\Order\Card\Requisite\Actions\DownloadCardRequisite; use App\Nova\Resources\Order\Card\Requisite\Concerns\CardRequisiteFieldsForDetail; use App\Nova\Resources\Order\Card\Requisite\Concerns\CardRequisiteFieldsForIndex; use App\Repos\Order\Card\CardOrderRepo; -use App\Repos\Order\Card\CardTypeRepo; use App\Repos\Order\OrderRepo; use App\Repos\System\Nova\NovaRepo; use App\Repos\System\Settings\Legal\PassportRepo; @@ -23,7 +22,6 @@ use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Facades\Gate; use Laravel\Nova\Fields\Date; -use Laravel\Nova\Fields\File; use Laravel\Nova\Fields\Hidden; use Laravel\Nova\Fields\ID; use Laravel\Nova\Fields\Image; diff --git a/app/Nova/Resources/Order/Card/Requisite/Concerns/CardRequisiteFieldsForDetail.php b/app/Nova/Resources/Order/Card/Requisite/Concerns/CardRequisiteFieldsForDetail.php index e28ff77..d54737e 100644 --- a/app/Nova/Resources/Order/Card/Requisite/Concerns/CardRequisiteFieldsForDetail.php +++ b/app/Nova/Resources/Order/Card/Requisite/Concerns/CardRequisiteFieldsForDetail.php @@ -4,7 +4,6 @@ namespace App\Nova\Resources\Order\Card\Requisite\Concerns; use App\Modules\DateHelper\Repositories\DateHelperRepository; use App\Nova\Resources\Branch\Branch; -use App\Nova\Resources\Order\Card\CardType; use App\Nova\User; use App\Repos\Order\OrderRepo; use App\Repos\System\Settings\Legal\PassportRepo; @@ -13,7 +12,6 @@ use Laravel\Nova\Fields\Badge; use Laravel\Nova\Fields\BelongsTo; use Laravel\Nova\Fields\Date; use Laravel\Nova\Fields\DateTime; -use Laravel\Nova\Fields\File; use Laravel\Nova\Fields\ID; use Laravel\Nova\Fields\Image; use Laravel\Nova\Fields\Number; @@ -60,7 +58,7 @@ class CardRequisiteFieldsForDetail ->options(DateHelperRepository::staticNumberMonths()), Select::make(__('Card').' '.__('Expiration year'), 'card_year') - ->options(DateHelperRepository::staticNumberYears()) + ->options(DateHelperRepository::staticNumberYears()), ]), new Panel(__('Location'), [ diff --git a/app/Repos/System/Nova/NovaMenuRepo.php b/app/Repos/System/Nova/NovaMenuRepo.php index 4897fa1..f50e01e 100644 --- a/app/Repos/System/Nova/NovaMenuRepo.php +++ b/app/Repos/System/Nova/NovaMenuRepo.php @@ -9,6 +9,7 @@ use App\Nova\Dashboards\Main; use App\Nova\Resources\Branch\Branch; use App\Nova\Resources\CurrencyRate; use App\Nova\Resources\NovaVisaMasterSetting; +use App\Nova\Resources\Order\Card\CardBalance\CardBalance; use App\Nova\Resources\Order\Card\CardOrder; use App\Nova\Resources\Order\Card\CardState; use App\Nova\Resources\Order\Card\CardTransaction\CardTransaction; @@ -59,6 +60,7 @@ class NovaMenuRepo MenuItem::resource(CardOrder::class)->name(__('Order new card')), MenuItem::resource(CardTransaction::class), MenuItem::resource(CardRequisite::class), + MenuItem::resource(CardBalance::class), MenuItem::resource(CardPin::class), ])->collapsedByDefault(), diff --git a/database/migrations/2025_05_29_202242_create_card_balances_table.php b/database/migrations/2025_05_29_202242_create_card_balances_table.php new file mode 100644 index 0000000..7b18bfd --- /dev/null +++ b/database/migrations/2025_05_29_202242_create_card_balances_table.php @@ -0,0 +1,38 @@ +id(); + $table->string('unique_id')->nullable()->unique(); + + $table->string('passport_serie'); + $table->string('passport_id'); + $table->string('card_number'); + $table->string('card_month'); + $table->string('card_year'); + + $table->foreignId('user_id')->constrained('users')->restrictOnDelete(); + + $table->timestamps(); + $table->softDeletes(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('card_balances'); + } +}; diff --git a/lang/tk.json b/lang/tk.json index 20d676c..f3a2961 100644 --- a/lang/tk.json +++ b/lang/tk.json @@ -344,5 +344,9 @@ "Loan order updated": "Karz sargydy üýtgedildi", "Loan order deleted": "Karz sargydy pozuldy", "Card transaction": "Kart herekedi", - "Card transactions": "Kart hereketleri" + "Card transactions": "Kart hereketleri", + "Card balance": "Kart galyndysy", + "Card balances": "Kart galyndylary", + "Card holder name": "Kartyň eýesiniň ady", + "Money Balance": "Galyndy" } diff --git a/ok.html b/ok.html deleted file mode 100644 index 5788b45..0000000 --- a/ok.html +++ /dev/null @@ -1,12 +0,0 @@ - - -$printLocation = "/var/www/sirk/backend/storage/app/public/tickets/{$booking->orderId}.pdf"; - $url = route('booking-ticket', ['q' => $request->q]); - - $result = Process::run("/home/ubuntu/chrome-linux/chrome --headless --print-to-pdf=$printLocation $url --no-sandbox"); - - if ($result->successful()) { - return redirect("https://atchylyksirk.gov.tm/storage/tickets/{$booking->orderId}.pdf"); - } else { - return back(); - }