Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 27
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
TransferTaskBuilder
0.00% covered (danger)
0.00%
0 / 27
0.00% covered (danger)
0.00%
0 / 3
132
0.00% covered (danger)
0.00%
0 / 1
 visibleToCurrentUser
0.00% covered (danger)
0.00%
0 / 10
0.00% covered (danger)
0.00%
0 / 1
12
 withoutConcluded
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 search
0.00% covered (danger)
0.00%
0 / 15
0.00% covered (danger)
0.00%
0 / 1
56
1<?php
2
3namespace Domain\TransferTask\QueryBuilders;
4
5use App\Models\User;
6use Domain\TransferTask\DTOs\TransferTaskSearchDTO;
7use Domain\TransferTask\Enums\TransferTaskStatusEnum;
8use Illuminate\Database\Eloquent\Builder;
9use Illuminate\Support\Facades\Auth;
10
11class TransferTaskBuilder extends Builder
12{
13
14    public function visibleToCurrentUser(): static
15    {
16        /** @var User $user */
17        $user = Auth::user();
18
19        if ($user->isMaster()) return $this;
20
21        if (!$user->isAdmin()) {
22            $this->where(function (Builder $query) use ($user) {
23                $query->orWhere('created_by', $user->getKey());
24                $query->orWhere('responsible_id', $user->getKey());
25                $query->orWhereNull('responsible_id');
26            });
27        }
28
29        $this->whereIn('team_id', $user->teams->pluck('id')->toArray());
30
31        return $this;
32    }
33
34    public function withoutConcluded(): static
35    {
36        $this->where('status', '!=', TransferTaskStatusEnum::CONCLUDED->value);
37
38        return $this;
39    }
40
41    public function search(TransferTaskSearchDTO $searchDTO): static
42    {
43        if ($searchDTO->status) {
44            $this->orWhereIn('status', $searchDTO->status);
45        }
46
47        if ($searchDTO->products) {
48            $this->whereHas('transferTaskProducts', function (Builder $query) use ($searchDTO) {
49                $query->WhereIn('product_id', $searchDTO->products);
50            });
51        }
52
53        if ($searchDTO->teams) {
54            $this->wherein('team_id', $searchDTO->teams);
55        }
56
57        if ($searchDTO->creators) {
58            $this->wherein('created_by', $searchDTO->creators);
59        }
60
61        if ($searchDTO->responsible) {
62            $this->wherein('responsible_id', $searchDTO->responsible);
63        }
64
65        if ($searchDTO->id) {
66            $this->where('id', $searchDTO->id);
67        }
68
69        return $this;
70    }
71}