*/ public static $model = \App\Modules\SberPaymentOrder\Models\SberPaymentOrder::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', 'passport_name', 'passport_surname', 'phone', ]; /** * The relationships that should be eager loaded on index queries. * * @var array */ public static $with = ['branch', 'paymentItems']; /** * Indicates whether the resource should automatically poll for new resources. * * @var bool */ public static $polling = true; /** * The interval at which Nova should poll for new resources. * * @var int */ public static $pollingInterval = 120; /** * Indicates whether to show the polling toggle button inside Nova. * * @var bool */ public static $showPollingToggle = true; /** * Get the displayable label of the resource. */ public static function label(): string { return sprintf( '%s (%s)', __('Sber payments'), Str::lower(__('For students')) ); } /** * Get the displayable singular label of the resource. */ public static function singularLabel(): string { return sprintf( '%s (%s)', __('Sber payment'), Str::lower(__('For students')) ); } /** * Build an "index" query for the given resource. * * @param \Illuminate\Database\Eloquent\Builder<\App\Modules\SberPaymentOrder\Models\SberPaymentOrder> $query * @return \Illuminate\Database\Eloquent\Builder<\App\Modules\SberPaymentOrder\Models\SberPaymentOrder> */ public static function indexQuery(NovaRequest $request, mixed $query): Builder { /** @var \App\Models\User $user */ $user = $request->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 { $model->update(['unique_id' => CardOrderRepo::fillUniqueId($model)]); } /** * Get the fields for index. * * @return array */ public function fieldsForIndex(): array { return SberPaymentOrderFieldsForIndex::make($this); } /** * Get the fields for detail * * @return array> */ public function fieldsForDetail(): array { return SberPaymentOrderFieldsForDetail::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 [ new Panel(__('Status'), [ ID::make() ->hideFromDetail(), BelongsTo::make(__('User'), 'user', User::class) ->searchable() ->fullWidth() ->showCreateRelationButton(), Text::make(__('ID'), 'unique_id') ->exceptOnForms(), Select::make(__('Status'), 'status') ->displayUsingLabels() ->searchable() ->options(OrderRepo::statusValues()) ->default(OrderRepo::defaultStatus()) ->fullWidth() ->hideFromDetail() ->rules('required') ->canSeeWhen('systemUser', $this), Badge::make(__('Status'), 'status') ->map(OrderRepo::statusClasses()) ->addTypes([ 'primary' => 'dark:bg-gray-900 bg-gray-600 text-white', ]) ->labels(OrderRepo::statusValues()) ->withIcons() ->icons(OrderRepo::statusIcons()), Text::make(__('Note'), 'notes') ->fullWidth() ->canSeeWhen('systemUser', $this), ]), new Panel(__('Location'), [ Select::make(__('Region'), 'region') ->fullWidth() ->displayUsingLabels() ->searchable() ->options(RegionRepo::values()) ->default(RegionRepo::default()) ->rules('required') ->sortable(), Select::make(__('Branch'), 'branch_id') ->fullWidth() ->displayUsingLabels() ->searchable() ->dependsOn('region', NovaRepo::dependsOnRegion('region', Branch::class)) ->rules('required') ->sortable(), ]), new Panel(__('Personal data'), [ Text::make(__('Passport name'), 'passport_name') ->fullWidth() ->rules('required', 'string', 'max:255'), Text::make(__('Passport surname'), 'passport_surname') ->fullWidth() ->rules('required', 'string', 'max:255'), NovaInputmask::make(__('Phone'), 'phone') ->fullWidth() ->phonenumber('TM') ->rules('required', 'max:255') ->hideFromIndex(), Text::make(__('Email'), 'email') ->fullWidth() ->rules('nullable', 'max:255', 'email') ->hideFromIndex(), Text::make(__('Current Residence'), 'address') ->fullWidth() ->rules('required', 'string', 'max:255') ->hideFromIndex(), ]), new Panel(__('Payment sender data'), [ Select::make(__('Passport serie'), 'sender_passport_serie') ->displayUsingLabels() ->searchable() ->options(PassportRepo::values()) ->rules('required') ->fullWidth() ->sortable(), NovaInputmask::make(__('Passport number'), 'sender_passport_number') ->mask('999999') ->fullWidth() ->rules('required', 'max:255'), Text::make( name: sprintf('%s %s %s', __('Name'), __('Surname'), __('Patronic name')), attribute: 'sender_full_name' ) ->fullWidth() ->rules('required', 'max:255'), Text::make( name: __('Goýum hasaby'), attribute: 'sender_deposit_account' )->fullWidth() ->rules('required', 'digits:15') ->fillUsing(function ($request, $model, $attribute) { $model->sender_deposit_account = strval($request->sender_deposit_account); }), ]), new Panel(__('Payee information'), [ SimpleRepeatable::make(__('Payee information'), 'payment_reciever', [ Select::make(__('Passport serie'), 'passport_serie') ->displayUsingLabels() ->searchable() ->options(PassportRepo::values()) ->rules('required') ->sortable(), NovaInputmask::make(__('Passport number'), 'passport_number') ->mask('999999') ->rules('required', 'max:255'), Text::make( name: sprintf('%s %s %s', __('Name'), __('Surname'), __('Patronic name')), attribute: 'full_name' )->rules('required', 'max:255'), ])->maxRows(1)->minRows(1)->rules('required'), ]), new Panel(__('Reciver files'), [ Files::make('Talyba degişli walýuta “SBERBANK” kartyň rekwizitleri', 'receiver_requisite') ->rules('required'), Files::make('Talybyň daşary ýurt döwletiniň ýokary okuw mekdebinde okaýandygy baradaky güwänamasy', 'receiver_document_stating_he_is_studying'), Files::make('Talybyň bilediniň göçürmesi', 'receiver_receiver_ticket'), Files::make('Talyba degişli Türkmenistanyň raýatynyň (içki milli) pasportynyň asyl görnüşi we göçürmesi', 'receiver_passport_local'), Files::make('Talybyň Türkmenistandan çykmak we Türkmenistana girmek üçin (zagran) pasportynyň göçürmesi', 'receiver_passport_international'), Files::make('Talybyň Türkmenistandan çykmak we Türkmenistana girmek üçin pasportyndaky daşary ýurtda galyp okap bilýändigi baradaky berlen möhleti hereket edýän rugsatnamasynyň (wizasynyň) bellenen sahypasynyň göçürmesi', 'receiver_visa'), Files::make('Talybyň Türkmenistandan çykmak we Türkmenistana girmek üçin pasportyndaky Türkmenistandan çykandygy we daşary ýurt döwletine girendigi baradaky ştamplaryň (seneli ştampyň) bellenen sahypasynyň göçürmesi', 'receiver_travel_stamp_on_passport'), Files::make('Talybyň daşary ýurt döwletiniň ýokary okuw mekdebinde okaýandygy baradaky güwänamasyndaky maglumatyň doly takyk däl ýagdaýynda takyk däl maglumatyň sebäpleri baradaky daşary ýurt döwletiniň ýokary okuw mekdebinden haty', 'receiver_document_stating_he_is_studying_2'), ]), new Panel(__('Sender files'), [ Files::make('Ugradyja degişli Türkmenistanyň raýatynyň (içki milli) pasportynyň asyl görnüşi we göçürmesi', 'sender_passport_local'), Files::make('Ugradyja degişli Türkmenistandan çykmak we Türkmenistana girmek üçin pasportynyň asyl görnüşi we göçürmesi', 'sender_passport_international'), Files::make('Ugradyja degişli Türkmenistandan çykmak we Türkmenistana girmek üçin pasportyndaky daşary döwletine gidendigi we daşary döwlete barandygy baradaky (ştampyň) bellenen sahypasynyň göçürmesi', 'sender_travel_stamp_on_passport'), Files::make('Ugradyjynyň we kabul edijiniň (talybyň) özara garyndaşlyk derejesini tassyklaýjy resminamalarynyň göçürmesi', 'sender_proof_of_kinship'), Files::make('Ugradyjy we kabul ediji (talyp) 2015-nji ýyldan soňra Türkmenistanyň raýatynyň pasportyny ikinji gezek alan bolsa, onda birinji gezek alan pasportynyň seriýasy baradaky maglumat', 'sender_passport_local_old'), Files::make('Ugradyjy we kabul ediji (talyp) 2015-nji ýyldan soňra Türkmenistanyň raýatynyň pasportyny ikinji gezek alandan soňra birinji gezek alan pasportynyň seriýasy baradaky maglumaty bilmeýän ,bolsa onda polisiýanyň degişli edaralaryndan birinji alan pasportynyň seriýasy baradaky güwänamasy', 'sender_passport_local_old_replacement'), ]), HasMany::make(__('Payment items'), 'paymentItems', NovaSberPaymentOrderItem::class), ]; } /** * Actions * * @param NovaRequest $request * @return array */ public function actions(NovaRequest $request): array { return [ // MakeSberPaymentAction::make() // ->icon('credit-card') // ->sole() // ->canSee(function ($request) { // /** @var \App\Modules\SberPaymentOrder\Models\SberPaymentOrder $resource */ // $resource = $this->resource; // if (in_array($resource->status, [ // OrderRepo::PENDING, // OrderRepo::CANCELLED, // ])) { // return false; // } // return true; // }), ]; } /** * Get the cards available for the request. * * @return array */ public function cards(NovaRequest $request) { return [ new NovaDetachedFilters($this->myFilters()), ]; } /** * Get the filters available for the resource. * * @return array */ public function filters(NovaRequest $request) { return $this->myFilters(); } /** * All of my filters are here * * @return array */ public function myFilters(): array { return [ VisaMasterMonthlyPaidFilter::make('sber_payment_orders'), ]; } }