polish_invoicer 0.0.19 → 0.0.20
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +6 -4
- data/doc/invoice.rb +2 -1
- data/lib/polish_invoicer/invoice.rb +3 -1
- data/lib/polish_invoicer/validator.rb +8 -0
- data/lib/polish_invoicer/vat.rb +6 -14
- data/lib/polish_invoicer/version.rb +1 -1
- data/test/invoice_test.rb +26 -3
- data/test/validator_test.rb +15 -0
- data/test/vat_test.rb +17 -4
- data/tpl/invoice-en.slim +5 -5
- data/tpl/invoice.slim +5 -5
- data/tpl/proforma-en.slim +5 -5
- data/tpl/proforma.slim +5 -5
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 644beb638eed958e59e1975f1c05c01c925622f5
|
4
|
+
data.tar.gz: b8b85f18b71cce1b17f039af4d03df5eb28f4c4e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 392e24d56f6e06c8c584da31b42292a653db624f59796ea809cdb17f62f534179b296fab8b2ccba018841f7f5de89e01ab0ebcfd1f69c7e43f85ebbd3ca935eb
|
7
|
+
data.tar.gz: b046255d9abd0474c8a4289ae96fbe36f7643965216dfe46ac8905f390cda8c45e121b912da87abc24ce2ba2140e7a188cf455da1f45dc85db5c0afc109ebeb3
|
data/README.md
CHANGED
@@ -91,10 +91,12 @@ invoice.save_to_pdf('/path/to/invoice.pdf')
|
|
91
91
|
# wartość domyślna: false
|
92
92
|
:payment_type, # rodzaj płatności (string)
|
93
93
|
# wartość domyślna: 'Przelew'
|
94
|
-
:foreign_buyer, # nabywcą jest firma spoza Polski
|
95
|
-
# wartość domyślna: false
|
96
|
-
:reverse_charge # faktura z odwrotnym obciążeniem VAT
|
97
|
-
# wartość domyślna: false
|
94
|
+
:foreign_buyer, # nabywcą jest firma spoza Polski (boolean)
|
95
|
+
# wartość domyślna: false
|
96
|
+
:reverse_charge # faktura z odwrotnym obciążeniem VAT (boolean)
|
97
|
+
# wartość domyślna: false
|
98
|
+
:currency # waluta rozliczeniowa (string)
|
99
|
+
# wartość domyślna: PLN
|
98
100
|
|
99
101
|
### Parametry dodatkowe
|
100
102
|
|
data/doc/invoice.rb
CHANGED
@@ -19,7 +19,8 @@ invoice = PolishInvoicer::Invoice.new(
|
|
19
19
|
# proforma: true,
|
20
20
|
# paid: false,
|
21
21
|
foreign_buyer: true,
|
22
|
-
reverse_charge: true
|
22
|
+
reverse_charge: true,
|
23
|
+
currency: 'USD'
|
23
24
|
)
|
24
25
|
invoice.save_to_html('/tmp/invoice.html')
|
25
26
|
invoice.save_to_pdf('/tmp/invoice.pdf')
|
@@ -22,7 +22,8 @@ module PolishInvoicer
|
|
22
22
|
:proforma, # znacznik faktury pro-forma, domyślnie: false (boolean)
|
23
23
|
:no_vat_reason, # podstawa prawna zwolnienia z VAT (string)
|
24
24
|
:foreign_buyer, # nabywcą jest firma spoza Polski, domyślnie: false (boolean)
|
25
|
-
:reverse_charge
|
25
|
+
:reverse_charge, # faktura z odwrotnym obciążeniem VAT
|
26
|
+
:currency # waluta rozliczeniowa, domyślnie: PLN (string)
|
26
27
|
].freeze
|
27
28
|
|
28
29
|
attr_accessor(*AVAILABLE_PARAMS)
|
@@ -88,6 +89,7 @@ module PolishInvoicer
|
|
88
89
|
@proforma = false
|
89
90
|
@foreign_buyer = false
|
90
91
|
@reverse_charge = false
|
92
|
+
@currency = 'PLN'
|
91
93
|
@recipient = []
|
92
94
|
end
|
93
95
|
|
@@ -18,6 +18,7 @@ module PolishInvoicer
|
|
18
18
|
check_vat
|
19
19
|
check_proforma
|
20
20
|
check_create_and_payment_date
|
21
|
+
check_currency
|
21
22
|
@errors.empty?
|
22
23
|
end
|
23
24
|
|
@@ -40,6 +41,7 @@ module PolishInvoicer
|
|
40
41
|
def check_not_nil
|
41
42
|
@errors[:gross_price] = 'Konieczne jest ustawienie znacznika rodzaju ceny (netto/brutto)' if @invoice.gross_price.nil?
|
42
43
|
@errors[:paid] = 'Konieczne jest ustawienie znacznika opłacenia faktury' if @invoice.paid.nil?
|
44
|
+
@errors[:currency] = 'Konieczne jest ustawienie waluty rozliczeniowej' if @invoice.currency.nil?
|
43
45
|
end
|
44
46
|
|
45
47
|
def check_arrays
|
@@ -102,6 +104,12 @@ module PolishInvoicer
|
|
102
104
|
@errors[:payment_date] = 'Termin płatności nie może być wcześniejszy niż data wystawienia'
|
103
105
|
end
|
104
106
|
|
107
|
+
def check_currency
|
108
|
+
return if @errors[:currency]
|
109
|
+
return if %w[PLN EUR USD GBP].include?(@invoice.currency)
|
110
|
+
@errors[:currency] = 'Nieznana waluta'
|
111
|
+
end
|
112
|
+
|
105
113
|
def blank?(value)
|
106
114
|
value.to_s.strip == ''
|
107
115
|
end
|
data/lib/polish_invoicer/vat.rb
CHANGED
@@ -1,35 +1,27 @@
|
|
1
1
|
module PolishInvoicer
|
2
2
|
class Vat
|
3
3
|
def self.rates
|
4
|
-
|
4
|
+
(0..27)
|
5
5
|
end
|
6
6
|
|
7
7
|
def self.valid?(rate)
|
8
|
+
return true if zw?(rate)
|
8
9
|
rates.include?(rate)
|
9
10
|
end
|
10
11
|
|
11
12
|
# Czy stawka VAT to "zwolniony"?
|
12
13
|
def self.zw?(rate)
|
13
|
-
rate == -1
|
14
|
+
rate == -1 # -1 oznacza zwolniony z VAT
|
14
15
|
end
|
15
16
|
|
16
17
|
def self.to_s(rate)
|
17
|
-
|
18
|
+
return 'zw.' if zw?(rate)
|
19
|
+
"#{rate}%"
|
18
20
|
end
|
19
21
|
|
20
22
|
# Potrzebne do obliczeń netto/vat/brutto
|
21
23
|
def self.to_i(rate)
|
22
|
-
rate
|
23
|
-
end
|
24
|
-
|
25
|
-
def self.hash
|
26
|
-
h = {}
|
27
|
-
rates.each do |r|
|
28
|
-
name = "#{r}%"
|
29
|
-
name = 'zw.' if r == -1
|
30
|
-
h[name] = r
|
31
|
-
end
|
32
|
-
h
|
24
|
+
zw?(rate) ? 0 : rate
|
33
25
|
end
|
34
26
|
end
|
35
27
|
end
|
data/test/invoice_test.rb
CHANGED
@@ -26,26 +26,41 @@ module PolishInvoicer
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def test_net_value
|
29
|
-
i = Invoice.new(price: 123.45, gross_price: false
|
29
|
+
i = Invoice.new(price: 123.45, gross_price: false)
|
30
|
+
i.vat = 23
|
30
31
|
assert_in_delta 123.45, i.net_value, 0.01
|
32
|
+
|
31
33
|
i.gross_price = true
|
34
|
+
i.vat = 23
|
32
35
|
assert_in_delta 100.37, i.net_value, 0.01
|
36
|
+
i.vat = 5.5
|
37
|
+
assert_in_delta 117.01, i.net_value, 0.01
|
33
38
|
i.vat = 0
|
34
39
|
assert_in_delta 123.45, i.net_value, 0.01
|
35
40
|
i.vat = -1
|
36
41
|
assert_in_delta 123.45, i.net_value, 0.01
|
42
|
+
|
37
43
|
i.gross_price = false
|
38
44
|
i.vat = 0
|
39
45
|
assert_in_delta 123.45, i.net_value, 0.01
|
40
46
|
i.vat = -1
|
41
47
|
assert_in_delta 123.45, i.net_value, 0.01
|
48
|
+
i.vat = 5.5
|
49
|
+
assert_in_delta 123.45, i.net_value, 0.01
|
42
50
|
end
|
43
51
|
|
44
52
|
def test_vat_value
|
45
|
-
i = Invoice.new(price: 123.45, gross_price: false
|
53
|
+
i = Invoice.new(price: 123.45, gross_price: false)
|
54
|
+
i.vat = 23
|
46
55
|
assert_in_delta 28.39, i.vat_value, 0.01
|
56
|
+
i.vat = 5.5
|
57
|
+
assert_in_delta 6.79, i.vat_value, 0.01
|
58
|
+
|
47
59
|
i.gross_price = true
|
60
|
+
i.vat = 23
|
48
61
|
assert_in_delta 23.08, i.vat_value, 0.01
|
62
|
+
i.vat = 5.5
|
63
|
+
assert_in_delta 6.44, i.vat_value, 0.01
|
49
64
|
i.vat = 0
|
50
65
|
assert_equal 0.00, i.vat_value
|
51
66
|
i.vat = -1
|
@@ -53,15 +68,23 @@ module PolishInvoicer
|
|
53
68
|
end
|
54
69
|
|
55
70
|
def test_gross_value
|
56
|
-
i = Invoice.new(price: 123.45, gross_price: false
|
71
|
+
i = Invoice.new(price: 123.45, gross_price: false)
|
72
|
+
i.vat = 23
|
57
73
|
assert_in_delta 151.84, i.gross_value, 0.01
|
74
|
+
|
58
75
|
i.gross_price = true
|
76
|
+
i.vat = 23
|
77
|
+
assert_in_delta 123.45, i.gross_value, 0.01
|
78
|
+
i.vat = 5.5
|
59
79
|
assert_in_delta 123.45, i.gross_value, 0.01
|
60
80
|
i.vat = 0
|
61
81
|
assert_in_delta 123.45, i.gross_value, 0.01
|
62
82
|
i.vat = -1
|
63
83
|
assert_in_delta 123.45, i.gross_value, 0.01
|
84
|
+
|
64
85
|
i.gross_price = false
|
86
|
+
i.vat = 5.5
|
87
|
+
assert_in_delta 130.24, i.gross_value, 0.01
|
65
88
|
i.vat = 0
|
66
89
|
assert_in_delta 123.45, i.gross_value, 0.01
|
67
90
|
i.vat = -1
|
data/test/validator_test.rb
CHANGED
@@ -142,6 +142,21 @@ module PolishInvoicer
|
|
142
142
|
assert_nil v.errors[:payment_date]
|
143
143
|
end
|
144
144
|
|
145
|
+
def test_currency
|
146
|
+
@invoice.currency = nil
|
147
|
+
v = Validator.new(@invoice)
|
148
|
+
v.valid?
|
149
|
+
assert v.errors[:currency]
|
150
|
+
@invoice.currency = 'XYZ'
|
151
|
+
v = Validator.new(@invoice)
|
152
|
+
v.valid?
|
153
|
+
assert v.errors[:currency]
|
154
|
+
@invoice.currency = 'EUR'
|
155
|
+
v = Validator.new(@invoice)
|
156
|
+
v.valid?
|
157
|
+
refute v.errors[:currency]
|
158
|
+
end
|
159
|
+
|
145
160
|
private
|
146
161
|
|
147
162
|
def check_error(field, value = nil)
|
data/test/vat_test.rb
CHANGED
@@ -4,22 +4,35 @@ module PolishInvoicer
|
|
4
4
|
class VatTest < Minitest::Test
|
5
5
|
def test_valid
|
6
6
|
assert Vat.valid?(23)
|
7
|
+
assert Vat.valid?(27)
|
8
|
+
assert Vat.valid?(2)
|
9
|
+
assert Vat.valid?(5.5)
|
10
|
+
assert Vat.valid?(4.8)
|
7
11
|
assert Vat.valid?(0)
|
8
12
|
assert Vat.valid?(-1)
|
9
|
-
|
10
|
-
|
11
|
-
|
13
|
+
refute Vat.valid?(123)
|
14
|
+
refute Vat.valid?(-10)
|
15
|
+
refute Vat.valid?('test')
|
16
|
+
refute Vat.valid?('2,1')
|
17
|
+
refute Vat.valid?('2.1')
|
12
18
|
end
|
13
19
|
|
14
20
|
def test_zw
|
15
21
|
assert Vat.zw?(-1)
|
16
|
-
|
22
|
+
refute Vat.zw?(23)
|
17
23
|
end
|
18
24
|
|
19
25
|
def test_to_s
|
20
26
|
assert_equal '23%', Vat.to_s(23)
|
27
|
+
assert_equal '5.5%', Vat.to_s(5.5)
|
21
28
|
assert_equal '0%', Vat.to_s(0)
|
22
29
|
assert_equal 'zw.', Vat.to_s(-1)
|
23
30
|
end
|
31
|
+
|
32
|
+
def test_to_i
|
33
|
+
assert_equal 0, Vat.to_i(-1)
|
34
|
+
assert_equal 5.5, Vat.to_i(5.5)
|
35
|
+
assert_equal 20, Vat.to_i(20)
|
36
|
+
end
|
24
37
|
end
|
25
38
|
end
|
data/tpl/invoice-en.slim
CHANGED
@@ -151,7 +151,7 @@ html
|
|
151
151
|
.small
|
152
152
|
em Total to pay:
|
153
153
|
.col-xs-6
|
154
|
-
b = "#{reverse_charge == true ? net_value : gross_value}
|
154
|
+
b = "#{reverse_charge == true ? net_value : gross_value} #{currency}"
|
155
155
|
.row
|
156
156
|
.col-xs-6
|
157
157
|
| Zapłacono:
|
@@ -159,9 +159,9 @@ html
|
|
159
159
|
em Amount paid:
|
160
160
|
.col-xs-6
|
161
161
|
- if paid
|
162
|
-
= "#{reverse_charge == true ? net_value : gross_value}
|
162
|
+
= "#{reverse_charge == true ? net_value : gross_value} #{currency}"
|
163
163
|
- else
|
164
|
-
|
164
|
+
= "0,00 #{currency}"
|
165
165
|
.row
|
166
166
|
.col-xs-6
|
167
167
|
| Zostało do zapłaty:
|
@@ -169,9 +169,9 @@ html
|
|
169
169
|
em Left to pay:
|
170
170
|
.col-xs-6
|
171
171
|
- if paid
|
172
|
-
|
172
|
+
= "0,00 #{currency}"
|
173
173
|
- else
|
174
|
-
= "#{reverse_charge == true ? net_value : gross_value}
|
174
|
+
= "#{reverse_charge == true ? net_value : gross_value} #{currency}"
|
175
175
|
|
176
176
|
.col-xs-6
|
177
177
|
- if comments.any?
|
data/tpl/invoice.slim
CHANGED
@@ -103,17 +103,17 @@ html
|
|
103
103
|
br
|
104
104
|
| Zostało do zapłaty:
|
105
105
|
.col-xs-3
|
106
|
-
b = "#{gross_value}
|
106
|
+
b = "#{gross_value} #{currency}"
|
107
107
|
br
|
108
108
|
- if paid
|
109
|
-
= "#{gross_value}
|
109
|
+
= "#{gross_value} #{currency}"
|
110
110
|
- else
|
111
|
-
|
111
|
+
= "0,00 #{currency}"
|
112
112
|
br
|
113
113
|
- if paid
|
114
|
-
|
114
|
+
= "0,00 #{currency}"
|
115
115
|
- else
|
116
|
-
= "#{gross_value}
|
116
|
+
= "#{gross_value} #{currency}"
|
117
117
|
- if comments.any?
|
118
118
|
.col-xs-6
|
119
119
|
b Uwagi:
|
data/tpl/proforma-en.slim
CHANGED
@@ -136,7 +136,7 @@ html
|
|
136
136
|
.small
|
137
137
|
em Total to pay:
|
138
138
|
.col-xs-6
|
139
|
-
b = "#{reverse_charge == true ? net_value : gross_value}
|
139
|
+
b = "#{reverse_charge == true ? net_value : gross_value} #{currency}"
|
140
140
|
.row
|
141
141
|
.col-xs-6
|
142
142
|
| Zapłacono:
|
@@ -144,9 +144,9 @@ html
|
|
144
144
|
em Amount paid:
|
145
145
|
.col-xs-6
|
146
146
|
- if paid
|
147
|
-
= "#{reverse_charge == true ? net_value : gross_value}
|
147
|
+
= "#{reverse_charge == true ? net_value : gross_value} #{currency}"
|
148
148
|
- else
|
149
|
-
|
149
|
+
= "0,00 #{currency}"
|
150
150
|
.row
|
151
151
|
.col-xs-6
|
152
152
|
| Zostało do zapłaty:
|
@@ -154,9 +154,9 @@ html
|
|
154
154
|
em Left to pay:
|
155
155
|
.col-xs-6
|
156
156
|
- if paid
|
157
|
-
|
157
|
+
= "0,00 #{currency}"
|
158
158
|
- else
|
159
|
-
= "#{reverse_charge == true ? net_value : gross_value}
|
159
|
+
= "#{reverse_charge == true ? net_value : gross_value} #{currency}"
|
160
160
|
|
161
161
|
.col-xs-6
|
162
162
|
- if comments.any?
|
data/tpl/proforma.slim
CHANGED
@@ -95,17 +95,17 @@ html
|
|
95
95
|
br
|
96
96
|
| Zostało do zapłaty:
|
97
97
|
.col-xs-3
|
98
|
-
b = "#{gross_value}
|
98
|
+
b = "#{gross_value} #{currency}"
|
99
99
|
br
|
100
100
|
- if paid
|
101
|
-
= "#{gross_value}
|
101
|
+
= "#{gross_value} #{currency}"
|
102
102
|
- else
|
103
|
-
|
103
|
+
= "0,00 #{currency}"
|
104
104
|
br
|
105
105
|
- if paid
|
106
|
-
|
106
|
+
= "0,00 #{currency}"
|
107
107
|
- else
|
108
|
-
= "#{gross_value}
|
108
|
+
= "#{gross_value} #{currency}"
|
109
109
|
- if comments.any?
|
110
110
|
.col-xs-6
|
111
111
|
b Uwagi:
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: polish_invoicer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.20
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Piotr Macuk
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-07-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|