Passed
Push — master ( c02ff8...8cf6c5 )
by Esteban De La Fuente
06:05
created

DocumentUploadStatusEmailResponse   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 90
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 38
c 1
b 0
f 0
dl 0
loc 90
ccs 0
cts 28
cp 0
rs 10
wmc 6

2 Methods

Rating   Name   Duplication   Size   Complexity  
A getData() 0 32 4
A parseEstado() 0 13 2
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
11
 * por la Fundación para el Software Libre, ya sea la versión 3 de la Licencia,
12
 * o (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\Sii\HttpClient\WebService;
26
27
/**
28
 * Respuesta de la solicitud de correo de estado de un documento subido al SII.
29
 *
30
 * Referencia: https://www.sii.cl/factura_electronica/factura_mercado/OIFE2005_wsDTECorreo_MDE.pdf
31
 */
32
class DocumentUploadStatusEmailResponse extends AbstractWebServiceResponse
33
{
34
    /**
35
     * Estados de salida y error.
36
     *
37
     * El resultado de la consulta al SII puede arrojar uno de estos estados.
38
     *
39
     * En otros servicios los estados se separan en estados "normales" y
40
     * "errores", acá solo hay una lista donde solo "0" es el estado "normal" y
41
     * todo los demás son códigos de estado de errores.
42
     */
43
    private const STATUSES = [
44
        '0' => 'Requerimiento recibido OK.',
45
        // Errores de Datos.
46
        '101' => 'Error en dígito verificador del Rut de la empresa.',
47
        '102' => 'Faltan datos de entrada.',
48
        '105' => 'Error Track ID no existe.',
49
        '106' => 'Usuario autenticado no tiene permisos sobre Empresa.',
50
        '114' => 'Envío solicitado no ha concluido su validación, por lo tanto no existe correo.',
51
        // Errores por autenticación.
52
        '104' => 'Token Inactivo o No Existe',
53
        // Otros Errores.
54
        '103' => 'Error Interno.',
55
        '107' => 'Error Interno.',
56
        '108' => 'Error Interno.',
57
        '110' => 'Error Interno.',
58
        '111' => 'Error Interno.',
59
        '112' => 'Error Interno.',
60
        '113' => 'Error Interno.',
61
    ];
62
63
    /**
64
     * Obtiene los datos normalizados de la respuesta.
65
     *
66
     * @return array Datos normalizados de la respuesta del SII.
67
     */
68
    public function getData(): array
69
    {
70
        // Si no existen los datos normalizados de la respuesta se normalizan.
71
        if (!isset($this->data)) {
72
            // RUT de la empresa emisora del documento.
73
            $rutExists = isset($this->requestData['RutEmpresa'])
74
                && isset($this->requestData['DvEmpresa'])
75
            ;
76
            $company = $rutExists
77
                ? $this->requestData['RutEmpresa']
78
                    . '-' . $this->requestData['DvEmpresa']
79
                : null
80
            ;
81
82
            // Normalizar el estado de la consulta del envío.
83
            [$status, $description] = $this->parseEstado(
84
                $this->headers,
85
                $this->body
86
            );
87
88
            // Armar los datos normalizados.
89
            $this->data = [
90
                'company' => $company,
91
                'track_id' => $this->requestData['TrackId'] ?? null,
92
                'status' => $status,
93
                'description' => $description,
94
                'token' => $this->requestData['Token'] ?? null,
95
            ];
96
        }
97
98
        // Entregar los datos de la respuesta del estado del DTE.
99
        return $this->data;
100
    }
101
102
    /**
103
     * Parsea el estado de la respuesta del SII.
104
     *
105
     * @param array $headers Encabezados de la respuesta.
106
     * @param array $body Cuerpo de la respuesta.
107
     * @return array Arreglo con el estado, error y descripción.
108
     */
109
    private function parseEstado(array $headers, array $body): array
0 ignored issues
show
Unused Code introduced by
The parameter $body is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

109
    private function parseEstado(array $headers, /** @scrutinizer ignore-unused */ array $body): array

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
110
    {
111
        // Asignar el código del estado.
112
        $status = $headers['SII:ESTADO'];
113
        $description = $headers['SII:GLOSA'] ?? null;
114
115
        // Si existe una glosa para el estado se reemplaza la recibida del SII.
116
        if (isset(self::STATUSES[$status])) {
117
            $description = self::STATUSES[$status];
118
        }
119
120
        // Entregar valores determinados para el error.
121
        return [$status, $description];
122
    }
123
}
124