Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
61.54% covered (warning)
61.54%
16 / 26
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
SupplierQueryBuilder
61.54% covered (warning)
61.54%
16 / 26
0.00% covered (danger)
0.00%
0 / 1
11.64
0.00% covered (danger)
0.00%
0 / 1
 search
61.54% covered (warning)
61.54%
16 / 26
0.00% covered (danger)
0.00%
0 / 1
11.64
1<?php
2
3namespace Domain\Supplier\QueryBuilders;
4
5use Domain\Supplier\DTOs\SearchSupplierDTO;
6use Domain\Supplier\Support\SupplierDocument;
7use Illuminate\Database\Eloquent\Builder;
8
9class SupplierQueryBuilder extends Builder
10{
11
12    /**
13     * @param SearchSupplierDTO $supplierDTO
14     * @return $this
15     */
16    public function search(SearchSupplierDTO $supplierDTO): static
17    {
18        if ($supplierDTO->description) {
19            $this->where('description', 'ILIKE', "%{$supplierDTO->description}%");
20        }
21
22        if ($supplierDTO->cnpj) {
23            $legacyDocument = SupplierDocument::legacySearchVariant($supplierDTO->cnpj);
24
25            $this->where(function (Builder $query) use ($supplierDTO, $legacyDocument) {
26                $query->where('cnpj', $supplierDTO->cnpj);
27
28                if ($legacyDocument !== null) {
29                    $query->orWhere('cnpj', $legacyDocument);
30                }
31            });
32        }
33
34        if ($supplierDTO->supplierCode) {
35            $this->whereHas('integration', function (Builder $query) use ($supplierDTO) {
36                $query->whereRaw("parameters->>'CODFOR' = ?", [$supplierDTO->supplierCode]);
37            });
38        }
39
40        if ($supplierDTO->id) {
41            $this->where('id', $supplierDTO->id);
42        }
43
44        if ($supplierDTO->created_at) {
45            $this->whereBetween('created_at', [
46                $supplierDTO->created_at[0]->startOfDay(),
47                $supplierDTO->created_at[1]->endOfDay(),
48            ]);
49        }
50
51        if ($supplierDTO->updated_at) {
52            $this->whereBetween('updated_at', [
53                $supplierDTO->updated_at[0]->startOfDay(),
54                $supplierDTO->updated_at[1]->endOfDay(),
55            ]);
56        }
57
58        return $this;
59    }
60}