CartRequest.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. namespace App\Http\Requests;
  3. use Illuminate\Foundation\Http\FormRequest;
  4. class CartRequest extends FormRequest
  5. {
  6. public function authorize(): bool
  7. {
  8. return true;
  9. }
  10. public function rules(): array
  11. {
  12. $rules = [
  13. 'client_id' => ['sometimes', 'integer', 'exists:clients,id'],
  14. 'provider_id' => ['sometimes', 'integer', 'exists:providers,id'],
  15. 'address_id' => ['sometimes', 'integer', 'exists:addresses,id'],
  16. 'date' => ['nullable', 'date', 'after_or_equal:today'],
  17. 'dates' => ['nullable', 'array'],
  18. 'dates.*' => ['date', 'after_or_equal:today'],
  19. 'schedules' => ['nullable', 'array'],
  20. 'schedules.*.provider_id' => ['sometimes', 'integer', 'exists:providers,id'],
  21. 'schedules.*.date' => ['required', 'date', 'after_or_equal:today'],
  22. 'schedules.*.period_type' => ['required', 'in:2,4,6,8'],
  23. 'schedules.*.start_time' => ['required', 'date_format:H:i'],
  24. 'schedules.*.end_time' => ['required', 'date_format:H:i', 'after:schedules.*.start_time'],
  25. 'schedules.*.total_amount' => ['required', 'numeric', 'min:0'],
  26. 'schedules.*.offers_meal' => ['nullable', 'boolean'],
  27. 'offers_meal' => ['sometimes', 'nullable', 'boolean'],
  28. 'period_type' => ['sometimes', 'in:2,4,6,8'],
  29. 'start_time' => ['sometimes', 'date_format:H:i'],
  30. 'end_time' => ['sometimes', 'date_format:H:i', 'after:start_time'],
  31. 'total_amount' => ['sometimes', 'numeric', 'min:0'],
  32. 'schedule_type' => ['sometimes', 'in:default,custom'],
  33. ];
  34. if ($this->isMethod('POST')) {
  35. $rules['client_id'] = ['required', 'integer', 'exists:clients,id'];
  36. if ($this->hasSchedulePayload()) {
  37. $rules['provider_id'] = ['required_without:schedules', 'integer', 'exists:providers,id'];
  38. $rules['address_id'] = ['required', 'integer', 'exists:addresses,id'];
  39. $rules['date'] = ['required_without_all:dates,schedules', 'nullable', 'date', 'after_or_equal:today'];
  40. $rules['dates'] = ['nullable', 'array'];
  41. $rules['dates.*'] = ['date', 'after_or_equal:today'];
  42. $rules['schedules'] = ['nullable', 'array', 'min:1'];
  43. $rules['schedules.*.provider_id'] = ['required_without:provider_id', 'integer', 'exists:providers,id'];
  44. $rules['schedules.*.date'] = ['required', 'date', 'after_or_equal:today'];
  45. $rules['schedules.*.period_type'] = ['required', 'in:2,4,6,8'];
  46. $rules['schedules.*.start_time'] = ['required', 'date_format:H:i'];
  47. $rules['schedules.*.end_time'] = ['required', 'date_format:H:i', 'after:schedules.*.start_time'];
  48. $rules['schedules.*.total_amount'] = ['required', 'numeric', 'min:0'];
  49. $rules['period_type'] = ['required_without:schedules', 'in:2,4,6,8'];
  50. $rules['start_time'] = ['required_without:schedules', 'date_format:H:i'];
  51. $rules['end_time'] = ['required_without:schedules', 'date_format:H:i', 'after:start_time'];
  52. $rules['total_amount'] = ['required_without:schedules', 'numeric', 'min:0'];
  53. }
  54. }
  55. return $rules;
  56. }
  57. private function hasSchedulePayload(): bool
  58. {
  59. return $this->filled('date')
  60. || $this->filled('dates')
  61. || $this->filled('schedules');
  62. }
  63. /**
  64. * Add custom messages when needed
  65. * public function messages(): array
  66. * {
  67. * return [
  68. * 'field.required' => __('message.algo'),
  69. * ];
  70. * }
  71. */
  72. }