afipws 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +1 -1
- data/lib/afipws/version.rb +1 -1
- data/lib/afipws/wsaa.rb +4 -3
- data/lib/afipws/wsfe.rb +16 -8
- data/spec/afipws/wsfe_spec.rb +55 -9
- data/spec/fixtures/fecaea_solicitar/error_distinto.xml +18 -0
- metadata +6 -4
data/Gemfile.lock
CHANGED
data/lib/afipws/version.rb
CHANGED
data/lib/afipws/wsaa.rb
CHANGED
@@ -4,17 +4,18 @@ module Afipws
|
|
4
4
|
|
5
5
|
WSDL = {
|
6
6
|
:development => "https://wsaahomo.afip.gov.ar/ws/services/LoginCms?wsdl",
|
7
|
-
:production =>
|
8
|
-
:test => Root +
|
7
|
+
:production => "https://wsaa.afip.gov.ar/ws/services/LoginCms?wsdl",
|
8
|
+
:test => Root + "/spec/fixtures/wsaa.wsdl"
|
9
9
|
}
|
10
10
|
|
11
11
|
def initialize options = {}
|
12
|
+
@env = options[:env] || :test
|
12
13
|
@key = options[:key]
|
13
14
|
@cert = options[:cert]
|
14
15
|
@service = options[:service] || 'wsfe'
|
15
16
|
@ttl = options[:ttl] || 2400
|
16
17
|
@cuit = options[:cuit]
|
17
|
-
@client = Client.new WSDL[
|
18
|
+
@client = Client.new WSDL[@env.to_sym]
|
18
19
|
end
|
19
20
|
|
20
21
|
def generar_tra service, ttl
|
data/lib/afipws/wsfe.rb
CHANGED
@@ -2,18 +2,19 @@ module Afipws
|
|
2
2
|
class WSFE
|
3
3
|
extend Forwardable
|
4
4
|
include TypeConversions
|
5
|
-
attr_reader :wsaa, :client
|
5
|
+
attr_reader :wsaa, :client, :env
|
6
6
|
def_delegators :wsaa, :ta, :auth, :cuit
|
7
7
|
|
8
8
|
WSDL = {
|
9
9
|
:development => "https://wswhomo.afip.gov.ar/wsfev1/service.asmx?WSDL",
|
10
10
|
:production => "https://servicios1.afip.gov.ar/wsfev1/service.asmx?WSDL",
|
11
|
-
:test => Root +
|
11
|
+
:test => Root + "/spec/fixtures/wsfe.wsdl"
|
12
12
|
}
|
13
13
|
|
14
14
|
def initialize options = {}
|
15
|
+
@env = options[:env] || :test
|
15
16
|
@wsaa = options[:wsaa] || WSAA.new(options.merge(:service => 'wsfe'))
|
16
|
-
@client = Client.new WSDL[
|
17
|
+
@client = Client.new WSDL[@env.to_sym]
|
17
18
|
end
|
18
19
|
|
19
20
|
def dummy
|
@@ -77,6 +78,12 @@ module Afipws
|
|
77
78
|
|
78
79
|
def solicitar_caea
|
79
80
|
convertir_rta_caea @client.fecaea_solicitar auth.merge(periodo_para_solicitud_caea)
|
81
|
+
rescue Afipws::WSError => e
|
82
|
+
if e.errors.any? { |e| e[:code] == '15008' }
|
83
|
+
consultar_caea fecha_inicio_quincena_siguiente
|
84
|
+
else
|
85
|
+
raise
|
86
|
+
end
|
80
87
|
end
|
81
88
|
|
82
89
|
def consultar_caea fecha
|
@@ -116,11 +123,7 @@ module Afipws
|
|
116
123
|
end
|
117
124
|
|
118
125
|
def periodo_para_solicitud_caea
|
119
|
-
|
120
|
-
{ :orden => 2, :periodo => Date.today.strftime('%Y%m') }
|
121
|
-
else
|
122
|
-
{ :orden => 1, :periodo => Date.today.next_month.strftime('%Y%m') }
|
123
|
-
end
|
126
|
+
periodo_para_consulta_caea fecha_inicio_quincena_siguiente
|
124
127
|
end
|
125
128
|
|
126
129
|
def periodo_para_consulta_caea fecha
|
@@ -128,6 +131,11 @@ module Afipws
|
|
128
131
|
{ :orden => orden, :periodo => fecha.strftime('%Y%m') }
|
129
132
|
end
|
130
133
|
|
134
|
+
def fecha_inicio_quincena_siguiente
|
135
|
+
hoy = Date.today
|
136
|
+
hoy.day <= 15 ? hoy.change(:day => 16) : hoy.next_month.change(:day => 1)
|
137
|
+
end
|
138
|
+
|
131
139
|
private
|
132
140
|
def get_array response, array_element
|
133
141
|
Array.wrap response[:result_get][array_element]
|
data/spec/afipws/wsfe_spec.rb
CHANGED
@@ -4,7 +4,7 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
4
4
|
describe Afipws::WSFE do
|
5
5
|
let :ws do
|
6
6
|
wsaa = Afipws::WSAA.new
|
7
|
-
wsaa.stubs :login => { :token => 't', :sign => 's' }
|
7
|
+
wsaa.stubs :login => { :token => 't', :sign => 's', :expiration_time => 12.hours.from_now }
|
8
8
|
Afipws::WSFE.new :cuit => '1', :wsaa => wsaa
|
9
9
|
end
|
10
10
|
|
@@ -157,6 +157,18 @@ describe Afipws::WSFE do
|
|
157
157
|
ws.periodo_para_solicitud_caea.should == { :periodo => '201102', :orden => 1 }
|
158
158
|
end
|
159
159
|
end
|
160
|
+
|
161
|
+
it "cuando el caea ya fue otorgado debería consultarlo y devolverlo" do
|
162
|
+
Date.stubs :today => Date.new(2011,1,27)
|
163
|
+
savon.expects('FECAEASolicitar').with(has_path '/Periodo' => '201102', '/Orden' => 1).returns(:caea_ya_otorgado)
|
164
|
+
savon.expects('FECAEAConsultar').with(has_path '/Periodo' => '201102', '/Orden' => 1).returns(:success)
|
165
|
+
ws.solicitar_caea.should have_entries :caea => '21043476341977', :fch_vig_desde => Date.new(2011,02,01)
|
166
|
+
end
|
167
|
+
|
168
|
+
it "cuando hay otro error debería burbujearlo" do
|
169
|
+
savon.expects('FECAEASolicitar').returns(:error_distinto)
|
170
|
+
expect { ws.solicitar_caea }.to raise_error Afipws::WSError, /15007/
|
171
|
+
end
|
160
172
|
end
|
161
173
|
|
162
174
|
it "informar_comprobantes_caea" do
|
@@ -183,14 +195,6 @@ describe Afipws::WSFE do
|
|
183
195
|
savon.expects('FECAEAConsultar').with(has_path '/Periodo' => '201101', '/Orden' => 1).returns(:success)
|
184
196
|
ws.consultar_caea(Date.new(2011,1,1)).should have_entries :caea => '21043476341977', :fch_tope_inf => Date.new(2011,03,17)
|
185
197
|
end
|
186
|
-
|
187
|
-
it "periodo_para_consulta_caea" do
|
188
|
-
ws.periodo_para_consulta_caea(Date.new(2011,1,1)).should == { :periodo => '201101', :orden => 1 }
|
189
|
-
ws.periodo_para_consulta_caea(Date.new(2011,1,15)).should == { :periodo => '201101', :orden => 1 }
|
190
|
-
ws.periodo_para_consulta_caea(Date.new(2011,1,16)).should == { :periodo => '201101', :orden => 2 }
|
191
|
-
ws.periodo_para_consulta_caea(Date.new(2011,1,31)).should == { :periodo => '201101', :orden => 2 }
|
192
|
-
ws.periodo_para_consulta_caea(Date.new(2011,2,2)).should == { :periodo => '201102', :orden => 1 }
|
193
|
-
end
|
194
198
|
end
|
195
199
|
|
196
200
|
it "ultimo_comprobante_autorizado" do
|
@@ -218,6 +222,22 @@ describe Afipws::WSFE do
|
|
218
222
|
end
|
219
223
|
end
|
220
224
|
|
225
|
+
context "entorno" do
|
226
|
+
it "debería usar las url para development cuando el env es development" do
|
227
|
+
Afipws::Client.expects(:new).with("https://wsaahomo.afip.gov.ar/ws/services/LoginCms?wsdl")
|
228
|
+
Afipws::Client.expects(:new).with("https://wswhomo.afip.gov.ar/wsfev1/service.asmx?WSDL")
|
229
|
+
wsfe = Afipws::WSFE.new :env => :development
|
230
|
+
wsfe.env.should == :development
|
231
|
+
end
|
232
|
+
|
233
|
+
it "debería usar las url para production cuando el env es production" do
|
234
|
+
Afipws::Client.expects(:new).with("https://wsaa.afip.gov.ar/ws/services/LoginCms?wsdl")
|
235
|
+
Afipws::Client.expects(:new).with("https://servicios1.afip.gov.ar/wsfev1/service.asmx?WSDL")
|
236
|
+
wsfe = Afipws::WSFE.new :env => 'production'
|
237
|
+
wsfe.env.should == :production
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
221
241
|
context "manejo de errores" do
|
222
242
|
it "cuando hay un error" do
|
223
243
|
savon.expects('FEParamGetTiposCbte').returns(:failure_1_error)
|
@@ -237,4 +257,30 @@ describe Afipws::WSFE do
|
|
237
257
|
}
|
238
258
|
end
|
239
259
|
end
|
260
|
+
|
261
|
+
context "cálculo de fechas y períodos" do
|
262
|
+
it "periodo_para_consulta_caea" do
|
263
|
+
ws.periodo_para_consulta_caea(Date.new(2011,1,1)).should == { :periodo => '201101', :orden => 1 }
|
264
|
+
ws.periodo_para_consulta_caea(Date.new(2011,1,15)).should == { :periodo => '201101', :orden => 1 }
|
265
|
+
ws.periodo_para_consulta_caea(Date.new(2011,1,16)).should == { :periodo => '201101', :orden => 2 }
|
266
|
+
ws.periodo_para_consulta_caea(Date.new(2011,1,31)).should == { :periodo => '201101', :orden => 2 }
|
267
|
+
ws.periodo_para_consulta_caea(Date.new(2011,2,2)).should == { :periodo => '201102', :orden => 1 }
|
268
|
+
end
|
269
|
+
|
270
|
+
it "fecha_inicio_quincena_siguiente" do
|
271
|
+
fecha_inicio_quincena_siguiente(Date.new(2010,1,1)).should == Date.new(2010,1,16)
|
272
|
+
fecha_inicio_quincena_siguiente(Date.new(2010,1,10)).should == Date.new(2010,1,16)
|
273
|
+
fecha_inicio_quincena_siguiente(Date.new(2010,1,15)).should == Date.new(2010,1,16)
|
274
|
+
|
275
|
+
fecha_inicio_quincena_siguiente(Date.new(2010,1,16)).should == Date.new(2010,2,1)
|
276
|
+
fecha_inicio_quincena_siguiente(Date.new(2010,1,20)).should == Date.new(2010,2,1)
|
277
|
+
fecha_inicio_quincena_siguiente(Date.new(2010,1,31)).should == Date.new(2010,2,1)
|
278
|
+
fecha_inicio_quincena_siguiente(Date.new(2010,12,31)).should == Date.new(2011,1,1)
|
279
|
+
end
|
280
|
+
|
281
|
+
def fecha_inicio_quincena_siguiente fecha
|
282
|
+
Date.stubs(:today => fecha)
|
283
|
+
subject.fecha_inicio_quincena_siguiente
|
284
|
+
end
|
285
|
+
end
|
240
286
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
2
|
+
<soap:Body>
|
3
|
+
<FECAEASolicitarResponse xmlns="http://ar.gov.afip.dif.FEV1/">
|
4
|
+
<FECAEASolicitarResult>
|
5
|
+
<ResultGet>
|
6
|
+
<Periodo>0</Periodo>
|
7
|
+
<Orden>0</Orden>
|
8
|
+
</ResultGet>
|
9
|
+
<Errors>
|
10
|
+
<Err>
|
11
|
+
<Code>15007</Code>
|
12
|
+
<Msg>Orden incorrecto.</Msg>
|
13
|
+
</Err>
|
14
|
+
</Errors>
|
15
|
+
</FECAEASolicitarResult>
|
16
|
+
</FECAEASolicitarResponse>
|
17
|
+
</soap:Body>
|
18
|
+
</soap:Envelope>
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 1
|
9
|
+
version: 0.1.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Emmanuel Nicolau
|
@@ -189,6 +189,7 @@ files:
|
|
189
189
|
- spec/fixtures/fecaea_consultar/success.xml
|
190
190
|
- spec/fixtures/fecaea_reg_informativo/informe_rtdo_parcial.xml
|
191
191
|
- spec/fixtures/fecaea_solicitar/caea_ya_otorgado.xml
|
192
|
+
- spec/fixtures/fecaea_solicitar/error_distinto.xml
|
192
193
|
- spec/fixtures/fecaea_solicitar/success.xml
|
193
194
|
- spec/fixtures/login_cms/fault.xml
|
194
195
|
- spec/fixtures/login_cms/success.xml
|
@@ -213,7 +214,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
213
214
|
requirements:
|
214
215
|
- - ">="
|
215
216
|
- !ruby/object:Gem::Version
|
216
|
-
hash: -
|
217
|
+
hash: -4544236781708141124
|
217
218
|
segments:
|
218
219
|
- 0
|
219
220
|
version: "0"
|
@@ -222,7 +223,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
222
223
|
requirements:
|
223
224
|
- - ">="
|
224
225
|
- !ruby/object:Gem::Version
|
225
|
-
hash: -
|
226
|
+
hash: -4544236781708141124
|
226
227
|
segments:
|
227
228
|
- 0
|
228
229
|
version: "0"
|
@@ -261,6 +262,7 @@ test_files:
|
|
261
262
|
- spec/fixtures/fecaea_consultar/success.xml
|
262
263
|
- spec/fixtures/fecaea_reg_informativo/informe_rtdo_parcial.xml
|
263
264
|
- spec/fixtures/fecaea_solicitar/caea_ya_otorgado.xml
|
265
|
+
- spec/fixtures/fecaea_solicitar/error_distinto.xml
|
264
266
|
- spec/fixtures/fecaea_solicitar/success.xml
|
265
267
|
- spec/fixtures/login_cms/fault.xml
|
266
268
|
- spec/fixtures/login_cms/success.xml
|