invoice_printer 2.1.0 → 2.2.0.alpha1

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: c3af0c9fadd39c8a23600e405aa0dcf2d31945f0fef9aa4bb40a13768ea156c7
4
- data.tar.gz: 124c1a57d4c11a99da95301ac1be5715f358bfd2654d350345f9e23afefc6035
3
+ metadata.gz: 73bc8cc15f44b26e3208614d83ee31dbb385b804e7a248723b07d6c9b60e7238
4
+ data.tar.gz: 5d2ab37a9051dba8ddd0018a4d7bc3d2f6a14949f131679f77ac7a0cd9069981
5
5
  SHA512:
6
- metadata.gz: f9a788d351c01c97b99bb50653bf883b363909b54d5d0d65d7b0421a6ec444b2886e6ef7bbb18bc332d59977c0f60700c60efe1ec0cc67c62b075edf3306297e
7
- data.tar.gz: 3051327dd4011d6ca954981fdfcc05edf2af1ad242355cb029d2c40a29de0e1b18d430b77131b572fe2db975a9ff371c91317a4cf345d7510801d7b594e76257
6
+ metadata.gz: 3fb1d1f236410e510f79c30b9c817d63285ae9dd49a579ec4930e6596f1ab3c06d8d480c7e4c3f11f14873c14aa9d6b62bbd6e91687cafc052e6387244a791f3
7
+ data.tar.gz: 2819f38b58b55ec97517c5521cee21a70ab33ad64303d6c71f92ae41186f5c7136f66a88ef8aad9eaea0144c632cc96d71244cff04264a642f8f0cd13437b52a
data/docs/COMMAND_LINE.md CHANGED
@@ -38,6 +38,7 @@ JSON document with all possible fields filled:
38
38
  "purchaser_lines":"Ostravská 1\n747 70 Opava",
39
39
  "issue_date":"05/03/2016",
40
40
  "due_date":"19/03/2016",
41
+ "variable_symbol":"198900000001",
41
42
  "subtotal":"Kc 10.000",
42
43
  "tax":"Kc 2.100",
43
44
  "tax2":"",
@@ -99,6 +100,7 @@ All labels:
99
100
  "iban":"IBAN",
100
101
  "issue_date":"Issue date",
101
102
  "due_date": "Due date",
103
+ "variable_symbol": "Variable symbol",
102
104
  "item":"Item",
103
105
  "variable":"",
104
106
  "quantity":"Quantity",
data/docs/LIBRARY.md CHANGED
@@ -165,6 +165,7 @@ InvoicePrinter.labels = {
165
165
  iban: 'IBAN',
166
166
  issue_date: 'Issue date',
167
167
  due_date: 'Due date',
168
+ variable_symbol: 'Variable symbol',
168
169
  item: 'Item',
169
170
  variable: '',
170
171
  quantity: 'Quantity',
@@ -198,6 +199,7 @@ sublabels = {
198
199
  account_number: 'Číslo účtu',
199
200
  issue_date: 'Datum vydání',
200
201
  due_date: 'Datum splatnosti',
202
+ variable_symbol: 'Variabilní symbol',
201
203
  item: 'Položka',
202
204
  variable: '',
203
205
  quantity: 'Počet',
@@ -0,0 +1,96 @@
1
+ #!/usr/bin/env ruby
2
+ # This is an example of a international invoice with Czech labels and English translation.
3
+
4
+ lib = File.expand_path('../../lib', __FILE__)
5
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
6
+ require 'invoice_printer'
7
+
8
+ labels = {
9
+ name: 'Faktura',
10
+ provider: 'Prodejce',
11
+ purchaser: 'Kupující',
12
+ tax_id: 'IČ',
13
+ tax_id2: 'DIČ',
14
+ payment: 'Forma úhrady',
15
+ payment_by_transfer: 'Platba na následující účet:',
16
+ account_number: 'Číslo účtu',
17
+ issue_date: 'Datum vydání',
18
+ due_date: 'Datum splatnosti',
19
+ variable_field: 'Variabilní symbol',
20
+ item: 'Položka',
21
+ quantity: 'Počet',
22
+ unit: 'MJ',
23
+ price_per_item: 'Cena za položku',
24
+ amount: 'Celkem bez daně',
25
+ subtotal: 'Cena bez daně',
26
+ tax: 'DPH 21 %',
27
+ total: 'Celkem'
28
+ }
29
+
30
+ # Default English labels as sublabels
31
+ sublabels = InvoicePrinter::PDFDocument::DEFAULT_LABELS
32
+ labels.merge!({ sublabels: sublabels })
33
+
34
+ first_item = InvoicePrinter::Document::Item.new(
35
+ name: 'Konzultace',
36
+ quantity: '2',
37
+ unit: 'hod',
38
+ price: 'Kč 500',
39
+ amount: 'Kč 1.000'
40
+ )
41
+
42
+ second_item = InvoicePrinter::Document::Item.new(
43
+ name: 'Programování',
44
+ quantity: '10',
45
+ unit: 'hod',
46
+ price: 'Kč 900',
47
+ amount: 'Kč 9.000'
48
+ )
49
+
50
+ provider_address = <<ADDRESS
51
+ Rolnická 1
52
+ 747 05 Opava
53
+ Kateřinky
54
+ ADDRESS
55
+
56
+ purchaser_address = <<ADDRESS
57
+ 8648 Acacia Rd.
58
+ Brooklyn, NY 11203
59
+ ADDRESS
60
+
61
+ invoice = InvoicePrinter::Document.new(
62
+ number: 'č. 198900000001',
63
+ provider_name: 'Petr Nový',
64
+ provider_lines: provider_address,
65
+ provider_tax_id: '56565656',
66
+ purchaser_name: 'Adam Black',
67
+ purchaser_lines: purchaser_address,
68
+ issue_date: '05/03/2016',
69
+ due_date: '19/03/2016',
70
+ variable_symbol: 'VS198900000001',
71
+ subtotal: 'Kč 10.000',
72
+ tax: 'Kč 2.100',
73
+ total: 'Kč 12.100,-',
74
+ bank_account_number: '156546546465',
75
+ account_iban: 'IBAN464545645',
76
+ account_swift: 'SWIFT5456',
77
+ items: [first_item, second_item],
78
+ note: 'Osoba je zapsána v živnostenském rejstříku.'
79
+ )
80
+
81
+ InvoicePrinter.print(
82
+ document: invoice,
83
+ labels: labels,
84
+ font: 'overpass',
85
+ logo: File.expand_path('../prawn.png', __FILE__),
86
+ file_name: 'variable_field_invoice.pdf'
87
+ )
88
+
89
+ InvoicePrinter.print(
90
+ document: invoice,
91
+ labels: labels,
92
+ font: 'overpass',
93
+ logo: File.expand_path('../prawn.png', __FILE__),
94
+ file_name: 'variable_field_invoice_a4.pdf',
95
+ page_size: :a4
96
+ )
@@ -37,6 +37,7 @@ module InvoicePrinter
37
37
  # iban: 'IBAN:',
38
38
  # issue_date: 'Issue date:',
39
39
  # due_date: 'Due date:',
40
+ # variable_symbol: 'Variable symbol:'
40
41
  # item: 'Item',
41
42
  # quantity: 'Quantity',
42
43
  # unit: 'Unit',
@@ -15,6 +15,7 @@ module InvoicePrinter
15
15
  # purchaser_lines: "Ostravska 2\n747 05 Opava",
16
16
  # issue_date: '19/03/3939',
17
17
  # due_date: '19/03/3939',
18
+ # variable_symbol: '198900000001',
18
19
  # subtotal: '$ 150',
19
20
  # tax: '$ 50',
20
21
  # total: '$ 200',
@@ -46,6 +47,7 @@ module InvoicePrinter
46
47
  :purchaser_lines,
47
48
  :issue_date,
48
49
  :due_date,
50
+ :variable_symbol,
49
51
  # Account details
50
52
  :subtotal,
51
53
  :tax,
@@ -73,6 +75,7 @@ module InvoicePrinter
73
75
  purchaser_lines: json['purchaser_lines'],
74
76
  issue_date: json['issue_date'],
75
77
  due_date: json['due_date'],
78
+ variable_symbol: json['variable_symbol'],
76
79
  subtotal: json['subtotal'],
77
80
  tax: json['tax'],
78
81
  tax2: json['tax2'],
@@ -99,6 +102,7 @@ module InvoicePrinter
99
102
  purchaser_lines: nil,
100
103
  issue_date: nil,
101
104
  due_date: nil,
105
+ variable_symbol: nil,
102
106
  subtotal: nil,
103
107
  tax: nil,
104
108
  tax2: nil,
@@ -121,6 +125,7 @@ module InvoicePrinter
121
125
  @purchaser_lines = String(purchaser_lines)
122
126
  @issue_date = String(issue_date)
123
127
  @due_date = String(due_date)
128
+ @variable_symbol = String(variable_symbol)
124
129
  @subtotal = String(subtotal)
125
130
  @tax = String(tax)
126
131
  @tax2 = String(tax2)
@@ -149,6 +154,7 @@ module InvoicePrinter
149
154
  'purchaser_lines': @purchaser_lines,
150
155
  'issue_date': @issue_date,
151
156
  'due_date': @due_date,
157
+ 'variable_symbol': @variable_symbol,
152
158
  'subtotal': @subtotal,
153
159
  'tax': @tax,
154
160
  'tax2': @tax2,
@@ -36,6 +36,7 @@ module InvoicePrinter
36
36
  iban: 'IBAN',
37
37
  issue_date: 'Issue date',
38
38
  due_date: 'Due date',
39
+ variable_symbol: 'Variable symbol',
39
40
  item: 'Item',
40
41
  variable: '',
41
42
  quantity: 'Quantity',
@@ -252,41 +253,6 @@ module InvoicePrinter
252
253
  width: x(240)
253
254
  )
254
255
  end
255
- else
256
- @pdf.text_box(
257
- "#{@document.provider_street} #{@document.provider_street_number}",
258
- size: 10,
259
- at: [10, y(620) - @push_down],
260
- width: x(240)
261
- )
262
- @pdf.text_box(
263
- @document.provider_postcode,
264
- size: 10,
265
- at: [10, y(605) - @push_down],
266
- width: x(240)
267
- )
268
- @pdf.text_box(
269
- @document.provider_city,
270
- size: 10,
271
- at: [60, y(605) - @push_down],
272
- width: x(240)
273
- )
274
- unless @document.provider_city_part.empty?
275
- @pdf.text_box(
276
- @document.provider_city_part,
277
- size: 10,
278
- at: [60, y(590) - @push_down],
279
- width: x(240)
280
- )
281
- end
282
- unless @document.provider_extra_address_line.empty?
283
- @pdf.text_box(
284
- @document.provider_extra_address_line,
285
- size: 10,
286
- at: [10, y(575) - @push_down],
287
- width: x(240)
288
- )
289
- end
290
256
  end
291
257
  unless @document.provider_tax_id.empty?
292
258
  @pdf.text_box(
@@ -357,41 +323,6 @@ module InvoicePrinter
357
323
  width: x(240)
358
324
  )
359
325
  end
360
- else
361
- @pdf.text_box(
362
- "#{@document.purchaser_street} #{@document.purchaser_street_number}",
363
- size: 10,
364
- at: [x(284), y(620) - @push_down],
365
- width: x(240)
366
- )
367
- @pdf.text_box(
368
- @document.purchaser_postcode,
369
- size: 10,
370
- at: [x(284), y(605) - @push_down],
371
- width: x(240)
372
- )
373
- @pdf.text_box(
374
- @document.purchaser_city,
375
- size: 10,
376
- at: [x(334), y(605) - @push_down],
377
- width: x(240)
378
- )
379
- unless @document.purchaser_city_part.empty?
380
- @pdf.text_box(
381
- @document.purchaser_city_part,
382
- size: 10,
383
- at: [x(334), y(590) - @push_down],
384
- width: x(240)
385
- )
386
- end
387
- unless @document.purchaser_extra_address_line.empty?
388
- @pdf.text_box(
389
- @document.purchaser_extra_address_line,
390
- size: 10,
391
- at: [x(284), y(575) - @push_down],
392
- width: x(240)
393
- )
394
- end
395
326
  end
396
327
  unless @document.purchaser_tax_id.empty?
397
328
  @pdf.text_box(
@@ -440,6 +371,10 @@ module InvoicePrinter
440
371
  end
441
372
  @payment_box_height = min_height
442
373
 
374
+ if big_info_box?
375
+ @payment_box_height = 110
376
+ end
377
+
443
378
  if @document.bank_account_number.empty?
444
379
  @pdf.text_box(
445
380
  @labels[:payment],
@@ -551,6 +486,7 @@ module InvoicePrinter
551
486
  @payment_box_height += 30
552
487
  @push_items_table += 18
553
488
  end
489
+
554
490
  if min_height > @payment_box_height
555
491
  @payment_box_height = min_height
556
492
  @push_items_table += 25
@@ -571,6 +507,8 @@ module InvoicePrinter
571
507
  # | Issue date sublabel |
572
508
  # | Due date: 03/03/2016|
573
509
  # | Due date sublabel |
510
+ # | Variable symbol: VS12345678|
511
+ # | Variable symbol sublabel |
574
512
  # --------------------------------
575
513
  #
576
514
  def build_info_box
@@ -590,17 +528,17 @@ module InvoicePrinter
590
528
  width: x(146),
591
529
  align: :right
592
530
  )
593
- end
594
531
 
595
- if used? @labels[:sublabels][:issue_date]
596
- position = issue_date_present ? 483 : 498
532
+ if used? @labels[:sublabels][:issue_date]
533
+ position = issue_date_present ? 483 : 498
597
534
 
598
- @pdf.text_box(
599
- @labels[:sublabels][:issue_date],
600
- size: 10,
601
- at: [x(284), y(position) - @push_down],
602
- width: x(240)
603
- )
535
+ @pdf.text_box(
536
+ @labels[:sublabels][:issue_date],
537
+ size: 10,
538
+ at: [x(284), y(position) - @push_down],
539
+ width: x(240)
540
+ )
541
+ end
604
542
  end
605
543
 
606
544
  due_date_present = !@document.due_date.empty?
@@ -622,29 +560,83 @@ module InvoicePrinter
622
560
  width: x(146),
623
561
  align: :right
624
562
  )
563
+
564
+ if used? @labels[:sublabels][:due_date]
565
+ position = issue_date_present ? 463 : 478
566
+ position -= 10 if used? @labels[:sublabels][:issue_date]
567
+
568
+ @pdf.text_box(
569
+ @labels[:sublabels][:due_date],
570
+ size: 10,
571
+ at: [x(284), y(position) - @push_down],
572
+ width: x(240)
573
+ )
574
+ end
625
575
  end
626
576
 
627
- if used? @labels[:sublabels][:due_date]
628
- position = issue_date_present ? 463 : 478
577
+ variable_symbol_present = !@document.variable_symbol.empty?
578
+
579
+ if variable_symbol_present
580
+ position = (issue_date_present || due_date_present) ? 483 : 498
581
+ position = issue_date_present && due_date_present ? 458 : 463
629
582
  position -= 10 if used? @labels[:sublabels][:issue_date]
583
+ position -= 10 if used? @labels[:sublabels][:due_date]
630
584
 
631
585
  @pdf.text_box(
632
- @labels[:sublabels][:due_date],
633
- size: 10,
586
+ @labels[:variable_symbol],
587
+ size: 11,
634
588
  at: [x(284), y(position) - @push_down],
635
589
  width: x(240)
636
590
  )
591
+ @pdf.text_box(
592
+ @document.variable_symbol,
593
+ size: 13,
594
+ at: [x(384), y(position) - @push_down],
595
+ width: x(146),
596
+ align: :right
597
+ )
598
+
599
+ if used? @labels[:sublabels][:variable_symbol]
600
+ position = issue_date_present ? 443 : 458
601
+ position -= 10 if used? @labels[:sublabels][:issue_date]
602
+ position -= 10 if used? @labels[:sublabels][:due_date]
603
+
604
+ @pdf.text_box(
605
+ @labels[:sublabels][:variable_symbol],
606
+ size: 10,
607
+ at: [x(284), y(position) - @push_down],
608
+ width: x(240)
609
+ )
610
+ end
637
611
  end
638
612
 
639
- if issue_date_present || due_date_present
613
+ if issue_date_present || due_date_present || variable_symbol_present
614
+ big_box = (issue_date_present && due_date_present && variable_symbol_present && info_box_sublabels_used?)
640
615
  height = (issue_date_present && due_date_present) ? 75 : 60
616
+ height = big_box ? 110 : height
641
617
  height = @payment_box_height if @payment_box_height > height
642
618
 
643
619
  @pdf.stroke_rounded_rectangle([x(274), y(508) - @push_down], x(266), height, 6)
644
- @push_items_table += 12 if @push_items_table <= 18
620
+ @push_items_table += 23 if @push_items_table <= 18
621
+ @push_items_table += 24 if big_box
622
+
623
+ #@push_items_table += 30
645
624
  end
646
625
  end
647
626
 
627
+ def big_info_box?
628
+ !@document.issue_date.empty? &&
629
+ !@document.due_date.empty? &&
630
+ !@document.variable_symbol.empty? &&
631
+ info_box_sublabels_used?
632
+ end
633
+
634
+ def info_box_sublabels_used?
635
+ used?(@labels[:sublabels][:issue_date]) ||
636
+ used?(@labels[:sublabels][:due_date]) ||
637
+ used?(@labels[:sublabels][:variable_symbol])
638
+ end
639
+
648
640
  # Build the following table for document items:
649
641
  #
650
642
  # =================================================================
@@ -1,3 +1,3 @@
1
1
  module InvoicePrinter
2
- VERSION = '2.1.0'
2
+ VERSION = '2.2.0.alpha1'
3
3
  end
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.1.0
4
+ version: 2.2.0.alpha1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josef Strzibny
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-04-08 00:00:00.000000000 Z
11
+ date: 2021-04-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -111,6 +111,7 @@ files:
111
111
  - examples/promo.rb
112
112
  - examples/provider_purchaser_lines.rb
113
113
  - examples/simple_invoice.rb
114
+ - examples/variable_field_invoice.rb
114
115
  - invoice_printer.gemspec
115
116
  - invoice_printer_fonts.gemspec
116
117
  - invoice_printer_server.gemspec
@@ -148,11 +149,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
148
149
  version: '2.4'
149
150
  required_rubygems_version: !ruby/object:Gem::Requirement
150
151
  requirements:
151
- - - ">="
152
+ - - ">"
152
153
  - !ruby/object:Gem::Version
153
- version: '0'
154
+ version: 1.3.1
154
155
  requirements: []
155
- rubygems_version: 3.2.3
156
+ rubygems_version: 3.2.0.rc.1
156
157
  signing_key:
157
158
  specification_version: 4
158
159
  summary: Super simple PDF invoicing in pure Ruby