UnitRequest.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <?php
  2. namespace App\Http\Requests;
  3. use App\ValueObjects\Cnpj;
  4. use App\ValueObjects\Cpf;
  5. use Illuminate\Foundation\Http\FormRequest;
  6. class UnitRequest extends FormRequest
  7. {
  8. public function rules(): array
  9. {
  10. $isCreate = $this->isMethod('POST');
  11. $rules = [
  12. 'name' => 'sometimes|required|string|max:255',
  13. 'fantasy_name' => 'sometimes|nullable|string|max:255',
  14. 'social_reason' => 'sometimes|required|string|max:255',
  15. 'cnpj' => ['sometimes', 'required', 'string', 'max:18', Cnpj::rule()],
  16. 'state_registration' => 'sometimes|nullable|string|max:50',
  17. 'name_responsible' => 'sometimes|required|string|max:255',
  18. 'street' => 'sometimes|required|string|max:255',
  19. 'address_number' => 'sometimes|required|string|max:20',
  20. 'postal_code' => 'sometimes|required|string|max:9',
  21. 'neighborhood' => 'sometimes|required|string|max:255',
  22. 'complement' => 'sometimes|nullable|string|max:255',
  23. 'city_id' => 'sometimes|required|integer|exists:cities,id',
  24. 'state_id' => 'sometimes|required|integer|exists:states,id',
  25. 'email' => 'sometimes|required|email|max:255',
  26. 'secondary_email' => 'sometimes|nullable|email|max:255',
  27. 'phone_number' => 'sometimes|nullable|string|max:20',
  28. 'cell_number' => 'sometimes|required|string|max:20',
  29. 'automatic_protocol' => 'sometimes|boolean',
  30. 'active_students_min' => 'sometimes|integer|min:0',
  31. 'active_students_medium' => 'sometimes|integer|min:0',
  32. 'active_students_max' => 'sometimes|integer|min:0',
  33. 'avatar' => 'sometimes|nullable|image|max:20480',
  34. 'contracts' => 'sometimes|nullable|array',
  35. 'contracts.*' => 'file|mimes:pdf|max:20480',
  36. 'partners' => 'sometimes|nullable|array',
  37. 'partners.*.name' => 'required|string|max:255',
  38. 'partners.*.cpf' => ['required', 'string', 'max:20', Cpf::rule()],
  39. 'partners.*.social_name' => 'nullable|string|max:255',
  40. 'partners.*.role' => 'nullable|string|max:100',
  41. 'partners.*.rg' => 'nullable|string|max:30',
  42. 'partners.*.birth_date' => 'nullable|date',
  43. 'partners.*.participation' => 'nullable|numeric|min:0|max:100',
  44. 'partners.*.email' => 'nullable|email|max:255',
  45. 'partners.*.secondary_email' => 'nullable|email|max:255',
  46. 'partners.*.phone_number' => 'nullable|string|max:20',
  47. 'partners.*.cell_number' => 'nullable|string|max:20',
  48. 'partners.*.postal_code' => 'nullable|string|max:9',
  49. 'partners.*.street' => 'nullable|string|max:255',
  50. 'partners.*.address_number' => 'nullable|string|max:20',
  51. 'partners.*.neighborhood' => 'nullable|string|max:255',
  52. 'partners.*.complement' => 'nullable|string|max:255',
  53. 'partners.*.city_id' => 'nullable|integer|exists:cities,id',
  54. 'partners.*.state_id' => 'nullable|integer|exists:states,id',
  55. 'partners.*.avatar' => 'nullable|image|max:2048',
  56. ];
  57. if ($isCreate) {
  58. $required = [
  59. 'name',
  60. 'social_reason',
  61. 'cnpj',
  62. 'name_responsible',
  63. 'street',
  64. 'address_number',
  65. 'postal_code',
  66. 'neighborhood',
  67. 'city_id',
  68. 'state_id',
  69. 'email',
  70. 'cell_number',
  71. ];
  72. foreach ($required as $field) {
  73. if (is_array($rules[$field])) {
  74. $rules[$field] = array_values(array_filter(
  75. $rules[$field],
  76. static fn (mixed $rule): bool => $rule !== 'sometimes',
  77. ));
  78. continue;
  79. }
  80. $rules[$field] = str_replace('sometimes|required', 'required', $rules[$field]);
  81. }
  82. }
  83. return $rules;
  84. }
  85. }