ldc-supportweb/app/Http/Requests/Bo/Invoices/StoreInvoiceRequest.php
2024-07-22 11:32:03 +02:00

97 lines
3.5 KiB
PHP

<?php
namespace App\Http\Requests\Bo\Invoices;
use App\Enums\Invoices\TaskTypeEnum;
use App\Models\Invoice;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Gate;
use Illuminate\Validation\Rules\Enum;
class StoreInvoiceRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return boolean
*/
public function authorize()
{
return Gate::allows('isAdmin');
}
/**
* Prepare the data for validation.
*
* @return void
*/
protected function prepareForValidation()
{
$this->merge([
'tasks' => request()->tasks ? \collect(json_decode(request()->tasks))
->map(function ($task) {
return \array_intersect_key((array)$task, Invoice::getTaskStructure());
})->toArray() : [],
'show_days' => $this->show_days ? true : false,
]);
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'firstname' => 'required|string|min:3|max:255',
'lastname' => 'required|string|min:3|max:255',
'object' => 'required|string|min:3|max:255',
'tasks' => 'required|array|min:1',
'tasks.*' => 'required|array',
'tasks.*.days' => 'required|numeric',
'tasks.*.amount' => 'required|numeric',
'tasks.*.desc' => 'required|string|min:10',
'tasks.*.type' => [
'required', new Enum(TaskTypeEnum::class)
],
'tasks.*.package' => 'required_if:tasks.*.type,' . TaskTypeEnum::package->value .
'|nullable|exists:packages,id',
'comment' => 'sometimes|nullable|string|min:15',
'show_days' => 'required|boolean',
'site_id' => 'required|integer|exists:sites,id',
'company_id' => 'required|integer|exists:companies,id',
'invoiced_to_id' => 'required|integer|exists:companies,id',
];
}
/**
* Get custom attributes for validator errors.
*
* @return array
*/
public function attributes(): array
{
return [
'firstname' => trans('Prénom de la personne associée'),
'lastname' => trans('Nom de la personne associée'),
'object' => trans('Objet du devis'),
'tasks' => trans('Tâches du devis'),
'tasks.*' => trans('Tâches du devis'),
'tasks.*.days' => trans('Nombre de jours dédiés à la tâche'),
'tasks.*.amount' => trans('Montant dédié à la tâche'),
'tasks.*.desc' => trans('Description dédié à la tâche'),
'tasks.*.type' => trans('Type de tâche'),
'tasks.*.package' => trans('Forfait dédié à la tâche'),
'comment' => trans('Commentaire du devis'),
'show_days' => trans('Visibilité des jours'),
'site_id' => trans('Site associé'),
'company_id' => trans('Companie associé'),
'invoiced_to_id' => trans('Entité à facturer'),
'signed_date' => trans('Date de signature du Devis'),
'sent_client_date' => trans('Date d\'envoi du Devis au client'),
'sent_accounting_date' => trans('Date d\'envoi du Devis à la comptabilité'),
'status' => trans('État du devis'),
];
}
}