facturapi 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/foo.xml DELETED
@@ -1,119 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <DTE version="1.0">
3
- <Documento ID="F100T39">
4
- <Encabezado>
5
- <IdDoc>
6
- <TipoDTE>39</TipoDTE>
7
- <Folio>100</Folio>
8
- <FchEmis>2008-09-01</FchEmis>
9
- <IndServicio>1</IndServicio>
10
- <IndMntNeto>2</IndMntNeto>
11
- <PeriodoDesde>2008-08-01</PeriodoDesde>
12
- <PeriodoHasta>2008-08-31</PeriodoHasta>
13
- <FchVenc>2008-09-20</FchVenc>
14
- </IdDoc>
15
- <Emisor>
16
- <RUTEmisor>1-9</RUTEmisor>
17
- <RznSocEmisor>EMPRESA DE PRUEBA</RznSocEmisor>
18
- <GiroEmisor>DESARROLLO DE SISTEMAS</GiroEmisor>
19
- <DirOrigen>Avenida del Software #11001101</DirOrigen>
20
- <CmnaOrigen>PROVIDENCIA</CmnaOrigen>
21
- <CiudadOrigen>SANTIAGO</CiudadOrigen>
22
- </Emisor>
23
- <Receptor>
24
- <RUTRecep>11111111-1</RUTRecep>
25
- <CdgIntRecep>1000215-220</CdgIntRecep>
26
- <RznSocRecep>CLIENTE DE PRUEBA</RznSocRecep>
27
- <Contacto>correo@prueba.cl</Contacto>
28
- <DirRecep>CALLE A 50</DirRecep>
29
- <CmnaRecep>SANTIAGO</CmnaRecep>
30
- <CiudadRecep>SANTIAGO</CiudadRecep>
31
- </Receptor>
32
- <Totales>
33
- <MntNeto>10000</MntNeto>
34
- <MntExe>1500</MntExe>
35
- <IVA>1900</IVA>
36
- <MntTotal>13400</MntTotal>
37
- <MontoNF>2000</MontoNF>
38
- <TotalPeriodo>15400</TotalPeriodo>
39
- <SaldoAnterior>5000</SaldoAnterior>
40
- <VlrPagar>20400</VlrPagar>
41
- </Totales>
42
- </Encabezado>
43
- <Detalle>
44
- <NroLinDet>1</NroLinDet>
45
- <CdgItem>
46
- <TpoCodigo>INT1</TpoCodigo>
47
- <VlrCodigo>WWW</VlrCodigo>
48
- </CdgItem>
49
- <NmbItem>Descripción de producto 1</NmbItem>
50
- <DscItem>Serie ABC</DscItem>
51
- <QtyItem>1</QtyItem>
52
- <UnmdItem>M3</UnmdItem>
53
- <PrcItem>6000</PrcItem>
54
- <MontoItem>6000</MontoItem>
55
- </Detalle>
56
- <Detalle>
57
- <NroLinDet>2</NroLinDet>
58
- <CdgItem>
59
- <TpoCodigo>INT1</TpoCodigo>
60
- <VlrCodigo>WWW</VlrCodigo>
61
- </CdgItem>
62
- <NmbItem>Descripción de producto 1</NmbItem>
63
- <DscItem>Serie ABC</DscItem>
64
- <QtyItem>1</QtyItem>
65
- <UnmdItem>M3</UnmdItem>
66
- <PrcItem>12000</PrcItem>
67
- <MontoItem>12000</MontoItem>
68
- </Detalle>
69
- <Detalle>
70
- <NroLinDet>3</NroLinDet>
71
- <CdgItem>
72
- <TpoCodigo>INT1</TpoCodigo>
73
- <VlrCodigo>WWW</VlrCodigo>
74
- </CdgItem>
75
- <NmbItem>Descripción de producto 1</NmbItem>
76
- <DscItem>Serie ABC</DscItem>
77
- <QtyItem>1</QtyItem>
78
- <UnmdItem>M3</UnmdItem>
79
- <PrcItem>18000</PrcItem>
80
- <MontoItem>18000</MontoItem>
81
- </Detalle>
82
- <Detalle>
83
- <NroLinDet>4</NroLinDet>
84
- <CdgItem>
85
- <TpoCodigo>INT1</TpoCodigo>
86
- <VlrCodigo>WWW</VlrCodigo>
87
- </CdgItem>
88
- <NmbItem>Descripción de producto 1</NmbItem>
89
- <DscItem>Serie ABC</DscItem>
90
- <QtyItem>1</QtyItem>
91
- <UnmdItem>M3</UnmdItem>
92
- <PrcItem>24000</PrcItem>
93
- <MontoItem>24000</MontoItem>
94
- </Detalle>
95
- <DscRcgGlobal>
96
- <NroLinDR>1</NroLinDR>
97
- <TpoMov>D</TpoMov>
98
- <GlosaDR>Cobro de ventas o servicios previo</GlosaDR>
99
- <TpoValor>$</TpoValor>
100
- <ValorDR>2000</ValorDR>
101
- <IndExeDR>2</IndExeDR>
102
- </DscRcgGlobal>
103
- <Referencia>
104
- <NroLinRef>1</NroLinRef>
105
- <CodRef>NROMEDIDOR</CodRef>
106
- <RazonRef>152445596-6655215</RazonRef>
107
- </Referencia>
108
- <Referencia>
109
- <NroLinRef>2</NroLinRef>
110
- <CodRef>NROMEDIDOR</CodRef>
111
- <RazonRef>152445596-6655215</RazonRef>
112
- </Referencia>
113
- <Referencia>
114
- <NroLinRef>3</NroLinRef>
115
- <CodRef>NROMEDIDOR</CodRef>
116
- <RazonRef>152445596-6655215</RazonRef>
117
- </Referencia>
118
- </Documento>
119
- </DTE>
data/lala.html DELETED
@@ -1 +0,0 @@
1
- &lt;?xml version="1.0"?&gt;&lt;WSPLANO&gt;&lt;Resultado&gt;False&lt;/Resultado&gt;&lt;Mensaje&gt;Posee documentos con error.&lt;/Mensaje&gt;&lt;Detalle&gt;&lt;Documento&gt;&lt;Folio&gt;0&lt;/Folio&gt;&lt;TipoDte&gt;0&lt;/TipoDte&gt;&lt;Operacion&gt;&lt;/Operacion&gt;&lt;Fecha&gt;2017-02-02T15:16:57&lt;/Fecha&gt;&lt;Resultado&gt;False&lt;/Resultado&gt;&lt;Error&gt;El archivo no es un XML. Tipo Formato=2 Debe ser un archivo *.xml que inicie con las etiquetas &amp;lt;DTE&amp;gt; o &amp;lt;LibroCompraVenta&amp;gt;&lt;/Error&gt;&lt;/Documento&gt;&lt;/Detalle&gt;&lt;/WSPLANO&gt;
@@ -1 +0,0 @@
1
- require 'facturapi/service/procesar'
@@ -1,24 +0,0 @@
1
- module Facturapi
2
- module Service
3
- class Procesar
4
- attr_accessor :dte
5
- attr_reader :client
6
-
7
- def initialize(dte)
8
- @dte = dte
9
- @client = Facturapi::Client.new
10
- end
11
-
12
- def send
13
- file = Base64.strict_encode64(dte.as_node.to_s)
14
- params = { file: file, formato: 2 }
15
- response = client.call(:procesar, params)
16
- Nokogiri::XML(response)
17
- # doc = Nokogiri::XML(response)
18
- # ok = doc.css('WSPLANO>Resultado').text
19
- # mensaje = doc.css('WSPLANO>Mensaje').text
20
- # error = doc.css('Documento>Error').text
21
- end
22
- end
23
- end
24
- end
data/todo.rb DELETED
@@ -1,246 +0,0 @@
1
- # 3 feb
2
- # 1:18-1:55
3
- # 14:10-14:59
4
-
5
- # http://ws1.facturacion.cl/WSDS/wsplano.asmx
6
-
7
-
8
- # Enlace: https://www.facturacion.cl/plano/
9
- # Usuario: MELONCARGO
10
- # Clave: 87ac1e2ccf
11
-
12
-
13
- # RUT Empresa: 1-9
14
- # Clave: plano91098
15
- # Usuario: MELONCARGO
16
- # Puerto: 9350
17
-
18
- # Agregar opcion de IncluyeLink en config
19
-
20
- require 'savon'
21
- require 'xml'
22
- require 'base64'
23
-
24
-
25
- doc = XML::Document.new
26
-
27
- doc.root = create_node('DTE', version: '1.0') do |dte|
28
- dte << create_node('Documento', 'ID' => 'F100T39') do |documento|
29
- documento << create_node('Encabezado') do |encabezado|
30
- encabezado << create_node('IdDoc') do |id_doc|
31
- id_doc << create_node('TipoDTE') { |n| n << 39 }
32
- id_doc << create_node('Folio') { |n| n << 100 }
33
- id_doc << create_node('FchEmis') { |n| n << '2008-09-01' }
34
- id_doc << create_node('IndServicio') { |n| n << 1 }
35
- id_doc << create_node('IndMntNeto') { |n| n << 2 }
36
- id_doc << create_node('PeriodoDesde') { |n| n << '2008-08-01' }
37
- id_doc << create_node('PeriodoHasta') { |n| n << '2008-08-31' }
38
- id_doc << create_node('FchVenc') { |n| n << '2008-09-20' }
39
- end
40
- encabezado << create_node('Emisor') do |emisor|
41
- emisor << create_node('RUTEmisor') { |n| n << '1-9' }
42
- emisor << create_node('RznSocEmisor') { |n| n << 'EMPRESA DE PRUEBA' }
43
- emisor << create_node('GiroEmisor') { |n| n << 'DESARROLLO DE SISTEMAS' }
44
- emisor << create_node('DirOrigen') { |n| n << 'Avenida del Software #11001101' }
45
- emisor << create_node('CmnaOrigen') { |n| n << 'PROVIDENCIA' }
46
- emisor << create_node('CiudadOrigen') { |n| n << 'SANTIAGO' }
47
- end
48
- encabezado << create_node('Receptor') do |receptor|
49
- receptor << create_node('RUTRecep') { |n| n << '11111111-1' }
50
- receptor << create_node('CdgIntRecep') { |n| n << '1000215-220' }
51
- receptor << create_node('RznSocRecep') { |n| n << 'CLIENTE DE PRUEBA' }
52
- receptor << create_node('Contacto') { |n| n << 'correo@prueba.cl' }
53
- receptor << create_node('DirRecep') { |n| n << 'CALLE A 50' }
54
- receptor << create_node('CmnaRecep') { |n| n << 'SANTIAGO' }
55
- receptor << create_node('CiudadRecep') { |n| n << 'SANTIAGO' }
56
- end
57
- encabezado << create_node('Totales') do |totales|
58
- totales << create_node('MntNeto') { |n| n << '10000' }
59
- totales << create_node('MntExe') { |n| n << '1500' }
60
- totales << create_node('IVA') { |n| n << '1900' }
61
- totales << create_node('MntTotal') { |n| n << '13400' }
62
- totales << create_node('MontoNF') { |n| n << '2000' }
63
- totales << create_node('TotalPeriodo') { |n| n << '15400' }
64
- totales << create_node('SaldoAnterior') { |n| n << '5000' }
65
- totales << create_node('VlrPagar') { |n| n << '20400' }
66
- end
67
- end
68
- (1..4).to_a.each do |i|
69
- documento << create_node('Detalle') do |detalle|
70
- detalle << create_node('NroLinDet') { |n| n << i }
71
- detalle << create_node('CdgItem') do |cdg_item|
72
- cdg_item << create_node('TpoCodigo') { |n| n << 'INT1' }
73
- cdg_item << create_node('VlrCodigo') { |n| n << 'WWW' }
74
- end
75
- detalle << create_node('NmbItem') { |n| n << "Descripción de producto #{1}" }
76
- detalle << create_node('DscItem') { |n| n << 'Serie ABC' }
77
- detalle << create_node('QtyItem') { |n| n << '1' }
78
- detalle << create_node('UnmdItem') { |n| n << 'M3' }
79
- detalle << create_node('PrcItem') { |n| n << 6000 * i }
80
- detalle << create_node('MontoItem') { |n| n << 6000 * i }
81
- end
82
- end
83
- documento << create_node('DscRcgGlobal') do |dsc_rcg_global|
84
- dsc_rcg_global << create_node('NroLinDR') { |n| n << '1' }
85
- dsc_rcg_global << create_node('TpoMov') { |n| n << 'D' }
86
- dsc_rcg_global << create_node('GlosaDR') { |n| n << 'Cobro de ventas o servicios previo' }
87
- dsc_rcg_global << create_node('TpoValor') { |n| n << '$' }
88
- dsc_rcg_global << create_node('ValorDR') { |n| n << '2000' }
89
- dsc_rcg_global << create_node('IndExeDR') { |n| n << '2' }
90
- end
91
- (1..3).to_a.each do |i|
92
- documento << create_node('Referencia') do |referencia|
93
- referencia << create_node('NroLinRef') { |n| n << i }
94
- referencia << create_node('CodRef') { |n| n << 'NROMEDIDOR' }
95
- referencia << create_node('RazonRef') { |n| n << '152445596-6655215' }
96
- end
97
- end
98
- end
99
- end
100
-
101
- client = Savon.client(
102
- wsdl: 'http://ws1.facturacion.cl/WSDS/wsplano.asmx?wsdl'
103
- )
104
-
105
- client.operations
106
- # => [:procesar, :obtener_link, :get_boleta_ticket, :get_xml_dte, :alt_num,
107
- # :reg_ip, :get_ip, :eliminar_doc, :anular_guia, :online, :version]
108
-
109
- login = {
110
- 'Usuario' => Base64.strict_encode64('MELONCARGO'),
111
- 'Rut' => Base64.strict_encode64('1-9'),
112
- 'Clave' => Base64.strict_encode64('plano91098'),
113
- 'Puerto' => Base64.strict_encode64('9350')
114
- }
115
- params = {
116
- login: login,
117
- file: Base64.strict_encode64(doc.to_s),
118
- formato: 2
119
- }
120
- response = client.call(:procesar, message: params)
121
- response.body[:procesar_response][:procesar_result]
122
- # <?xml version=\"1.0\"?>
123
- # <WSPLANO>
124
- # <Resultado>False</Resultado>
125
- # <Mensaje>Posee documentos con error.</Mensaje>
126
- # <Detalle>
127
- # <Documento>
128
- # <Folio>100</Folio>
129
- # <TipoDte>39</TipoDte>
130
- # <Operacion>VENTA</Operacion>
131
- # <Fecha>2017-02-02T17:00:05</Fecha>
132
- # <Resultado>False</Resultado>
133
- # <Error>ERROR: P0001: Ya existe la Boleta con TipoDTE = 39 y Folio = 100</Error>
134
- # </Documento>
135
- # </Detalle>
136
- # </WSPLANO>
137
-
138
- # ops = client.operation(:procesar)
139
-
140
- # # build the body of the xml inside the message here
141
- # ops.build(message: params).to_s
142
-
143
- doc.save('foo.xml', :indent => true, :encoding => XML::Encoding::UTF_8)
144
-
145
- doc.save('foo.xml', :indent => false, :encoding => XML::Encoding::UTF_8)
146
-
147
-
148
-
149
- include Facturapi::Helpers
150
-
151
- Facturapi.configure do |config|
152
- config.fact_rut '1-9'
153
- config.fact_user 'MELONCARGO'
154
- config.fact_password 'plano91098'
155
- config.fact_port 9350
156
- end
157
-
158
- detalle = []
159
- (1..4).to_a.each do |i|
160
- detalle << Detalle.new(
161
- nro_lin_det: i,
162
- tpo_codigo: 'INT1',
163
- vlr_codigo: 'WWW',
164
- ind_exe: i,
165
- rut_mandante: '11111111-1',
166
- nmb_item: "Descripción de producto #{i}",
167
- dsc_item: 'Serie ABC',
168
- qty_item: '1',
169
- unmd_item: 'M3',
170
- prc_item: 6000 * i,
171
- monto_item: 6000 * i
172
- )
173
- end
174
-
175
- dsc_rcg_global = []
176
- (1..2).to_a.each do |i|
177
- dsc_rcg_global << DscRcgGlobal.new(
178
- nro_lin_dr: i,
179
- tpo_mov: 'D',
180
- glosa_dr: 'Cobro de ventas o servicios previo',
181
- tpo_valor: '$',
182
- valor_dr: '2000',
183
- ind_exe_dr: '2'
184
- )
185
- end
186
-
187
- referencia = []
188
- (1..3).to_a.each do |i|
189
- referencia << Referencia.new(
190
- nro_lin_ref: i,
191
- cod_ref: 'NROMEDIDOR',
192
- razon_ref: '152445596-6655215'
193
- )
194
- end
195
-
196
- dte = Dte.new(
197
- encabezado: Encabezado.new(
198
- id_doc: IdDoc.new(
199
- tipo_dte: 39,
200
- folio: rand(999_999_999),
201
- fch_emis: '2008-09-01',
202
- ind_servicio: 1,
203
- ind_mnt_neto: 2,
204
- periodo_desde: '2008-08-01',
205
- periodo_hasta: '2008-08-31',
206
- fch_venc: '2008-09-20'
207
- ),
208
- emisor: Emisor.new(
209
- rut_emisor: '1-9',
210
- rzn_soc_emisor: 'EMPRESA DE PRUEBA',
211
- giro_emisor: 'DESARROLLO DE SISTEMAS',
212
- dir_origen: 'Avenida del Software #11001101',
213
- cmna_origen: 'PROVIDENCIA',
214
- ciudad_origen: 'SANTIAGO'
215
- ),
216
- receptor: Receptor.new(
217
- rut_recep: '11111111-1',
218
- cdg_int_recep: '1000215-220',
219
- rzn_soc_recep: 'CLIENTE DE PRUEBA',
220
- contacto: 'correo@prueba.cl',
221
- dir_recep: 'CALLE A 50',
222
- cmna_recep: 'SANTIAGO',
223
- ciudad_recep: 'SANTIAGO'
224
- ),
225
- totales: Totales.new(
226
- mnt_neto: '10000',
227
- mnt_exe: '1500',
228
- iva: '1900',
229
- mnt_total: '13400',
230
- monto_nf: '2000',
231
- total_periodo: '15400',
232
- saldo_anterior: '5000',
233
- vlr_pagar: '20400'
234
- )
235
- ),
236
- detalle: detalle,
237
- dsc_rcg_global: dsc_rcg_global,
238
- referencia: referencia
239
- )
240
-
241
- procesar = Facturapi::Service::Procesar.new(dte)
242
-
243
- doc = procesar.send
244
- ok = doc.css('WSPLANO>Resultado').text
245
- mensaje = doc.css('WSPLANO>Mensaje').text
246
- error = doc.css('Documento>Error').text