Passed
Pull Request — master (#14)
by Carlos C
02:36
created

CodigosPostales::create()   A

Complexity

Conditions 3
Paths 1

Size

Total Lines 25
Code Lines 20

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 21
CRAP Score 3

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 3
eloc 20
c 1
b 0
f 0
nc 1
nop 1
dl 0
loc 25
ccs 21
cts 21
cp 1
crap 3
rs 9.6
1
<?php
2
3
declare(strict_types=1);
4
5
namespace PhpCfdi\SatCatalogos\CFDI40;
6
7
use PhpCfdi\SatCatalogos\Common\AbstractCatalogIdentifiable;
8
use PhpCfdi\SatCatalogos\Common\EntryIdentifiable;
9
use PhpCfdi\SatCatalogos\Repository;
10
11
/**
12
 * Catálogo de CodigosPostales
13
 */
14
class CodigosPostales extends AbstractCatalogIdentifiable
15
{
16 1
    protected function catalogName(): string
17
    {
18 1
        return Repository::CFDI_40_CODIGOS_POSTALES;
19
    }
20
21
    /**
22
     * @param array<string, mixed> $data
23
     * @return CodigoPostal
24
     */
25 2
    public function create(array $data): EntryIdentifiable
26
    {
27 2
        return new CodigoPostal(
28 2
            $data['id'],
29 2
            $data['estado'],
30 2
            $data['municipio'],
31 2
            $data['localidad'],
32 2
            boolval($data['estimulo_frontera']),
33 2
            new HusoHorario(
34 2
                $data['huso_descripcion'],
35 2
                new HusoHorarioEstacion(
36 2
                    $data['huso_verano_mes_inicio'],
37 2
                    $data['huso_verano_dia_inicio'],
38 2
                    $data['huso_verano_hora_inicio'],
39 2
                    intval($data['huso_verano_diferencia'])
40
                ),
41 2
                new HusoHorarioEstacion(
42 2
                    $data['huso_invierno_mes_inicio'],
43 2
                    $data['huso_invierno_dia_inicio'],
44 2
                    $data['huso_invierno_hora_inicio'],
45 2
                    intval($data['huso_invierno_diferencia'])
46
                )
47
            ),
48 2
            ($data['vigencia_desde']) ? strtotime($data['vigencia_desde']) : 0,
49 2
            ($data['vigencia_hasta']) ? strtotime($data['vigencia_hasta']) : 0
50
        );
51
    }
52
53
    /**
54
     * @param string $id
55
     * @return CodigoPostal
56
     */
57 2
    public function obtain(string $id): EntryIdentifiable
58
    {
59
        /*
60
         * Caso especial, el registro no existe en la tabla de códigos postales
61
         * Se devuelve el registro sin estado porque es válido para cualquier estado
62
         */
63 2
        if ('00000' === $id) {
64 1
            return $this->create([
65
                'id' => '00000',
66
                'estado' => '*',
67
                'municipio' => '000',
68
                'localidad' => '00',
69
                'estimulo_frontera' => false,
70
                'huso_descripcion' => '',
71
                'huso_verano_mes_inicio' => '',
72
                'huso_verano_dia_inicio' => '',
73
                'huso_verano_hora_inicio' => '',
74
                'huso_verano_diferencia' => '-6',
75
                'huso_invierno_mes_inicio' => '',
76
                'huso_invierno_dia_inicio' => '',
77
                'huso_invierno_hora_inicio' => '',
78
                'huso_invierno_diferencia' => '-6',
79
                'vigencia_desde' => '0',
80
                'vigencia_hasta' => '2019-10-14',
81
            ]);
82
        }
83
84
        // have to do this to avoid phpstan compain, issue: https://github.com/phpstan/phpstan/issues/1065
85
        /** @var CodigoPostal $codigoPostal */
86 1
        $codigoPostal = parent::obtain($id);
87 1
        return $codigoPostal;
88
    }
89
}
90