invoice_printer 2.0.0 → 2.1.0.rc1
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.
- checksums.yaml +4 -4
- data/Gemfile.lock +22 -20
- data/README.md +2 -2
- data/benchmarks/render.yml +13 -8
- data/docs/COMMAND_LINE.md +119 -0
- data/docs/LIBRARY.md +13 -12
- data/docs/SERVER.md +6 -2
- data/examples/provider_purchaser_lines.rb +4 -13
- data/examples/simple_invoice.rb +13 -14
- data/lib/invoice_printer/document.rb +84 -148
- data/lib/invoice_printer/pdf_document.rb +9 -32
- data/lib/invoice_printer/version.rb +1 -1
- data/test/api_test.rb +2 -2
- data/test/background_test.rb +1 -1
- data/test/cli_test.rb +1 -1
- data/test/dates_box_test.rb +4 -4
- data/test/inputs_test.rb +4 -4
- data/test/invoice_printer_test.rb +2 -2
- data/test/items_table_test.rb +2 -2
- data/test/labels_test.rb +2 -2
- data/test/notes_test.rb +1 -1
- data/test/page_numbers_test.rb +4 -4
- data/test/payment_box_test.rb +5 -5
- data/test/test_helper.rb +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 926ffa0b9c6ce419a715122202dbc5e5b6489323c0daafe1da259cb86efb0acc
|
|
4
|
+
data.tar.gz: d0a6882d42b488d4df932f8b5981a188beb515af31ec3a0d5eb49a6b64a28882
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 383e3dc9b714a1faf3a585ed9313db8d0e77031d4556643894395757de723a787b216f5af2eba8ea7aa5c183c0d5ea55bc69534bf9bc40def043767f10c9aeb3
|
|
7
|
+
data.tar.gz: b53666c983492ffc59668c305b4b1e1e914f78488a44ec8c048c83de847a4a3559a0092534795d985a61c0192698ab99a2f0b3ecdf8d74a91dde1ff3a7f524af
|
data/Gemfile.lock
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
invoice_printer (2.0.0
|
|
4
|
+
invoice_printer (2.0.0)
|
|
5
5
|
json (~> 2.1)
|
|
6
6
|
prawn (~> 2.2)
|
|
7
7
|
prawn-table (~> 0.2.2)
|
|
8
|
-
invoice_printer_server (2.0.0
|
|
9
|
-
invoice_printer (= 2.0.0
|
|
8
|
+
invoice_printer_server (2.0.0)
|
|
9
|
+
invoice_printer (= 2.0.0)
|
|
10
10
|
json (~> 2.1)
|
|
11
11
|
puma (>= 3.9.0)
|
|
12
12
|
roda (~> 3.5)
|
|
@@ -20,37 +20,39 @@ GEM
|
|
|
20
20
|
benchmark_driver-output-gruff (0.3.1)
|
|
21
21
|
benchmark_driver (>= 0.12.0)
|
|
22
22
|
gruff
|
|
23
|
-
gruff (0.
|
|
24
|
-
|
|
23
|
+
gruff (0.11.0)
|
|
24
|
+
histogram
|
|
25
|
+
rmagick
|
|
25
26
|
hashery (2.1.2)
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
histogram (0.2.4.1)
|
|
28
|
+
json (2.3.1)
|
|
29
|
+
minitest (5.14.2)
|
|
30
|
+
nio4r (2.5.4)
|
|
31
|
+
pdf-core (0.9.0)
|
|
30
32
|
pdf-inspector (1.3.0)
|
|
31
33
|
pdf-reader (>= 1.0, < 3.0.a)
|
|
32
|
-
pdf-reader (2.
|
|
34
|
+
pdf-reader (2.4.1)
|
|
33
35
|
Ascii85 (~> 1.0.0)
|
|
34
36
|
afm (~> 0.2.1)
|
|
35
37
|
hashery (~> 2.0)
|
|
36
38
|
ruby-rc4
|
|
37
39
|
ttfunk
|
|
38
|
-
prawn (2.
|
|
39
|
-
pdf-core (~> 0.
|
|
40
|
-
ttfunk (~> 1.
|
|
40
|
+
prawn (2.4.0)
|
|
41
|
+
pdf-core (~> 0.9.0)
|
|
42
|
+
ttfunk (~> 1.7)
|
|
41
43
|
prawn-table (0.2.2)
|
|
42
44
|
prawn (>= 1.3.0, < 3.0.0)
|
|
43
|
-
puma (
|
|
45
|
+
puma (5.0.2)
|
|
44
46
|
nio4r (~> 2.0)
|
|
45
|
-
rack (2.
|
|
47
|
+
rack (2.2.3)
|
|
46
48
|
rack-test (1.1.0)
|
|
47
49
|
rack (>= 1.0, < 3)
|
|
48
|
-
rake (
|
|
49
|
-
rmagick (
|
|
50
|
-
roda (3.
|
|
50
|
+
rake (13.0.1)
|
|
51
|
+
rmagick (4.1.2)
|
|
52
|
+
roda (3.36.0)
|
|
51
53
|
rack
|
|
52
54
|
ruby-rc4 (0.1.5)
|
|
53
|
-
ttfunk (1.
|
|
55
|
+
ttfunk (1.7.0)
|
|
54
56
|
|
|
55
57
|
PLATFORMS
|
|
56
58
|
ruby
|
|
@@ -66,4 +68,4 @@ DEPENDENCIES
|
|
|
66
68
|
rake (>= 10.0)
|
|
67
69
|
|
|
68
70
|
BUNDLED WITH
|
|
69
|
-
1.
|
|
71
|
+
2.1.4
|
data/README.md
CHANGED
|
@@ -28,7 +28,7 @@ See more usecases in the `examples/` directory.
|
|
|
28
28
|
- Configurable items' table with item description, quantity, unit, price per unit, tax and item's total amount fields
|
|
29
29
|
- Final subtotal/tax/total info box
|
|
30
30
|
- Page numbers
|
|
31
|
-
- Configurable labels & sublabels (optional little labels)
|
|
31
|
+
- Configurable field labels & sublabels (optional little labels)
|
|
32
32
|
- Configurable font file
|
|
33
33
|
- Logotype (as image scaled to fit 50px of height)
|
|
34
34
|
- Background (as image)
|
|
@@ -48,4 +48,4 @@ See more usecases in the `examples/` directory.
|
|
|
48
48
|
|
|
49
49
|
## Copyright
|
|
50
50
|
|
|
51
|
-
Copyright 2015-
|
|
51
|
+
Copyright 2015-2021 © [Josef Strzibny](http://strzibny.name/). MIT licensed.
|
data/benchmarks/render.yml
CHANGED
|
@@ -8,6 +8,17 @@ prelude: |
|
|
|
8
8
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
9
9
|
require 'invoice_printer'
|
|
10
10
|
|
|
11
|
+
provider_address = <<ADDRESS
|
|
12
|
+
Rolnická 1
|
|
13
|
+
747 05 Opava
|
|
14
|
+
Kateřinky
|
|
15
|
+
ADDRESS
|
|
16
|
+
|
|
17
|
+
purchaser_address = <<ADDRESS
|
|
18
|
+
Ostravská 1
|
|
19
|
+
747 70 Opava
|
|
20
|
+
ADDRESS
|
|
21
|
+
|
|
11
22
|
item = InvoicePrinter::Document::Item.new(
|
|
12
23
|
name: 'Programming',
|
|
13
24
|
quantity: '10',
|
|
@@ -19,15 +30,9 @@ prelude: |
|
|
|
19
30
|
invoice = InvoicePrinter::Document.new(
|
|
20
31
|
number: 'NO. 198900000001',
|
|
21
32
|
provider_name: 'John White',
|
|
22
|
-
|
|
23
|
-
provider_street_number: '1',
|
|
24
|
-
provider_postcode: '747 05',
|
|
25
|
-
provider_city: 'NYC',
|
|
33
|
+
provider_lines: provider_address,
|
|
26
34
|
purchaser_name: 'Will Black',
|
|
27
|
-
|
|
28
|
-
purchaser_street_number: '1',
|
|
29
|
-
purchaser_postcode: '747 70',
|
|
30
|
-
purchaser_city: 'NYC',
|
|
35
|
+
purchaser_lines: purchaser_address,
|
|
31
36
|
issue_date: '05/03/2016',
|
|
32
37
|
due_date: '19/03/2016',
|
|
33
38
|
total: '$ 900',
|
data/docs/COMMAND_LINE.md
CHANGED
|
@@ -20,6 +20,125 @@ Options:
|
|
|
20
20
|
-f, --filename output path
|
|
21
21
|
-r, --render directly render PDF stream (filename option will be ignored)
|
|
22
22
|
```
|
|
23
|
+
|
|
24
|
+
## Document
|
|
25
|
+
|
|
26
|
+
JSON document with all possible fields filled:
|
|
27
|
+
|
|
28
|
+
```json
|
|
29
|
+
{
|
|
30
|
+
"number":"c. 198900000001",
|
|
31
|
+
"provider_name":"Petr Novy",
|
|
32
|
+
"provider_tax_id":"56565656",
|
|
33
|
+
"provider_tax_id2":"",
|
|
34
|
+
"provider_lines":"Rolnická 1\n747 05 Opava\nKateřinky",
|
|
35
|
+
"purchaser_name":"Adam Cerny",
|
|
36
|
+
"purchaser_tax_id":"",
|
|
37
|
+
"purchaser_tax_id2":"",
|
|
38
|
+
"purchaser_lines":"Ostravská 1\n747 70 Opava",
|
|
39
|
+
"issue_date":"05/03/2016",
|
|
40
|
+
"due_date":"19/03/2016",
|
|
41
|
+
"subtotal":"Kc 10.000",
|
|
42
|
+
"tax":"Kc 2.100",
|
|
43
|
+
"tax2":"",
|
|
44
|
+
"tax3":"",
|
|
45
|
+
"variable":"Extra column",
|
|
46
|
+
"total":"Kc 12.100,-",
|
|
47
|
+
"bank_account_number":"156546546465",
|
|
48
|
+
"account_iban":"IBAN464545645",
|
|
49
|
+
"account_swift":"SWIFT5456",
|
|
50
|
+
"items":[
|
|
51
|
+
{
|
|
52
|
+
"name":"Konzultace",
|
|
53
|
+
"variable": "",
|
|
54
|
+
"quantity":"2",
|
|
55
|
+
"unit":"hod",
|
|
56
|
+
"price":"Kc 500",
|
|
57
|
+
"tax":"",
|
|
58
|
+
"tax2":"",
|
|
59
|
+
"tax3":"",
|
|
60
|
+
"amount":"Kc 1.000"
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"name":"Programovani",
|
|
64
|
+
"variable": "",
|
|
65
|
+
"quantity":"10",
|
|
66
|
+
"unit":"hod",
|
|
67
|
+
"price":"Kc 900",
|
|
68
|
+
"tax":"",
|
|
69
|
+
"tax2":"",
|
|
70
|
+
"tax3":"",
|
|
71
|
+
"amount":"Kc 9.000"
|
|
72
|
+
}
|
|
73
|
+
],
|
|
74
|
+
"note":"Osoba je zapsána v zivnostenském rejstríku."
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**Note**: `provider_lines` and `purchaser_lines` are 4 lines of data separated by new line character`\n`. Other lines are being stripped.
|
|
79
|
+
|
|
80
|
+
**Note**: There is `variable` field that can be used for any
|
|
81
|
+
extra column.
|
|
82
|
+
|
|
83
|
+
## Field labels
|
|
84
|
+
|
|
85
|
+
All labels:
|
|
86
|
+
|
|
87
|
+
```json
|
|
88
|
+
{
|
|
89
|
+
"name":"Invoice",
|
|
90
|
+
"provider":"Provider",
|
|
91
|
+
"purchaser":"Purchaser",
|
|
92
|
+
"tax_id":"Identification number",
|
|
93
|
+
"tax_id2":"Identification number",
|
|
94
|
+
"payment":"Payment",
|
|
95
|
+
"payment_by_transfer":"Payment by bank transfer on the account below:",
|
|
96
|
+
"payment_in_cash":"Payment in cash",
|
|
97
|
+
"account_number":"Account NO",
|
|
98
|
+
"swift":"SWIFT",
|
|
99
|
+
"iban":"IBAN",
|
|
100
|
+
"issue_date":"Issue date",
|
|
101
|
+
"due_date": "Due date",
|
|
102
|
+
"item":"Item",
|
|
103
|
+
"variable":"",
|
|
104
|
+
"quantity":"Quantity",
|
|
105
|
+
"unit": "Unit",
|
|
106
|
+
"price_per_item":"Price per item",
|
|
107
|
+
"amount":"Amount",
|
|
108
|
+
"tax":"Tax",
|
|
109
|
+
"tax2":"Tax 2",
|
|
110
|
+
"tax3":"Tax 3",
|
|
111
|
+
"subtotal":"Subtotal",
|
|
112
|
+
"total":"Total",
|
|
113
|
+
"sublabels":{
|
|
114
|
+
"name":"Faktura",
|
|
115
|
+
"provider":"Prodejce",
|
|
116
|
+
"purchaser":"Kupující",
|
|
117
|
+
"tax_id":"IČ",
|
|
118
|
+
"tax_id2":"DIČ",
|
|
119
|
+
"payment":"Forma úhrady",
|
|
120
|
+
"payment_by_transfer":"Platba na následující účet:",
|
|
121
|
+
"account_number":"Číslo účtu",
|
|
122
|
+
"issue_date":"Datum vydání",
|
|
123
|
+
"due_date":"Datum splatnosti",
|
|
124
|
+
"item":"Položka",
|
|
125
|
+
"variable:":"",
|
|
126
|
+
"quantity":"Počet",
|
|
127
|
+
"unit":"MJ",
|
|
128
|
+
"price_per_item":"Cena za položku",
|
|
129
|
+
"amount":"Celkem bez daně",
|
|
130
|
+
"subtota":"Cena bez daně",
|
|
131
|
+
"tax":"DPH 21 %",
|
|
132
|
+
"total":"Celkem"
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
**Note**: Notice the `sublabels` which you might not want to necessary include.
|
|
137
|
+
|
|
138
|
+
## Built-in fonts
|
|
139
|
+
|
|
140
|
+
Supported builtin fonts are: `overpass`, `opensans`, and `roboto`.
|
|
141
|
+
|
|
23
142
|
## Examples
|
|
24
143
|
|
|
25
144
|
```
|
data/docs/LIBRARY.md
CHANGED
|
@@ -72,13 +72,11 @@ invoice = InvoicePrinter::Document.new(
|
|
|
72
72
|
**Note**: `provider_lines` and `purchaser_lines` are 4 lines of data separated by new line character`\n`. Other lines are being stripped.
|
|
73
73
|
|
|
74
74
|
**Note**: There is `variable` field that can be used for any
|
|
75
|
-
extra column.
|
|
76
|
-
available as well.
|
|
75
|
+
extra column.
|
|
77
76
|
|
|
78
77
|
### Ruby on Rails
|
|
79
78
|
|
|
80
|
-
If you want to use InvoicePrinter for printing PDF documents directly from Rails
|
|
81
|
-
actions, you can:
|
|
79
|
+
If you want to use InvoicePrinter for printing PDF documents directly from Rails actions, you can:
|
|
82
80
|
|
|
83
81
|
```ruby
|
|
84
82
|
# GET /invoices/1
|
|
@@ -109,11 +107,8 @@ InvoicePrinter.print(
|
|
|
109
107
|
document: document,
|
|
110
108
|
...
|
|
111
109
|
)
|
|
112
|
-
|
|
113
110
|
```
|
|
114
111
|
|
|
115
|
-
|
|
116
|
-
|
|
117
112
|
## Customization
|
|
118
113
|
|
|
119
114
|
### Page size
|
|
@@ -153,8 +148,7 @@ InvoicePrinter.print(
|
|
|
153
148
|
)
|
|
154
149
|
```
|
|
155
150
|
|
|
156
|
-
Here is the full list of labels to configure. You can paste and edit this block
|
|
157
|
-
to `initializers/invoice_printer.rb` if you are using Rails.
|
|
151
|
+
Here is the full list of labels to configure. You can paste and edit this block to `initializers/invoice_printer.rb` if you are using Rails.
|
|
158
152
|
|
|
159
153
|
```ruby
|
|
160
154
|
InvoicePrinter.labels = {
|
|
@@ -226,16 +220,23 @@ Now the document will have little sublabels next to the original labels in Czech
|
|
|
226
220
|
|
|
227
221
|
To support specific characters you might need to specify a TTF font to be used:
|
|
228
222
|
|
|
229
|
-
```
|
|
223
|
+
```ruby
|
|
230
224
|
InvoicePrinter.print(
|
|
231
225
|
...
|
|
232
226
|
font: File.expand_path('../Overpass-Regular.ttf', __FILE__)
|
|
233
227
|
)
|
|
234
228
|
```
|
|
235
229
|
|
|
236
|
-
If you don't have a font around, you can install `invoice_printer_fonts` gem and specify the supported font name instead
|
|
230
|
+
If you don't have a font around, you can install `invoice_printer_fonts` gem and specify the supported font name instead:
|
|
231
|
+
|
|
232
|
+
```ruby
|
|
233
|
+
InvoicePrinter.print(
|
|
234
|
+
document: invoice,
|
|
235
|
+
font: "roboto"
|
|
236
|
+
)
|
|
237
|
+
```
|
|
237
238
|
|
|
238
|
-
Supported builtin fonts are: `overpass`, `opensans`, and `
|
|
239
|
+
Supported builtin fonts are: `overpass`, `opensans`, and `roboto`. Note that searching the path takes preference.
|
|
239
240
|
|
|
240
241
|
### Background
|
|
241
242
|
|
data/docs/SERVER.md
CHANGED
|
@@ -23,9 +23,11 @@ By default server binds to `0.0.0.0:9393`.
|
|
|
23
23
|
Get the public image and run it:
|
|
24
24
|
|
|
25
25
|
```bash
|
|
26
|
-
$ sudo docker pull strzibnyj/invoice_printer_server
|
|
27
|
-
$ sudo docker run -d -p 9393:9393 -t docker.io/strzibnyj/invoice_printer_server
|
|
26
|
+
$ sudo docker pull strzibnyj/invoice_printer_server:$VERSION
|
|
27
|
+
$ sudo docker run -d -p 9393:9393 -v ~/path/to/invocies:/data:Z -t docker.io/strzibnyj/invoice_printer_server
|
|
28
28
|
```
|
|
29
|
+
You can use `latest` as a `$VERSION`. Specifying the `-v` option is only required when using the `/print` action to create the documents at certain path. It will allow you to provide the desired filename as "/data/invoice-name.pdf".
|
|
30
|
+
|
|
29
31
|
The server will then be available on `0.0.0.0:9393`.
|
|
30
32
|
|
|
31
33
|
Docker image already contains the optional `invoice_printer_fonts` gem.
|
|
@@ -64,6 +66,8 @@ Options:
|
|
|
64
66
|
- `background` - path to background file
|
|
65
67
|
- `page_size` - letter or A4 page size
|
|
66
68
|
|
|
69
|
+
These parameters are the same as for the [command line](./COMMAND_LINE.md).
|
|
70
|
+
|
|
67
71
|
On success a `200` response is returned:
|
|
68
72
|
|
|
69
73
|
```json
|
|
@@ -47,7 +47,8 @@ Rolnická 1
|
|
|
47
47
|
747 05 Opava
|
|
48
48
|
Kateřinky
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
|
|
51
|
+
6th line wont show
|
|
51
52
|
ADDRESS
|
|
52
53
|
|
|
53
54
|
purchaser_address = <<ADDRESS
|
|
@@ -55,8 +56,7 @@ Ostravská 1
|
|
|
55
56
|
747 70 Opava
|
|
56
57
|
|
|
57
58
|
|
|
58
|
-
|
|
59
|
-
fith line wont show
|
|
59
|
+
6th line wont show
|
|
60
60
|
ADDRESS
|
|
61
61
|
|
|
62
62
|
invoice = InvoicePrinter::Document.new(
|
|
@@ -64,20 +64,11 @@ invoice = InvoicePrinter::Document.new(
|
|
|
64
64
|
provider_name: 'Petr Nový',
|
|
65
65
|
provider_tax_id: '56565656',
|
|
66
66
|
provider_tax_id2: 'CZ56565656',
|
|
67
|
-
provider_street: 'Rolnická',
|
|
68
|
-
provider_street_number: '1',
|
|
69
|
-
provider_postcode: '747 05',
|
|
70
|
-
provider_city: 'Opava',
|
|
71
|
-
provider_city_part: 'Kateřinky',
|
|
72
67
|
provider_lines: provider_address,
|
|
73
68
|
purchaser_name: 'Adam Černý',
|
|
74
|
-
purchaser_street: 'Ostravská',
|
|
75
|
-
purchaser_street_number: '1',
|
|
76
|
-
purchaser_postcode: '747 70',
|
|
77
|
-
purchaser_city: 'Opava',
|
|
78
|
-
purchaser_lines: purchaser_address,
|
|
79
69
|
purchaser_tax_id: '56565656',
|
|
80
70
|
purchaser_tax_id2: 'CZ56565656',
|
|
71
|
+
purchaser_lines: purchaser_address,
|
|
81
72
|
issue_date: '05/03/2016',
|
|
82
73
|
due_date: '19/03/2016',
|
|
83
74
|
subtotal: 'Kč 10.000',
|
data/examples/simple_invoice.rb
CHANGED
|
@@ -5,6 +5,16 @@ lib = File.expand_path('../../lib', __FILE__)
|
|
|
5
5
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
6
6
|
require 'invoice_printer'
|
|
7
7
|
|
|
8
|
+
provider_address = <<ADDRESS
|
|
9
|
+
5th Avenue
|
|
10
|
+
747 05 NYC
|
|
11
|
+
ADDRESS
|
|
12
|
+
|
|
13
|
+
purchaser_address = <<ADDRESS
|
|
14
|
+
7th Avenue
|
|
15
|
+
747 70 NYC
|
|
16
|
+
ADDRESS
|
|
17
|
+
|
|
8
18
|
item = InvoicePrinter::Document::Item.new(
|
|
9
19
|
name: 'Programming',
|
|
10
20
|
quantity: '10',
|
|
@@ -16,25 +26,14 @@ item = InvoicePrinter::Document::Item.new(
|
|
|
16
26
|
invoice = InvoicePrinter::Document.new(
|
|
17
27
|
number: 'NO. 198900000001',
|
|
18
28
|
provider_name: 'John White',
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
provider_street: '5th Avenue',
|
|
22
|
-
provider_street_number: '1',
|
|
23
|
-
provider_postcode: '747 05',
|
|
24
|
-
provider_city: 'NYC',
|
|
25
|
-
purchaser_name: 'Will Black',
|
|
26
|
-
# Deprecated 1.3 API, use purchaser_lines
|
|
27
|
-
# Here for compatibility test
|
|
28
|
-
purchaser_street: '7th Avenue',
|
|
29
|
-
purchaser_street_number: '1',
|
|
30
|
-
purchaser_postcode: '747 70',
|
|
31
|
-
purchaser_city: 'NYC',
|
|
29
|
+
provider_lines: provider_address,
|
|
30
|
+
purchaser_lines: purchaser_address,
|
|
32
31
|
issue_date: '05/03/2016',
|
|
33
32
|
due_date: '19/03/2016',
|
|
34
33
|
total: '$ 900',
|
|
35
34
|
bank_account_number: '156546546465',
|
|
36
35
|
items: [item],
|
|
37
|
-
note:
|
|
36
|
+
note: "This is a note at the end.\nA note with two lines."
|
|
38
37
|
)
|
|
39
38
|
|
|
40
39
|
InvoicePrinter.print(
|
|
@@ -39,25 +39,11 @@ module InvoicePrinter
|
|
|
39
39
|
:provider_tax_id,
|
|
40
40
|
:provider_tax_id2,
|
|
41
41
|
:provider_lines,
|
|
42
|
-
# Provider address fields
|
|
43
|
-
:provider_street,
|
|
44
|
-
:provider_street_number,
|
|
45
|
-
:provider_postcode,
|
|
46
|
-
:provider_city,
|
|
47
|
-
:provider_city_part,
|
|
48
|
-
:provider_extra_address_line,
|
|
49
42
|
# Purchaser fields
|
|
50
43
|
:purchaser_name,
|
|
51
44
|
:purchaser_tax_id,
|
|
52
45
|
:purchaser_tax_id2,
|
|
53
46
|
:purchaser_lines,
|
|
54
|
-
# Purchaser address fields
|
|
55
|
-
:purchaser_street,
|
|
56
|
-
:purchaser_street_number,
|
|
57
|
-
:purchaser_postcode,
|
|
58
|
-
:purchaser_city,
|
|
59
|
-
:purchaser_city_part,
|
|
60
|
-
:purchaser_extra_address_line,
|
|
61
47
|
:issue_date,
|
|
62
48
|
:due_date,
|
|
63
49
|
# Account details
|
|
@@ -76,113 +62,75 @@ module InvoicePrinter
|
|
|
76
62
|
class << self
|
|
77
63
|
def from_json(json)
|
|
78
64
|
new(
|
|
79
|
-
number:
|
|
80
|
-
provider_name:
|
|
81
|
-
provider_tax_id:
|
|
82
|
-
provider_tax_id2:
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
purchaser_lines: json['purchaser_lines'],
|
|
100
|
-
issue_date: json['issue_date'],
|
|
101
|
-
due_date: json['due_date'],
|
|
102
|
-
subtotal: json['subtotal'],
|
|
103
|
-
tax: json['tax'],
|
|
104
|
-
tax2: json['tax2'],
|
|
105
|
-
tax3: json['tax3'],
|
|
106
|
-
total: json['total'],
|
|
107
|
-
bank_account_number: json['bank_account_number'],
|
|
108
|
-
account_iban: json['account_iban'],
|
|
109
|
-
account_swift: json['account_swift'],
|
|
110
|
-
note: json['note'],
|
|
65
|
+
number: json['number'],
|
|
66
|
+
provider_name: json['provider_name'],
|
|
67
|
+
provider_tax_id: json['provider_tax_id'],
|
|
68
|
+
provider_tax_id2: json['provider_tax_id2'],
|
|
69
|
+
provider_lines: json['provider_lines'],
|
|
70
|
+
purchaser_name: json['purchaser_name'],
|
|
71
|
+
purchaser_tax_id: json['purchaser_tax_id'],
|
|
72
|
+
purchaser_tax_id2: json['purchaser_tax_id2'],
|
|
73
|
+
purchaser_lines: json['purchaser_lines'],
|
|
74
|
+
issue_date: json['issue_date'],
|
|
75
|
+
due_date: json['due_date'],
|
|
76
|
+
subtotal: json['subtotal'],
|
|
77
|
+
tax: json['tax'],
|
|
78
|
+
tax2: json['tax2'],
|
|
79
|
+
tax3: json['tax3'],
|
|
80
|
+
total: json['total'],
|
|
81
|
+
bank_account_number: json['bank_account_number'],
|
|
82
|
+
account_iban: json['account_iban'],
|
|
83
|
+
account_swift: json['account_swift'],
|
|
84
|
+
note: json['note'],
|
|
111
85
|
|
|
112
|
-
items:
|
|
86
|
+
items: (json['items'] || []).map { |item_json| Item.from_json(item_json) }
|
|
113
87
|
)
|
|
114
88
|
end
|
|
115
89
|
end
|
|
116
90
|
|
|
117
|
-
def initialize(number:
|
|
118
|
-
provider_name:
|
|
119
|
-
provider_tax_id:
|
|
120
|
-
provider_tax_id2:
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
issue_date: nil,
|
|
139
|
-
due_date: nil,
|
|
140
|
-
subtotal: nil,
|
|
141
|
-
tax: nil,
|
|
142
|
-
tax2: nil,
|
|
143
|
-
tax3: nil,
|
|
144
|
-
total: nil,
|
|
145
|
-
bank_account_number: nil,
|
|
146
|
-
account_iban: nil,
|
|
147
|
-
account_swift: nil,
|
|
148
|
-
items: nil,
|
|
149
|
-
note: nil)
|
|
150
|
-
|
|
151
|
-
@number = String(number)
|
|
152
|
-
@provider_name = String(provider_name)
|
|
153
|
-
@provider_tax_id = String(provider_tax_id)
|
|
154
|
-
@provider_tax_id2 = String(provider_tax_id2)
|
|
155
|
-
@provider_street = String(provider_street)
|
|
156
|
-
@provider_street_number = String(provider_street_number)
|
|
157
|
-
@provider_postcode = String(provider_postcode)
|
|
158
|
-
@provider_city = String(provider_city)
|
|
159
|
-
@provider_city_part = String(provider_city_part)
|
|
160
|
-
@provider_extra_address_line = String(provider_extra_address_line)
|
|
161
|
-
@provider_lines = String(provider_lines)
|
|
162
|
-
@purchaser_name = String(purchaser_name)
|
|
163
|
-
@purchaser_tax_id = String(purchaser_tax_id)
|
|
164
|
-
@purchaser_tax_id2 = String(purchaser_tax_id2)
|
|
165
|
-
@purchaser_street = String(purchaser_street)
|
|
166
|
-
@purchaser_street_number = String(purchaser_street_number)
|
|
167
|
-
@purchaser_postcode = String(purchaser_postcode)
|
|
168
|
-
@purchaser_city = String(purchaser_city)
|
|
169
|
-
@purchaser_city_part = String(purchaser_city_part)
|
|
170
|
-
@purchaser_extra_address_line = String(purchaser_extra_address_line)
|
|
171
|
-
@purchaser_lines = String(purchaser_lines)
|
|
172
|
-
@issue_date = String(issue_date)
|
|
173
|
-
@due_date = String(due_date)
|
|
174
|
-
@subtotal = String(subtotal)
|
|
175
|
-
@tax = String(tax)
|
|
176
|
-
@tax2 = String(tax2)
|
|
177
|
-
@tax3 = String(tax3)
|
|
178
|
-
@total = String(total)
|
|
179
|
-
@bank_account_number = String(bank_account_number)
|
|
180
|
-
@account_iban = String(account_iban)
|
|
181
|
-
@account_swift = String(account_swift)
|
|
182
|
-
@items = items
|
|
183
|
-
@note = String(note)
|
|
184
|
-
|
|
91
|
+
def initialize(number: nil,
|
|
92
|
+
provider_name: nil,
|
|
93
|
+
provider_tax_id: nil,
|
|
94
|
+
provider_tax_id2: nil,
|
|
95
|
+
provider_lines: nil,
|
|
96
|
+
purchaser_name: nil,
|
|
97
|
+
purchaser_tax_id: nil,
|
|
98
|
+
purchaser_tax_id2: nil,
|
|
99
|
+
purchaser_lines: nil,
|
|
100
|
+
issue_date: nil,
|
|
101
|
+
due_date: nil,
|
|
102
|
+
subtotal: nil,
|
|
103
|
+
tax: nil,
|
|
104
|
+
tax2: nil,
|
|
105
|
+
tax3: nil,
|
|
106
|
+
total: nil,
|
|
107
|
+
bank_account_number: nil,
|
|
108
|
+
account_iban: nil,
|
|
109
|
+
account_swift: nil,
|
|
110
|
+
items: nil,
|
|
111
|
+
note: nil)
|
|
185
112
|
|
|
113
|
+
@number = String(number)
|
|
114
|
+
@provider_name = String(provider_name)
|
|
115
|
+
@provider_tax_id = String(provider_tax_id)
|
|
116
|
+
@provider_tax_id2 = String(provider_tax_id2)
|
|
117
|
+
@provider_lines = String(provider_lines)
|
|
118
|
+
@purchaser_name = String(purchaser_name)
|
|
119
|
+
@purchaser_tax_id = String(purchaser_tax_id)
|
|
120
|
+
@purchaser_tax_id2 = String(purchaser_tax_id2)
|
|
121
|
+
@purchaser_lines = String(purchaser_lines)
|
|
122
|
+
@issue_date = String(issue_date)
|
|
123
|
+
@due_date = String(due_date)
|
|
124
|
+
@subtotal = String(subtotal)
|
|
125
|
+
@tax = String(tax)
|
|
126
|
+
@tax2 = String(tax2)
|
|
127
|
+
@tax3 = String(tax3)
|
|
128
|
+
@total = String(total)
|
|
129
|
+
@bank_account_number = String(bank_account_number)
|
|
130
|
+
@account_iban = String(account_iban)
|
|
131
|
+
@account_swift = String(account_swift)
|
|
132
|
+
@items = items
|
|
133
|
+
@note = String(note)
|
|
186
134
|
|
|
187
135
|
raise InvalidInput, 'items are not only a type of InvoicePrinter::Document::Item' \
|
|
188
136
|
unless @items.select{ |i| !i.is_a?(InvoicePrinter::Document::Item) }.empty?
|
|
@@ -190,39 +138,27 @@ module InvoicePrinter
|
|
|
190
138
|
|
|
191
139
|
def to_h
|
|
192
140
|
{
|
|
193
|
-
'number':
|
|
194
|
-
'provider_name':
|
|
195
|
-
'provider_tax_id':
|
|
196
|
-
'provider_tax_id2':
|
|
197
|
-
'
|
|
198
|
-
'
|
|
199
|
-
'
|
|
200
|
-
'
|
|
201
|
-
'
|
|
202
|
-
'
|
|
203
|
-
'
|
|
204
|
-
'
|
|
205
|
-
'
|
|
206
|
-
'
|
|
207
|
-
'
|
|
208
|
-
'
|
|
209
|
-
'
|
|
210
|
-
'
|
|
211
|
-
'
|
|
212
|
-
'
|
|
213
|
-
'
|
|
214
|
-
'issue_date': @issue_date,
|
|
215
|
-
'due_date': @due_date,
|
|
216
|
-
'subtotal': @subtotal,
|
|
217
|
-
'tax': @tax,
|
|
218
|
-
'tax2': @tax2,
|
|
219
|
-
'tax3': @tax3,
|
|
220
|
-
'total': @total,
|
|
221
|
-
'bank_account_number': @bank_account_number,
|
|
222
|
-
'account_iban': @account_iban,
|
|
223
|
-
'account_swift': @account_swift,
|
|
224
|
-
'items': @items.map(&:to_h),
|
|
225
|
-
'note': @note
|
|
141
|
+
'number': @number,
|
|
142
|
+
'provider_name': @provider_name,
|
|
143
|
+
'provider_tax_id': @provider_tax_id,
|
|
144
|
+
'provider_tax_id2': @provider_tax_id2,
|
|
145
|
+
'provider_lines': @provider_lines,
|
|
146
|
+
'purchaser_name': @purchaser_name,
|
|
147
|
+
'purchaser_tax_id': @purchaser_tax_id,
|
|
148
|
+
'purchaser_tax_id2': @purchaser_tax_id2,
|
|
149
|
+
'purchaser_lines': @purchaser_lines,
|
|
150
|
+
'issue_date': @issue_date,
|
|
151
|
+
'due_date': @due_date,
|
|
152
|
+
'subtotal': @subtotal,
|
|
153
|
+
'tax': @tax,
|
|
154
|
+
'tax2': @tax2,
|
|
155
|
+
'tax3': @tax3,
|
|
156
|
+
'total': @total,
|
|
157
|
+
'bank_account_number': @bank_account_number,
|
|
158
|
+
'account_iban': @account_iban,
|
|
159
|
+
'account_swift': @account_swift,
|
|
160
|
+
'items': @items.map(&:to_h),
|
|
161
|
+
'note': @note
|
|
226
162
|
}
|
|
227
163
|
end
|
|
228
164
|
|
|
@@ -97,36 +97,6 @@ module InvoicePrinter
|
|
|
97
97
|
use_font(@font)
|
|
98
98
|
end
|
|
99
99
|
|
|
100
|
-
# Version 2.1 deprecation warnings
|
|
101
|
-
warnings = [
|
|
102
|
-
@document.provider_street,
|
|
103
|
-
@document.provider_street_number,
|
|
104
|
-
@document.provider_postcode,
|
|
105
|
-
@document.provider_city,
|
|
106
|
-
@document.provider_city_part,
|
|
107
|
-
@document.provider_extra_address_line,
|
|
108
|
-
@document.purchaser_street,
|
|
109
|
-
@document.purchaser_street_number,
|
|
110
|
-
@document.purchaser_postcode,
|
|
111
|
-
@document.purchaser_city,
|
|
112
|
-
@document.purchaser_city_part,
|
|
113
|
-
@document.purchaser_extra_address_line
|
|
114
|
-
].delete_if(&:empty?)
|
|
115
|
-
|
|
116
|
-
unless warnings.empty?
|
|
117
|
-
warning = <<~WARN
|
|
118
|
-
WARNING: Following values are used in deprecated fields and
|
|
119
|
-
won't be rendered in future versions of InvoicePrinter:
|
|
120
|
-
|
|
121
|
-
#{warnings.join(", ")}
|
|
122
|
-
|
|
123
|
-
Use new provider_lines and purchaser_lines fields instead of
|
|
124
|
-
the old address fields.
|
|
125
|
-
WARN
|
|
126
|
-
|
|
127
|
-
$stderr.puts warning
|
|
128
|
-
end
|
|
129
|
-
|
|
130
100
|
build_pdf
|
|
131
101
|
end
|
|
132
102
|
|
|
@@ -859,7 +829,7 @@ module InvoicePrinter
|
|
|
859
829
|
# If a note is present, position it on top of it.
|
|
860
830
|
def build_logo
|
|
861
831
|
if @logo && !@logo.empty?
|
|
862
|
-
bottom = @document.note.empty? ? 75 :
|
|
832
|
+
bottom = @document.note.empty? ? 75 : (75 + note_height)
|
|
863
833
|
@pdf.image(@logo, at: [0, bottom], fit: [200, 50])
|
|
864
834
|
end
|
|
865
835
|
end
|
|
@@ -877,12 +847,19 @@ module InvoicePrinter
|
|
|
877
847
|
@pdf.text_box(
|
|
878
848
|
"#{@document.note}",
|
|
879
849
|
size: 10,
|
|
880
|
-
at: [0,
|
|
850
|
+
at: [0, note_height],
|
|
881
851
|
width: x(450),
|
|
882
852
|
align: :left
|
|
883
853
|
)
|
|
884
854
|
end
|
|
885
855
|
|
|
856
|
+
def note_height
|
|
857
|
+
@note_height ||= begin
|
|
858
|
+
num_of_lines = @document.note.lines.count
|
|
859
|
+
(num_of_lines * 11)
|
|
860
|
+
end
|
|
861
|
+
end
|
|
862
|
+
|
|
886
863
|
# Include page numbers if we got more than one page
|
|
887
864
|
def build_footer
|
|
888
865
|
@pdf.number_pages(
|
data/test/api_test.rb
CHANGED
|
@@ -31,7 +31,7 @@ class ApiTest < Minitest::Test
|
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
def test_print_with_valid_document
|
|
34
|
-
invoice = InvoicePrinter::Document.new(default_document_params)
|
|
34
|
+
invoice = InvoicePrinter::Document.new(**default_document_params)
|
|
35
35
|
|
|
36
36
|
json = {
|
|
37
37
|
'document' => invoice.to_h,
|
|
@@ -60,7 +60,7 @@ class ApiTest < Minitest::Test
|
|
|
60
60
|
end
|
|
61
61
|
|
|
62
62
|
def test_render_with_valid_document
|
|
63
|
-
invoice = InvoicePrinter::Document.new(default_document_params)
|
|
63
|
+
invoice = InvoicePrinter::Document.new(**default_document_params)
|
|
64
64
|
output = InvoicePrinter.render(document: invoice)
|
|
65
65
|
|
|
66
66
|
json = {
|
data/test/background_test.rb
CHANGED
data/test/cli_test.rb
CHANGED
|
@@ -8,7 +8,7 @@ class CLITest < Minitest::Test
|
|
|
8
8
|
t = Time.now.strftime("%Y%m%d")
|
|
9
9
|
tmpname = "/tmp/invoice-#{t}-#{$$}-#{rand(0x100000000).to_s(36)}-fd"
|
|
10
10
|
|
|
11
|
-
@invoice = InvoicePrinter::Document.new(default_document_params)
|
|
11
|
+
@invoice = InvoicePrinter::Document.new(**default_document_params)
|
|
12
12
|
@invoice_as_json = @invoice.to_json
|
|
13
13
|
@output_path = tmpname
|
|
14
14
|
end
|
data/test/dates_box_test.rb
CHANGED
|
@@ -8,7 +8,7 @@ class DatesBoxTest < Minitest::Test
|
|
|
8
8
|
issue_date: '05/03/2016',
|
|
9
9
|
due_date: '14/03/2016'
|
|
10
10
|
)
|
|
11
|
-
invoice = InvoicePrinter::Document.new(params)
|
|
11
|
+
invoice = InvoicePrinter::Document.new(**params)
|
|
12
12
|
rendered_pdf = InvoicePrinter.render(document: invoice)
|
|
13
13
|
pdf_analysis = PDF::Inspector::Text.analyze(rendered_pdf)
|
|
14
14
|
|
|
@@ -21,7 +21,7 @@ class DatesBoxTest < Minitest::Test
|
|
|
21
21
|
issue_date: '05/03/2016',
|
|
22
22
|
due_date: ''
|
|
23
23
|
)
|
|
24
|
-
invoice = InvoicePrinter::Document.new(params)
|
|
24
|
+
invoice = InvoicePrinter::Document.new(**params)
|
|
25
25
|
rendered_pdf = InvoicePrinter.render(document: invoice)
|
|
26
26
|
pdf_analysis = PDF::Inspector::Text.analyze(rendered_pdf)
|
|
27
27
|
|
|
@@ -34,7 +34,7 @@ class DatesBoxTest < Minitest::Test
|
|
|
34
34
|
issue_date: nil,
|
|
35
35
|
due_date: '05/03/2016'
|
|
36
36
|
)
|
|
37
|
-
invoice = InvoicePrinter::Document.new(params)
|
|
37
|
+
invoice = InvoicePrinter::Document.new(**params)
|
|
38
38
|
rendered_pdf = InvoicePrinter.render(document: invoice)
|
|
39
39
|
pdf_analysis = PDF::Inspector::Text.analyze(rendered_pdf)
|
|
40
40
|
|
|
@@ -47,7 +47,7 @@ class DatesBoxTest < Minitest::Test
|
|
|
47
47
|
issue_date: '',
|
|
48
48
|
due_date: nil
|
|
49
49
|
)
|
|
50
|
-
invoice = InvoicePrinter::Document.new(params)
|
|
50
|
+
invoice = InvoicePrinter::Document.new(**params)
|
|
51
51
|
rendered_pdf = InvoicePrinter.render(document: invoice)
|
|
52
52
|
pdf_analysis = PDF::Inspector::Text.analyze(rendered_pdf)
|
|
53
53
|
|
data/test/inputs_test.rb
CHANGED
|
@@ -28,12 +28,12 @@ class InputsTest < Minitest::Test
|
|
|
28
28
|
)
|
|
29
29
|
|
|
30
30
|
# No exceptions should be raised
|
|
31
|
-
invoice = InvoicePrinter::Document.new(params)
|
|
31
|
+
invoice = InvoicePrinter::Document.new(**params)
|
|
32
32
|
InvoicePrinter.render(document: invoice)
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
def test_missing_font_raises_an_exception
|
|
36
|
-
invoice = InvoicePrinter::Document.new(default_document_params)
|
|
36
|
+
invoice = InvoicePrinter::Document.new(**default_document_params)
|
|
37
37
|
|
|
38
38
|
assert_raises(InvoicePrinter::PDFDocument::FontFileNotFound) do
|
|
39
39
|
InvoicePrinter.render(document: invoice, font: 'missing.font')
|
|
@@ -41,7 +41,7 @@ class InputsTest < Minitest::Test
|
|
|
41
41
|
end
|
|
42
42
|
|
|
43
43
|
def test_missing_logo_raises_an_exception
|
|
44
|
-
invoice = InvoicePrinter::Document.new(default_document_params)
|
|
44
|
+
invoice = InvoicePrinter::Document.new(**default_document_params)
|
|
45
45
|
|
|
46
46
|
assert_raises(InvoicePrinter::PDFDocument::LogoFileNotFound) do
|
|
47
47
|
InvoicePrinter.render(document: invoice, logo: 'missing.png')
|
|
@@ -49,7 +49,7 @@ class InputsTest < Minitest::Test
|
|
|
49
49
|
end
|
|
50
50
|
|
|
51
51
|
def test_missing_stamp_raises_an_exception
|
|
52
|
-
invoice = InvoicePrinter::Document.new(default_document_params)
|
|
52
|
+
invoice = InvoicePrinter::Document.new(**default_document_params)
|
|
53
53
|
|
|
54
54
|
assert_raises(InvoicePrinter::PDFDocument::StampFileNotFound) do
|
|
55
55
|
InvoicePrinter.render(document: invoice, stamp: 'missing.png')
|
|
@@ -4,7 +4,7 @@ class InvoicePrinterTest < Minitest::Test
|
|
|
4
4
|
include InvoicePrinterHelpers
|
|
5
5
|
|
|
6
6
|
def test_render_document
|
|
7
|
-
invoice = InvoicePrinter::Document.new(default_document_params)
|
|
7
|
+
invoice = InvoicePrinter::Document.new(**default_document_params)
|
|
8
8
|
rendered_pdf = InvoicePrinter.render(document: invoice)
|
|
9
9
|
pdf_analysis = PDF::Inspector::Text.analyze(rendered_pdf)
|
|
10
10
|
strings = InvoicePrinter::PDFDocument.new(document: invoice).to_a
|
|
@@ -13,7 +13,7 @@ class InvoicePrinterTest < Minitest::Test
|
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
def test_render_document_from_json
|
|
16
|
-
invoice = InvoicePrinter::Document.new(default_document_params)
|
|
16
|
+
invoice = InvoicePrinter::Document.new(**default_document_params)
|
|
17
17
|
invoice_json = JSON.parse(invoice.to_json)
|
|
18
18
|
invoice_from_json = InvoicePrinter::Document.from_json(invoice_json)
|
|
19
19
|
rendered_pdf = InvoicePrinter.render(document: invoice_from_json)
|
data/test/items_table_test.rb
CHANGED
|
@@ -41,10 +41,10 @@ class ItemsTableTest < Minitest::Test
|
|
|
41
41
|
|
|
42
42
|
def invoice_without_item_column(column)
|
|
43
43
|
InvoicePrinter::Document.new(
|
|
44
|
-
default_document_params.merge(
|
|
44
|
+
**default_document_params.merge(
|
|
45
45
|
items: [
|
|
46
46
|
InvoicePrinter::Document::Item.new(
|
|
47
|
-
default_document_item_params.merge("#{column}": nil)
|
|
47
|
+
**default_document_item_params.merge("#{column}": nil)
|
|
48
48
|
)
|
|
49
49
|
]
|
|
50
50
|
)
|
data/test/labels_test.rb
CHANGED
|
@@ -6,7 +6,7 @@ class LabelsTest < Minitest::Test
|
|
|
6
6
|
def test_setting_global_labels
|
|
7
7
|
labels = { provider: 'Default Provider', purchaser: 'Default Purchaser' }
|
|
8
8
|
InvoicePrinter.labels = labels
|
|
9
|
-
invoice = InvoicePrinter::Document.new(default_document_params)
|
|
9
|
+
invoice = InvoicePrinter::Document.new(**default_document_params)
|
|
10
10
|
rendered_pdf = InvoicePrinter.render(document: invoice)
|
|
11
11
|
pdf_analysis = PDF::Inspector::Text.analyze(rendered_pdf)
|
|
12
12
|
|
|
@@ -16,7 +16,7 @@ class LabelsTest < Minitest::Test
|
|
|
16
16
|
|
|
17
17
|
def test_setting_instant_labels
|
|
18
18
|
labels = { provider: 'Current Provider', purchaser: 'Current Purchaser' }
|
|
19
|
-
invoice = InvoicePrinter::Document.new(default_document_params)
|
|
19
|
+
invoice = InvoicePrinter::Document.new(**default_document_params)
|
|
20
20
|
rendered_pdf = InvoicePrinter.render(document: invoice, labels: labels)
|
|
21
21
|
pdf_analysis = PDF::Inspector::Text.analyze(rendered_pdf)
|
|
22
22
|
|
data/test/notes_test.rb
CHANGED
|
@@ -7,7 +7,7 @@ class NotesTest < Minitest::Test
|
|
|
7
7
|
params = default_document_params.merge(
|
|
8
8
|
note: 'ABC is a registered trademark.'
|
|
9
9
|
)
|
|
10
|
-
invoice = InvoicePrinter::Document.new(params)
|
|
10
|
+
invoice = InvoicePrinter::Document.new(**params)
|
|
11
11
|
rendered_pdf = InvoicePrinter.render(document: invoice)
|
|
12
12
|
pdf_analysis = PDF::Inspector::Text.analyze(rendered_pdf)
|
|
13
13
|
|
data/test/page_numbers_test.rb
CHANGED
|
@@ -5,11 +5,11 @@ class PageNumbersTest < Minitest::Test
|
|
|
5
5
|
|
|
6
6
|
# If there is only one page, we skip numbering
|
|
7
7
|
def test_do_not_number_1_page
|
|
8
|
-
item = InvoicePrinter::Document::Item.new(default_document_item_params)
|
|
8
|
+
item = InvoicePrinter::Document::Item.new(**default_document_item_params)
|
|
9
9
|
params = default_document_params.merge(
|
|
10
10
|
items: [item]
|
|
11
11
|
)
|
|
12
|
-
invoice = InvoicePrinter::Document.new(params)
|
|
12
|
+
invoice = InvoicePrinter::Document.new(**params)
|
|
13
13
|
rendered_pdf = InvoicePrinter.render(document: invoice)
|
|
14
14
|
pdf_analysis = PDF::Inspector::Text.analyze(rendered_pdf)
|
|
15
15
|
|
|
@@ -17,12 +17,12 @@ class PageNumbersTest < Minitest::Test
|
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
def test_number_2_and_more_pages
|
|
20
|
-
item = InvoicePrinter::Document::Item.new(default_document_item_params)
|
|
20
|
+
item = InvoicePrinter::Document::Item.new(**default_document_item_params)
|
|
21
21
|
items = [item] * 50
|
|
22
22
|
params = default_document_params.merge(
|
|
23
23
|
items: items
|
|
24
24
|
)
|
|
25
|
-
invoice = InvoicePrinter::Document.new(params)
|
|
25
|
+
invoice = InvoicePrinter::Document.new(**params)
|
|
26
26
|
rendered_pdf = InvoicePrinter.render(document: invoice)
|
|
27
27
|
pdf_analysis = PDF::Inspector::Text.analyze(rendered_pdf)
|
|
28
28
|
|
data/test/payment_box_test.rb
CHANGED
|
@@ -8,7 +8,7 @@ class PaymentBoxTest < Minitest::Test
|
|
|
8
8
|
bank_account_number: nil,
|
|
9
9
|
account_iban: 'IBAN'
|
|
10
10
|
)
|
|
11
|
-
invoice = InvoicePrinter::Document.new(params)
|
|
11
|
+
invoice = InvoicePrinter::Document.new(**params)
|
|
12
12
|
rendered_pdf = InvoicePrinter.render(document: invoice)
|
|
13
13
|
pdf_analysis = PDF::Inspector::Text.analyze(rendered_pdf)
|
|
14
14
|
|
|
@@ -24,7 +24,7 @@ class PaymentBoxTest < Minitest::Test
|
|
|
24
24
|
account_iban: nil,
|
|
25
25
|
account_swift: nil
|
|
26
26
|
)
|
|
27
|
-
invoice = InvoicePrinter::Document.new(params)
|
|
27
|
+
invoice = InvoicePrinter::Document.new(**params)
|
|
28
28
|
rendered_pdf = InvoicePrinter.render(document: invoice)
|
|
29
29
|
pdf_analysis = PDF::Inspector::Text.analyze(rendered_pdf)
|
|
30
30
|
|
|
@@ -41,7 +41,7 @@ class PaymentBoxTest < Minitest::Test
|
|
|
41
41
|
account_iban: 'SAMPLE_IBAN',
|
|
42
42
|
account_swift: nil
|
|
43
43
|
)
|
|
44
|
-
invoice = InvoicePrinter::Document.new(params)
|
|
44
|
+
invoice = InvoicePrinter::Document.new(**params)
|
|
45
45
|
rendered_pdf = InvoicePrinter.render(document: invoice)
|
|
46
46
|
pdf_analysis = PDF::Inspector::Text.analyze(rendered_pdf)
|
|
47
47
|
|
|
@@ -59,7 +59,7 @@ class PaymentBoxTest < Minitest::Test
|
|
|
59
59
|
account_iban: nil,
|
|
60
60
|
account_swift: 'SAMPLE_SWIFT'
|
|
61
61
|
)
|
|
62
|
-
invoice = InvoicePrinter::Document.new(params)
|
|
62
|
+
invoice = InvoicePrinter::Document.new(**params)
|
|
63
63
|
rendered_pdf = InvoicePrinter.render(document: invoice)
|
|
64
64
|
pdf_analysis = PDF::Inspector::Text.analyze(rendered_pdf)
|
|
65
65
|
|
|
@@ -77,7 +77,7 @@ class PaymentBoxTest < Minitest::Test
|
|
|
77
77
|
account_iban: 'SAMPLE_IBAN',
|
|
78
78
|
account_swift: 'SAMPLE_SWIFT'
|
|
79
79
|
)
|
|
80
|
-
invoice = InvoicePrinter::Document.new(params)
|
|
80
|
+
invoice = InvoicePrinter::Document.new(**params)
|
|
81
81
|
rendered_pdf = InvoicePrinter.render(document: invoice)
|
|
82
82
|
pdf_analysis = PDF::Inspector::Text.analyze(rendered_pdf)
|
|
83
83
|
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: invoice_printer
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.0.
|
|
4
|
+
version: 2.1.0.rc1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Josef Strzibny
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2021-03-28 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: json
|
|
@@ -153,11 +153,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
153
153
|
version: '2.4'
|
|
154
154
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
155
155
|
requirements:
|
|
156
|
-
- - "
|
|
156
|
+
- - ">"
|
|
157
157
|
- !ruby/object:Gem::Version
|
|
158
|
-
version:
|
|
158
|
+
version: 1.3.1
|
|
159
159
|
requirements: []
|
|
160
|
-
rubygems_version: 3.0.
|
|
160
|
+
rubygems_version: 3.2.0.rc.1
|
|
161
161
|
signing_key:
|
|
162
162
|
specification_version: 4
|
|
163
163
|
summary: Super simple PDF invoicing in pure Ruby
|