From cc880de2c77b74d2101957a054489a6b43b53212 Mon Sep 17 00:00:00 2001 From: Nurmuhammet Allanov Date: Tue, 5 Mar 2024 10:16:38 +0500 Subject: [PATCH] online card --- .../Order/Card/Requisite/CardRequisite.php | 77 +++++ .../Order/Card/Requisite/CardRequisite.php | 322 ++++++++++++++++++ app/Providers/NovaServiceProvider.php | 4 +- ...02_102539_create_card_requisites_table.php | 58 ++++ lang/tk.json | 5 +- resources/css/vendor/nova/css/additional.css | 7 +- 6 files changed, 470 insertions(+), 3 deletions(-) create mode 100644 app/Models/Order/Card/Requisite/CardRequisite.php create mode 100644 app/Nova/Resources/Order/Card/Requisite/CardRequisite.php create mode 100644 database/migrations/2024_03_02_102539_create_card_requisites_table.php diff --git a/app/Models/Order/Card/Requisite/CardRequisite.php b/app/Models/Order/Card/Requisite/CardRequisite.php new file mode 100644 index 0000000..f707430 --- /dev/null +++ b/app/Models/Order/Card/Requisite/CardRequisite.php @@ -0,0 +1,77 @@ + + */ + protected $fillable = [ + 'unique_id', + 'card_type_id', + 'card_number', + 'region', + 'branch_id', + 'customer_name', + 'customer_surname', + 'customer_patronic_name', + 'born_at', + 'phone', + 'passport_serie', + 'passport_id', + 'status', + 'passport_one', + 'passport_two', + 'passport_three', + 'passport_four', + 'notes', + 'user_id', + ]; + + /** + * The attributes that should be cast. + * + * @var array + */ + protected $casts = [ + 'born_at' => 'date', + ]; + + /** + * User + */ + public function user(): BelongsTo + { + return $this->belongsTo(User::class); + } + + /** + * Card type + */ + public function cardType(): BelongsTo + { + return $this->belongsTo(CardType::class, 'card_type_id'); + } + + /** + * Branch + */ + public function branch(): BelongsTo + { + return $this->belongsTo(Branch::class, 'branch_id'); + } +} diff --git a/app/Nova/Resources/Order/Card/Requisite/CardRequisite.php b/app/Nova/Resources/Order/Card/Requisite/CardRequisite.php new file mode 100644 index 0000000..502782f --- /dev/null +++ b/app/Nova/Resources/Order/Card/Requisite/CardRequisite.php @@ -0,0 +1,322 @@ +user(); + + if ($user->isAdmin()) { + return $query; + } + + if ($user->isOperator()) { + return $query->whereIn('branch_id', $user->branches()->pluck('branches.id')); + } + + return $query->where('user_id', $request->user()->id); + } + + /** + * After resource created + * + * @param Laravel\Nova\Http\Requests\NovaRequest $request + * @param Illuminate\Database\Eloquent\Model $model + */ + public static function afterCreate(NovaRequest $request, Model $model): void + { + // CardOrderRepo::created()($model); + } + + /** + * Get the fields for index. + */ + // public function fieldsForIndex(NovaRequest $request): array + // { + // return CardOrderFieldsForIndex::make($this); + // } + + // /** + // * Get the fields for detail + // */ + // public function fieldsForDetail(): array + // { + // return CardOrderFieldsForDetail::make($this); + // } + + /** + * 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(__('Status'), 'status') + ->displayUsingLabels() + ->searchable() + ->options(OrderRepo::statusValues()) + ->default(OrderRepo::defaultStatus()) + ->fullWidth() + ->rules('required') + ->canSeeWhen('systemUser', $this), + + Text::make(__('Note'), 'notes') + ->fullWidth() + ->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'), + ]), + + new Panel(__('Location'), [ + Select::make(__('Region'), 'region') + ->displayUsingLabels() + ->searchable() + ->options(RegionRepo::values()) + ->default(RegionRepo::default()) + ->size('w-1/2') + ->rules('required'), + + Select::make(__('Branch'), 'branch_id') + ->displayUsingLabels() + ->searchable() + ->dependsOn('region', NovaRepo::dependsOnRegion('region', Branch::class)) + ->size('w-1/2') + ->rules('required'), + ]), + + new Panel(__('Personal data'), [ + Text::make(__('Name'), 'customer_name') + ->size('w-1/3') + ->rules('required', 'string', new OnlyLetters(), 'max:255'), + + Text::make(__('Surname'), 'customer_surname') + ->size('w-1/3') + ->rules('required', 'string', new OnlyLetters(), 'max:255'), + + Text::make(__('Patronic name'), 'customer_patronic_name') + ->size('w-1/3') + ->rules('required', 'string', new OnlyLetters(), 'max:255'), + + Date::make(__('Date of birth'), 'born_at') + ->size('w-1/2') + ->rules('required', 'before_or_equal:today'), + + NovaInputmask::make(__('Phone'), 'phone') + ->mask('+(\\9\\93)-99-99-99-99') + ->storeRawValue() + ->size('w-1/2') + ->rules('required', 'integer', 'between:61000000, 71999999'), + ]), + + new Panel(__('Passport'), [ + Select::make(__('Passport serie'), 'passport_serie') + ->displayUsingLabels() + ->searchable() + ->options(PassportRepo::values()) + ->size('w-1/2') + ->rules('required'), + + Number::make(__('Passport id'), 'passport_id') + ->size('w-1/2') + ->rules('required', 'numeric', 'digits:6'), + + Image::make(__('Passport (page 1)'), 'passport_one') + ->size('w-1/2') + ->deletable(false) + ->rules('max:2048', 'mimes:jpg,png,jpeg') + ->creationRules('required') + ->updateRules('nullable'), + + Image::make(__('Passport (page 2-3)'), 'passport_two') + ->size('w-1/2') + ->deletable(false) + ->rules('max:2048', 'mimes:jpg,png,jpeg') + ->creationRules('required') + ->updateRules('nullable'), + + Image::make(__('Passport (page 8-9)'), 'passport_three') + ->size('w-1/2') + ->deletable(false) + ->rules('max:2048', 'mimes:jpg,png,jpeg') + ->creationRules('required') + ->updateRules('nullable'), + + Image::make(__('Passport (page 32)'), 'passport_four') + ->size('w-1/2') + ->deletable(false) + ->rules('max:2048', 'mimes:jpg,png,jpeg') + ->creationRules('required') + ->updateRules('nullable'), + ]), + ]; + } + + /** + * 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 [ + RegionFilter::make() + ->canSee(fn () => Gate::allows('isAdmin'), auth()->user()), + + new StatusFilter(), + ]; + } + + /** + * 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 []; + } +} diff --git a/app/Providers/NovaServiceProvider.php b/app/Providers/NovaServiceProvider.php index f75485c..077333f 100644 --- a/app/Providers/NovaServiceProvider.php +++ b/app/Providers/NovaServiceProvider.php @@ -7,6 +7,7 @@ use App\Nova\Resources\Branch\Branch; use App\Nova\Resources\Order\Card\CardOrder; use App\Nova\Resources\Order\Card\CardState; use App\Nova\Resources\Order\Card\CardType; +use App\Nova\Resources\Order\Card\Requisite\CardRequisite; use App\Nova\Resources\Order\Loan\LoanOrder; use App\Nova\Resources\Order\Loan\LoanType; use App\Nova\Resources\System\Location\Province; @@ -121,7 +122,8 @@ class NovaServiceProvider extends NovaApplicationServiceProvider ])->collapsedByDefault(), MenuGroup::make(__('Card department'), [ - MenuItem::resource(CardOrder::class), + MenuItem::resource(CardOrder::class)->name(__('Order new card')), + MenuItem::resource(CardRequisite::class), ])->collapsedByDefault(), ])->icon('ticket')->collapsedByDefault(), diff --git a/database/migrations/2024_03_02_102539_create_card_requisites_table.php b/database/migrations/2024_03_02_102539_create_card_requisites_table.php new file mode 100644 index 0000000..c2185b5 --- /dev/null +++ b/database/migrations/2024_03_02_102539_create_card_requisites_table.php @@ -0,0 +1,58 @@ +id(); + $table->string('unique_id')->nullable()->unique(); + + $table->foreignId('card_type_id')->constrained()->restrictOnDelete(); + $table->string('card_number'); + + $table->string('region', 2)->index(); + $table->foreignId('branch_id')->constrained('branches')->restrictOnDelete(); + + $table->string('customer_name')->index(); + $table->string('customer_surname')->index(); + $table->string('customer_patronic_name')->nullable(); + $table->date('born_at')->nullable(); + + $table->string('phone')->nullable()->index(); + + $table->string('passport_serie')->index(); + $table->string('passport_id')->index(); + + $table->string('status')->nullable()->default(OrderRepo::defaultStatus())->index(); + + $table->text('passport_one')->nullable(); + $table->text('passport_two')->nullable(); + $table->text('passport_three')->nullable(); + $table->text('passport_four')->nullable(); + + $table->text('notes')->nullable(); + + $table->foreignId('user_id')->constrained('users')->restrictOnDelete(); + + $table->timestamps(); + $table->softDeletes(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('card_requisites'); + } +}; diff --git a/lang/tk.json b/lang/tk.json index 6b56cd2..a944b4f 100644 --- a/lang/tk.json +++ b/lang/tk.json @@ -260,5 +260,8 @@ "Payment has failed": "Töleg geçmedi", "Help": "Kömek", "Successfully logged in": "Üstünlik bilen girdiňiz", - "Please wait while we redirect you to your personal account": "Şahsy hasabyňyza geçýänçä garaşyň" + "Please wait while we redirect you to your personal account": "Şahsy hasabyňyza geçýänçä garaşyň", + "Order new card": "Täze kart açmak", + "Card requisite": "Kart rekwizit", + "Card requisites": "Kart rekwizitler" } diff --git a/resources/css/vendor/nova/css/additional.css b/resources/css/vendor/nova/css/additional.css index 4a149cd..7573efe 100644 --- a/resources/css/vendor/nova/css/additional.css +++ b/resources/css/vendor/nova/css/additional.css @@ -1,5 +1,10 @@ .nova-grid--field-wrapper { - border-color: rgba(0, 0, 0, 0) !important; + border-top-color: rgba(0, 0, 0, 0) !important; + border-right-color: rgba(0, 0, 0, 0) !important; + border-bottom-color: rgba(0, 0, 0, 0) !important; + border-left-color: rgba(0, 0, 0, 0) !important; + +/* border-bottom: 1px solid rgb(51,65,85) !important;*/ } input {