Colonias   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 61
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 26
c 1
b 0
f 0
dl 0
loc 61
ccs 33
cts 33
cp 1
rs 10
wmc 6

4 Methods

Rating   Name   Duplication   Size   Complexity  
A create() 0 7 1
A searchColonias() 0 13 1
A find() 0 11 2
A obtain() 0 9 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace PhpCfdi\SatCatalogos\CFDI40;
6
7
use PhpCfdi\SatCatalogos\Common\BaseCatalog;
8
use PhpCfdi\SatCatalogos\Common\BaseCatalogTrait;
9
use PhpCfdi\SatCatalogos\Exceptions\SatCatalogosNotFoundException;
10
use PhpCfdi\SatCatalogos\Helpers\ScalarValues;
11
use PhpCfdi\SatCatalogos\Repository;
12
13
/**
14
 * Catálogo de Colonias
15
 */
16
class Colonias implements BaseCatalog
17
{
18
    use BaseCatalogTrait;
19
20 5
    public function obtain(string $colonia, string $codigoPostal): Colonia
21
    {
22 5
        $found = $this->find($colonia, $codigoPostal);
23 5
        if (null === $found) {
24 2
            throw new SatCatalogosNotFoundException(
25 2
                "No se encontró una colonia $colonia con código postal $codigoPostal",
26 2
            );
27
        }
28 3
        return $found;
29
    }
30
31 5
    public function find(string $colonia, string $codigoPostal): ?Colonia
32
    {
33
        /** @var array<array<string, scalar>> $data */
34 5
        $data = $this->repository()->queryRowsByFields(Repository::CFDI_40_COLONIAS, [
35 5
            'colonia' => $colonia,
36 5
            'codigo_postal' => $codigoPostal,
37 5
        ]);
38 5
        if (! isset($data[0])) {
39 2
            return null;
40
        }
41 3
        return $this->create($data[0]);
42
    }
43
44
    /**
45
     * @param string $colonia
46
     * @param string $codigoPostal
47
     * @param string $asentamiento
48
     * @return Colonia[]
49
     */
50 3
    public function searchColonias(string $colonia = '%', string $codigoPostal = '%', string $asentamiento = '%'): array
51
    {
52 3
        $filters = [
53 3
            'colonia' => $colonia,
54 3
            'codigo_postal' => $codigoPostal,
55 3
            'texto' => $asentamiento,
56 3
        ];
57
58 3
        return array_map(
59 3
            function (array $data): Colonia {
60 3
                return $this->create($data);
61 3
            },
62 3
            $this->repository()->queryRowsByFields(Repository::CFDI_40_COLONIAS, $filters, 0, false),
63 3
        );
64
    }
65
66
    /**
67
     * @param array<string, scalar> $data
68
     * @return Colonia
69
     */
70 7
    public function create(array $data): Colonia
71
    {
72 7
        $values = new ScalarValues($data);
73 7
        return new Colonia(
74 7
            $values->string('colonia'),
75 7
            $values->string('codigo_postal'),
76 7
            $values->string('texto'),
77 7
        );
78
    }
79
}
80