| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- <?php
- declare(strict_types=1);
- namespace App\Http\Requests;
- use App\Enums\ProductionOrderExecutionType;
- use App\Enums\ProductionOrderStatus;
- use App\Models\ProductionOrder;
- use App\Models\Role;
- use Illuminate\Foundation\Http\FormRequest;
- use Illuminate\Validation\Rule;
- class SaveProductionOrderRequest extends FormRequest
- {
- public function authorize(): bool
- {
- return true;
- }
- /** @return array<string, mixed> */
- public function rules(): array
- {
- /** @var ProductionOrder|null $productionOrder */
- $productionOrder = $this->route('productionOrder');
- $canManageItems = $this->user()?->hasPermission('schedule-orders.items.manage') ?? false;
- $required = $productionOrder ? 'sometimes' : 'required';
- $orderYear = $this->has('order_year')
- ? $this->integer('order_year')
- : $productionOrder?->order_year;
- return [
- 'order_number' => [
- $required,
- 'required',
- 'string',
- 'max:100',
- Rule::unique('production_orders', 'order_number')
- ->where('order_year', $orderYear)
- ->ignore($productionOrder),
- ],
- 'order_year' => [$required, 'required', 'integer', 'min:2000', 'max:2100'],
- 'customer_name' => [$required, 'required', 'string', 'max:500'],
- 'object_address' => [$required, 'required', 'string', 'max:5000'],
- 'invoice_number' => [$required, 'required', 'string', 'max:100'],
- 'invoice_date' => ['nullable', 'date'],
- 'contract_number' => ['nullable', 'string', 'max:100'],
- 'contract_date' => ['nullable', 'date'],
- 'payment_date' => [$required, 'required', 'date'],
- 'supply_working_days' => [$required, 'required', 'integer', 'min:0', 'max:2000'],
- 'application_shipment_date' => ['nullable', 'date'],
- 'status' => [$required, 'required', Rule::enum(ProductionOrderStatus::class)],
- 'execution_type' => [$required, 'required', Rule::enum(ProductionOrderExecutionType::class)],
- 'manager_id' => [
- $required,
- 'required',
- 'integer',
- Rule::exists('users', 'id')->where('role', Role::MANAGER),
- ],
- 'note' => ['nullable', 'string', 'max:10000'],
- 'items' => [$canManageItems ? 'required' : 'sometimes', 'array', 'min:1'],
- 'items.*.id' => [
- 'nullable',
- 'integer',
- Rule::exists('production_order_items', 'id')->where(
- 'production_order_id',
- $productionOrder?->id,
- ),
- ],
- 'items.*.common_catalog_item_id' => [
- 'required',
- 'integer',
- Rule::exists('common_catalog_items', 'id')->whereNull('deleted_at'),
- ],
- 'items.*.order_item_number' => ['required', 'string', 'max:100'],
- 'items.*.factory_number' => ['nullable', 'string', 'max:100'],
- 'items.*.manufacture_date' => ['nullable', 'date'],
- 'nav' => ['nullable', 'string', 'max:100'],
- ];
- }
- /** @return array<string, string> */
- public function attributes(): array
- {
- return [
- 'order_number' => 'номер заказа',
- 'order_year' => 'год заказа',
- 'customer_name' => 'заказчик',
- 'object_address' => 'адрес объекта',
- 'invoice_number' => 'номер счёта',
- 'payment_date' => 'дата оплаты',
- 'supply_working_days' => 'срок поставки',
- 'status' => 'статус',
- 'execution_type' => 'тип исполнения',
- 'manager_id' => 'менеджер',
- 'items' => 'оборудование',
- 'items.*.common_catalog_item_id' => 'позиция общего каталога',
- 'items.*.order_item_number' => 'номер заказа МАФ',
- ];
- }
- }
|