*/ 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 */ 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' => 'номер заказа МАФ', ]; } }