SaveProductionOrderRequest.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Http\Requests;
  4. use App\Enums\ProductionOrderExecutionType;
  5. use App\Enums\ProductionOrderStatus;
  6. use App\Models\ProductionOrder;
  7. use App\Models\Role;
  8. use Illuminate\Foundation\Http\FormRequest;
  9. use Illuminate\Validation\Rule;
  10. class SaveProductionOrderRequest extends FormRequest
  11. {
  12. public function authorize(): bool
  13. {
  14. return true;
  15. }
  16. /** @return array<string, mixed> */
  17. public function rules(): array
  18. {
  19. /** @var ProductionOrder|null $productionOrder */
  20. $productionOrder = $this->route('productionOrder');
  21. $canManageItems = $this->user()?->hasPermission('schedule-orders.items.manage') ?? false;
  22. $required = $productionOrder ? 'sometimes' : 'required';
  23. $orderYear = $this->has('order_year')
  24. ? $this->integer('order_year')
  25. : $productionOrder?->order_year;
  26. return [
  27. 'order_number' => [
  28. $required,
  29. 'required',
  30. 'string',
  31. 'max:100',
  32. Rule::unique('production_orders', 'order_number')
  33. ->where('order_year', $orderYear)
  34. ->ignore($productionOrder),
  35. ],
  36. 'order_year' => [$required, 'required', 'integer', 'min:2000', 'max:2100'],
  37. 'customer_name' => [$required, 'required', 'string', 'max:500'],
  38. 'object_address' => [$required, 'required', 'string', 'max:5000'],
  39. 'invoice_number' => [$required, 'required', 'string', 'max:100'],
  40. 'invoice_date' => ['nullable', 'date'],
  41. 'contract_number' => ['nullable', 'string', 'max:100'],
  42. 'contract_date' => ['nullable', 'date'],
  43. 'payment_date' => [$required, 'required', 'date'],
  44. 'supply_working_days' => [$required, 'required', 'integer', 'min:0', 'max:2000'],
  45. 'application_shipment_date' => ['nullable', 'date'],
  46. 'status' => [$required, 'required', Rule::enum(ProductionOrderStatus::class)],
  47. 'execution_type' => [$required, 'required', Rule::enum(ProductionOrderExecutionType::class)],
  48. 'manager_id' => [
  49. $required,
  50. 'required',
  51. 'integer',
  52. Rule::exists('users', 'id')->where('role', Role::MANAGER),
  53. ],
  54. 'note' => ['nullable', 'string', 'max:10000'],
  55. 'items' => [$canManageItems ? 'required' : 'sometimes', 'array', 'min:1'],
  56. 'items.*.id' => [
  57. 'nullable',
  58. 'integer',
  59. Rule::exists('production_order_items', 'id')->where(
  60. 'production_order_id',
  61. $productionOrder?->id,
  62. ),
  63. ],
  64. 'items.*.common_catalog_item_id' => [
  65. 'required',
  66. 'integer',
  67. Rule::exists('common_catalog_items', 'id')->whereNull('deleted_at'),
  68. ],
  69. 'items.*.order_item_number' => ['required', 'string', 'max:100'],
  70. 'items.*.factory_number' => ['nullable', 'string', 'max:100'],
  71. 'items.*.manufacture_date' => ['nullable', 'date'],
  72. 'nav' => ['nullable', 'string', 'max:100'],
  73. ];
  74. }
  75. /** @return array<string, string> */
  76. public function attributes(): array
  77. {
  78. return [
  79. 'order_number' => 'номер заказа',
  80. 'order_year' => 'год заказа',
  81. 'customer_name' => 'заказчик',
  82. 'object_address' => 'адрес объекта',
  83. 'invoice_number' => 'номер счёта',
  84. 'payment_date' => 'дата оплаты',
  85. 'supply_working_days' => 'срок поставки',
  86. 'status' => 'статус',
  87. 'execution_type' => 'тип исполнения',
  88. 'manager_id' => 'менеджер',
  89. 'items' => 'оборудование',
  90. 'items.*.common_catalog_item_id' => 'позиция общего каталога',
  91. 'items.*.order_item_number' => 'номер заказа МАФ',
  92. ];
  93. }
  94. }