Completed
Push — master ( 35135d...676ec5 )
by Esteban De La Fuente
02:22
created

DteImpreso::setWebVerificacion()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
1
<?php
2
3
/**
4
 * LibreDTE
5
 * Copyright (C) SASCO SpA (https://sasco.cl)
6
 *
7
 * Este programa es software libre: usted puede redistribuirlo y/o
8
 * modificarlo bajo los términos de la Licencia Pública General Affero de GNU
9
 * publicada por la Fundación para el Software Libre, ya sea la versión
10
 * 3 de la Licencia, o (a su elección) cualquier versión posterior de la
11
 * misma.
12
 *
13
 * Este programa se distribuye con la esperanza de que sea útil, pero
14
 * SIN GARANTÍA ALGUNA; ni siquiera la garantía implícita
15
 * MERCANTIL o de APTITUD PARA UN PROPÓSITO DETERMINADO.
16
 * Consulte los detalles de la Licencia Pública General Affero de GNU para
17
 * obtener una información más detallada.
18
 *
19
 * Debería haber recibido una copia de la Licencia Pública General Affero de GNU
20
 * junto a este programa.
21
 * En caso contrario, consulte <http://www.gnu.org/licenses/agpl.html>.
22
 */
23
24
namespace sasco\LibreDTE\Sii\Dte\Base;
25
26
/**
27
 * Trait para las clases que generan documentos impresos (ej: PDF y ESCPOS)
28
 * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl)
29
 * @version 2018-11-04
30
 */
31
trait DteImpreso
32
{
33
34
    protected $dte; ///< Tipo de DTE que se está generando
35
    protected $resolucion; ///< Arreglo con los datos de la resolución (índices: NroResol y FchResol)
36
    protected $cedible = false; ///< Por defecto DTEs no son cedibles
37
    protected $casa_matriz = false; ///< Dirección de la casa matriz
38
    protected $web_verificacion = 'www.sii.cl'; ///< Página web para verificar el documento
39
40
    protected $sinAcuseRecibo = [39, 41, 56, 61, 110, 111, 112]; ///< Boletas, notas de crédito y notas de débito no tienen acuse de recibo
41
42
    protected $tipos = [
43
        // códigos oficiales SII
44
        29 => 'FACTURA DE INICIO',
45
        30 => 'FACTURA',
46
        32 => 'FACTURA DE VENTA BIENES Y SERVICIOS NO AFECTOS O EXENTOS DE IVA',
47
        33 => 'FACTURA ELECTRÓNICA',
48
        34 => 'FACTURA NO AFECTA O EXENTA ELECTRÓNICA',
49
        35 => 'BOLETA',
50
        38 => 'BOLETA EXENTA',
51
        39 => 'BOLETA ELECTRÓNICA',
52
        40 => 'LIQUIDACION FACTURA',
53
        41 => 'BOLETA NO AFECTA O EXENTA ELECTRÓNICA',
54
        43 => 'LIQUIDACIÓN FACTURA ELECTRÓNICA',
55
        45 => 'FACTURA DE COMPRA',
56
        46 => 'FACTURA DE COMPRA ELECTRÓNICA',
57
        48 => 'COMPROBANTE DE PAGO ELECTRÓNICO',
58
        50 => 'GUÍA DE DESPACHO',
59
        52 => 'GUÍA DE DESPACHO ELECTRÓNICA',
60
        55 => 'NOTA DE DÉBITO',
61
        56 => 'NOTA DE DÉBITO ELECTRÓNICA',
62
        60 => 'NOTA DE CRÉDITO',
63
        61 => 'NOTA DE CRÉDITO ELECTRÓNICA',
64
        101 => 'FACTURA DE EXPORTACIÓN',
65
        102 => 'FACTURA DE VENTA EXENTA A ZONA FRANCA PRIMARIA',
66
        103 => 'LIQUIDACIÓN',
67
        104 => 'NOTA DE DÉBITO DE EXPORTACIÓN',
68
        105 => 'BOLETA LIQUIDACIÓN',
69
        106 => 'NOTA DE CRÉDITO DE EXPORTACIÓN',
70
        108 => 'SOLICITUD REGISTRO DE FACTURA (SRF)',
71
        109 => 'FACTURA TURISTA',
72
        110 => 'FACTURA DE EXPORTACIÓN ELECTRÓNICA',
73
        111 => 'NOTA DE DÉBITO DE EXPORTACIÓN ELECTRÓNICA',
74
        112 => 'NOTA DE CRÉDITO DE EXPORTACIÓN ELECTRÓNICA',
75
        801 => 'ORDEN DE COMPRA',
76
        802 => 'NOTA DE PEDIDO',
77
        803 => 'CONTRATO',
78
        804 => 'RESOLUCIÓN',
79
        805 => 'PROCEDO CHILECOMPRA',
80
        806 => 'FICHA CHILECOMPRA',
81
        807 => 'DUS',
82
        808 => 'B/L (CONOCIMIENTO DE EMBARQUE)',
83
        809 => 'AWB',
84
        810 => 'MIC (MANIFIESTO INTERNACIONAL)',
85
        811 => 'CARTA DE PORTE',
86
        812 => 'RESOLUCION SNA',
87
        813 => 'PASAPORTE',
88
        814 => 'CERTIFICADO DE DEPÓSITO BOLSA PROD. CHILE',
89
        815 => 'VALE DE PRENDA BOLSA PROD. CHILE',
90
        901 => 'FACTURA DE VENTAS A EMPRESAS DEL TERRITORIO PREFERENCIAL',
91
        902 => 'CONOCIMIENTO DE EMBARQUE',
92
        903 => 'DOCUMENTO ÚNICO DE SALIDA (DUS)',
93
        904 => 'FACTURA DE TRASPASO',
94
        905 => 'FACTURA DE REEXPEDICIÓN',
95
        906 => 'BOLETAS VENTA MÓDULOS ZF (TODAS)',
96
        907 => 'FACTURAS VENTA MÓDULO ZF (TODAS)',
97
        909 => 'FACTURAS VENTA MÓDULO ZF',
98
        910 => 'SOLICITUD TRASLADO ZONA FRANCA (Z)',
99
        911 => 'DECLARACIÓN DE INGRESO A ZONA FRANCA PRIMARIA',
100
        914 => 'DECLARACIÓN DE INGRESO (DIN)',
101
        919 => 'RESUMEN VENTAS DE NACIONALES PASAJES SIN FACTURA',
102
        920 => 'OTROS REGISTROS NO DOCUMENTADOS (AUMENTA DÉBITO)',
103
        922 => 'OTROS REGISTROS (DISMINUYE DÉBITO)',
104
        924 => 'RESUMEN VENTAS DE INTERNACIONALES PASAJES SIN FACTURA',
105
        // códigos de LibreDTE
106
        0 => 'COTIZACIÓN',
107
        'HES' => 'HOJA DE ENTRADA DE SERVICIOS (HES)',
108
        'EM' => 'Entrada de mercadería (EM)',
109
    ]; ///< Glosas para los tipos de documentos (DTE y otros)
110
111
    protected $formas_pago = [
112
        1 => 'Contado',
113
        2 => 'Crédito',
114
        3 => 'Sin costo',
115
    ]; ///< Glosas de las formas de pago
116
117
    protected $formas_pago_exportacion = [
118
        1 => 'Cobranza hasta 1 año',
119
        2 => 'Cobranza más de 1 año',
120
        11 => 'Acreditivo hasta 1 año',
121
        12 => 'Acreditivo más de 1 año',
122
        21 => 'Sin pago',
123
        32 => 'Pago anticipado a la fecha de embarque',
124
    ]; ///< Códigos de forma de pago (básicos) de la aduana para exportaciones
125
126
    protected $traslados = [
127
        1 => 'Operación constituye venta',
128
        2 => 'Ventas por efectuar',
129
        3 => 'Consignaciones',
130
        4 => 'Entrega gratuita',
131
        5 => 'Traslados internos',
132
        6 => 'Otros traslados no venta',
133
        7 => 'Guía de devolución',
134
        8 => 'Traslado para exportación (no venta)',
135
        9 => 'Venta para exportación',
136
    ]; ///< Tipos de traslado para guías de despacho
137
138
    protected $medios_pago = [
139
        'EF' => 'Efectivo',
140
        'PE' => 'Depósito o transferencia',
141
        'TC' => 'Tarjeta de crédito o débito',
142
        'CH' => 'Cheque',
143
        'CF' => 'Cheque a fecha',
144
        'LT' => 'Letra',
145
        'OT' => 'Otro',
146
    ]; ///< Medio de pago disponibles
147
148
    /**
149
     * Método que asigna los datos de la resolución del SII que autoriza al
150
     * emisor a emitir DTEs
151
     * @param resolucion Arreglo con índices NroResol y FchResol
152
     * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl)
153
     * @version 2015-09-08
154
     */
155
    public function setResolucion(array $resolucion)
156
    {
157
        $this->resolucion = $resolucion;
158
    }
159
160
    /**
161
     * Método que indica si el documento será o no cedible
162
     * @param cedible =true se incorporará leyenda de destino
163
     * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl)
164
     * @version 2015-09-09
165
     */
166
    public function setCedible($cedible = true)
167
    {
168
        $this->cedible = $cedible;
169
    }
170
171
    /**
172
     * Método que indica la dirección de la casa matriz
173
     * @param casa_matriz Dirección de la casa matriz que emite el DTE
174
     * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl)
175
     * @version 2018-06-15
176
     */
177
    public function setCasaMatriz($casa_matriz)
178
    {
179
        $this->casa_matriz = $casa_matriz;
0 ignored issues
show
Documentation Bug introduced by
It seems like $casa_matriz of type object<sasco\LibreDTE\Sii\Dte\Base\Dirección> is incompatible with the declared type boolean of property $casa_matriz.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
180
    }
181
182
    /**
183
     * Método que asigna la página web que se debe utilizar para indicar donde
184
     * se puede verificar el DTE
185
     * @param web Página web donde se puede verificar el documento
186
     * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl)
187
     * @version 2015-12-11
188
     */
189
    public function setWebVerificacion($web)
190
    {
191
        $this->web_verificacion = $web;
0 ignored issues
show
Documentation Bug introduced by
It seems like $web of type object<sasco\LibreDTE\Sii\Dte\Base\Página> is incompatible with the declared type string of property $web_verificacion.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
192
    }
193
194
    /**
195
     * Método que entrega la glosa del tipo de documento
196
     * @param tipo Código del tipo de documento
197
     * @return Glosa del tipo de documento
198
     * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl)
199
     * @version 2016-11-18
200
     */
201
    protected function getTipo($tipo)
202
    {
203
        if (!is_numeric($tipo) and !isset($this->tipos[$tipo])) {
204
            return $tipo;
205
        }
206
        return isset($this->tipos[$tipo]) ? strtoupper($this->tipos[$tipo]) : 'Documento '.$tipo;
207
    }
208
209
    /**
210
     * Método que formatea un número con separador de miles y decimales (si
211
     * corresponden)
212
     * @param n Número que se desea formatear
213
     * @return Número formateado
214
     * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl)
215
     * @version 2016-04-05
216
     */
217
    protected function num($n)
218
    {
219
        if (!is_numeric($n)) {
220
            return $n;
221
        }
222
        $broken_number = explode('.', (string)$n);
223
        if (isset($broken_number[1])) {
224
            return number_format($broken_number[0], 0, ',', '.').','.$broken_number[1];
225
        }
226
        return number_format($broken_number[0], 0, ',', '.');
227
    }
228
229
    /**
230
     * Método que formatea una fecha en formato YYYY-MM-DD a un string
231
     * @author Esteban De La Fuente Rubio, DeLaF (esteban[at]sasco.cl)
232
     * @version 2016-04-28
233
     */
234
    protected function date($date, $mostrar_dia = true)
235
    {
236
        $dias = ['Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'];
237
        $meses = ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre'];
238
        $unixtime = strtotime($date);
239
        $fecha = date(($mostrar_dia?'\D\I\A ':'').'j \d\e \M\E\S \d\e\l Y', $unixtime);
240
        $dia = $dias[date('w', $unixtime)];
241
        $mes = $meses[date('n', $unixtime)-1];
242
        return str_replace(array('DIA', 'MES'), array($dia, $mes), $fecha);
243
    }
244
245
}
246