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; |
|
|
|
|
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; |
|
|
|
|
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
|
|
|
|
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..