| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- <?php
- namespace App\Filters;
- use App\Order;
- use App\RequirementUser;
- use App\Services\UserService;
- use Illuminate\Http\Request;
- use Illuminate\Support\Carbon;
- use Illuminate\Support\Str;
- use phpDocumentor\Reflection\Types\Boolean;
- class RequirementFilters
- {
- protected $request;
- protected $queryBuilder;
- protected $filters = [
- 'title',
- 'creator_id',
- 'worker_ids',
- 'began_at_start',
- 'began_at_end',
- 'finished_at_start',
- 'finished_at_end',
- 'created_at_start',
- 'created_at_end',
- ];
- public function __construct(Request $request)
- {
- $this->request = $request;
- }
- public function apply($builder)
- {
- $this->queryBuilder = $builder;
- $filters = array_filter($this->request->only($this->filters));
- foreach ($filters as $filter => $value) {
- if (method_exists($this, $filter)) {
- $this->$filter($value, $this->queryBuilder);
- }
- }
- return $this->queryBuilder;
- }
- public function creator_id($creator_id)
- {
- $this->queryBuilder->where('user_id', $creator_id);
- }
- private function worker_ids($worker_ids)
- {
- if (strpos($worker_ids, ',') || strpos($worker_ids, ',') || strpos($worker_ids, ' ')) {
- $arr = array_filter(preg_split('/[,, ]+/is', $worker_ids));
- $this->queryBuilder->whereIn('id', RequirementUser::query()->select('requirement_id')->whereIn('user_id', $arr));
- } else {
- $this->queryBuilder->whereIn('id', RequirementUser::query()->select('requirement_id')->where('user_id', $worker_ids));
- }
- }
- public function began_at_start($began_at_start)
- {
- $this->queryBuilder->where('begin_at', '>=', \Carbon\Carbon::parse($began_at_start)->startOfDay());
- }
- public function began_at_end($began_at_end)
- {
- $this->queryBuilder->where('begin_at', '<=', \Carbon\Carbon::parse($began_at_end)->endOfDay());
- }
- public function finished_at_start($finished_at_start)
- {
- $this->queryBuilder->where('finished_at', '>=', \Carbon\Carbon::parse($finished_at_start)->startOfDay());
- }
- public function finished_at_end($finished_at_end)
- {
- $this->queryBuilder->where('finished_at', '<=', \Carbon\Carbon::parse($finished_at_end)->endOfDay());
- }
- public function created_at_start($created_at_start)
- {
- $this->queryBuilder->where('created_at', '>=', \Carbon\Carbon::parse($created_at_start)->startOfDay());
- }
- public function created_at_end($created_at_end)
- {
- $this->queryBuilder->where('created_at', '<=', \Carbon\Carbon::parse($created_at_end)->endOfDay());
- }
- public function title($title)
- {
- $this->queryBuilder->where('title', 'like', $title.'%');
- }
- }
|