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

CodigosPostales::create()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 26
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 22
CRAP Score 1

Importance

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