receipts 1.0.4 → 1.1.0
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/CHANGELOG.md +6 -0
- data/README.md +43 -0
- data/Rakefile +31 -0
- data/examples/receipt.pdf +0 -0
- data/examples/statement.pdf +0 -0
- data/lib/receipts.rb +1 -0
- data/lib/receipts/statement.rb +117 -0
- data/lib/receipts/version.rb +1 -1
- metadata +8 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7437916678e9856f57b022945c52fb49c3004bc929e77ec2c2d96b049b9231bc
|
4
|
+
data.tar.gz: 6a5b02fcf9aba5fc5e1e0060acc1403bfe47674f68e9453b3162064181eeb888
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f1685c620c7b21433644ffc6bd153ad0e3f008751f02fe8b888acbec7da03ebba1f0088804742f2b5d71aa46c713fd523655c15eda7a726ff0fe92111ab4f623
|
7
|
+
data.tar.gz: efd79f9bd4fb9a8e188dff1b149dc1d267d7eb5ca0c38124c976d9b142428c9998927948b6ed57825b8b1ec2f8f8cd8aa54237f6a226f6d0094f4464bfd566df
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -227,6 +227,49 @@ You can also use line_items to flexibly generate and display the table with item
|
|
227
227
|
)
|
228
228
|
```
|
229
229
|
|
230
|
+
## Statements
|
231
|
+
|
232
|
+
Statements follow the exact same set of steps as receipts, with a few minor changes and have a few extra arguments you can use:
|
233
|
+
|
234
|
+
* `issue_date` - Date the invoice was issued
|
235
|
+
|
236
|
+
* `start_date` - The start date of the statement period
|
237
|
+
|
238
|
+
* `start_date` - The end date of the statement period
|
239
|
+
|
240
|
+
* `bill_to` - A string or Array of lines with account details
|
241
|
+
|
242
|
+
You can also use line_items to flexibly generate and display the table with items in it, including subtotal, taxes, and total amount.
|
243
|
+
|
244
|
+
```ruby
|
245
|
+
Receipts::Statement.new(
|
246
|
+
id: "123",
|
247
|
+
issue_date: Date.today,
|
248
|
+
start_date: Date.today - 30,
|
249
|
+
end_date: Date.today,
|
250
|
+
bill_to: [
|
251
|
+
"GoRails, LLC",
|
252
|
+
"123 Fake Street",
|
253
|
+
"New York City, NY 10012",
|
254
|
+
nil,
|
255
|
+
"mail@example.com",
|
256
|
+
],
|
257
|
+
company: {
|
258
|
+
name: "GoRails, LLC",
|
259
|
+
address: "123 Fake Street\nNew York City, NY 10012",
|
260
|
+
email: "support@example.com",
|
261
|
+
logo: File.expand_path("./examples/gorails.png")
|
262
|
+
},
|
263
|
+
line_items: [
|
264
|
+
["<b>Item</b>", "<b>Unit Cost</b>", "<b>Quantity</b>", "<b>Amount</b>"],
|
265
|
+
["GoRails Subscription", "$19.00", "1", "$19.00"],
|
266
|
+
[nil, nil, "Subtotal", "$19.00"],
|
267
|
+
[nil, nil, "Tax Rate", "0%"],
|
268
|
+
[nil, nil, "Total", "$19.00"],
|
269
|
+
],
|
270
|
+
)
|
271
|
+
```
|
272
|
+
|
230
273
|
## Contributing
|
231
274
|
|
232
275
|
1. Fork it ( https://github.com/excid3/receipts/fork )
|
data/Rakefile
CHANGED
@@ -68,3 +68,34 @@ task :invoice do
|
|
68
68
|
],
|
69
69
|
).render_file "examples/invoice.pdf"
|
70
70
|
end
|
71
|
+
|
72
|
+
task :statement do
|
73
|
+
require "./lib/receipts"
|
74
|
+
|
75
|
+
Receipts::Statement.new(
|
76
|
+
id: "123",
|
77
|
+
issue_date: Date.today,
|
78
|
+
start_date: Date.today - 30,
|
79
|
+
end_date: Date.today,
|
80
|
+
bill_to: [
|
81
|
+
"GoRails, LLC",
|
82
|
+
"123 Fake Street",
|
83
|
+
"New York City, NY 10012",
|
84
|
+
nil,
|
85
|
+
"mail@example.com",
|
86
|
+
],
|
87
|
+
company: {
|
88
|
+
name: "GoRails, LLC",
|
89
|
+
address: "123 Fake Street\nNew York City, NY 10012",
|
90
|
+
email: "support@example.com",
|
91
|
+
logo: File.expand_path("./examples/gorails.png")
|
92
|
+
},
|
93
|
+
line_items: [
|
94
|
+
["<b>Item</b>", "<b>Unit Cost</b>", "<b>Quantity</b>", "<b>Amount</b>"],
|
95
|
+
["GoRails Subscription", "$19.00", "1", "$19.00"],
|
96
|
+
[nil, nil, "Subtotal", "$19.00"],
|
97
|
+
[nil, nil, "Tax Rate", "0%"],
|
98
|
+
[nil, nil, "Total", "$19.00"],
|
99
|
+
],
|
100
|
+
).render_file "examples/statement.pdf"
|
101
|
+
end
|
data/examples/receipt.pdf
CHANGED
Binary file
|
Binary file
|
data/lib/receipts.rb
CHANGED
@@ -0,0 +1,117 @@
|
|
1
|
+
require 'prawn'
|
2
|
+
require 'prawn/table'
|
3
|
+
|
4
|
+
module Receipts
|
5
|
+
class Statement < Prawn::Document
|
6
|
+
attr_reader :attributes, :id, :company, :custom_font, :line_items, :logo, :message, :product, :subheading, :bill_to, :issue_date, :start_date, :end_date
|
7
|
+
|
8
|
+
def initialize(attributes)
|
9
|
+
@attributes = attributes
|
10
|
+
@id = attributes.fetch(:id)
|
11
|
+
@company = attributes.fetch(:company)
|
12
|
+
@line_items = attributes.fetch(:line_items)
|
13
|
+
@custom_font = attributes.fetch(:font, {})
|
14
|
+
@message = attributes.fetch(:message) { default_message }
|
15
|
+
@subheading = attributes.fetch(:subheading) { default_subheading }
|
16
|
+
@bill_to = Array(attributes.fetch(:bill_to)).join("\n")
|
17
|
+
@issue_date = attributes.fetch(:issue_date)
|
18
|
+
@start_date = attributes.fetch(:start_date)
|
19
|
+
@end_date = attributes.fetch(:end_date)
|
20
|
+
|
21
|
+
super(margin: 0)
|
22
|
+
|
23
|
+
setup_fonts if custom_font.any?
|
24
|
+
generate
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def default_message
|
30
|
+
"For questions, contact us anytime at <color rgb='326d92'><link href='mailto:#{company.fetch(:email)}?subject=Charge ##{id}'><b>#{company.fetch(:email)}</b></link></color>."
|
31
|
+
end
|
32
|
+
|
33
|
+
def default_subheading
|
34
|
+
"STATEMENT #%{id}"
|
35
|
+
end
|
36
|
+
|
37
|
+
def setup_fonts
|
38
|
+
font_families.update "Primary" => custom_font
|
39
|
+
font "Primary"
|
40
|
+
end
|
41
|
+
|
42
|
+
def generate
|
43
|
+
bounding_box [0, 792], width: 612, height: 792 do
|
44
|
+
bounding_box [85, 792], width: 442, height: 792 do
|
45
|
+
header
|
46
|
+
charge_details
|
47
|
+
footer
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def header
|
53
|
+
move_down 60
|
54
|
+
|
55
|
+
logo = company[:logo]
|
56
|
+
|
57
|
+
if logo.nil?
|
58
|
+
move_down 32
|
59
|
+
elsif logo.is_a?(String)
|
60
|
+
image open(logo), height: 32
|
61
|
+
else
|
62
|
+
image logo, height: 32
|
63
|
+
end
|
64
|
+
|
65
|
+
move_down 8
|
66
|
+
label (subheading % {id: id})
|
67
|
+
|
68
|
+
move_down 10
|
69
|
+
|
70
|
+
# Cache the Y value so we can have both boxes at the same height
|
71
|
+
top = y
|
72
|
+
bounding_box([0, y], width: 200) do
|
73
|
+
move_down 5
|
74
|
+
text_box bill_to, at: [0, cursor], width: 200, height: 75, inline_format: true, size: 10, leading: 4, overflow: :shrink_to_fit
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
bounding_box([250, top], width: 200) do
|
79
|
+
label "STATEMENT DATE"
|
80
|
+
|
81
|
+
move_down 5
|
82
|
+
text issue_date.to_s, inline_format: true, size: 12, leading: 4
|
83
|
+
|
84
|
+
move_down 10
|
85
|
+
label "STATEMENT PERIOD"
|
86
|
+
|
87
|
+
move_down 5
|
88
|
+
text "#{start_date.to_s} - #{end_date.to_s}", inline_format: true, size: 12, leading: 4
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def charge_details
|
93
|
+
move_down 30
|
94
|
+
|
95
|
+
borders = line_items.length - 2
|
96
|
+
|
97
|
+
table(line_items, width: bounds.width, cell_style: { border_color: 'cccccc', inline_format: true }) do
|
98
|
+
cells.padding = 12
|
99
|
+
cells.borders = []
|
100
|
+
row(0..borders).borders = [:bottom]
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def footer
|
105
|
+
move_down 30
|
106
|
+
text message, inline_format: true, size: 12, leading: 4
|
107
|
+
|
108
|
+
move_down 30
|
109
|
+
text company.fetch(:name), inline_format: true
|
110
|
+
text "<color rgb='888888'>#{company.fetch(:address)}</color>", inline_format: true
|
111
|
+
end
|
112
|
+
|
113
|
+
def label(text)
|
114
|
+
text "<color rgb='a6a6a6'>#{text}</color>", inline_format: true, size: 8
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
data/lib/receipts/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: receipts
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Oliver
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-05-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -118,9 +118,11 @@ files:
|
|
118
118
|
- examples/gorails.png
|
119
119
|
- examples/invoice.pdf
|
120
120
|
- examples/receipt.pdf
|
121
|
+
- examples/statement.pdf
|
121
122
|
- lib/receipts.rb
|
122
123
|
- lib/receipts/invoice.rb
|
123
124
|
- lib/receipts/receipt.rb
|
125
|
+
- lib/receipts/statement.rb
|
124
126
|
- lib/receipts/version.rb
|
125
127
|
- receipts.gemspec
|
126
128
|
- spec/receipts_spec.rb
|
@@ -129,7 +131,7 @@ homepage: ''
|
|
129
131
|
licenses:
|
130
132
|
- MIT
|
131
133
|
metadata: {}
|
132
|
-
post_install_message:
|
134
|
+
post_install_message:
|
133
135
|
rdoc_options: []
|
134
136
|
require_paths:
|
135
137
|
- lib
|
@@ -144,8 +146,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
144
146
|
- !ruby/object:Gem::Version
|
145
147
|
version: '0'
|
146
148
|
requirements: []
|
147
|
-
rubygems_version: 3.
|
148
|
-
signing_key:
|
149
|
+
rubygems_version: 3.2.3
|
150
|
+
signing_key:
|
149
151
|
specification_version: 4
|
150
152
|
summary: Receipts for your Rails application that works with any payment provider.
|
151
153
|
test_files:
|