RequirementFilters.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <?php
  2. namespace App\Filters;
  3. use App\Order;
  4. use App\RequirementUser;
  5. use App\Services\UserService;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Support\Carbon;
  8. use Illuminate\Support\Str;
  9. use phpDocumentor\Reflection\Types\Boolean;
  10. class RequirementFilters
  11. {
  12. protected $request;
  13. protected $queryBuilder;
  14. protected $filters = [
  15. 'title',
  16. 'creator_id',
  17. 'worker_ids',
  18. 'began_at_start',
  19. 'began_at_end',
  20. 'finished_at_start',
  21. 'finished_at_end',
  22. 'created_at_start',
  23. 'created_at_end',
  24. ];
  25. public function __construct(Request $request)
  26. {
  27. $this->request = $request;
  28. }
  29. public function apply($builder)
  30. {
  31. $this->queryBuilder = $builder;
  32. $filters = array_filter($this->request->only($this->filters));
  33. foreach ($filters as $filter => $value) {
  34. if (method_exists($this, $filter)) {
  35. $this->$filter($value, $this->queryBuilder);
  36. }
  37. }
  38. return $this->queryBuilder;
  39. }
  40. public function creator_id($creator_id)
  41. {
  42. $this->queryBuilder->where('user_id', $creator_id);
  43. }
  44. private function worker_ids($worker_ids)
  45. {
  46. if (strpos($worker_ids, ',') || strpos($worker_ids, ',') || strpos($worker_ids, ' ')) {
  47. $arr = array_filter(preg_split('/[,, ]+/is', $worker_ids));
  48. $this->queryBuilder->whereIn('id', RequirementUser::query()->select('requirement_id')->whereIn('user_id', $arr));
  49. } else {
  50. $this->queryBuilder->whereIn('id', RequirementUser::query()->select('requirement_id')->where('user_id', $worker_ids));
  51. }
  52. }
  53. public function began_at_start($began_at_start)
  54. {
  55. $this->queryBuilder->where('begin_at', '>=', \Carbon\Carbon::parse($began_at_start)->startOfDay());
  56. }
  57. public function began_at_end($began_at_end)
  58. {
  59. $this->queryBuilder->where('begin_at', '<=', \Carbon\Carbon::parse($began_at_end)->endOfDay());
  60. }
  61. public function finished_at_start($finished_at_start)
  62. {
  63. $this->queryBuilder->where('finished_at', '>=', \Carbon\Carbon::parse($finished_at_start)->startOfDay());
  64. }
  65. public function finished_at_end($finished_at_end)
  66. {
  67. $this->queryBuilder->where('finished_at', '<=', \Carbon\Carbon::parse($finished_at_end)->endOfDay());
  68. }
  69. public function created_at_start($created_at_start)
  70. {
  71. $this->queryBuilder->where('created_at', '>=', \Carbon\Carbon::parse($created_at_start)->startOfDay());
  72. }
  73. public function created_at_end($created_at_end)
  74. {
  75. $this->queryBuilder->where('created_at', '<=', \Carbon\Carbon::parse($created_at_end)->endOfDay());
  76. }
  77. public function title($title)
  78. {
  79. $this->queryBuilder->where('title', 'like', $title.'%');
  80. }
  81. }