Afip 0.9.9 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7bc5ffa06877c7198f0d282fa1762925c5714b2e363f114638d59e903d5c5b82
4
- data.tar.gz: f786c196e4c88d6b693e5cdba146e835b1b8501049467c49a62192b87ca33aa1
3
+ metadata.gz: 90e6eee939966afcccee165fb65c07332ce9668eff12981e3ba0277c0e82a944
4
+ data.tar.gz: 4bd17c1ddd0b19112ac808b683db43a9a6b01f364c6a7462d9019c5dc7165295
5
5
  SHA512:
6
- metadata.gz: 9bdfa0ccd7554c54ae5ee6ed4a86b9df4d3a892bddcbea76d36435e26e2ffe560d47b6457f3ee3648255ec1cef26bef935ff16c08f5a535bddc77f1d9cc00cc3
7
- data.tar.gz: 97e43c767650aa5d4d11f7a2d45accb6fdf904bd8e57717f1bfc4783183ed6ceeeda9f244dd648ca224d16e580010a3e3bfe246d1cca7e5211355b64882f4e6c
6
+ metadata.gz: 4fd65c2fe40e83342bc0f6b14a94a0593395f46c1791782fac974d2c14d46f638ea1410f6a562c23e18339636005b0f075f22b645d4055925fa5cee9bc5e7319
7
+ data.tar.gz: 46460c37d62aa86d48f56dc8142a2e1db6d61f94f21d82b23317bf1059a4f25604b9b304cbeb04f27330f7f8eeb7abbd162262c6a9806232e122440fed4829a6
data/Afip.gemspec CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
11
11
 
12
12
  spec.summary = %q{Comunicacion con AFIP}
13
13
  spec.description = %q{Gema para la comunicacion con los Web Services de AFIP.}
14
- spec.homepage = "https://www.desideral.com"
14
+ spec.homepage = "http://litecode.com.ar/"
15
15
  spec.license = "MIT"
16
16
 
17
17
  # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- Afip (0.9.8)
4
+ Afip (1.0.0)
5
5
  httpi
6
6
  savon
7
7
 
@@ -18,7 +18,7 @@ GEM
18
18
  rack
19
19
  socksify
20
20
  mini_portile2 (2.4.0)
21
- nokogiri (1.10.1)
21
+ nokogiri (1.10.2)
22
22
  mini_portile2 (~> 2.4.0)
23
23
  nori (2.6.0)
24
24
  rack (2.0.6)
@@ -45,4 +45,4 @@ DEPENDENCIES
45
45
  rake (~> 10.0)
46
46
 
47
47
  BUNDLED WITH
48
- 1.17.1
48
+ 1.17.2
data/lib/Afip/bill.rb CHANGED
@@ -1,31 +1,31 @@
1
1
  module Afip
2
2
  class Bill
3
3
  attr_reader :cbte_type, :body, :response, :fecha_emision, :total, :client
4
- attr_accessor :net, :doc_num, :iva_cond, :documento, :concepto, :moneda,
4
+ attr_accessor :net, :doc_num, :iva_cond, :documento, :concepto, :moneda, :cbte_type,
5
5
  :due_date, :fch_serv_desde, :fch_serv_hasta, :fch_emision,
6
6
  :ivas, :sale_point, :cant_reg, :no_gravado, :gravado, :exento, :otros_imp, :tributos
7
7
 
8
8
  def initialize(attrs={})
9
9
  @client = Bill.set_client
10
- @sale_point = attrs[:sale_point]
11
- @body = { "Auth" => Afip.auth_hash }
12
- @net = attrs[:net] || 0.0
10
+ @sale_point = attrs[:sale_point]
11
+ @body = { "Auth" => Afip.auth_hash }
12
+ @net = attrs[:net] || 0.0
13
13
  @documento = attrs[:documento] || Afip.default_documento
14
- @moneda = attrs[:moneda] || Afip.default_moneda
14
+ @moneda = attrs[:moneda] || Afip.default_moneda
15
15
  @iva_cond = attrs[:iva_cond]
16
16
  @concepto = attrs[:concepto] || Afip.default_concepto
17
- @ivas = attrs[:ivas] || Array.new # [ 1, 100.00, 10.50 ], [ 2, 100.00, 21.00 ]
17
+ @ivas = attrs[:ivas] || Array.new # [ 1, 100.00, 10.50 ], [ 2, 100.00, 21.00 ]
18
18
  @fecha_emision = attrs[:fch_emision] || Time.new
19
19
  @fch_serv_hasta = attrs[:fch_serv_hasta]
20
20
  @fch_serv_desde = attrs[:fch_serv_desde]
21
21
  @due_date = attrs[:due_date]
22
- @cbte_type = Afip::BILL_TYPE[Afip.own_iva_cond][iva_cond]
22
+ @cbte_type = attrs[:cbte_type]
23
23
  @cant_reg = attrs[:cant_reg] || 1
24
24
  @no_gravado = attrs[:no_gravado] || 0.0
25
- @gravado = attrs[:gravado] || 0.0
26
- @exento = attrs[:exento] || 0.0
25
+ @gravado = attrs[:gravado] || 0.0
26
+ @exento = attrs[:exento] || 0.0
27
27
  @otros_imp = attrs[:otros_imp] || 0.0
28
- @total = net.to_f + iva_sum.to_f + exento.to_f + no_gravado.to_f + otros_imp.to_f
28
+ @total = net.to_f + iva_sum.to_f + exento.to_f + no_gravado.to_f + otros_imp.to_f
29
29
  @tributos = attrs[:tributos] || []
30
30
  end
31
31
 
@@ -72,12 +72,12 @@ module Afip
72
72
 
73
73
  def authorize
74
74
  body = setup_bill
75
- response = client.call(:fecae_solicitar, message: body)
76
- setup_response(response.to_hash)
75
+ pp response = client.call(:fecae_solicitar, message: body)
76
+ setup_response(response.to_hash)
77
77
  authorized?
78
78
  end
79
79
 
80
- def setup_bill
80
+ def setup_bill
81
81
  array_ivas = []
82
82
  ivas.each{ |i|
83
83
  array_ivas << {
@@ -90,16 +90,27 @@ module Afip
90
90
  }
91
91
 
92
92
  array_tributos = []
93
- tributos.each{ |t|
94
- array_tributos << {
95
- "Tributo" => {
96
- "Id" => t[0],
97
- "Desc" => t[1],
98
- "BaseImp" => t[2].to_f.round(2),
99
- "Alic" => t[3].to_f.round(2),
100
- "Importe" => t[4].to_f.round(2)
93
+ tributos.each{ |t|
94
+ if t[1].blank?
95
+ array_tributos << {
96
+ "Tributo" => {
97
+ "Id" => t[0],
98
+ "BaseImp" => t[2].to_f.round(2),
99
+ "Alic" => t[3].to_f.round(2),
100
+ "Importe" => t[4].to_f.round(2)
101
+ }
101
102
  }
102
- }
103
+ else
104
+ array_tributos << {
105
+ "Tributo" => {
106
+ "Id" => t[0],
107
+ "Desc" => t[1],
108
+ "BaseImp" => t[2].to_f.round(2),
109
+ "Alic" => t[3].to_f.round(2),
110
+ "Importe" => t[4].to_f.round(2)
111
+ }
112
+ }
113
+ end
103
114
  }
104
115
 
105
116
  fecaereq = {
@@ -179,32 +190,32 @@ module Afip
179
190
  # TODO: turn this into an all-purpose Response class
180
191
 
181
192
  result = response[:fecae_solicitar_response][:fecae_solicitar_result]
182
-
183
- if not result[:fe_det_resp] or not result[:fe_cab_resp] then
184
- # Si no obtuvo respuesta ni cabecera ni detalle, evito hacer '[]' sobre algo indefinido.
193
+
194
+ if not result[:fe_det_resp] or not result[:fe_cab_resp] then
195
+ # Si no obtuvo respuesta ni cabecera ni detalle, evito hacer '[]' sobre algo indefinido.
185
196
  # Ejemplo: Error con el token-sign de WSAA
186
197
  keys, values = {
187
198
  :errores => result[:errors],
188
199
  :header_result => {:resultado => "X" },
189
200
  :observaciones => nil
190
201
  }.to_a.transpose
191
- @response = (defined?(Struct::ResponseMal) ? Struct::ResponseMal : Struct.new("ResponseMal", *keys)).new(*values)
202
+ @response = (defined?(Struct::ResponseMal) ? Struct::ResponseMal : Struct.new("ResponseMal", *keys)).new(*values)
192
203
  return
193
- end
194
-
204
+ end
205
+
195
206
  response_header = result[:fe_cab_resp]
196
207
  response_detail = result[:fe_det_resp][:fecae_det_response]
197
208
 
198
209
  request_header = body["FeCAEReq"]["FeCabReq"].underscore_keys.symbolize_keys
199
210
  request_detail = body["FeCAEReq"]["FeDetReq"]["FECAEDetRequest"].underscore_keys.symbolize_keys
200
-
211
+
201
212
  # Esto no funciona desde que se soportan múltiples alícuotas de iva simultáneas
202
213
  # FIX ? TO-DO
203
214
  # iva = request_detail.delete(:iva)["AlicIva"].underscore_keys.symbolize_keys
204
- # request_detail.merge!(iva)
205
-
215
+ # request_detail.merge!(iva)
216
+
206
217
  if result[:errors] then
207
- response_detail.merge!( result[:errors] )
218
+ response_detail.merge!( result[:errors] )
208
219
  end
209
220
 
210
221
  response_hash = {
@@ -218,17 +229,17 @@ module Afip
218
229
  :moneda => request_detail.delete(:mon_id),
219
230
  :cotizacion => request_detail.delete(:mon_cotiz),
220
231
  :iva_base_imp => request_detail.delete(:base_imp),
221
- :doc_num => request_detail.delete(:doc_nro),
232
+ :doc_num => request_detail.delete(:doc_nro),
222
233
  :observaciones => response_detail.delete(:observaciones),
223
- :errores => response_detail.delete(:err)
234
+ :errores => response_detail.delete(:err)
224
235
  }.merge!(request_header).merge!(request_detail)
225
236
 
226
237
  keys, values = response_hash.to_a.transpose
227
238
  @response = (defined?(Struct::Response) ? Struct::Response : Struct.new("Response", *keys)).new(*values)
228
239
  end
229
240
 
230
- def authorized?
241
+ def authorized?
231
242
  !response.nil? && response.header_result == "A" && response.detail_result == "A"
232
243
  end
233
244
  end
234
- end
245
+ end
data/lib/Afip/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Afip
2
- VERSION = "0.9.9"
2
+ VERSION = "1.0.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: Afip
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.9
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Facundo A. Díaz Martínez
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-02-07 00:00:00.000000000 Z
11
+ date: 2019-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: savon
@@ -96,7 +96,7 @@ files:
96
96
  - lib/Afip/padron.rb
97
97
  - lib/Afip/version.rb
98
98
  - lib/Afip/wsaa.rb
99
- homepage: https://www.desideral.com
99
+ homepage: http://litecode.com.ar/
100
100
  licenses:
101
101
  - MIT
102
102
  metadata:
@@ -116,8 +116,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
116
116
  - !ruby/object:Gem::Version
117
117
  version: '0'
118
118
  requirements: []
119
- rubyforge_project:
120
- rubygems_version: 2.7.8
119
+ rubygems_version: 3.0.1
121
120
  signing_key:
122
121
  specification_version: 4
123
122
  summary: Comunicacion con AFIP