bravo 1.0.0.rc1 → 1.0.0.rc2
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/README.md +4 -1
- data/lib/bravo.rb +6 -8
- data/lib/bravo/bill.rb +18 -5
- data/lib/bravo/constants.rb +11 -2
- data/lib/bravo/version.rb +1 -1
- data/spec/bravo/bill_spec.rb +3 -3
- metadata +1 -3
- data/VERSION +0 -1
- data/lib/bravo/core_ext/float.rb +0 -14
data/README.md
CHANGED
@@ -1,4 +1,7 @@
|
|
1
|
-
# Bravo
|
1
|
+
# Bravo
|
2
|
+

|
3
|
+
[](http://badge.fury.io/rb/bravo)
|
4
|
+
[](https://codeclimate.com/repos/5292a01e89af7e473304513a/feed)
|
2
5
|
|
3
6
|
[~~Bravo~~](http://images.coveralia.com/audio/b/Bravo-Desierto_Sin_Amor-Frontal.jpg) Bravo permite la obtención del [~~C.A.E~~](http://www.muevamueva.com/masmusica/latina/cae/images/fotos.5.gif) C.A.E. (Código de Autorización Electrónico) por medio del Web Service de Facturación Electrónica provisto por AFIP.
|
4
7
|
|
data/lib/bravo.rb
CHANGED
@@ -2,7 +2,6 @@ require 'bundler/setup'
|
|
2
2
|
require 'bravo/version'
|
3
3
|
require 'bravo/constants'
|
4
4
|
require 'savon'
|
5
|
-
require 'bravo/core_ext/float'
|
6
5
|
require 'bravo/core_ext/hash'
|
7
6
|
require 'bravo/core_ext/string'
|
8
7
|
|
@@ -20,14 +19,13 @@ module Bravo
|
|
20
19
|
# This class handles the logging options
|
21
20
|
#
|
22
21
|
class Logger < Struct.new(:log, :pretty_xml, :level)
|
23
|
-
# @param
|
24
|
-
#
|
25
|
-
# @param level [Symbol] one of `:debug`, `:info`, `:warn`, `:error`, `:fatal`.
|
22
|
+
# @param opts [Hash] receives a hash with keys `log`, `pretty_xml` (both
|
23
|
+
# boolean) or the desired log level as `level`
|
26
24
|
|
27
|
-
def initialize(
|
28
|
-
self.log = log
|
29
|
-
self.pretty_xml = pretty_xml
|
30
|
-
self.level = level
|
25
|
+
def initialize(opts = {})
|
26
|
+
self.log = opts[:log] || false
|
27
|
+
self.pretty_xml = opts[:pretty_xml] || self.log
|
28
|
+
self.level = opts[:level] || :debug
|
31
29
|
end
|
32
30
|
|
33
31
|
# @return [Hash] returns a hash with the proper logging optios for Savon.
|
data/lib/bravo/bill.rb
CHANGED
@@ -14,8 +14,8 @@ module Bravo
|
|
14
14
|
|
15
15
|
def initialize(attrs = {})
|
16
16
|
Bravo::AuthData.fetch
|
17
|
-
opts = { wsdl: Bravo::AuthData.wsfe_url}.merge! Bravo.logger_options
|
18
|
-
@client
|
17
|
+
opts = { wsdl: Bravo::AuthData.wsfe_url }.merge! Bravo.logger_options
|
18
|
+
@client ||= Savon.client(opts)
|
19
19
|
@body = { 'Auth' => Bravo::AuthData.auth_hash }
|
20
20
|
self.iva_cond = attrs[:iva_cond]
|
21
21
|
@net = attrs[:net] || 0
|
@@ -50,8 +50,8 @@ module Bravo
|
|
50
50
|
# TODO: fix this
|
51
51
|
#
|
52
52
|
def iva_sum
|
53
|
-
@iva_sum = net *
|
54
|
-
@iva_sum.
|
53
|
+
@iva_sum = net * applicable_iva_multiplier
|
54
|
+
@iva_sum.round(2)
|
55
55
|
end
|
56
56
|
|
57
57
|
# Files the authorization request to AFIP
|
@@ -88,7 +88,7 @@ module Bravo
|
|
88
88
|
'ImpTrib' => 0.00,
|
89
89
|
'Iva' => {
|
90
90
|
'AlicIva' => {
|
91
|
-
'Id' =>
|
91
|
+
'Id' => applicable_iva_code,
|
92
92
|
'BaseImp' => net,
|
93
93
|
'Importe' => iva_sum } } } } } }
|
94
94
|
|
@@ -162,5 +162,18 @@ module Bravo
|
|
162
162
|
keys, values = response_hash.to_a.transpose
|
163
163
|
self.response = (defined?(Struct::Response) ? Struct::Response : Struct.new('Response', *keys)).new(*values)
|
164
164
|
end
|
165
|
+
|
166
|
+
def applicable_iva
|
167
|
+
index = Bravo::APPLICABLE_IVA[Bravo.own_iva_cond][iva_cond]
|
168
|
+
Bravo::ALIC_IVA[index]
|
169
|
+
end
|
170
|
+
|
171
|
+
def applicable_iva_code
|
172
|
+
applicable_iva[0]
|
173
|
+
end
|
174
|
+
|
175
|
+
def applicable_iva_multiplier
|
176
|
+
applicable_iva[1]
|
177
|
+
end
|
165
178
|
end
|
166
179
|
end
|
data/lib/bravo/constants.rb
CHANGED
@@ -59,7 +59,16 @@ module Bravo
|
|
59
59
|
#
|
60
60
|
ALIC_IVA = [['03', 0], ['04', 0.105], ['05', 0.21], ['06', 0.27]]
|
61
61
|
|
62
|
-
|
62
|
+
# Applicable tax according to buyer and seller's iva condition.
|
63
|
+
#
|
64
|
+
APPLICABLE_IVA = {
|
65
|
+
:responsable_inscripto => {
|
66
|
+
responsable_inscripto: 02,
|
67
|
+
consumidor_final: 00,
|
68
|
+
exento: 00,
|
69
|
+
responsable_monotributo: 00
|
70
|
+
}
|
71
|
+
}
|
63
72
|
|
64
73
|
# This hash keeps the codes for A document types by operation
|
65
74
|
#
|
@@ -96,4 +105,4 @@ module Bravo
|
|
96
105
|
|
97
106
|
:production => { :wsaa => 'https://wsaa.afip.gov.ar/ws/services/LoginCms',
|
98
107
|
:wsfe => 'https://servicios1.afip.gov.ar/wsfev1/service.asmx' } }
|
99
|
-
end
|
108
|
+
end
|
data/lib/bravo/version.rb
CHANGED
data/spec/bravo/bill_spec.rb
CHANGED
@@ -55,8 +55,8 @@ describe 'Bill' do
|
|
55
55
|
bill.net = 100.89
|
56
56
|
bill.aliciva_id = 2
|
57
57
|
|
58
|
-
bill.iva_sum.should be_within(0.
|
59
|
-
bill.total.should be_within(0.
|
58
|
+
bill.iva_sum.should be_within(0.005).of(21.19)
|
59
|
+
bill.total.should be_within(0.005).of(122.08)
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
@@ -101,7 +101,7 @@ describe 'Bill' do
|
|
101
101
|
Bravo::BILL_TYPE[Bravo.own_iva_cond][target_iva_cond].keys.each do |bill_type|
|
102
102
|
vcr_options = { cassette_name: "#{ target_iva_cond.to_s }_and_#{ bill_type }" }
|
103
103
|
it "authorizes bill type #{ bill_type }", vcr: vcr_options do
|
104
|
-
bill.net = 10000.
|
104
|
+
bill.net = 10000.88
|
105
105
|
bill.aliciva_id = 2
|
106
106
|
bill.doc_num = '30710151543'
|
107
107
|
bill.iva_cond = target_iva_cond
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bravo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0.
|
4
|
+
version: 1.0.0.rc2
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -157,7 +157,6 @@ files:
|
|
157
157
|
- LICENSE.txt
|
158
158
|
- README.md
|
159
159
|
- Rakefile
|
160
|
-
- VERSION
|
161
160
|
- autotest/discover.rb
|
162
161
|
- bin/bravo
|
163
162
|
- bravo.gemspec
|
@@ -165,7 +164,6 @@ files:
|
|
165
164
|
- lib/bravo/auth_data.rb
|
166
165
|
- lib/bravo/bill.rb
|
167
166
|
- lib/bravo/constants.rb
|
168
|
-
- lib/bravo/core_ext/float.rb
|
169
167
|
- lib/bravo/core_ext/hash.rb
|
170
168
|
- lib/bravo/core_ext/string.rb
|
171
169
|
- lib/bravo/reference.rb
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
0.3.6
|
data/lib/bravo/core_ext/float.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
# Float monkeypatching.
|
2
|
-
#
|
3
|
-
class Float
|
4
|
-
# Should be removed.
|
5
|
-
#
|
6
|
-
def round_with_precision(precision = nil)
|
7
|
-
precision.nil? ? round : (self * (10 ** precision)).round / (10 ** precision).to_f
|
8
|
-
end
|
9
|
-
# Should be removed.
|
10
|
-
#
|
11
|
-
def round_up_with_precision(precision = nil)
|
12
|
-
precision.nil? ? round : ((self * (10 ** precision)).round + 1) / (10 ** precision).to_f
|
13
|
-
end
|
14
|
-
end
|