97 lines
3.5 KiB
PHP
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'),
|
|
];
|
|
}
|
|
}
|