Passed
Push — master ( c090bb...e5cdcf )
by Carlos C
01:54 queued 12s
created

CodigosPostales   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 76
Duplicated Lines 0 %

Test Coverage

Coverage 96.88%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 54
c 1
b 0
f 0
dl 0
loc 76
ccs 31
cts 32
cp 0.9688
rs 10
wmc 7

3 Methods

Rating   Name   Duplication   Size   Complexity  
A checkHeaders() 0 40 3
A dataTable() 0 19 1
A readLinesFromCsv() 0 8 3
1
<?php
2
3
declare(strict_types=1);
4
5
namespace PhpCfdi\SatCatalogosPopulate\Importers\Cfdi40\Injectors;
6
7
use Generator;
8
use PhpCfdi\SatCatalogosPopulate\AbstractCsvInjector;
9
use PhpCfdi\SatCatalogosPopulate\Database\BoolDataField;
10
use PhpCfdi\SatCatalogosPopulate\Database\DataFields;
11
use PhpCfdi\SatCatalogosPopulate\Database\DataTable;
12
use PhpCfdi\SatCatalogosPopulate\Database\DateDataField;
13
use PhpCfdi\SatCatalogosPopulate\Database\TextDataField;
14
use PhpCfdi\SatCatalogosPopulate\Utils\CsvFile;
15
use RuntimeException;
16
17
class CodigosPostales extends AbstractCsvInjector
18
{
19 4
    public function checkHeaders(CsvFile $csv): void
20
    {
21 4
        $csv->move(3);
22 4
        $expectedLines = [
23
            [
24
                'c_CodigoPostal',
25
                'c_Estado',
26
                'c_Municipio',
27
                'c_Localidad',
28
                'Estímulo Franja Fronteriza',
29
                'Fecha inicio de vigencia',
30
                'Fecha fin de vigencia',
31
                'Referencias del Huso Horario',
32
            ],
33
            [
34
                '',
35
                '',
36
                '',
37
                '',
38
                '',
39
                '',
40
                '',
41
                'Descripción del Huso Horario',
42
                'Mes_Inicio_Horario_Verano',
43
                'Día_Inicio_Horario_Verano',
44
                'Día_Inicio_Horario_Verano',
45
                'Diferencia_Horaria_Verano',
46
                'Mes_Inicio_Horario_Invierno',
47
                'Día_Inicio_Horario_Invierno',
48
                'Día_Inicio_Horario_Invierno',
49
                'Diferencia_Horaria_Invierno',
50
            ],
51
        ];
52 4
        foreach ($expectedLines as $line => $expected) {
53 4
            $line = $line + 1;
54 4
            $headers = array_map(fn ($line): string => trim((string) $line), $csv->readLine());
55 4
            if ($expected !== $headers) {
56 1
                throw new RuntimeException("The headers did not match on file {$this->sourceFile()} line {$line}");
57
            }
58 3
            $csv->next();
59
        }
60
    }
61
62 3
    public function dataTable(): DataTable
63
    {
64 3
        return new DataTable('cfdi_40_codigos_postales', new DataFields([
65 3
            new TextDataField('id'),
66 3
            new TextDataField('estado'),
67 3
            new TextDataField('municipio'),
68 3
            new TextDataField('localidad'),
69 3
            new BoolDataField('estimulo_frontera', ['1']),
70 3
            new DateDataField('vigencia_desde'),
71 3
            new DateDataField('vigencia_hasta'),
72 3
            new TextDataField('huso_descripcion'),
73 3
            new TextDataField('huso_verano_mes_inicio'),
74 3
            new TextDataField('huso_verano_dia_inicio'),
75 3
            new TextDataField('huso_verano_hora_inicio'),
76 3
            new TextDataField('huso_verano_diferencia'),
77 3
            new TextDataField('huso_invierno_mes_inicio'),
78 3
            new TextDataField('huso_invierno_dia_inicio'),
79 3
            new TextDataField('huso_invierno_hora_inicio'),
80 3
            new TextDataField('huso_invierno_diferencia'),
81
        ]));
82
    }
83
84
    /** @inheritdoc */
85 2
    protected function readLinesFromCsv(CsvFile $csv): Generator
86
    {
87 2
        foreach ($csv->readLines() as $line) {
88 2
            if ('00000' === $line[0]) {
89
                continue;
90
            }
91
92 2
            yield $line;
93
        }
94
    }
95
}
96