This commit is contained in:
2025-11-10 19:18:53 +05:00
parent 8c24f00382
commit 0da1efe5c3
5 changed files with 119 additions and 105 deletions

View File

@@ -4,7 +4,9 @@ namespace App\Filament\Clusters\VisaMasterPayments\Resources\VisaMasterPaymentOr
use App\Modules\FilamentPermission\Repositories\FilamentPermissionRepository; use App\Modules\FilamentPermission\Repositories\FilamentPermissionRepository;
use App\Modules\OrderStatus\Repositories\OrderStatusRepository; use App\Modules\OrderStatus\Repositories\OrderStatusRepository;
use App\Modules\PhoneNumberVerification\Rules\PhoneNumberVerificationRule;
use App\Modules\Region\Repositories\RegionRepository; use App\Modules\Region\Repositories\RegionRepository;
use App\Modules\TurkmenPassport\Repositories\TurkmenPassportRepository;
use App\Modules\VisaMasterPaymentOrder\Models\VisaMasterPaymentOrder; use App\Modules\VisaMasterPaymentOrder\Models\VisaMasterPaymentOrder;
use Filament\Forms\Components\FileUpload; use Filament\Forms\Components\FileUpload;
use Filament\Forms\Components\Hidden; use Filament\Forms\Components\Hidden;
@@ -15,6 +17,7 @@ use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\TextInput; use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Toggle; use Filament\Forms\Components\Toggle;
use Filament\Schemas\Components\Fieldset; use Filament\Schemas\Components\Fieldset;
use Filament\Schemas\Components\FusedGroup;
use Filament\Schemas\Components\Section; use Filament\Schemas\Components\Section;
use Filament\Schemas\Components\Wizard; use Filament\Schemas\Components\Wizard;
use Filament\Schemas\Components\Wizard\Step; use Filament\Schemas\Components\Wizard\Step;
@@ -57,123 +60,118 @@ class VisaMasterPaymentOrderForm
]), ]),
Wizard::make([ Wizard::make([
Step::make(__('Order type and bank')) // Step::make(__('Order type and bank'))
// ->schema([
// Fieldset::make(__('Order type'))
// ->schema([
// Select::make('type')
// ->label(__('Type'))
// ->options(VisaMasterPaymentOrder::applicationTypes())
// ->native(false)
// ->required(),
// ]),
// Fieldset::make(__('Location'))
// ->schema([
// Select::make('region')
// ->label(__('Region'))
// ->options(RegionRepository::values())
// ->live()
// ->afterStateUpdated(fn (callable $set) => $set('branch_id', null))
// ->required(),
// Select::make('branch_id')
// ->label(__('Branch'))
// ->relationship('branch', 'name', function ($query, callable $get) {
// $query->orderByTranslation('name');
// $region = $get('region');
// if ($region) {
// $query->where('region', $region);
// }
// })
// ->required(),
// ]),
// ]),
Step::make(__('Payment sender data'))
->columns(8)
->schema([ ->schema([
Fieldset::make(__('Order type')) TextInput::make('sender_full_name')
->schema([ ->label(__('Name, Surname, Patronic name'))
Select::make('type') ->columnSpan(4)
->label(__('Type')) ->default(user()->fullName())
->options(VisaMasterPaymentOrder::applicationTypes()) ->required(),
->native(false)
->required(),
]),
Fieldset::make(__('Location')) FusedGroup::make([
->schema([ Select::make('sender_passport_serie')
Select::make('region') ->label(__('Passport serie'))
->label(__('Region')) ->options(TurkmenPassportRepository::values())
->options(RegionRepository::values()) ->native(false)
->live() ->required()
->afterStateUpdated(fn (callable $set) => $set('branch_id', null)) ->columnSpan(1)
->required(), ->default(user()->getOption('passport_serie')),
Select::make('branch_id') TextInput::make('sender_passport_number')
->label(__('Branch')) ->label(__('Passport number'))
->relationship('branch', 'name', function ($query, callable $get) { ->required()
$query->orderByTranslation('name'); ->columnSpan(1)
->mask('999999')
$region = $get('region'); ->default(user()->getOption('passport_id')),
if ($region) { ])
$query->where('region', $region); ->columnSpan(2)
} ->label(__('Passport serie and number'))
}) ->columns(2),
->required(),
]),
]),
Step::make(__('Personal information'))
->columns(2)
->schema([
TextInput::make('passport_name')
->label(__('Name'))
->required()
->maxLength(255),
TextInput::make('passport_surname')
->label(__('Surname'))
->required()
->maxLength(255),
TextInput::make('phone') TextInput::make('phone')
->label(__('Phone')) ->label(__('Phone'))
->required() ->required()
->tel(), ->mask('99 99 99 99')
->prefix('+993')
TextInput::make('email') ->rules([
->label(__('Email')) new PhoneNumberVerificationRule,
->email(), ])
->columnSpan(2)
Select::make('region') ->default(user()->phone),
->label(__('Region'))
->options(RegionRepository::values())
->native(false)
->required(),
Textarea::make('address')
->label(__('Address'))
->columnSpanFull(),
]),
Step::make(__('Sender information'))
->schema([
TextInput::make('sender_full_name')
->label(__('Sender full name'))
->required(),
TextInput::make('sender_passport_serie')
->label(__('Sender passport serie'))
->required(),
TextInput::make('sender_passport_number')
->label(__('Sender passport number'))
->required(),
TextInput::make('sender_deposit_account') TextInput::make('sender_deposit_account')
->label(__('Sender deposit account')) ->label(__('Deposit account'))
->columnSpan(4)
->required(),
TextInput::make('address')
->label(__('Address'))
->columnSpan(4)
->required(), ->required(),
]), ]),
Step::make(__('JSON data')) Step::make(__('Payee information'))
->columns(8)
->schema([ ->schema([
KeyValue::make('sender_datas') TextInput::make('reciever_full_name')
->label(__('Sender data')), ->label(__('Name, Surname, Patronic name'))
->columnSpan(5)
->required(),
KeyValue::make('payment_reciever') FusedGroup::make([
->label(__('Payment receiver')), Select::make('reciever_passport_serie')
->label(__('Passport serie'))
->options(TurkmenPassportRepository::values())
->native(false)
->required()
->columnSpan(1),
TextInput::make('reciever_passport_number')
->label(__('Passport number'))
->required()
->columnSpan(1)
->mask('999999'),
])
->columnSpan(3)
->label(__('Passport serie and number'))
->columns(2),
]), ]),
Step::make(__('Receiver documents')) ])->columnSpanFull()->skippable(),
->schema(
collect(VisaMasterPaymentOrder::reciverFiles())
->map(function (array $file) {
return FileUpload::make('documents.'.$file['code'])
->label($file['name'])
->required($file['required']);
})
->toArray()
),
Step::make(__('Sender documents'))
->schema(
collect(VisaMasterPaymentOrder::senderFiles())
->map(function (array $file) {
return FileUpload::make('documents.sender.'.$file['code'])
->label($file['name'])
->required($file['required']);
})
->toArray()
),
])->columnSpanFull(),
]); ]);
} }
} }

View File

@@ -14,7 +14,6 @@ use App\Modules\VisaMasterPaymentOrder\Models\VisaMasterPaymentOrder;
use BackedEnum; use BackedEnum;
use Filament\Resources\Resource; use Filament\Resources\Resource;
use Filament\Schemas\Schema; use Filament\Schemas\Schema;
use Filament\Support\Icons\Heroicon;
use Filament\Tables\Table; use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope; use Illuminate\Database\Eloquent\SoftDeletingScope;
@@ -29,6 +28,8 @@ class VisaMasterPaymentOrderResource extends Resource
protected static ?string $recordTitleAttribute = 'id'; protected static ?string $recordTitleAttribute = 'id';
protected static string|BackedEnum|null $navigationIcon = 'icon-visa-plain';
public static function getNavigationGroup(): ?string public static function getNavigationGroup(): ?string
{ {
return __('Visa/Master payments'); return __('Visa/Master payments');

View File

@@ -83,4 +83,12 @@ trait UserAdjustments
{ {
return $this->hasMany(UserBranch::class); return $this->hasMany(UserBranch::class);
} }
/**
* Full name
*/
public function fullName(): string
{
return sprintf('%s %s', $this->first_name, $this->last_name);
}
} }

View File

@@ -41,6 +41,11 @@ return new class extends Migration
$table->string('sender_passport_number')->nullable(); $table->string('sender_passport_number')->nullable();
$table->string('sender_deposit_account')->nullable(); $table->string('sender_deposit_account')->nullable();
$table->string('reciever_full_name')->nullable();
$table->string('reciever_passport_serie')->nullable();
$table->string('reciever_passport_number')->nullable();
$table->string('reciever_deposit_account')->nullable();
$table->boolean('paid')->default(true); $table->boolean('paid')->default(true);
$table->softDeletes(); $table->softDeletes();

View File

@@ -572,9 +572,8 @@
"Please, now verify your phone number to continue": "Dowam etmek üçin telefon belgiňizi tassyklaň", "Please, now verify your phone number to continue": "Dowam etmek üçin telefon belgiňizi tassyklaň",
"Swift payments": "Swift tölegler", "Swift payments": "Swift tölegler",
"Swift payment": "Swift töleg", "Swift payment": "Swift töleg",
"International payments": "Halkara tölegler",
"Visa, Master, Sber, WU": "Visa, Master, Sber, WU", "Visa, Master, Sber, WU": "Visa, Master, Sber, WU",
"Visa/Master payment": "Visa/Master tölegler", "Visa/Master payment": "Visa/Master töleg",
"Visa/Master payments": "Visa/Master tölegleri", "Visa/Master payments": "Visa/Master tölegleri",
"For students": "Talyplar üçin", "For students": "Talyplar üçin",
"Application type": "Ýüztutmanyň görnüşi", "Application type": "Ýüztutmanyň görnüşi",
@@ -700,5 +699,8 @@
"Order type and bank": "Ýüztutmanyň görnüşi we bank", "Order type and bank": "Ýüztutmanyň görnüşi we bank",
"Order type": "Ýüztutmanyň görnüşi", "Order type": "Ýüztutmanyň görnüşi",
"Type": "Görnüş", "Type": "Görnüş",
"International payments": "Halkara tölegler" "International payments": "Halkara tölegler",
"Order details": "Sargyt barada",
"Name, Surname, Patronic name": "Ady, Familiýasy, Atasynyň ady",
"Deposit account": "Goýum hasaby"
} }