wip on visa/master payment
This commit is contained in:
@@ -35,24 +35,18 @@ class VisaMasterPaymentOrder extends Model implements HasMedia
|
||||
'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');
|
||||
foreach (static::reciverFiles() as $reciverFile) {
|
||||
$this->addMediaCollection($reciverFile['code'])->singleFile();
|
||||
}
|
||||
|
||||
foreach (static::senderFiles() as $senderFile) {
|
||||
$this->addMediaCollection($senderFile['code'])->singleFile();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -73,4 +67,87 @@ class VisaMasterPaymentOrder extends Model implements HasMedia
|
||||
'master' => __('Master'),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Required files
|
||||
*/
|
||||
public static function reciverFiles(): array
|
||||
{
|
||||
return [
|
||||
[
|
||||
'required' => true,
|
||||
'code' => 'requisite',
|
||||
'name' => 'Talyba degişli walýuta “VISA” kartyň rekwizitleri',
|
||||
],
|
||||
[
|
||||
'required' => false,
|
||||
'code' => 'document_stating_he_is_studying',
|
||||
'name' => 'Talybyň daşary ýurt döwletiniň ýokary okuw mekdebinde okaýandygy baradaky güwänamasy',
|
||||
],
|
||||
[
|
||||
'required' => false,
|
||||
'code' => 'passport_local',
|
||||
'name' => 'Talyba degişli Türkmenistanyň raýatynyň (içki milli) pasportynyň asyl görnüşi we göçürmesi',
|
||||
],
|
||||
[
|
||||
'required' => false,
|
||||
'code' => 'passport_international',
|
||||
'name' => 'Talybyň Türkmenistandan çykmak we Türkmenistana girmek üçin (zagran) pasportynyň göçürmesi',
|
||||
],
|
||||
[
|
||||
'required' => false,
|
||||
'code' => 'visa',
|
||||
'name' => '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',
|
||||
],
|
||||
[
|
||||
'required' => false,
|
||||
'code' => 'travel_stamp_on_passport',
|
||||
'name' => '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',
|
||||
],
|
||||
[
|
||||
'required' => false,
|
||||
'code' => 'document_stating_he_is_studying_2',
|
||||
'name' => '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',
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Sender files
|
||||
*/
|
||||
public static function senderFiles(): array
|
||||
{
|
||||
return [
|
||||
[
|
||||
'required' => true,
|
||||
'code' => 'passport_local',
|
||||
'name' => 'ugradyja degişli Türkmenistanyň raýatynyň (içki milli) pasportynyň asyl görnüşi we göçürmesi',
|
||||
],
|
||||
[
|
||||
'required' => false,
|
||||
'code' => 'passport_international',
|
||||
'name' => 'ugradyja degişli Türkmenistandan çykmak we Türkmenistana girmek üçin pasportynyň asyl görnüşi we göçürmesi',
|
||||
],
|
||||
[
|
||||
'required' => false,
|
||||
'code' => 'travel_stamp_on_passport',
|
||||
'name' => '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',
|
||||
],
|
||||
[
|
||||
'required' => true,
|
||||
'code' => 'proof_of_kinship',
|
||||
'name' => 'ugradyjynyň we kabul edijiniň (talybyň) özara garyndaşlyk derejesini tassyklaýjy resminamalarynyň göçürmesi',
|
||||
],
|
||||
[
|
||||
'required' => false,
|
||||
'code' => 'passport_local_old',
|
||||
'name' => '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',
|
||||
],
|
||||
[
|
||||
'required' => false,
|
||||
'code' => 'passport_local_old_replacement',
|
||||
'name' => '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',
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,6 @@ use App\Repos\Order\OrderRepo;
|
||||
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 Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Support\Str;
|
||||
use Laravel\Nova\Fields\Badge;
|
||||
@@ -104,13 +103,14 @@ class NovaVisaMasterPaymentOrder extends Resource
|
||||
public function fields(NovaRequest $request): array
|
||||
{
|
||||
return [
|
||||
ID::hidden(),
|
||||
new Panel(__('New :resource', ['resource' => $this->singularLabel()]), [
|
||||
ID::make()
|
||||
->hideFromDetail(),
|
||||
|
||||
Hidden::make('user_id')
|
||||
->default(auth()->id())
|
||||
->hideWhenUpdating(),
|
||||
|
||||
new Panel(__('New :resource', ['resource' => $this->singularLabel()]), [
|
||||
Text::make(__('ID'), 'unique_id')
|
||||
->exceptOnForms(),
|
||||
|
||||
@@ -229,13 +229,10 @@ class NovaVisaMasterPaymentOrder extends Resource
|
||||
attribute: 'full_name'
|
||||
),
|
||||
])->maxRows(1)->minRows(1)->rules('required'),
|
||||
|
||||
Files::make('Talap edilýän resminamalar', 'main')
|
||||
->conversionOnIndexView('thumb')
|
||||
->rules('required')
|
||||
->required()
|
||||
->hideFromIndex(),
|
||||
]),
|
||||
|
||||
// new Panel(__('Reciver files'), VisaMasterPaymentOrderFileFields::reciverFiles()),
|
||||
// new Panel(__('Sender files'), VisaMasterPaymentOrderFileFields::senderFiles()),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
namespace App\Modules\VisaMasterPaymentOrder\Nova\Resources;
|
||||
|
||||
use App\Modules\VisaMasterPaymentOrder\Models\VisaMasterPaymentOrder;
|
||||
use Ebess\AdvancedNovaMediaLibrary\Fields\Files;
|
||||
use Laravel\Nova\Fields\File;
|
||||
|
||||
class VisaMasterPaymentOrderFileFields
|
||||
{
|
||||
/**
|
||||
* Reciver files
|
||||
*/
|
||||
public static function reciverFiles(): array
|
||||
{
|
||||
return collect(VisaMasterPaymentOrder::reciverFiles())
|
||||
->map(fn (array $file) => Files::make(__($file['name']), $file['code'])
|
||||
->size('w-1/2')
|
||||
->rules($file['required'] ? 'required' : 'nullable')
|
||||
->required($file['required'])
|
||||
)
|
||||
->toArray();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sender files
|
||||
*/
|
||||
public static function senderFiles(): array
|
||||
{
|
||||
return collect(VisaMasterPaymentOrder::senderFiles())
|
||||
->map(fn (array $file) => Files::make(__($file['name']), $file['code'])
|
||||
->size('w-1/2')
|
||||
->rules($file['required'] ? 'required' : 'nullable')
|
||||
->required($file['required'])
|
||||
)
|
||||
->toArray();
|
||||
}
|
||||
}
|
||||
|
||||
// File::make(__($file['name']), $file['code'])
|
||||
// ->size('w-1/2')
|
||||
// ->deletable(false)
|
||||
// ->rules('max:2048', 'mimes:jpg,png,jpeg')
|
||||
// ->creationRules($file['required'] ? 'required' : 'nullable')
|
||||
// ->updateRules('nullable')
|
||||
42
index.html
Normal file
42
index.html
Normal file
@@ -0,0 +1,42 @@
|
||||
<div id="app">
|
||||
<div v-for="(step, index) in steps" :key="index" v-show="currentStep === index">
|
||||
<h2>Step {{ index + 1 }}</h2>
|
||||
<div v-html="step.content"></div>
|
||||
<button v-if="currentStep > 0" @click="prevStep">Previous</button>
|
||||
<button v-if="currentStep < steps.length - 1" @click="nextStep">Next</button>
|
||||
<button v-if="currentStep === steps.length - 1" @click="submitForm">Submit</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
|
||||
<script>
|
||||
new Vue({
|
||||
el: '#app',
|
||||
data: {
|
||||
currentStep: 0,
|
||||
steps: [
|
||||
{ content: '<div>Step 1 content goes here</div>' },
|
||||
{ content: '<div>Step 2 content goes here</div>' },
|
||||
{ content: '<div>Step 3 content goes here</div>' },
|
||||
{ content: '<div>Step 4 content goes here</div>' },
|
||||
{ content: '<div>Step 5 content goes here</div>' },
|
||||
{ content: '<div>Step 6 content goes here</div>' }
|
||||
]
|
||||
},
|
||||
methods: {
|
||||
nextStep() {
|
||||
if (this.currentStep < this.steps.length - 1) {
|
||||
this.currentStep++;
|
||||
}
|
||||
},
|
||||
prevStep() {
|
||||
if (this.currentStep > 0) {
|
||||
this.currentStep--;
|
||||
}
|
||||
},
|
||||
submitForm() {
|
||||
alert('Form submitted!');
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
168
resources/js/vendor/nova/js/additional.js
vendored
168
resources/js/vendor/nova/js/additional.js
vendored
@@ -0,0 +1,168 @@
|
||||
// window.LaravelNovaWizardStore = {
|
||||
// data: {
|
||||
// steps: 0,
|
||||
// currentStep: 1,
|
||||
// },
|
||||
|
||||
// fields: {
|
||||
// buttonsContainerElement: {},
|
||||
// cancelFormButton: {},
|
||||
// createFormButton: {},
|
||||
// prevButtonElement: {},
|
||||
// nextButtonElement: {},
|
||||
// },
|
||||
|
||||
// nextStep() {
|
||||
// if (this.data.steps > 0 && this.data.currentStep < this.data.steps) {
|
||||
// document.querySelector(`div[wizard-step="${this.data.currentStep}"]`).style.display = 'none';
|
||||
|
||||
// this.data.currentStep++;
|
||||
|
||||
// document.querySelector(`div[wizard-step="${this.data.currentStep}"]`).style.display = 'inherit';
|
||||
|
||||
// return;
|
||||
// }
|
||||
|
||||
// if (this.data.currentStep === this.data.steps) {
|
||||
// this.hideNextButton()
|
||||
// this.showFormSubmitButton()
|
||||
// } else {
|
||||
// this.hideFormSubmitButton()
|
||||
// this.showNextButton()
|
||||
// }
|
||||
// },
|
||||
|
||||
// prevStep() {
|
||||
// if (this.data.currentStep > 1) {
|
||||
// document.querySelector(`div[wizard-step="${this.data.currentStep}"]`).style.display = 'none';
|
||||
|
||||
// this.data.currentStep--;
|
||||
|
||||
// document.querySelector(`div[wizard-step="${this.data.currentStep}"]`).style.display = 'inherit';
|
||||
// }
|
||||
// },
|
||||
|
||||
// hideNovaFormButtons() {
|
||||
// this.fields.cancelFormButton = document.querySelector('button[dusk="cancel-create-button"]');
|
||||
// this.fields.createFormButton = document.querySelector('button[dusk="create-button"]');
|
||||
|
||||
// this.fields.buttonsContainerElement = this.fields.createFormButton.parentNode;
|
||||
// this.hideFormSubmitButton();
|
||||
// this.hideFormCancelButton();
|
||||
// },
|
||||
|
||||
// addWizardButtons() {
|
||||
// this.fields.buttonsContainerElement.insertAdjacentHTML('afterbegin', this.nextButtonTemplate());
|
||||
// this.fields.buttonsContainerElement.insertAdjacentHTML('afterbegin', this.prevButtonTemplate());
|
||||
|
||||
// this.fields.nextButtonElement = document.getElementById('laravel-nova-wizard-next-button');
|
||||
// this.fields.prevButtonElement = document.getElementById('laravel-nova-wizard-prev-button');
|
||||
|
||||
// this.fields.nextButtonElement.addEventListener('click', () => {
|
||||
// this.nextStep()
|
||||
// })
|
||||
|
||||
// this.fields.prevButtonElement.addEventListener('click', () => {
|
||||
// this.prevStep()
|
||||
// })
|
||||
// },
|
||||
|
||||
// nextButtonTemplate() {
|
||||
// return `
|
||||
// <button type="button" id="laravel-nova-wizard-next-button" class="border text-left appearance-none cursor-pointer rounded text-sm font-bold focus:outline-none focus:ring ring-primary-200 dark:ring-gray-600 relative disabled:cursor-not-allowed inline-flex items-center justify-center shadow h-9 px-3 bg-primary-500 border-primary-500 hover:[&:not(:disabled)]:bg-primary-400 hover:[&:not(:disabled)]:border-primary-400 text-white dark:text-gray-900">
|
||||
// <span class="flex items-center gap-1">Next</span>
|
||||
// </button>
|
||||
// `;
|
||||
// },
|
||||
|
||||
// prevButtonTemplate() {
|
||||
// return `
|
||||
// <button type="button" id="laravel-nova-wizard-prev-button" class="border text-left appearance-none cursor-pointer rounded text-sm font-bold focus:outline-none focus:ring ring-primary-200 dark:ring-gray-600 relative disabled:cursor-not-allowed inline-flex items-center justify-center shadow h-9 px-3 bg-red-500 border-red-500 hover:[&:not(:disabled)]:border-primary-400 text-white dark:text-gray-900">
|
||||
// <span class="flex items-center gap-1">Previus</span>
|
||||
// </button>
|
||||
// `;
|
||||
// },
|
||||
|
||||
// hidePrevButton() {
|
||||
// this.fields.prevButtonElement.style.display = 'none'
|
||||
// },
|
||||
|
||||
// showPrevButton() {
|
||||
// this.fields.prevButtonElement.style.display = 'inherit'
|
||||
// },
|
||||
|
||||
// hideNextButton() {
|
||||
// this.fields.nextButtonElement.style.display = 'none'
|
||||
// },
|
||||
|
||||
// showNextButton() {
|
||||
// this.fields.nextButtonElement.style.display = 'inherit'
|
||||
// },
|
||||
|
||||
// showFormSubmitButton() {
|
||||
// this.fields.createFormButton.style.display = 'inherit';
|
||||
// },
|
||||
|
||||
// hideFormSubmitButton() {
|
||||
// this.fields.createFormButton.style.display = 'none';
|
||||
// },
|
||||
|
||||
// hideFormCancelButton() {
|
||||
// this.fields.cancelFormButton.style.display = 'none';
|
||||
// }
|
||||
// };
|
||||
|
||||
// function setupMultiStepWizard() {
|
||||
// let refreshIntervalId = setInterval(() => {
|
||||
// let formElement = document.querySelector('form');
|
||||
|
||||
// if (formElement) {
|
||||
// clearInterval(refreshIntervalId)
|
||||
|
||||
// // Div container
|
||||
// let fieldsContainerElement = formElement.firstChild;
|
||||
// // Div elements
|
||||
// let fieldElements = Array.from(fieldsContainerElement.children);
|
||||
|
||||
// // if there a less than 2 divs, no need to wizard it!
|
||||
// if (fieldElements.length < 2) {
|
||||
// return;
|
||||
// }
|
||||
|
||||
// LaravelNovaWizardStore.data.steps = fieldElements.length;
|
||||
// LaravelNovaWizardStore.hideNovaFormButtons()
|
||||
// LaravelNovaWizardStore.addWizardButtons()
|
||||
|
||||
// let loopCount = 0;
|
||||
// fieldElements.forEach(item => {
|
||||
// loopCount++;
|
||||
// item.setAttribute('wizard-step', loopCount)
|
||||
|
||||
// if (loopCount === 1) {
|
||||
// return;
|
||||
// }
|
||||
|
||||
// item.style.display = 'none'
|
||||
// })
|
||||
// }
|
||||
// }, 300);
|
||||
// }
|
||||
|
||||
// Nova.$on('liftedOff', () => {
|
||||
// if (Nova.$router.page.component === 'Nova.Create') {
|
||||
// setupMultiStepWizard()
|
||||
// }
|
||||
// })
|
||||
|
||||
// Nova.$router.on('success', (event) => {
|
||||
// if (event.detail.page.component === 'Nova.Create') {
|
||||
// setupMultiStepWizard()
|
||||
// }
|
||||
// })
|
||||
|
||||
// document.addEventListener('inertia:navigate', () => {
|
||||
// console.log('page is updating')
|
||||
// })
|
||||
|
||||
// when app is booting
|
||||
// Nova.booting((app, store) => {})
|
||||
|
||||
60
resources/views/vendor/nova/layout.blade.php
vendored
Normal file
60
resources/views/vendor/nova/layout.blade.php
vendored
Normal file
@@ -0,0 +1,60 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="{{ $locale = \Laravel\Nova\Nova::resolveUserLocale(request()) }}" dir="{{ \Laravel\Nova\Nova::rtlEnabled() ? 'rtl' : 'ltr' }}" class="h-full font-sans antialiased">
|
||||
<head>
|
||||
<meta name="theme-color" content="#fff">
|
||||
<meta charset="utf-8">
|
||||
<meta name="csrf-token" content="{{ csrf_token() }}">
|
||||
<meta name="viewport" content="width=device-width"/>
|
||||
<meta name="locale" content="{{ $locale }}"/>
|
||||
<meta name="robots" content="noindex">
|
||||
|
||||
@include('nova::partials.meta')
|
||||
|
||||
<!-- Styles -->
|
||||
<link rel="stylesheet" href="{{ mix('app.css', 'vendor/nova') }}">
|
||||
|
||||
@if ($styles = \Laravel\Nova\Nova::availableStyles(request()))
|
||||
<!-- Tool Styles -->
|
||||
@foreach($styles as $asset)
|
||||
<link rel="stylesheet" href="{!! $asset->url() !!}">
|
||||
@endforeach
|
||||
@endif
|
||||
|
||||
<script>
|
||||
if (localStorage.novaTheme === 'dark' || (!('novaTheme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
|
||||
document.documentElement.classList.add('dark')
|
||||
} else {
|
||||
document.documentElement.classList.remove('dark')
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body class="min-w-site text-sm font-medium min-h-full text-gray-500 dark:text-gray-400 bg-gray-100 dark:bg-gray-900">
|
||||
@inertia
|
||||
|
||||
<!-- Scripts -->
|
||||
<script src="{{ mix('manifest.js', 'vendor/nova') }}"></script>
|
||||
<script src="{{ mix('vendor.js', 'vendor/nova') }}"></script>
|
||||
<script src="{{ mix('app.js', 'vendor/nova') }}"></script>
|
||||
|
||||
<!-- Build Nova Instance -->
|
||||
<script>
|
||||
const config = @json(\Laravel\Nova\Nova::jsonVariables(request()));
|
||||
window.Nova = createNovaApp(config)
|
||||
Nova.countdown()
|
||||
</script>
|
||||
|
||||
@if ($scripts = \Laravel\Nova\Nova::availableScripts(request()))
|
||||
<!-- Tool Scripts -->
|
||||
@foreach ($scripts as $asset)
|
||||
<script src="{!! $asset->url() !!}"></script>
|
||||
@endforeach
|
||||
@endif
|
||||
|
||||
<!-- Start Nova -->
|
||||
<script defer>
|
||||
Nova.liftOff()
|
||||
|
||||
Nova.$emit('liftedOff')
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user