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

FormasDePago   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 56
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 41
c 1
b 0
f 0
dl 0
loc 56
ccs 29
cts 29
cp 1
rs 10
wmc 5

2 Methods

Rating   Name   Duplication   Size   Complexity  
A checkHeaders() 0 26 2
A dataTable() 0 26 3
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