Test Failed
Push — master ( e81f34...58150d )
by
unknown
19:06
created

BheEmitidas::enviarEmailBheEmitida()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 13
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 8
c 1
b 0
f 0
nc 1
nop 2
dl 0
loc 13
ccs 0
cts 11
cp 0
crap 2
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
/**
6
 * API Gateway: Cliente de API en PHP.
7
 * Copyright (C) API Gateway <https://www.apigateway.cl>
8
 *
9
 * Este programa es software libre: usted puede redistribuirlo y/o modificarlo
10
 * bajo los términos de la GNU Lesser General Public License (LGPL) 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 GNU Lesser General
17
 * Public License (LGPL) para obtener una información más detallada.
18
 *
19
 * Debería haber recibido una copia de la GNU Lesser General Public License
20
 * (LGPL) junto a este programa. En caso contrario, consulte
21
 * <http://www.gnu.org/licenses/lgpl.html>.
22
 */
23
24
namespace apigatewaycl\api_client\sii;
25
26
use apigatewaycl\api_client\ApiBase;
27
28
/*
29
 * Módulo para interactuar con Boletas de Honorarios Electrónicas emitidas del SII.
30
 *
31
 * Para más información sobre la API, consulte la `documentación completa de
32
 * las BHE <https://developers.apigateway.cl/#6181f73d-3ffa-4940-a2f3-1ac3607536ec>`_.
33
 */
34
class BheEmitidas extends ApiBase
35
{
36
    // Quién debe hacer la retención asociada al honorario para pagar al SII
37
    /**
38
     * Constante de causa de retención por parte del emisor.
39
     * @var int
40
     */
41
    public const RETENCION_RECEPTOR = 1;
42
43
    /**
44
     * Constante de causa de retención por parte del receptor.
45
     * @var int
46
     */
47
    public const RETENCION_EMISOR = 2;
48
49
    // Posibles motivos de anulación de una BHE
50
    /**
51
     * Constante de motivo de anulación de BHE por no pago.
52
     * @var int
53
     */
54
    public const ANULACION_CAUSA_SIN_PAGO = 1;
55
56
    /**
57
     * Constante de motivo de anulación de BHE por no tener prestación.
58
     * @var int
59
     */
60
    public const ANULACION_CAUSA_SIN_PRESTACION = 2;
61
62
    /**
63
     * Constante de motivo de anulación de BHE por error de digitación.
64
     * @var int
65
     */
66
    public const ANULACION_CAUSA_ERROR_DIGITACION = 3;
67
68
    /**
69
     * Cliente específico para gestionar Boletas de Honorarios Electrónicas (BHE) emitidas.
70
     *
71
     * Provee métodos para emitir, anular, y consultar información relacionada con BHEs.
72
     *
73
     * @param array $credenciales Credenciales de autenticación.
74
     * @param string|null $token Token de autenticación para la API.
75
     * @param string|null $url URL base para la API.
76
     */
77
    public function __construct(
78
        array $credenciales,
79
        string $token = null,
80
        string $url = null
81
    )
82
    {
83
        parent::__construct(
84
            credenciales: $credenciales,
85
            token: $token,
86
            url: $url
87
        );
88
    }
89
90
    /**
91
     * Obtiene los documentos de BHE emitidos por un emisor en un periodo específico.
92
     *
93
     * @param string $emisor RUT del emisor de las boletas.
94
     * @param string $periodo Período de tiempo de las boletas emitidas.
95
     * @param int|null $pagina Número de página para paginación (opcional).
96
     * @param string|null $pagina_sig_codigo Código para la siguiente página (opcional).
97
     * @return \Psr\Http\Message\ResponseInterface Respuesta JSON con los documentos de BHE.
98
     */
99
    public function listarBhesEmitidas(
100
        string $emisor,
101
        string $periodo,
102
        int $pagina = null,
103
        string $pagina_sig_codigo = null
104
    ) {
105
        $url = sprintf(
106
            '/sii/bhe/emitidas/documentos/%s/%s',
107
            $emisor,
108
            $periodo
109
        );
110
        if ($pagina != null) {
0 ignored issues
show
Bug Best Practice introduced by
It seems like you are loosely comparing $pagina of type integer|null against null; this is ambiguous if the integer can be zero. Consider using a strict comparison !== instead.
Loading history...
111
            $url = sprintf(
112
                $url.'?pagina=%d',
113
                $pagina
114
            );
115
            if ($pagina_sig_codigo != null) {
0 ignored issues
show
Bug introduced by
It seems like you are loosely comparing $pagina_sig_codigo of type null|string against null; this is ambiguous if the string can be empty. Consider using a strict comparison !== instead.
Loading history...
116
                $url = sprintf(
117
                    $url.'&pagina_sig_codigo=%s',
118
                    $pagina_sig_codigo ?? '0'
119
                );
120
            }
121
        }
122
        $body = [
123
            'auth' => $this->getAuthPass(),
124
        ];
125
        $response = $this->post($url, $body);
126
        return $response;
127
    }
128
129
    /**
130
     * Emite una nueva Boleta de Honorarios Electrónica.
131
     *
132
     * @param array $boleta Información detallada de la boleta a emitir.
133
     * @return \Psr\Http\Message\ResponseInterface Respuesta JSON con la
134
     * confirmación de la emisión de la BHE.
135
     */
136
    public function emitirBhe(array $boleta)
137
    {
138
        $url = '/sii/bhe/emitidas/emitir';
139
        $body = [
140
            'auth' => $this->getAuthPass(),
141
            'boleta' => $boleta,
142
        ];
143
144
        $response = $this->post($url, $body);
145
146
        return $response;
147
    }
148
149
    /**
150
     * Obtiene el PDF de una BHE emitida.
151
     *
152
     * @param string $codigo Código único de la BHE.
153
     * @return \Psr\Http\Message\ResponseInterface Contenido del PDF de la BHE.
154
     */
155
    public function descargarPdfBheEmitida(string $codigo)
156
    {
157
        $url = sprintf(
158
            '/sii/bhe/emitidas/pdf/%s',
159
            $codigo
160
        );
161
        $body = [
162
            'auth' => $this->getAuthPass(),
163
        ];
164
        $response = $this->post($url, $body);
165
166
        return $response;
167
    }
168
169
    /**
170
     * Envía por correo electrónico una BHE emitida.
171
     *
172
     * @param string $codigo Código único de la BHE a enviar.
173
     * @param string $email Dirección de correo electrónico a la cual enviar la BHE.
174
     * @return \Psr\Http\Message\ResponseInterface Respuesta JSON con la
175
     * confirmación del envío del email.
176
     */
177
    public function enviarEmailBheEmitida(string $codigo, string $email)
178
    {
179
        $url = sprintf(
180
            '/sii/bhe/emitidas/email/%s',
181
            $codigo
182
        );
183
        $body = [
184
            'auth' => $this->getAuthPass(),
185
            'destinatario' => ['email' => $email],
186
        ];
187
        $response = $this->post($url, $body);
188
189
        return $response;
190
    }
191
192
    /**
193
     * Anula una BHE emitida.
194
     *
195
     * @param string $emisor RUT del emisor de la boleta.
196
     * @param string $folio Número de folio de la boleta.
197
     * @param int $causa Motivo de anulación de la boleta.
198
     * @return \Psr\Http\Message\ResponseInterface Respuesta JSON con la
199
     * confirmación de la anulación de la BHE.
200
     */
201
    public function anularBheEmitida(
202
        string $emisor,
203
        string $folio,
204
        int $causa = self::ANULACION_CAUSA_ERROR_DIGITACION
205
    ) {
206
        $url = sprintf(
207
            '/sii/bhe/emitidas/anular/%s/%s?causa=%d',
208
            $emisor,
209
            $folio,
210
            $causa
211
        );
212
        $body = [
213
            'auth' => $this->getAuthPass(),
214
        ];
215
        $response = $this->post($url, $body);
216
217
        return $response;
218
    }
219
}
220