add swiftpayments from old source

This commit is contained in:
2024-09-01 17:06:49 +05:00
parent 9d65fa72b6
commit a5978835d0
27 changed files with 1822 additions and 141 deletions

View File

@@ -0,0 +1,46 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('swift_payments', function (Blueprint $table) {
$table->uuid('id');
$table->string('type')->nullable();
$table->string('passport_name')->nullable();
$table->string('passport_surname')->nullable();
$table->string('phone')->nullable();
$table->string('email')->nullable();
$table->string('region')->nullable();
$table->foreignId('branch_id')->nullable()->constrained('branches')->cascadeOnDelete();
$table->foreignId('user_id')->nullable()->constrained('users')->cascadeOnDelete();
$table->string('address')->nullable();
$table->json('sender_datas')->nullable();
$table->json('payment_reciever')->nullable();
$table->json('documents')->nullable();
$table->string('status')->nullable();
$table->string('notes')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
//
}
};

View File

@@ -0,0 +1,69 @@
<?php
namespace App\Modules\Swiftpayment\Models;
class ApplicationTypes
{
const STUDENT = 'student';
const STUDENT_VISA_MASTER_OTHER = 'student_visa_master_other';
const PATIENT = 'patient';
const PATIENT_VISA_MASTER_OTHER = 'patient_visa_master_other';
const VESTERN_UNION = 'vestern_union';
public static function applicationTypes()
{
return [
self::STUDENT => __('Talyp töleg'),
self::STUDENT_VISA_MASTER_OTHER => __('Talyp VISA/MASTER we beýleki'),
self::PATIENT => __('Hassa töleg'),
self::PATIENT_VISA_MASTER_OTHER => __('Hassa VISA/MASTER we beýleki'),
self::VESTERN_UNION => __('Halkara WesternUnion pul geçirim ulgamy'),
];
}
public static function applicationTypeFiles()
{
return [
self::STUDENT => [
'Daşary ýurt döwletiniň ýokary okuw mekdebinde okaýandygy baradaky güwänamasy',
'Daşary ýurt döwletiniň ýokary okuw mekdebi bilen talybyň arasynda baglaşylan şertnama',
'Daşary ýurt döwletiniň ýokary okuw mekdebi tarapyndan töleg üçin ýazylan hasap-nyrhnama',
'Talybyň Türkmenistandan gitmek we Türkmenistana gelmek üçin pasportyndaky ýurdumyzdan çykandygy we daşary ýurda gidendigi baradaky degişli edaralaryň bellikleri bolan sahypalarynyň göçürmesi',
'Talybyň garyndaşlarynyň garyndaşlyk derejesini tassyklaýjy resminamalary we pasportlar',
],
self::STUDENT_VISA_MASTER_OTHER => [
'Daşary ýurt döwletiniň ýokary okuw mekdebinde okaýandygy baradaky güwänamasy',
'Talybyň Türkmenistandan gitmek we Türkmenistana gelmek üçin pasportyndaky ýurdumyzdan çykandygy we daşary ýurda gidendigi baradaky degişli edaralaryň bellikleri bolan sahypalarynyň göçürmesi',
'Talybyň garyndaşlary ýüzlenen ýagdaýynda garyndaşlyk derejesini tassyklaýjy resminama',
],
self::PATIENT => [
'Türkmenistanyň Saglygy goraýyş we derman senagaty ministrliginiň Türkmenistanyň çäginden daşarda saglygynyň barlanmagynyň we bejerilmeginiň zerurlygy baradaky netijenamasy',
'Daşary ýurt saglygy goraýyş edarasy bilen hassanyň arasynda baglaşylan şertnama',
'Daşary ýurt saglygy goraýyş edarasy tarapyndan töleg üçin ýazylan hasap-nyrhnama',
'Talybyň Türkmenistandan gitmek we Türkmenistana gelmek üçin pasportyndaky ýurdumyzdan çykandygy we daşary ýurda gidendigi baradaky degişli edaralaryň bellikleri bolan sahypalarynyň göçürmesi',
'Hassanyň garyndaşlarynyň garyndaşlyk derejesini tassyklaýjy resminamalar we pasportlar',
],
self::PATIENT_VISA_MASTER_OTHER => [
'Türkmenistanyň Saglygy goraýyş we derman senagaty ministrliginiň Türkmenistanyň çäginden daşarda saglygynyň barlanmagynyň we bejerilmeginiň zerurlygy baradaky netijenamasy',
'Talybyň Türkmenistandan gitmek we Türkmenistana gelmek üçin pasportyndaky ýurdumyzdan çykandygy we daşary ýurda gidendigi baradaky degişli edaralaryň bellikleri bolan sahypalarynyň göçürmesi',
'Hassanyň garyndaşlarynyň garyndaşlyk derejesini tassyklaýjy resminamalar we pasportlar',
],
self::VESTERN_UNION => [
'Daşary ýurt döwletiniň bilim edarasynda okaýandygy baradaky güwänamasy',
'Maşgala agzalygy tassyklaýjy resminama',
'Talybyň Türkmenistandan gitmek we Türkmenistana gelmek üçin pasportyndaky ýurdumyzdan çykandygy we daşary ýurda gidendigi baradaky degişli edaralaryň bellikleri bolan sahypalarynyň göçürmesi',
],
];
}
public static function filesFor($type)
{
return view('nova.swiftpayments.required-files', [
'files' => static::applicationTypeFiles()[$type] ?? [],
])->render();
}
}

View File

@@ -0,0 +1,49 @@
<?php
namespace App\Modules\Swiftpayment\Models;
class SwiftPaymentStatus
{
const PENDING = 'pending';
const REGISTER = 'register';
const PROGRESS = 'progress';
const COMPLETED = 'completed';
const CANCELLED = 'cancelled';
public static function values(): array
{
return [
self::PENDING => __('Pending'),
self::REGISTER => __('Registered'),
self::PROGRESS => __('On Progress'),
self::COMPLETED => __('Completed'),
self::CANCELLED => __('Cancelled'),
];
}
public static function classes(): array
{
return [
self::PENDING => 'warning',
self::REGISTER => 'info',
self::PROGRESS => 'primary',
self::COMPLETED => 'success',
self::CANCELLED => 'danger',
];
}
public static function colors(): array
{
return [
self::PENDING => '#F5573B',
self::REGISTER => '#F2CB22',
self::PROGRESS => '#098F56',
self::COMPLETED => '#8FC15D',
self::CANCELLED => '#d70206',
];
}
}

View File

@@ -0,0 +1,55 @@
<?php
namespace App\Modules\Swiftpayment\Models;
use App\Models\Branch\Branch;
use Illuminate\Database\Eloquent\Concerns\HasUuids;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
use Spatie\MediaLibrary\MediaCollections\Models\Media;
class Swiftpayment extends Model implements HasMedia
{
use HasUuids;
use InteractsWithMedia;
/**
* The attributes that should be cast.
*
* @var array<string, string>
*/
protected $casts = [
'sender_datas' => 'array',
'payment_reciever' => 'array',
];
/**
* Media conversions
*
* @param Media|null $media
*/
public function registerMediaConversions(?Media $media = null): void
{
$this->addMediaConversion('thumb')
->width(200)
->height(200);
}
/**
* Media collections
*/
public function registerMediaCollections(): void
{
$this->addMediaCollection('main');
}
/**
* Branch
*/
public function branch(): BelongsTo
{
return $this->belongsTo(Branch::class);
}
}

View File

@@ -0,0 +1,185 @@
<?php
namespace App\Modules\Swiftpayment\Nova\Resources;
use App\Models\Branch\Branch;
use App\Modules\Swiftpayment\Models\ApplicationTypes;
use App\Modules\Swiftpayment\Models\SwiftPaymentStatus;
use App\Nova\Resource;
use App\Repos\System\Nova\NovaRepo;
use App\Repos\System\Settings\Legal\PassportRepo;
use App\Repos\System\Settings\Location\RegionRepo;
use Ebess\AdvancedNovaMediaLibrary\Fields\Files;
use Laravel\Nova\Fields\Badge;
use Laravel\Nova\Fields\Hidden;
use Laravel\Nova\Fields\ID;
use Laravel\Nova\Fields\Select;
use Laravel\Nova\Fields\Text;
use Laravel\Nova\Fields\Trix;
use Laravel\Nova\Http\Requests\NovaRequest;
use Nurmuhammet\NovaInputmask\NovaInputmask;
use Outl1ne\NovaSimpleRepeatable\SimpleRepeatable;
/**
* @template TModel of \App\Modules\Swiftpayment\Models\Swiftpayment
*/
class NovaSwiftpayment extends Resource
{
/**
* The model the resource corresponds to.
*
* @var class-string<\App\Modules\Swiftpayment\Models\Swiftpayment>
*/
public static $model = \App\Modules\Swiftpayment\Models\Swiftpayment::class;
/**
* The single value that should be used to represent the resource when being displayed.
*
* @var string
*/
public static $title = 'id';
/**
* The columns that should be searched.
*
* @var array<int, string>
*/
public static $search = [
'id',
];
/**
* Get the displayable label of the resource.
*/
public static function label(): string
{
return __('Swiftpayments');
}
/**
* Get the displayable singular label of the resource.
*/
public static function singularLabel(): string
{
return __('Swiftpayment');
}
/**
* Get the fields displayed by the resource.
*
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @return array<int, \Laravel\Nova\Fields\FieldElement|\Laravel\Nova\Panel>
*/
public function fields(NovaRequest $request): array
{
return [
ID::make('id')->sortable(),
Hidden::make('user_id')->default(auth()->id()),
Select::make(__('Ýüztutmanyň görnüşi'), 'type')
->searchable()
->rules('required')
->displayUsingLabels()
->options(ApplicationTypes::applicationTypes()),
Select::make(__('Region'), 'region')
->displayUsingLabels()
->searchable()
->options(RegionRepo::values())
->default(RegionRepo::default())
->rules('required')
->sortable(),
Select::make(__('Branch'), 'branch_id')
->displayUsingLabels()
->searchable()
->dependsOn('region', NovaRepo::dependsOnRegion('region', Branch::class))
->rules('required')
->sortable(),
Text::make('Pasportdaky ady', 'passport_name')
->rules('required', 'string', 'max:255'),
Text::make('Pasportdaky familiýa', 'passport_surname')
->rules('required', 'string', 'max:255'),
NovaInputmask::make('Telefon belgi', 'phone')
->phonenumber('TM')
->rules('required', 'max:255')
->hideFromIndex(),
Text::make('Email', 'email')
->rules('required', 'max:255', 'email')
->hideFromIndex(),
Text::make('Ýaşaýan ýeriň salgysy', 'address')
->rules('required', 'string', 'max:255')
->hideFromIndex(),
SimpleRepeatable::make('Tölegi ugradyjynyň maglumatlar', 'sender_datas', [
Select::make(__('Passport serie'), 'passport_serie')
->displayUsingLabels()
->searchable()
->options(PassportRepo::values())
->rules('required')
->sortable(),
NovaInputmask::make('Passport nomeri')
->mask('999999')
->rules('required', 'max:255'),
Text::make('A.F.AA'),
])->minRows(1)->rules('required'),
SimpleRepeatable::make('Tölegi kabul edijiniň maglumatlary', 'payment_reciever', [
Select::make(__('Passport serie'), 'passport_serie')
->displayUsingLabels()
->searchable()
->options(PassportRepo::values())
->rules('required')
->sortable(),
NovaInputmask::make('Passport nomeri')
->mask('999999')
->rules('required', 'max:255'),
Text::make('A.F.AA'),
])->maxRows(1)->rules('required'),
// CustomHtml::make(__('Required files'), 'required_files')
// ->onlyOnForms()
// ->fillUsing(function ($request, $model, $attribute, $requestAttribute) {})
// ->dependsOn(['type'], function (CustomHtml $field, NovaRequest $request, FormData $formData) {
// if ($formData->type) {
// $field->html(\App\Models\ApplicationTypes::filesFor($formData->type));
// }
// }),
Files::make('Talap edilýän resminamalar', 'main')
->conversionOnIndexView('thumb')
->rules('required')
->hideFromIndex(),
Badge::make('Status')->map(SwiftPaymentStatus::classes())->addTypes([
'primary' => 'dark:bg-gray-900 bg-gray-600 text-white',
])->labels(SwiftPaymentStatus::values()),
Select::make(__('Status'), 'status')
->onlyOnForms()
->hideWhenCreating()
->displayUsingLabels()
->options(SwiftPaymentStatus::values())
->canSee(function ($request) {
return $request->user()->hasRole(['admin', 'manager', 'operator']);
}),
Trix::make(__('Notes'), 'notes')
->hideWhenCreating()
->alwaysShow()
->readonly(function ($request) {
return ! $request->user()->hasRole(['admin', 'manager', 'operator']);
}),
];
}
}

View File

@@ -0,0 +1,32 @@
<?php
namespace App\Modules\Swiftpayment\Repositories;
use App\Modules\Swiftpayment\Models\Swiftpayment;
use Illuminate\Database\Eloquent\Builder;
class SwiftpaymentRepository
{
/**
* $queryBuilder
*
* @var \Illuminate\Database\Eloquent\Builder<\App\Modules\Swiftpayment\Models\Swiftpayment>
*/
protected Builder $queryBuilder;
/**
* Model
*/
public static function model(): string
{
return Swiftpayment::class;
}
/**
* Product repository
*/
public function __construct()
{
$this->queryBuilder = self::model()::query();
}
}