From 505f6bb37b6de1e4e6b65fd58e3d295d4eaa9b8b Mon Sep 17 00:00:00 2001 From: Nurmuhammet Allanov Date: Thu, 29 May 2025 15:39:57 +0500 Subject: [PATCH] wip --- .../Order/Card/Requisite/CardRequisite.php | 27 +++ .../Actions/DownloadCardRequisite.php | 108 ++++++++++++ .../Order/Card/Requisite/CardRequisite.php | 43 +++-- .../Concerns/CardRequisiteFieldsForDetail.php | 13 +- .../Card/Requisite/Docs/card-requisite.docx | Bin 0 -> 25722 bytes .../Card/Requisite/Docs/~$rd-requisite.docx | Bin 0 -> 162 bytes composer.json | 1 + composer.lock | 166 +++++++++++++++++- ...1031_card_requisites_card_type_id_null.php | 39 ++++ 9 files changed, 374 insertions(+), 23 deletions(-) create mode 100644 app/Nova/Resources/Order/Card/Requisite/Actions/DownloadCardRequisite.php create mode 100644 app/Nova/Resources/Order/Card/Requisite/Docs/card-requisite.docx create mode 100644 app/Nova/Resources/Order/Card/Requisite/Docs/~$rd-requisite.docx create mode 100644 database/migrations/2025_05_29_151031_card_requisites_card_type_id_null.php diff --git a/app/Models/Order/Card/Requisite/CardRequisite.php b/app/Models/Order/Card/Requisite/CardRequisite.php index 4f2406f..a8cf1da 100644 --- a/app/Models/Order/Card/Requisite/CardRequisite.php +++ b/app/Models/Order/Card/Requisite/CardRequisite.php @@ -10,6 +10,33 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\SoftDeletes; +/** + * @property int $int + * @property string $unique_id + * @property string $card_type_id + * @property string $card_number + * @property string $card_year + * @property string $card_month + * @property string $region + * @property string $branch_id + * @property string $customer_name + * @property string $customer_surname + * @property string $customer_patronic_name + * @property string $born_at + * @property string $phone + * @property string $passport_serie + * @property string $passport_id + * @property string $status + * @property string $passport_one + * @property string $passport_two + * @property string $passport_three + * @property string $passport_four + * @property string $notes + * @property string $user_id + * @property string $ready_files + * @property \Illuminate\Support\Carbon $created_at + * @property \Illuminate\Support\Carbon $updated_at +*/ class CardRequisite extends Model { use HasFactory; diff --git a/app/Nova/Resources/Order/Card/Requisite/Actions/DownloadCardRequisite.php b/app/Nova/Resources/Order/Card/Requisite/Actions/DownloadCardRequisite.php new file mode 100644 index 0000000..6bbc171 --- /dev/null +++ b/app/Nova/Resources/Order/Card/Requisite/Actions/DownloadCardRequisite.php @@ -0,0 +1,108 @@ +first(); + + /** @var \App\Nova\Resources\Order\Card\CardTransaction\Actions\ResponseTypes\AzatApiClientInfoAllResponse */ + $data = $this->fetchApi($model); + + if ($data->errCode != 0) { + return ActionResponse::danger($data->message); + } + + $path = $this->generateFile($model, $data); + + return ActionResponse::download( + name: 'card-requisite.docx', + url: url($path) + ); + } + + /** + * 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');; + } + + /** + * Generate file + * + * @param @param \App\Models\Order\Card\Requisite\CardRequisite $model + */ + public function generateFile($model) + { + $doc_path = app_path('Nova/Resources/Order/Card/Requisite/Docs/card-requisite.docx'); + + $templateProcessor = new TemplateProcessor($doc_path); + $templateProcessor->setValues([ + 'year' => date('Y'), + ]); + + $unique_folder_name = Str::snake(str_replace(':', '-', $model->created_at->toDateTimeString())); + $dir = public_path("files/card-requisite/{$unique_folder_name}"); + + File::makeDirectory($dir, 0777, true, true); + + $filePath = $dir."/{$model->id}.docx"; + + $templateProcessor->saveAs($filePath); + + return "files/card-requisite/{$unique_folder_name}/{$model->id}.docx"; + } +} diff --git a/app/Nova/Resources/Order/Card/Requisite/CardRequisite.php b/app/Nova/Resources/Order/Card/Requisite/CardRequisite.php index e6003ee..0f125ce 100644 --- a/app/Nova/Resources/Order/Card/Requisite/CardRequisite.php +++ b/app/Nova/Resources/Order/Card/Requisite/CardRequisite.php @@ -4,10 +4,12 @@ namespace App\Nova\Resources\Order\Card\Requisite; use App\Models\Branch\Branch; use App\Models\Order\Card\Requisite\CardRequisite as CardRequisiteModel; +use App\Modules\DateHelper\Repositories\DateHelperRepository; use App\Nova\Filters\RegionFilter; use App\Nova\Filters\StatusFilter; use App\Nova\Nova; use App\Nova\Resource; +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; @@ -205,19 +207,23 @@ class CardRequisite extends Resource ->canSeeWhen('systemUser', $this), new Panel(__('Card'), [ - Select::make(__('Card type'), 'card_type_id') - ->displayUsingLabels() - ->fullWidth() - ->searchable() - ->options(CardTypeRepo::values()) - ->size('w-1/2') - ->rules('required'), - NovaInputmask::make(__('Card number'), 'card_number') ->mask('9999 9999 9999 9999') ->storeRawValue() ->size('w-1/2') ->rules('required', 'int', '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'), ]), new Panel(__('Location'), [ @@ -301,13 +307,6 @@ class CardRequisite extends Resource ->creationRules('required') ->updateRules('nullable'), ]), - - new Panel(__('Ready files'), [ - File::make(__('Card requisite'), 'ready_files') - ->rules('max:2048', 'mimes:doc,docx,rtf,pdf,jpg,png,jpeg') - ->hideWhenCreating() - ->canSeeWhen('systemUser', $this), - ]), ]; } @@ -325,4 +324,18 @@ class CardRequisite extends Resource new StatusFilter, ]; } + + /** + * Actions + * + * @return array + */ + public function actions(NovaRequest $request): array + { + return [ + DownloadCardRequisite::make() + ->icon('arrow-down-tray') + ->sole(), + ]; + } } diff --git a/app/Nova/Resources/Order/Card/Requisite/Concerns/CardRequisiteFieldsForDetail.php b/app/Nova/Resources/Order/Card/Requisite/Concerns/CardRequisiteFieldsForDetail.php index 0b4cd7a..e28ff77 100644 --- a/app/Nova/Resources/Order/Card/Requisite/Concerns/CardRequisiteFieldsForDetail.php +++ b/app/Nova/Resources/Order/Card/Requisite/Concerns/CardRequisiteFieldsForDetail.php @@ -2,6 +2,7 @@ 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; @@ -51,11 +52,15 @@ class CardRequisiteFieldsForDetail BelongsTo::make(__('Created by').': ', 'user', User::class), new Panel(__('Card'), [ - BelongsTo::make(__('Card type'), 'cardType', CardType::class), - NovaInputmask::make(__('Card number'), 'card_number') ->mask('9999 9999 9999 9999') ->storeRawValue(), + + Select::make(__('Card').' '.__('Expiration month'), 'card_month') + ->options(DateHelperRepository::staticNumberMonths()), + + Select::make(__('Card').' '.__('Expiration year'), 'card_year') + ->options(DateHelperRepository::staticNumberYears()) ]), new Panel(__('Location'), [ @@ -97,10 +102,6 @@ class CardRequisiteFieldsForDetail Image::make(__('Passport (page 8-9)'), 'passport_three'), Image::make(__('Passport (page 32)'), 'passport_four'), ]), - - new Panel(__('Ready files'), [ - File::make(__('Card requisite'), 'ready_files'), - ]), ]; } } diff --git a/app/Nova/Resources/Order/Card/Requisite/Docs/card-requisite.docx b/app/Nova/Resources/Order/Card/Requisite/Docs/card-requisite.docx new file mode 100644 index 0000000000000000000000000000000000000000..09f6d63c00086ef22935382fbe2be15d5b8cea12 GIT binary patch literal 25722 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 literal 0 HcmV?d00001 diff --git a/app/Nova/Resources/Order/Card/Requisite/Docs/~$rd-requisite.docx b/app/Nova/Resources/Order/Card/Requisite/Docs/~$rd-requisite.docx new file mode 100644 index 0000000000000000000000000000000000000000..9070d563d8da3602cff1c12cfc18b2853d12e5d5 GIT binary patch literal 162 zcmais!3~5k38zk8Egm6!-9oRWzt98%%Z%|q6QU{{jgZC8>-ZPJhV$OT{Ol^ezY literal 0 HcmV?d00001 diff --git a/composer.json b/composer.json index 9b66332..6012eea 100644 --- a/composer.json +++ b/composer.json @@ -33,6 +33,7 @@ "outl1ne/nova-grid": "@dev", "outl1ne/nova-simple-repeatable": "^2.2", "outl1ne/nova-translatable": "^2.2", + "phpoffice/phpword": "dev-master", "spatie/laravel-backup": "^8.4", "spatie/laravel-medialibrary": "^11.9", "spatie/laravel-permission": "^6.1", diff --git a/composer.lock b/composer.lock index b6f4478..c18d5c1 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "7a2dbd9905ac906785253c58903ea32b", + "content-hash": "d22b828bf01fdfbf3cafac9bd1d57ac0", "packages": [ { "name": "adoy/fastcgi-client", @@ -5334,6 +5334,167 @@ }, "time": "2020-10-15T08:29:30+00:00" }, + { + "name": "phpoffice/math", + "version": "0.2.0", + "source": { + "type": "git", + "url": "https://github.com/PHPOffice/Math.git", + "reference": "fc2eb6d1a61b058d5dac77197059db30ee3c8329" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPOffice/Math/zipball/fc2eb6d1a61b058d5dac77197059db30ee3c8329", + "reference": "fc2eb6d1a61b058d5dac77197059db30ee3c8329", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-xml": "*", + "php": "^7.1|^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.88 || ^1.0.0", + "phpunit/phpunit": "^7.0 || ^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "PhpOffice\\Math\\": "src/Math/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Progi1984", + "homepage": "https://lefevre.dev" + } + ], + "description": "Math - Manipulate Math Formula", + "homepage": "https://phpoffice.github.io/Math/", + "keywords": [ + "MathML", + "officemathml", + "php" + ], + "support": { + "issues": "https://github.com/PHPOffice/Math/issues", + "source": "https://github.com/PHPOffice/Math/tree/0.2.0" + }, + "time": "2024-08-12T07:30:45+00:00" + }, + { + "name": "phpoffice/phpword", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/PHPOffice/PHPWord.git", + "reference": "6ca8c9ff67e0ea7729973b7b3a33626febad6628" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPOffice/PHPWord/zipball/6ca8c9ff67e0ea7729973b7b3a33626febad6628", + "reference": "6ca8c9ff67e0ea7729973b7b3a33626febad6628", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-gd": "*", + "ext-json": "*", + "ext-xml": "*", + "ext-zip": "*", + "php": "^7.1|^8.0", + "phpoffice/math": "^0.2" + }, + "require-dev": { + "dompdf/dompdf": "^2.0 || ^3.0", + "ext-libxml": "*", + "friendsofphp/php-cs-fixer": "^3.3", + "mpdf/mpdf": "^7.0 || ^8.0", + "phpmd/phpmd": "^2.13", + "phpstan/phpstan": "^0.12.88 || ^1.0.0", + "phpstan/phpstan-phpunit": "^1.0 || ^2.0", + "phpunit/phpunit": ">=7.0", + "symfony/process": "^4.4 || ^5.0", + "tecnickcom/tcpdf": "^6.5" + }, + "suggest": { + "dompdf/dompdf": "Allows writing PDF", + "ext-xmlwriter": "Allows writing OOXML and ODF", + "ext-xsl": "Allows applying XSL style sheet to headers, to main document part, and to footers of an OOXML template" + }, + "default-branch": true, + "type": "library", + "autoload": { + "psr-4": { + "PhpOffice\\PhpWord\\": "src/PhpWord" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-only" + ], + "authors": [ + { + "name": "Mark Baker" + }, + { + "name": "Gabriel Bull", + "email": "me@gabrielbull.com", + "homepage": "http://gabrielbull.com/" + }, + { + "name": "Franck Lefevre", + "homepage": "https://rootslabs.net/blog/" + }, + { + "name": "Ivan Lanin", + "homepage": "http://ivan.lanin.org" + }, + { + "name": "Roman Syroeshko", + "homepage": "http://ru.linkedin.com/pub/roman-syroeshko/34/a53/994/" + }, + { + "name": "Antoine de Troostembergh" + } + ], + "description": "PHPWord - A pure PHP library for reading and writing word processing documents (OOXML, ODF, RTF, HTML, PDF)", + "homepage": "https://phpoffice.github.io/PHPWord/", + "keywords": [ + "ISO IEC 29500", + "OOXML", + "Office Open XML", + "OpenDocument", + "OpenXML", + "PhpOffice", + "PhpWord", + "Rich Text Format", + "WordprocessingML", + "doc", + "docx", + "html", + "odf", + "odt", + "office", + "pdf", + "php", + "reader", + "rtf", + "template", + "template processor", + "word", + "writer" + ], + "support": { + "issues": "https://github.com/PHPOffice/PHPWord/issues", + "source": "https://github.com/PHPOffice/PHPWord/tree/master" + }, + "time": "2025-02-20T20:19:21+00:00" + }, { "name": "phpoption/phpoption", "version": "1.9.3", @@ -14014,7 +14175,8 @@ "stability-flags": { "eolica/nova-locale-switcher": 20, "nurmuhammet/nova-custom-html": 20, - "outl1ne/nova-grid": 20 + "outl1ne/nova-grid": 20, + "phpoffice/phpword": 20 }, "prefer-stable": true, "prefer-lowest": false, diff --git a/database/migrations/2025_05_29_151031_card_requisites_card_type_id_null.php b/database/migrations/2025_05_29_151031_card_requisites_card_type_id_null.php new file mode 100644 index 0000000..627b788 --- /dev/null +++ b/database/migrations/2025_05_29_151031_card_requisites_card_type_id_null.php @@ -0,0 +1,39 @@ +string('card_month')->nullable(); + $table->string('card_year')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + DB::statement(' + ALTER TABLE "public"."card_requisites" ALTER COLUMN "card_type_id" SET NOT NULL; + '); + + Schema::table('card_requisites', function (Blueprint $table) { + $table->dropColumn('card_month'); + $table->dropColumn('card_year'); + }); + } +};