RequirementFilters.php 3.1 KB

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