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

FormasDePago::dataTable()   A

Complexity

Conditions 3
Paths 1

Size

Total Lines 26
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 22
CRAP Score 3

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 3
eloc 21
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 26
ccs 22
cts 22
cp 1
crap 3
rs 9.584
1
<?php
2
3
declare(strict_types=1);
4
5
namespace PhpCfdi\SatCatalogosPopulate\Importers\Cfdi40\Injectors;
6
7
use PhpCfdi\SatCatalogosPopulate\AbstractCsvInjector;
8
use PhpCfdi\SatCatalogosPopulate\Database\BoolDataField;
9
use PhpCfdi\SatCatalogosPopulate\Database\DataFields;
10
use PhpCfdi\SatCatalogosPopulate\Database\DataTable;
11
use PhpCfdi\SatCatalogosPopulate\Database\DateDataField;
12
use PhpCfdi\SatCatalogosPopulate\Database\PaddingDataField;
13
use PhpCfdi\SatCatalogosPopulate\Database\TextDataField;
14
use PhpCfdi\SatCatalogosPopulate\InjectorInterface;
15
use PhpCfdi\SatCatalogosPopulate\Utils\CsvFile;
16
use RuntimeException;
17
18
use function PhpCfdi\SatCatalogosPopulate\Utils\array_rtrim;
19
20
class FormasDePago extends AbstractCsvInjector implements InjectorInterface
21
{
22 3
    public function checkHeaders(CsvFile $csv): void
23
    {
24 3
        $csv->move(3);
25 3
        $expected = [
26
            'c_FormaPago',
27
            'Descripción',
28
            'Bancarizado',
29
            'Número de operación',
30
            'RFC del Emisor de la cuenta ordenante',
31
            'Cuenta Ordenante',
32
            'Patrón para cuenta ordenante',
33
            'RFC del Emisor Cuenta de Beneficiario',
34
            'Cuenta de Benenficiario',
35
            'Patrón para cuenta Beneficiaria',
36
            'Tipo Cadena Pago',
37
            'Nombre del Banco emisor de la cuenta ordenante en caso de extranjero',
38
            'Fecha inicio de vigencia',
39
            'Fecha fin de vigencia',
40
        ];
41 3
        $headers = array_rtrim($csv->readLine());
42
43 3
        if ($expected !== $headers) {
44 1
            throw new RuntimeException("The headers did not match on file {$this->sourceFile()}");
45
        }
46
47 2
        $csv->next();
48
    }
49
50 31
    public function dataTable(): DataTable
51
    {
52 31
        $pattern = function (string $input): string {
53 27
            if ('No' === $input) {
54 3
                return '';
55
            }
56 27
            if ('Opcional' === $input) {
57 3
                return '\V*';
58
            }
59 27
            return $input;
60
        };
61 31
        return new DataTable('cfdi_40_formas_pago', new DataFields([
62 31
            new PaddingDataField('id', '0', 2),
63 31
            new TextDataField('texto'),
64 31
            new BoolDataField('es_bancarizado', ['Sí']),
65 31
            new BoolDataField('requiere_numero_operacion', [], ['Opcional'], true),
66 31
            new BoolDataField('permite_banco_ordenante_rfc', [], ['No'], true),
67 31
            new BoolDataField('permite_cuenta_ordenante', [], ['No'], true),
68 31
            new TextDataField('patron_cuenta_ordenante', $pattern),
69 31
            new BoolDataField('permite_banco_beneficiario_rfc', [], ['No'], true),
70 31
            new BoolDataField('permite_cuenta_beneficiario', [], ['No'], true),
71 31
            new TextDataField('patron_cuenta_beneficiario', $pattern),
72 31
            new BoolDataField('permite_tipo_cadena_pago', [], ['No'], true),
73 31
            new BoolDataField('requiere_banco_ordenante_nombre_ext', [], ['No'], true),
74 31
            new DateDataField('vigencia_desde'),
75 31
            new DateDataField('vigencia_hasta'),
76
        ]));
77
    }
78
}
79