Test Failed
Push — master ( 59e870...659f9a )
by Esteban De La Fuente
04:33
created

AbstractSanitizerStrategy::sanitizeEssentials()   C

Complexity

Conditions 10
Paths 193

Size

Total Lines 62
Code Lines 31

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 36
CRAP Score 10.2918

Importance

Changes 0
Metric Value
cc 10
eloc 31
nc 193
nop 1
dl 0
loc 62
ccs 36
cts 42
cp 0.8571
crap 10.2918
rs 6.8916
c 0
b 0
f 0

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
declare(strict_types=1);
4
5
/**
6
 * LibreDTE: Biblioteca PHP (Núcleo).
7
 * Copyright (C) LibreDTE <https://www.libredte.cl>
8
 *
9
 * Este programa es software libre: usted puede redistribuirlo y/o modificarlo
10
 * bajo los términos de la Licencia Pública General Affero de GNU publicada por
11
 * la Fundación para el Software Libre, ya sea la versión 3 de la Licencia, o
12
 * (a su elección) cualquier versión posterior de la misma.
13
 *
14
 * Este programa se distribuye con la esperanza de que sea útil, pero SIN
15
 * GARANTÍA ALGUNA; ni siquiera la garantía implícita MERCANTIL o de APTITUD
16
 * PARA UN PROPÓSITO DETERMINADO. Consulte los detalles de la Licencia Pública
17
 * General Affero de GNU para obtener una información más detallada.
18
 *
19
 * Debería haber recibido una copia de la Licencia Pública General Affero de
20
 * GNU junto a este programa.
21
 *
22
 * En caso contrario, consulte <http://www.gnu.org/licenses/agpl.html>.
23
 */
24
25
namespace libredte\lib\Core\Package\Billing\Component\Document\Abstract;
26
27
use Derafu\Lib\Core\Foundation\Abstract\AbstractStrategy;
28
use Derafu\Lib\Core\Helper\Rut;
29
use libredte\lib\Core\Package\Billing\Component\Document\Contract\DocumentBagInterface;
30
use libredte\lib\Core\Package\Billing\Component\Document\Contract\SanitizerStrategyInterface;
31
use libredte\lib\Core\Package\Billing\Component\Document\Exception\SanitizerException;
32
33
/**
34
 * Clase abstracta (base) para las estrategias de sanitización de documentos
35
 * tributarios.
36
 */
37
abstract class AbstractSanitizerStrategy extends AbstractStrategy implements SanitizerStrategyInterface
38
{
39
    /**
40
     * {@inheritdoc}
41
     */
42 58
    public function sanitize(DocumentBagInterface $bag): array
43
    {
44 58
        $this->sanitizeEssentials($bag);
45 58
        $this->sanitizeDocument($bag);
46
47 58
        return $bag->getNormalizedData();
0 ignored issues
show
Bug Best Practice introduced by
The expression return $bag->getNormalizedData() could return the type null which is incompatible with the type-hinted return array. Consider adding an additional type-check to rule them out.
Loading history...
48
    }
49
50
    /**
51
     * Sanitización personalizada de cada estrategia.
52
     *
53
     * @param DocumentBagInterface $bag
54
     * @return void
55
     */
56
    abstract protected function sanitizeDocument(DocumentBagInterface $bag): void;
57
58
    /**
59
     * Limpia los datos esenciales del documento.
60
     *
61
     * @param DocumentBagInterface $bag
62
     * @return void
63
     */
64 58
    protected function sanitizeEssentials(DocumentBagInterface $bag): void
65
    {
66 58
        $data = $bag->getNormalizedData();
67
68
        // Si no viene un folio asignado error.
69 58
        if (!isset($data['Encabezado']['IdDoc']['Folio'])) {
70
            throw new SanitizerException(
71
                'Es obligatorio indicar el folio del documento.'
72
            );
73
        }
74
75
        // Formatear los RUT.
76 58
        $data['Encabezado']['Emisor']['RUTEmisor'] = Rut::format(
77 58
            $data['Encabezado']['Emisor']['RUTEmisor']
78 58
        );
79 58
        $data['Encabezado']['Receptor']['RUTRecep'] = Rut::format(
80 58
            $data['Encabezado']['Receptor']['RUTRecep']
81 58
        );
82
83
        // Limpiar datos del emisor.
84 58
        if (!empty($data['Encabezado']['Emisor']['Acteco'])) {
85 49
            if (strlen((string)$data['Encabezado']['Emisor']['Acteco']) === 5) {
86
                $data['Encabezado']['Emisor']['Acteco'] =
87
                    '0' . $data['Encabezado']['Emisor']['Acteco']
88
                ;
89
            }
90
        }
91
92
        // Limpiar datos del receptor.
93 58
        if (!empty($data['Encabezado']['Receptor']['RznSocRecep'])) {
94 58
            $data['Encabezado']['Receptor']['RznSocRecep'] =
95 58
                mb_substr($data['Encabezado']['Receptor']['RznSocRecep'], 0, 100)
96 58
            ;
97
        }
98 58
        if (!empty($data['Encabezado']['Receptor']['GiroRecep'])) {
99 52
            $data['Encabezado']['Receptor']['GiroRecep'] =
100 52
                mb_substr($data['Encabezado']['Receptor']['GiroRecep'], 0, 40)
101 52
            ;
102
        }
103 58
        if (!empty($data['Encabezado']['Receptor']['Contacto'])) {
104 1
            $data['Encabezado']['Receptor']['Contacto'] =
105 1
                mb_substr($data['Encabezado']['Receptor']['Contacto'], 0, 80)
106 1
            ;
107
        }
108 58
        if (!empty($data['Encabezado']['Receptor']['CorreoRecep'])) {
109 1
            $data['Encabezado']['Receptor']['CorreoRecep'] =
110 1
                mb_substr($data['Encabezado']['Receptor']['CorreoRecep'], 0, 80)
111 1
            ;
112
        }
113 58
        if (!empty($data['Encabezado']['Receptor']['DirRecep'])) {
114 58
            $data['Encabezado']['Receptor']['DirRecep'] =
115 58
                mb_substr($data['Encabezado']['Receptor']['DirRecep'], 0, 70)
116 58
            ;
117
        }
118 58
        if (!empty($data['Encabezado']['Receptor']['CmnaRecep'])) {
119 48
            $data['Encabezado']['Receptor']['CmnaRecep'] =
120 48
                mb_substr($data['Encabezado']['Receptor']['CmnaRecep'], 0, 20)
121 48
            ;
122
        }
123
124
        // Actualizar los datos normalizados con los sanitizados.
125 58
        $bag->setNormalizedData($data);
126
    }
127
}
128