invoice 1.0.2 → 1.0.3
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 +21 -11
- data/bin/{generate.rb → generate_example.rb} +14 -10
- data/lib/invoice.rb +1 -1
- data/lib/invoice/{croatian_pdf_invoice.rb → pdf_invoice.rb} +93 -32
- data/lib/invoice/version.rb +1 -1
- metadata +6 -6
data/README.md
CHANGED
@@ -41,20 +41,22 @@ Only supports one page invoice.
|
|
41
41
|
|
42
42
|
## Usage
|
43
43
|
|
44
|
-
Example script:
|
44
|
+
Example script(available in bin/generate_example.rb):
|
45
45
|
|
46
46
|
```ruby
|
47
|
-
#!/usr/bin/env ruby
|
48
47
|
#encoding:utf-8
|
49
48
|
require 'invoice'
|
50
49
|
require 'amount_inflector'
|
51
50
|
|
52
|
-
SETTINGS=
|
51
|
+
SETTINGS =
|
52
|
+
{
|
53
53
|
company_info: {
|
54
54
|
title: 'KROKODIL ITS d.o.o. društvo s ograničenom odgovornošću - za usluge',
|
55
55
|
address: 'HRVOJA TURUDIĆA 55, HR-10000 Zagreb, HRVATSKA',
|
56
56
|
numbers: 'MB 2511611, OIB 511111112312',
|
57
|
-
phone: 'M: +385 94 111 7072'
|
57
|
+
phone: 'M: +385 94 111 7072',
|
58
|
+
account_number: 'HR3324640081405230496',
|
59
|
+
swift: 'RZBHHR2X'
|
58
60
|
},
|
59
61
|
customers:
|
60
62
|
{
|
@@ -65,21 +67,22 @@ SETTINGS= {
|
|
65
67
|
numbers: 'OIB 412121'
|
66
68
|
},
|
67
69
|
dinkovac: {
|
68
|
-
name: 'Dinkovaca
|
69
|
-
address_street: '
|
70
|
-
address_city: '10000
|
71
|
-
numbers: '
|
70
|
+
name: 'Dinkovaca Inc.',
|
71
|
+
address_street: 'Potomac 137',
|
72
|
+
address_city: '10000 Ney York',
|
73
|
+
numbers: '430101111212',
|
74
|
+
location: 'USA' #triggers "no-vat template" (also 'CA')
|
72
75
|
}
|
73
76
|
},
|
74
77
|
tax: '25%',
|
75
78
|
signature_line_1: 'Direktor "KROKODIL ITS" d.o.o.',
|
76
79
|
signature_line_2: 'Krešimir Bojčić',
|
77
80
|
number_to_words_translation: NumberToKune,
|
78
|
-
footer: "
|
81
|
+
footer: "Društvo je upisano u registar Trgovačkog suda u Zagrebu pod brojem 080708370\nTemeljni kapital društva iznosi 20.000,00 kn i uplaćen je u cjelosti\nČlan Uprave Krešimir Bojčić zastupa društvo pojedinačno i samostalno"
|
79
82
|
}
|
80
83
|
|
81
84
|
INVOICE = {
|
82
|
-
no: '116/2012',
|
85
|
+
no: '116/2012/KB',
|
83
86
|
place_and_date: 'Zagreb, 25.11.2012.godine',
|
84
87
|
reference_number: "16-2012",
|
85
88
|
customer: 'dinkovac',
|
@@ -90,9 +93,16 @@ INVOICE = {
|
|
90
93
|
]
|
91
94
|
}
|
92
95
|
|
93
|
-
|
96
|
+
PDFInvoice.generate(SETTINGS, INVOICE, '~/Desktop')
|
97
|
+
puts "Succefully generated on Desktop"
|
94
98
|
```
|
95
99
|
|
100
|
+
##History
|
101
|
+
1.0.3
|
102
|
+
Added support for no-vat invoices (for location 'USA' and 'CA')
|
103
|
+
Tweaked look and feel
|
104
|
+
New legal text needed since July 1, 2013
|
105
|
+
|
96
106
|
|
97
107
|
## Contributing
|
98
108
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#encoding:utf-8
|
2
|
-
require '
|
2
|
+
require '../lib/invoice/pdf_invoice'
|
3
3
|
require 'amount_inflector'
|
4
4
|
|
5
5
|
SETTINGS =
|
@@ -8,7 +8,9 @@ SETTINGS =
|
|
8
8
|
title: 'KROKODIL ITS d.o.o. društvo s ograničenom odgovornošću - za usluge',
|
9
9
|
address: 'HRVOJA TURUDIĆA 55, HR-10000 Zagreb, HRVATSKA',
|
10
10
|
numbers: 'MB 2511611, OIB 511111112312',
|
11
|
-
phone: 'M: +385 94 111 7072'
|
11
|
+
phone: 'M: +385 94 111 7072',
|
12
|
+
account_number: 'HR3324640081405230496',
|
13
|
+
swift: 'RZBHHR2X'
|
12
14
|
},
|
13
15
|
customers:
|
14
16
|
{
|
@@ -19,22 +21,22 @@ SETTINGS =
|
|
19
21
|
numbers: 'OIB 412121'
|
20
22
|
},
|
21
23
|
dinkovac: {
|
22
|
-
name: 'Dinkovaca
|
23
|
-
address_street: '
|
24
|
-
address_city: '10000
|
25
|
-
numbers: '
|
24
|
+
name: 'Dinkovaca Inc.',
|
25
|
+
address_street: 'Potomac 137',
|
26
|
+
address_city: '10000 Ney York',
|
27
|
+
numbers: '430101111212',
|
28
|
+
location: 'USA' #triggers "no-vat template" (also 'CA')
|
26
29
|
}
|
27
30
|
},
|
28
31
|
tax: '25%',
|
29
32
|
signature_line_1: 'Direktor "KROKODIL ITS" d.o.o.',
|
30
33
|
signature_line_2: 'Krešimir Bojčić',
|
31
34
|
number_to_words_translation: NumberToKune,
|
32
|
-
footer: "
|
33
|
-
|
35
|
+
footer: "Društvo je upisano u registar Trgovačkog suda u Zagrebu pod brojem 080708370\nTemeljni kapital društva iznosi 20.000,00 kn i uplaćen je u cjelosti\nČlan Uprave Krešimir Bojčić zastupa društvo pojedinačno i samostalno"
|
34
36
|
}
|
35
37
|
|
36
38
|
INVOICE = {
|
37
|
-
no: '116/2012',
|
39
|
+
no: '116/2012/KB',
|
38
40
|
place_and_date: 'Zagreb, 25.11.2012.godine',
|
39
41
|
reference_number: "16-2012",
|
40
42
|
customer: 'dinkovac',
|
@@ -45,7 +47,9 @@ INVOICE = {
|
|
45
47
|
]
|
46
48
|
}
|
47
49
|
|
48
|
-
|
50
|
+
PDFInvoice.generate(SETTINGS, INVOICE, '~/Desktop')
|
51
|
+
puts "Succefully generated on Desktop"
|
52
|
+
|
49
53
|
|
50
54
|
|
51
55
|
|
data/lib/invoice.rb
CHANGED
@@ -6,13 +6,13 @@ require 'barby/barcode/code_39'
|
|
6
6
|
require 'date'
|
7
7
|
require 'action_view'
|
8
8
|
|
9
|
-
class
|
9
|
+
class PDFInvoice < Prawn::Document
|
10
10
|
include ActionView::Helpers::NumberHelper
|
11
11
|
extend ActionView::Helpers::NumberHelper
|
12
12
|
|
13
13
|
def self.generate(settings, invoice, path)
|
14
14
|
File.open(File.expand_path(path) + "/rn_#{invoice[:no].gsub('/','_')}_#{invoice[:customer]}.pdf", 'w') do |file|
|
15
|
-
file.write
|
15
|
+
file.write PDFInvoice.new(settings, invoice).render
|
16
16
|
end
|
17
17
|
|
18
18
|
end
|
@@ -28,7 +28,6 @@ class CroatianPDFInvoice < Prawn::Document
|
|
28
28
|
set_font_family
|
29
29
|
add_header
|
30
30
|
add_invoice_info
|
31
|
-
add_footer
|
32
31
|
end
|
33
32
|
|
34
33
|
def add_header
|
@@ -64,15 +63,23 @@ class CroatianPDFInvoice < Prawn::Document
|
|
64
63
|
indent 15,15 do
|
65
64
|
text "#{@invoice[:place_and_date]}", :align => :right
|
66
65
|
move_up 13
|
67
|
-
|
66
|
+
if export_no_vat?
|
67
|
+
text "Invoice no. (Račun broj): #{invoice_no}", :style => :bold, :size => 15
|
68
|
+
else
|
69
|
+
text "Račun broj: #{invoice_no}", :style => :bold, :size => 15
|
70
|
+
end
|
68
71
|
move_down 25
|
69
|
-
|
72
|
+
if export_no_vat?
|
73
|
+
text "Issued To (Kupac):", :style => :bold
|
74
|
+
else
|
75
|
+
text "Kupac:", :style => :bold
|
76
|
+
end
|
70
77
|
move_up 9
|
71
78
|
indent 150, 15 do
|
72
79
|
text customer[:name], :style => :bold
|
73
80
|
text customer[:address_street], :style => :bold
|
74
81
|
text customer[:address_city], :style => :bold
|
75
|
-
text customer[:numbers], :style => :bold
|
82
|
+
text customer[:numbers], :style => :bold unless customer[:numbers].nil?
|
76
83
|
end
|
77
84
|
move_down 40
|
78
85
|
stroke_horizontal_rule
|
@@ -86,48 +93,95 @@ class CroatianPDFInvoice < Prawn::Document
|
|
86
93
|
move_down 5
|
87
94
|
stroke_horizontal_rule
|
88
95
|
move_down 5
|
89
|
-
|
96
|
+
if export_no_vat?
|
97
|
+
text "TOTAL (UKUPNO)", :style => :bold
|
98
|
+
else
|
99
|
+
text "UKUPNO", :style => :bold
|
100
|
+
end
|
90
101
|
move_up 9
|
91
102
|
ukupno = items.map { |item| item[:amount] }.reduce(:+)
|
92
103
|
tax_amount = ukupno * (BigDecimal.new(@data[:tax].gsub('%',''))/100.0).round(2)
|
104
|
+
tax_amount = 0 if export_no_vat?
|
93
105
|
total = (tax_amount + ukupno).round(2)
|
94
106
|
text "#{to_currency(ukupno)}", :align => :right
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
107
|
+
unless export_no_vat?
|
108
|
+
move_down 10
|
109
|
+
text "PDV #{@data[:tax]}", :style => :bold
|
110
|
+
move_up 9
|
111
|
+
text "#{to_currency(tax_amount)}", :align => :right
|
112
|
+
end
|
99
113
|
move_down 15
|
100
114
|
stroke_horizontal_rule
|
101
115
|
move_down 5
|
102
|
-
|
116
|
+
if export_no_vat?
|
117
|
+
text "Total Amount (Sveukupno za platiti):"
|
118
|
+
else
|
119
|
+
text "Sveukupno za platiti:"
|
120
|
+
end
|
103
121
|
move_up 9
|
104
122
|
text "#{to_currency(total)}", :align => :right , :style => :bold
|
105
|
-
|
106
|
-
|
123
|
+
unless export_no_vat?
|
124
|
+
move_down 3
|
125
|
+
text "Slovima: #{NumberToKune.convert(total)}", :size => 7
|
126
|
+
end
|
107
127
|
move_down 5
|
108
128
|
stroke_horizontal_rule
|
109
129
|
move_down 25
|
110
|
-
|
130
|
+
if export_no_vat?
|
131
|
+
text "IBAN: #{company_info[:account_number]}", :style => :bold
|
132
|
+
else
|
133
|
+
text "Žiro-račun: #{company_info[:account_number]}"
|
134
|
+
end
|
135
|
+
move_down 4
|
136
|
+
if export_no_vat?
|
137
|
+
text "SWIFT: #{company_info[:swift]}"
|
138
|
+
else
|
139
|
+
text "Poziv na broj: #{@invoice[:no].gsub('/','-').gsub('-KB','')}"
|
140
|
+
end
|
111
141
|
move_down 4
|
112
|
-
|
142
|
+
if export_no_vat?
|
143
|
+
text "Payement type: bank wire (Način plaćanja: uplatom na žiro-račun)"
|
144
|
+
else
|
145
|
+
text "Način plaćanja: uplatom na žiro-račun"
|
146
|
+
end
|
147
|
+
move_down 35
|
148
|
+
text "#{@data[:signature_line_1]}", :style => :italic, :align => :left
|
149
|
+
move_up 10
|
150
|
+
indent 445 do
|
151
|
+
text "#{@data[:signature_line_2]}", :style => :bold, :align => :left
|
152
|
+
end
|
153
|
+
stroke do
|
154
|
+
horizontal_line(430, 540, :at => y - 58)
|
155
|
+
end
|
113
156
|
move_down 25
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
157
|
+
if export_no_vat?
|
158
|
+
text "This is computer generated INVOICE and requires no signature or stamp (Račun je izrađen na računalu i pravovaljan je bez potpisa i žiga)", :style => :italic, :size => 7
|
159
|
+
else
|
160
|
+
text "Račun je izrađen na računalu i pravovaljan je bez potpisa i žiga", :style => :italic, :size => 7
|
161
|
+
end
|
119
162
|
|
163
|
+
# footer
|
164
|
+
move_y = 25 + @data[:footer].split("\n").count * 9
|
165
|
+
page_count.times do |i|
|
166
|
+
go_to_page(i+1)
|
167
|
+
self.font_size = 7
|
168
|
+
bounding_box([bounds.left, bounds.bottom + move_y], :width => 550) do
|
169
|
+
if export_no_vat?
|
170
|
+
text "Usluga ne podliježe oporezivanju sukladno odredbi čl.5.st.6.t.2 Zakona o PDV-u.", :align => :left , :style => :italic
|
171
|
+
else
|
172
|
+
move_down 10
|
173
|
+
end
|
174
|
+
move_down 15
|
175
|
+
@data[:footer].each_line do |line|
|
176
|
+
text line, :style => :italic
|
177
|
+
end
|
178
|
+
end
|
179
|
+
self.font_size = 9
|
180
|
+
end
|
120
181
|
end
|
121
182
|
end
|
122
183
|
end
|
123
184
|
|
124
|
-
def add_footer
|
125
|
-
bounding_box [bounds.left, bounds.bottom + 12], :width => bounds.width do
|
126
|
-
move_down(5)
|
127
|
-
text "#{footer}", :size => 7
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
185
|
def items
|
132
186
|
@invoice[:items]
|
133
187
|
end
|
@@ -140,10 +194,6 @@ class CroatianPDFInvoice < Prawn::Document
|
|
140
194
|
@data[:company_info]
|
141
195
|
end
|
142
196
|
|
143
|
-
def footer
|
144
|
-
@data[:footer]
|
145
|
-
end
|
146
|
-
|
147
197
|
def invoice_no
|
148
198
|
@invoice[:no]
|
149
199
|
end
|
@@ -163,7 +213,18 @@ class CroatianPDFInvoice < Prawn::Document
|
|
163
213
|
BigDecimal.new(self.to_s)
|
164
214
|
end
|
165
215
|
|
216
|
+
def to_usd_currency(amount)
|
217
|
+
return '' if amount.nil?
|
218
|
+
"$#{number_with_precision(amount, :precision => 2, :delimiter => '.', :separator => ',')}"
|
219
|
+
end
|
220
|
+
|
221
|
+
def export_no_vat?
|
222
|
+
@data[:customers][@invoice[:customer].to_sym][:location] == 'USA' ||
|
223
|
+
@data[:customers][@invoice[:customer].to_sym][:location] == 'CA'
|
224
|
+
end
|
225
|
+
|
166
226
|
def to_currency(amount)
|
227
|
+
return to_usd_currency(amount) if export_no_vat?
|
167
228
|
return '' if amount.nil?
|
168
229
|
"#{number_with_precision(amount, :precision => 2, :delimiter => '.', :separator => ',')} kn"
|
169
230
|
end
|
data/lib/invoice/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: invoice
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,13 +9,13 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-07-21 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Simple .pdf invoice generator for Croatia
|
15
15
|
email:
|
16
16
|
- kresimir.bojcic@gmail.com
|
17
17
|
executables:
|
18
|
-
-
|
18
|
+
- generate_example.rb
|
19
19
|
extensions: []
|
20
20
|
extra_rdoc_files: []
|
21
21
|
files:
|
@@ -25,7 +25,7 @@ files:
|
|
25
25
|
- LICENSE.txt
|
26
26
|
- README.md
|
27
27
|
- Rakefile
|
28
|
-
- bin/
|
28
|
+
- bin/generate_example.rb
|
29
29
|
- fonts/.DS_Store
|
30
30
|
- fonts/verdana.ttf
|
31
31
|
- fonts/verdanab.ttf
|
@@ -35,7 +35,7 @@ files:
|
|
35
35
|
- images/example_invoice.png
|
36
36
|
- invoice.gemspec
|
37
37
|
- lib/invoice.rb
|
38
|
-
- lib/invoice/
|
38
|
+
- lib/invoice/pdf_invoice.rb
|
39
39
|
- lib/invoice/version.rb
|
40
40
|
homepage: https://github.com/drKreso/invoice
|
41
41
|
licenses: []
|
@@ -57,7 +57,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
57
57
|
version: '0'
|
58
58
|
requirements: []
|
59
59
|
rubyforge_project:
|
60
|
-
rubygems_version: 1.8.
|
60
|
+
rubygems_version: 1.8.23
|
61
61
|
signing_key:
|
62
62
|
specification_version: 3
|
63
63
|
summary: Generate your invoices with less effort
|