Merge branch 'trunk'

This commit is contained in:
Vincent BRIDIER 2024-01-31 18:03:13 +01:00
commit a3c2697c86
No known key found for this signature in database
GPG key ID: 8571BFA20420D512
7 changed files with 403 additions and 410 deletions

View file

@ -41,9 +41,10 @@ class InvoiceController extends Controller
null,
'firstname',
'lastname',
'ref',
);
}
$searchFields = trans('Nom, Prénom');
$searchFields = trans('Nom, Prénom, Référence');
/** Sort columns with a query */
$this->sortQuery($invoiceModels);

View file

@ -49,8 +49,8 @@ class StoreInvoiceRequest extends FormRequest
'object' => 'required|string|min:3|max:255',
'tasks' => 'required|array|min:1',
'tasks.*' => 'required|array',
'tasks.*.days' => 'required|numeric|min:0.125',
'tasks.*.amount' => 'required|numeric|min:0.125',
'tasks.*.days' => 'required|numeric',
'tasks.*.amount' => 'required|numeric',
'tasks.*.desc' => 'required|string|min:10',
'tasks.*.type' => [
'required', new Enum(TaskTypeEnum::class)

View file

@ -144,7 +144,7 @@ spec:
containers:
- name: ${CI_PROJECT_PATH_SLUG}-scheduled
image: $IMAGE_TAG
imagePullPolicy: Always
imagePullPolicy: IfNotPresent
command:
- "php"
args:

View file

@ -97,7 +97,6 @@
v-model="task.amount"
type="number"
step="0.01"
min="0"
>
<span class="input-group-text">€</span>
</div>

View file

@ -1,357 +1,359 @@
<div class="row">
{{-- DATES/STATUS --}}
@if (request()->routeIs('bo.invoices.edit'))
@if($invoiceModel->status !== \App\Enums\Invoices\InvoiceStatusEnum::opened || $invoiceModel->signed_date)
<div class="col-12">
<div class="alert alert-secondary text-white" role="alert">
<strong>
@if($invoiceModel->status !== \App\Enums\Invoices\InvoiceStatusEnum::opened)
{{ __('Impossible de mettre à jour les informations d\'un devis :status.', ['status' => $invoiceModel->status->label()]) }}
@elseif($invoiceModel->signed_date)
{{ __('Impossible de mettre à jour les informations d\'un devis déjà signé, seule les sections "État" et "Commentaires" sont pris en compte') }}
@endif
</strong>
@if ($invoiceModel->status !== \App\Enums\Invoices\InvoiceStatusEnum::opened || $invoiceModel->signed_date)
<div class="col-12">
<div class="alert alert-secondary text-white" role="alert">
<strong>
@if ($invoiceModel->status !== \App\Enums\Invoices\InvoiceStatusEnum::opened)
{{ __('Impossible de mettre à jour les informations d\'un devis :status.', ['status' => $invoiceModel->status->label()]) }}
@elseif($invoiceModel->signed_date)
{{ __('Impossible de mettre à jour les informations d\'un devis déjà signé, seule les sections "État" et "Commentaires" sont pris en compte') }}
@endif
</strong>
</div>
</div>
@endif
{{-- DATES STATUS --}}
<div class="col-12 mb-3">
<fieldset class="row w-100 h-100 mx-auto border bg-white p-3">
<legend class="p-0">{{ __('État') }}</legend>
<div class="row w-100 mx-auto p-0">
{{-- SENT_CLIENT_DATE --}}
<div class="col-12 col-sm-6 col-md-4 pe-md-3 p-0">
@if ($invoiceModel->status === \App\Enums\Invoices\InvoiceStatusEnum::opened and !$invoiceModel->sent_client_date)
@include('bo.partials.inputs.date', [
'id' => 'invoiceSentclientdate',
'label' => __('Date d\'envoi du :model', [
'model' => __('models.classes.invoices'),
]),
'name' => 'sent_client_date',
'defaultValue' => false,
'required' => true,
'model' => $invoiceModel ?? null,
'helper' => __('Doît être une date réelle et existante.'),
])
@elseif ($invoiceModel->sent_client_date)
<p class="fw-bold m-0 text-center">
{{ __('Envoyé le :date', ['date' => \Carbon\Carbon::parse($invoiceModel->sent_client_date)->format('d/m/Y')]) ?? 'xxx' }}
</p>
@endif
</div>
{{-- SIGNED_DATE --}}
<div class="col-12 col-sm-6 col-md-4 pe-md-3 p-0">
@if ($invoiceModel->status === \App\Enums\Invoices\InvoiceStatusEnum::opened and !$invoiceModel->signed_date)
@include('bo.partials.inputs.date', [
'id' => 'invoiceSigneddate',
'label' => __('Date de signature du :model (client)', [
'model' => __('models.classes.invoices'),
]),
'name' => 'signed_date',
'defaultValue' => false,
'required' => true,
'model' => $invoiceModel ?? null,
'helper' => __('Doît être une date réelle et existante.'),
])
@elseif ($invoiceModel->signed_date)
<p class="fw-bold m-0 text-center">
{{ __('Signé le :date (client)', ['date' => \Carbon\Carbon::parse($invoiceModel->signed_date)->format('d/m/Y') ?? 'xxx']) }}
</p>
@endif
</div>
{{-- SENT_ACCOUNTING_DATE --}}
<div class="col-12 col-sm-6 col-md-4 pe-md-3 p-0">
@if ($invoiceModel->status === \App\Enums\Invoices\InvoiceStatusEnum::opened and !$invoiceModel->sent_accounting_date)
@include('bo.partials.inputs.date', [
'id' => 'invoiceSentaccountingdate',
'label' => __('Date d\'envoi du :model à la comptabilité', [
'model' => __('models.classes.invoices'),
]),
'name' => 'sent_accounting_date',
'defaultValue' => false,
'required' => true,
'model' => $invoiceModel ?? null,
'helper' => __('Doît être une date réelle et existante.'),
])
@elseif ($invoiceModel->sent_accounting_date)
<p class="fw-bold m-0 text-center">
{{ __('Envoyé à la comptabilité le :date', ['date' => \Carbon\Carbon::parse($invoiceModel->sent_accounting_date)->format('d/m/Y') ?? 'xxx']) }}
</p>
@endif
</div>
{{-- STATUS --}}
@if ($invoiceModel->status === \App\Enums\Invoices\InvoiceStatusEnum::opened)
<div class="col-12 col-md-6 pe-md-3 p-0">
@include('bo.partials.inputs.tinyint-enum', [
'id' => 'invoiceStatus',
'label' => __('crud.minicrud.associated', [
'entity' => 'État',
]),
'name' => 'status',
'model' => $invoiceModel ?? null,
'required' => true,
'associatedModels' => $invoiceStatusArray,
'helper' => __('crud.minicrud.select', [
'entity' => 'État',
]),
])
@else
<div class="col-12 pe-md-3 p-0">
<p class="fw-bold text-warning m-0 mt-3 text-center">{{ $invoiceModel->status->label() }}</p>
@endif
</div>
</div>
</div>
@endif
{{-- DATES STATUS --}}
<div class="col-12 mb-3">
<fieldset class="row border w-100 h-100 bg-white mx-auto p-3">
<legend class="p-0">{{ __('État') }}</legend>
<div class="row w-100 mx-auto p-0">
{{-- SENT_CLIENT_DATE --}}
<div class="col-12 col-sm-6 col-md-4 p-0 pe-md-3">
@if($invoiceModel->status === \App\Enums\Invoices\InvoiceStatusEnum::opened AND !$invoiceModel->sent_client_date )
@include('bo.partials.inputs.date', [
'id' => 'invoiceSentclientdate',
'label' => __('Date d\'envoi du :model', [
'model' => __('models.classes.invoices'),
]),
'name' => 'sent_client_date',
'defaultValue' => false,
'required' => true,
'model' => $invoiceModel ?? null,
'helper' => __('Doît être une date réelle et existante.'),
])
@elseif ($invoiceModel->sent_client_date)
<p class="fw-bold text-center m-0">
{{ __('Envoyé le :date', ['date' => \Carbon\Carbon::parse($invoiceModel->sent_client_date)->format('d/m/Y')]) ?? "xxx" }}
</p>
@endif
</div>
{{-- SIGNED_DATE --}}
<div class="col-12 col-sm-6 col-md-4 p-0 pe-md-3">
@if($invoiceModel->status === \App\Enums\Invoices\InvoiceStatusEnum::opened AND !$invoiceModel->signed_date)
@include('bo.partials.inputs.date', [
'id' => 'invoiceSigneddate',
'label' => __('Date de signature du :model (client)', [
'model' => __('models.classes.invoices'),
]),
'name' => 'signed_date',
'defaultValue' => false,
'required' => true,
'model' => $invoiceModel ?? null,
'helper' => __('Doît être une date réelle et existante.'),
])
@elseif ($invoiceModel->signed_date)
<p class="fw-bold text-center m-0">
{{ __('Signé le :date (client)', ['date' => \Carbon\Carbon::parse($invoiceModel->signed_date)->format('d/m/Y') ?? "xxx"]) }}
</p>
@endif
</div>
{{-- SENT_ACCOUNTING_DATE --}}
<div class="col-12 col-sm-6 col-md-4 p-0 pe-md-3">
@if($invoiceModel->status === \App\Enums\Invoices\InvoiceStatusEnum::opened AND !$invoiceModel->sent_accounting_date)
@include('bo.partials.inputs.date', [
'id' => 'invoiceSentaccountingdate',
'label' => __('Date d\'envoi du :model à la comptabilité', [
'model' => __('models.classes.invoices'),
]),
'name' => 'sent_accounting_date',
'defaultValue' => false,
'required' => true,
'model' => $invoiceModel ?? null,
'helper' => __('Doît être une date réelle et existante.'),
])
@elseif ($invoiceModel->sent_accounting_date)
<p class="fw-bold text-center m-0">
{{ __('Envoyé à la comptabilité le :date', ['date' => \Carbon\Carbon::parse($invoiceModel->sent_accounting_date)->format('d/m/Y') ?? "xxx"]) }}
</p>
@endif
</div>
{{-- STATUS --}}
@if ($invoiceModel->status === \App\Enums\Invoices\InvoiceStatusEnum::opened)
<div class="col-12 col-md-6 p-0 pe-md-3">
@include('bo.partials.inputs.tinyint-enum', [
'id' => 'invoiceStatus',
'label' => __('crud.minicrud.associated', [
'entity' => 'État',
]),
'name' => 'status',
'model' => $invoiceModel ?? null,
'required' => true,
'associatedModels' => $invoiceStatusArray,
'helper' => __('crud.minicrud.select', [
'entity' => 'État',
]),
])
@else
<div class="col-12 p-0 pe-md-3">
<p class="fw-bold text-warning text-center m-0 mt-3">{{ $invoiceModel->status->label() }}</p>
@endif
</div>
</div>
</fieldset>
</div>
@endif
{{-- USER ASSOCIATED --}}
<div class="col-12 mb-3">
<fieldset class="row border w-100 h-100 bg-white mx-auto p-3" @if($invoiceModel->sent_client_date) disabled @endif>
<legend class="p-0">{{ __('Informations sur la personne associée') }}</legend>
<div class="row w-100 mx-auto p-0">
{{-- FIRSTNAME --}}
<div class="col-12 col-md-6 p-0 pe-md-3">
@include('bo.partials.inputs.varchar', [
'id' => 'invoiceFirstname',
'label' => __(':field de la personne auquel le :model est associé', [
'field' => Str::ucfirst(__('validation.attributes.firstname')),
'model' => __('models.classes.invoices'),
]),
'hasWordCounter' => true,
'name' => 'firstname',
'required' => true,
'model' => $invoiceModel ?? null,
'helper' => __('validation.between.string', [
'attribute' => Str::ucfirst(__('validation.attributes.firstname')),
'min' => 3,
'max' => 255,
]),
'placeholder' => __(':field du :model', [
'field' => Str::ucfirst(__('validation.attributes.firstname')),
'model' => __('models.classes.invoices'),
]),
])
</div>
{{-- LASTNAME --}}
<div class="col-12 col-md-6 p-0 ps-md-3">
@include('bo.partials.inputs.varchar', [
'id' => 'invoiceLastname',
'label' => __(':field de la personne auquel le :model est associé', [
'field' => Str::ucfirst(__('validation.attributes.lastname')),
'model' => __('models.classes.invoices'),
]),
'hasWordCounter' => true,
'name' => 'lastname',
'required' => true,
'model' => $invoiceModel ?? null,
'helper' => __('validation.between.string', [
'attribute' => Str::ucfirst(__('validation.attributes.lastname')),
'min' => 3,
'max' => 255,
]),
'placeholder' => __(':field du :model', [
'field' => Str::ucfirst(__('validation.attributes.lastname')),
'model' => __('models.classes.invoices'),
]),
])
</div>
</div>
@endif
{{-- USER ASSOCIATED --}}
<div class="col-12 mb-3">
<fieldset class="row w-100 h-100 mx-auto border bg-white p-3" @if ($invoiceModel->sent_client_date) disabled @endif>
<legend class="p-0">{{ __('Informations sur la personne associée') }}</legend>
<div class="row w-100 mx-auto p-0">
{{-- FIRSTNAME --}}
<div class="col-12 col-md-6 pe-md-3 p-0">
@include('bo.partials.inputs.varchar', [
'id' => 'invoiceFirstname',
'label' => __(':field de la personne auquel le :model est associé', [
'field' => Str::ucfirst(__('validation.attributes.firstname')),
'model' => __('models.classes.invoices'),
]),
'hasWordCounter' => true,
'name' => 'firstname',
'required' => true,
'model' => $invoiceModel ?? null,
'helper' => __('validation.between.string', [
'attribute' => Str::ucfirst(__('validation.attributes.firstname')),
'min' => 3,
'max' => 255,
]),
'placeholder' => __(':field du :model', [
'field' => Str::ucfirst(__('validation.attributes.firstname')),
'model' => __('models.classes.invoices'),
]),
])
</div>
</fieldset>
</div>
{{-- OBJECT --}}
<div class="col-12 col-md-6 mb-3">
<fieldset class="border h-100 bg-white p-3" @if($invoiceModel->sent_client_date) disabled @endif>
<legend>{{ Str::ucfirst(__('validation.attributes.object')) }}</legend>
<div class="row">
<div class="col-12">
@include('bo.partials.inputs.varchar', [
'id' => 'invoiceObject',
'label' => __(':field du :model', [
'field' => Str::ucfirst(__('validation.attributes.object')),
'model' => __('models.classes.invoices'),
]),
'hasWordCounter' => true,
'name' => 'object',
'required' => true,
'model' => $invoiceModel ?? null,
'helper' => __('validation.between.string', [
'attribute' => Str::ucfirst(__('validation.attributes.object')),
'min' => 3,
'max' => 255,
]),
'placeholder' => __(':field du :model', [
'field' => Str::ucfirst(__('validation.attributes.object')),
'model' => __('models.classes.invoices'),
]),
])
</div>
{{-- LASTNAME --}}
<div class="col-12 col-md-6 ps-md-3 p-0">
@include('bo.partials.inputs.varchar', [
'id' => 'invoiceLastname',
'label' => __(':field de la personne auquel le :model est associé', [
'field' => Str::ucfirst(__('validation.attributes.lastname')),
'model' => __('models.classes.invoices'),
]),
'hasWordCounter' => true,
'name' => 'lastname',
'required' => true,
'model' => $invoiceModel ?? null,
'helper' => __('validation.between.string', [
'attribute' => Str::ucfirst(__('validation.attributes.lastname')),
'min' => 3,
'max' => 255,
]),
'placeholder' => __(':field du :model', [
'field' => Str::ucfirst(__('validation.attributes.lastname')),
'model' => __('models.classes.invoices'),
]),
])
</div>
</fieldset>
</div>
{{-- TASKS --}}
<div class="col-12 pb-3">
<fieldset class="border bg-white h-100 p-3" @if($invoiceModel->sent_client_date) disabled @endif>
<legend>{{ __('validation.attributes.tasks') }}</legend>
<div class="row">
<div class="col-12">
@php
</div>
</fieldset>
</div>
{{-- OBJECT --}}
<div class="col-12 col-md-6 mb-3">
<fieldset class="h-100 border bg-white p-3" @if ($invoiceModel->sent_client_date) disabled @endif>
<legend>{{ Str::ucfirst(__('validation.attributes.object')) }}</legend>
<div class="row">
<div class="col-12">
@include('bo.partials.inputs.varchar', [
'id' => 'invoiceObject',
'label' => __(':field du :model', [
'field' => Str::ucfirst(__('validation.attributes.object')),
'model' => __('models.classes.invoices'),
]),
'hasWordCounter' => true,
'name' => 'object',
'required' => true,
'model' => $invoiceModel ?? null,
'helper' => __('validation.between.string', [
'attribute' => Str::ucfirst(__('validation.attributes.object')),
'min' => 3,
'max' => 255,
]),
'placeholder' => __(':field du :model', [
'field' => Str::ucfirst(__('validation.attributes.object')),
'model' => __('models.classes.invoices'),
]),
])
</div>
</div>
</fieldset>
</div>
{{-- TASKS --}}
<div class="col-12 pb-3">
<fieldset class="h-100 border bg-white p-3" @if ($invoiceModel->sent_client_date) disabled @endif>
<legend>{{ __('validation.attributes.tasks') }}</legend>
<div class="row">
<div class="col-12">
@php
$data = [
'companies' => $companyModels,
'packages' => $packageModels,
'taskTypeEnums' => collect(\App\Enums\Invoices\TaskTypeEnum::toArray())->values(),
'taskRowModel' => $taskRowModel,
'tasks' => $invoiceModel->tasks ?? []
'tasks' => $invoiceModel->tasks ?? [],
];
@endphp
<div class="invoice-tasks" data-json='@json($data)'></div>
</div>
@endphp
<div class="invoice-tasks" data-json='@json($data)'></div>
</div>
</fieldset>
</div>
{{-- COMMENT --}}
<div class="col-12 pb-3">
<fieldset class="border bg-white h-100 p-3">
<legend>{{ Str::ucfirst(__('validation.attributes.comment')) }}</legend>
<div class="row mb-3">
<div class="col-12">
@if($invoiceModel->sent_client_date)
@include('bo.partials.inputs.text-html', [
'id' => 'invoiceComment',
'label' => __('Commentaire du :model', [
'model' => __('models.classes.invoices')
]),
'name' => 'comment',
'model' => $invoiceModel,
'required' => false,
'helper' => __('crud.minicrud.text_warning', [
'number' => 15
]),
])
@else
<textarea class="form-control" disabled>{{ $invoiceModel->comment }}</textarea>
@endif
</div>
</div>
</fieldset>
</div>
{{-- COMMENT --}}
<div class="col-12 pb-3">
<fieldset class="h-100 border bg-white p-3">
<legend>{{ Str::ucfirst(__('validation.attributes.comment')) }}</legend>
<div class="row mb-3">
<div class="col-12">
@include('bo.partials.inputs.text-html', [
'id' => 'invoiceComment',
'label' => __('Commentaire du :model', [
'model' => __('models.classes.invoices'),
]),
'name' => 'comment',
'model' => $invoiceModel,
'required' => false,
'helper' => __('crud.minicrud.text_warning', [
'number' => 15,
]),
])
</div>
</fieldset>
</div>
{{-- SITE_ID --}}
<div class="col-12 col-md-6 pb-3">
<fieldset class="border bg-white h-100 p-3" @if($invoiceModel->sent_client_date) disabled @endif>
<legend>{{ Str::singular(trans('models.classes.sites')) }}</legend>
<div class="row">
<div class="col-12">
@include('bo.partials.inputs.search-belongs-to-dropdown', [
'id' => 'invoiceSites',
'label' => __(':model associé', [
'model' => Str::singular(trans('models.classes.sites')),
]),
'name' => 'site_id',
'targetModel' => 'App\Models\Site',
'routeName' => 'invoices.json-paginate',
'modelRelated' => $siteModels ?? [],
'modelSelected' => $invoiceModel->site ?? [],
'readonly' => ($invoiceModel->sent_client_date) ? true : false,
'placeholder' => __('Rechercher une :model', [
'model' => Str::singular(trans('models.classes.sites')),
]),
'helper' => __('Sélectionner un :model qui sera associé parmis la liste (un seul et unique :model doit être choisi).', [
</div>
</fieldset>
</div>
{{-- SITE_ID --}}
<div class="col-12 col-md-6 pb-3">
<fieldset class="h-100 border bg-white p-3" @if ($invoiceModel->sent_client_date) disabled @endif>
<legend>{{ Str::singular(trans('models.classes.sites')) }}</legend>
<div class="row">
<div class="col-12">
@include('bo.partials.inputs.search-belongs-to-dropdown', [
'id' => 'invoiceSites',
'label' => __(':model associé', [
'model' => Str::singular(trans('models.classes.sites')),
]),
'name' => 'site_id',
'targetModel' => 'App\Models\Site',
'routeName' => 'invoices.json-paginate',
'modelRelated' => $siteModels ?? [],
'modelSelected' => $invoiceModel->site ?? [],
'readonly' => $invoiceModel->sent_client_date ? true : false,
'placeholder' => __('Rechercher une :model', [
'model' => Str::singular(trans('models.classes.sites')),
]),
'helper' => __(
'Sélectionner un :model qui sera associé parmis la liste (un seul et unique :model doit être choisi).',
[
'model' => Str::singular(__('models.classes.sites')),
]),
'required' => true,
])
</div>
'required' => true,
])
</div>
</fieldset>
</div>
{{-- COMPANY_ID --}}
<div class="col-12 col-md-6 pb-3">
<fieldset class="border bg-white h-100 p-3" @if($invoiceModel->sent_client_date) disabled @endif>
<legend>{{ Str::singular(trans('models.classes.companies')) }}</legend>
<div class="row">
<div class="col-12">
@include('bo.partials.inputs.search-belongs-to-dropdown', [
'id' => 'invoiceCompany',
'label' => __(':model associé', [
'model' => Str::singular(trans('models.classes.companies')),
]),
'name' => 'company_id',
'targetModel' => 'App\Models\Company',
'routeName' => 'invoices.json-paginate',
'modelRelated' => $companyModels ?? [],
'modelSelected' => $invoiceModel->company ?? [],
'readonly' => ($invoiceModel->sent_client_date) ? true : false,
'placeholder' => __('Rechercher une :model', [
'model' => Str::singular(trans('models.classes.companies')),
]),
'helper' => __('Sélectionner une :model qui sera associée parmis la liste (une seule et unique :model doit être choisie).', [
</div>
</fieldset>
</div>
{{-- COMPANY_ID --}}
<div class="col-12 col-md-6 pb-3">
<fieldset class="h-100 border bg-white p-3" @if ($invoiceModel->sent_client_date) disabled @endif>
<legend>{{ Str::singular(trans('models.classes.companies')) }}</legend>
<div class="row">
<div class="col-12">
@include('bo.partials.inputs.search-belongs-to-dropdown', [
'id' => 'invoiceCompany',
'label' => __(':model associé', [
'model' => Str::singular(trans('models.classes.companies')),
]),
'name' => 'company_id',
'targetModel' => 'App\Models\Company',
'routeName' => 'invoices.json-paginate',
'modelRelated' => $companyModels ?? [],
'modelSelected' => $invoiceModel->company ?? [],
'readonly' => $invoiceModel->sent_client_date ? true : false,
'placeholder' => __('Rechercher une :model', [
'model' => Str::singular(trans('models.classes.companies')),
]),
'helper' => __(
'Sélectionner une :model qui sera associée parmis la liste (une seule et unique :model doit être choisie).',
[
'model' => Str::singular(__('models.classes.companies')),
]),
'required' => true,
])
</div>
'required' => true,
])
</div>
</fieldset>
</div>
{{-- INVOICED_TO_ID --}}
<div class="col-12 col-md-6 pb-3">
<fieldset class="border bg-white h-100 p-3">
<legend>{{ __('Entité à facturer') }}</legend>
<div class="row">
<div class="col-12">
@include('bo.partials.inputs.search-belongs-to-dropdown', [
'id' => 'invoiceInvoicedtoid',
'label' => __(':model associé', ['model' => Str::singular(trans('models.classes.companies'))]),
'name' => 'invoiced_to_id',
'targetModel' => 'App\Models\Company',
'routeName' => 'invoices.json-paginate',
'modelRelated' => $companyModels ?? [],
'modelSelected' => $invoiceModel->companyInvoiced ?? [],
'readonly' => ($invoiceModel->sent_client_date) ? true : false,
'placeholder' => __('Rechercher une :model', [
'model' => Str::singular(trans('models.classes.companies')),
]),
'helper' => __('Sélectionner une :model qui sera associée parmis la liste (une seule et unique :model doit être choisie).', [
</div>
</fieldset>
</div>
{{-- INVOICED_TO_ID --}}
<div class="col-12 col-md-6 pb-3">
<fieldset class="h-100 border bg-white p-3">
<legend>{{ __('Entité à facturer') }}</legend>
<div class="row">
<div class="col-12">
@include('bo.partials.inputs.search-belongs-to-dropdown', [
'id' => 'invoiceInvoicedtoid',
'label' => __(':model associé', ['model' => Str::singular(trans('models.classes.companies'))]),
'name' => 'invoiced_to_id',
'targetModel' => 'App\Models\Company',
'routeName' => 'invoices.json-paginate',
'modelRelated' => $companyModels ?? [],
'modelSelected' => $invoiceModel->companyInvoiced ?? [],
'readonly' => $invoiceModel->sent_client_date ? true : false,
'placeholder' => __('Rechercher une :model', [
'model' => Str::singular(trans('models.classes.companies')),
]),
'helper' => __(
'Sélectionner une :model qui sera associée parmis la liste (une seule et unique :model doit être choisie).',
[
'model' => Str::singular(__('models.classes.companies')),
]),
'required' => true,
])
</div>
'required' => true,
])
</div>
</fieldset>
</div>
{{-- SHOW DAYS --}}
<div class="col-12 col-md-6 mb-3">
<fieldset class="border h-100 bg-white p-3" @if($invoiceModel->sent_client_date) disabled @endif>
<legend>{{ __('Visibilité') }}</legend>
<div class="row">
<div class="col-12">
@include('bo.partials.inputs.tinyint-boolean', [
'id' => 'invoiceShowdays',
'name' => 'show_days',
'label' => __('Afficher les jours sur le :model', [
'model' => __('models.classes.invoices'),
]),
'helper' => __('Deux réponses possibles : oui ou non.'),
'model' => $invoiceModel ?? null,
])
</div>
</div>
</fieldset>
</div>
{{-- SHOW DAYS --}}
<div class="col-12 col-md-6 mb-3">
<fieldset class="h-100 border bg-white p-3" @if ($invoiceModel->sent_client_date) disabled @endif>
<legend>{{ __('Visibilité') }}</legend>
<div class="row">
<div class="col-12">
@include('bo.partials.inputs.tinyint-boolean', [
'id' => 'invoiceShowdays',
'name' => 'show_days',
'label' => __('Afficher les jours sur le :model', [
'model' => __('models.classes.invoices'),
]),
'helper' => __('Deux réponses possibles : oui ou non.'),
'model' => $invoiceModel ?? null,
])
</div>
</fieldset>
</div>
</div>
</fieldset>
</div>
</div>
@if($invoiceModel->status === \App\Enums\Invoices\InvoiceStatusEnum::opened || $invoiceModel->status === null)
@push('scripts')
<script nonce="{{ $nonce }}">
document.addEventListener("DOMContentLoaded", () => {
// Submit button clone.
const submit = document.getElementById('formSubmit')
submitClone = document.getElementById('formSubmitClone');
submitClone.addEventListener('click', (event) => {
event.preventDefault();
submit.click('');
})
});
</script>
@endpush
@if ($invoiceModel->status === \App\Enums\Invoices\InvoiceStatusEnum::opened || $invoiceModel->status === null)
@push('scripts')
<script nonce="{{ $nonce }}">
document.addEventListener("DOMContentLoaded", () => {
// Submit button clone.
const submit = document.getElementById('formSubmit')
submitClone = document.getElementById('formSubmitClone');
submitClone.addEventListener('click', (event) => {
event.preventDefault();
submit.click('');
})
});
</script>
@endpush
@endif

View file

@ -1,7 +1,7 @@
<div class="row">
{{-- NAME --}}
<div class="col-12 col-md-6 mb-3">
<fieldset class="border h-100 bg-white p-3">
<fieldset class="h-100 border bg-white p-3">
<legend>{{ Str::ucfirst(__('validation.attributes.name')) }}</legend>
<div class="row">
<div class="col-12">
@ -21,7 +21,7 @@
'model' => Str::singular(__('models.classes.packages')),
]),
'min' => 3,
'max' => 255
'max' => 255,
]),
'placeholder' => __(':field du :model', [
'field' => Str::ucfirst(__('validation.attributes.name')),
@ -34,14 +34,14 @@
</div>
{{-- AMOUNT --}}
<div class="col-12 col-md-6 mb-3">
<fieldset class="border h-100 bg-white p-3">
<legend>{{ Str::ucfirst(__('validation.attributes.amount.day')) }}</legend>
<fieldset class="h-100 border bg-white p-3">
<legend>{{ Str::ucfirst(__('validation.attributes.day')) }}</legend>
<div class="row">
<div class="col-12 mb-3">
@include('bo.partials.inputs.int-number', [
'id' => 'packageAmount',
'label' => __(':field du :model', [
'field' => Str::ucfirst(__('validation.attributes.amount.day')),
'field' => Str::ucfirst(__('validation.attributes.day')),
'model' => Str::singular(__('models.classes.packages')),
]),
'hasWordCounter' => true,
@ -50,12 +50,12 @@
'model' => $packageModel ?? null,
'helper' => __('validation.min.numeric', [
'attribute' => __(':field du :model', [
'field' => Str::ucfirst(__('validation.attributes.amount.day')),
'field' => Str::ucfirst(__('validation.attributes.day')),
'model' => Str::singular(__('models.classes.packages')),
]),
'min' => 0,
]),
'step' => 0.01
'step' => 0.01,
])
</div>
</div>
@ -64,15 +64,15 @@
</div>
@push('scripts')
<script nonce="{{ $nonce }}">
document.addEventListener("DOMContentLoaded", () => {
// Submit button clone.
const submit = document.getElementById('formSubmit')
<script nonce="{{ $nonce }}">
document.addEventListener("DOMContentLoaded", () => {
// Submit button clone.
const submit = document.getElementById('formSubmit')
submitClone = document.getElementById('formSubmitClone');
submitClone.addEventListener('click', (event) => {
event.preventDefault();
submit.click('');
})
});
</script>
submitClone.addEventListener('click', (event) => {
event.preventDefault();
submit.click('');
})
});
</script>
@endpush

View file

@ -4,63 +4,54 @@
@section('description', __('Liste de tous les :model', ['model' => __('models.classes.packages')]))
@section('content')
<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center">
@include('breadcrumbs.breadcrumb-body')
<a href="{{ route('bo.packages.create') }}"
class="btn btn-primary float-right"
data-bs-toggle="tooltip"
data-bs-placement="top"
title="{{ __('crud.helpers.create_model', ['model' => Str::singular(__('models.classes.packages'))]) }}">
<i class="fa-solid fa-plus"></i>
</a>
</div>
@include('bo.modules.search-bar')
<table class="table table-hover">
@if (count($packageModels) > 0)
<thead>
@include('bo.modules.table-col-sorter', [
'cols' => [
'name' => Str::ucfirst(__('validation.attributes.name')),
'amount' => Str::ucfirst(__('validation.attributes.amount.day')),
],
])
</thead>
<tbody>
@foreach ($packageModels as $packageModel)
<tr class="list-item border-bottom">
<td class="text-center align-middle">{{ $packageModel->name }}</td>
<td class="text-center align-middle">{{ $packageModel->amount }}</td>
<td class="text-end align-middle">
<form action="{{ route('bo.packages.destroy', $packageModel->id) }}"
method="POST"
class="btn-group confirmDeleteTS"
novalidate>
<a class="btn btn-sm btn-primary"
href="{{ route('bo.packages.edit', ['package' => $packageModel->id]) }}"
data-bs-toggle="tooltip"
data-bs-placement="top"
title="{{ __('crud.actions.update') }}">
<i class="fa-solid fa-pencil"></i>
</a>
@csrf
@method('DELETE')
<button type="submit"
class="btn btn-sm btn-danger"
data-bs-toggle="tooltip"
data-bs-placement="top"
title="{{ __('crud.actions.delete') }}">
<i class="fa-solid fa-trash"></i>
</button>
</form>
</td>
</tr>
@endforeach
</tbody>
@else
<tr>
<td class="text-center fw-bold border-0">{{ __('crud.other.no_model_found', ['model' => Str::singular(__('models.classes.packages'))]) }}</td>
</tr>
@endif
</table>
{!! $packageModels->links() !!}
<div class="d-flex justify-content-between flex-md-nowrap align-items-center flex-wrap">
@include('breadcrumbs.breadcrumb-body')
<a class="btn btn-primary float-right" data-bs-toggle="tooltip" data-bs-placement="top" href="{{ route('bo.packages.create') }}"
title="{{ __('crud.helpers.create_model', ['model' => Str::singular(__('models.classes.packages'))]) }}">
<i class="fa-solid fa-plus"></i>
</a>
</div>
@include('bo.modules.search-bar')
<table class="table-hover table">
@if (count($packageModels) > 0)
<thead>
@include('bo.modules.table-col-sorter', [
'cols' => [
'name' => Str::ucfirst(__('validation.attributes.name')),
'amount' => Str::ucfirst(__('validation.attributes.day')),
],
])
</thead>
<tbody>
@foreach ($packageModels as $packageModel)
<tr class="border-bottom list-item">
<td class="text-center align-middle">{{ $packageModel->name }}</td>
<td class="text-center align-middle">{{ $packageModel->amount }}</td>
<td class="text-end align-middle">
<form class="btn-group confirmDeleteTS" action="{{ route('bo.packages.destroy', $packageModel->id) }}"
method="POST" novalidate>
<a class="btn btn-sm btn-primary" data-bs-toggle="tooltip" data-bs-placement="top"
href="{{ route('bo.packages.edit', ['package' => $packageModel->id]) }}"
title="{{ __('crud.actions.update') }}">
<i class="fa-solid fa-pencil"></i>
</a>
@csrf
@method('DELETE')
<button class="btn btn-sm btn-danger" data-bs-toggle="tooltip" data-bs-placement="top" type="submit"
title="{{ __('crud.actions.delete') }}">
<i class="fa-solid fa-trash"></i>
</button>
</form>
</td>
</tr>
@endforeach
</tbody>
@else
<tr>
<td class="fw-bold border-0 text-center">
{{ __('crud.other.no_model_found', ['model' => Str::singular(__('models.classes.packages'))]) }}</td>
</tr>
@endif
</table>
{!! $packageModels->links() !!}
@endsection