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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: aa3e56021ccff37e48f340cea424f548b1f52c6782203cde1002049a1f470571
4
- data.tar.gz: db562a59a36abcc235718f59420bc730ddcb70a3b057536df824692cfbfd4909
3
+ metadata.gz: 7437916678e9856f57b022945c52fb49c3004bc929e77ec2c2d96b049b9231bc
4
+ data.tar.gz: 6a5b02fcf9aba5fc5e1e0060acc1403bfe47674f68e9453b3162064181eeb888
5
5
  SHA512:
6
- metadata.gz: a2ed85aa3947b15ca345d01b88e9f267335e181ef4a8950b496cd99c4d9c9187844d92f993b82dfc3018ece6dcee9765777842135d330dbe61e08599676b43d8
7
- data.tar.gz: 9d2c8edb71e5d0204431f2053bb1a8518a8e766201950327c0581c8c4914d7edee96ea1f435ee9dd4c800d687886f79dcc6e97596a0cd689fadf6b827d30dcd9
6
+ metadata.gz: f1685c620c7b21433644ffc6bd153ad0e3f008751f02fe8b888acbec7da03ebba1f0088804742f2b5d71aa46c713fd523655c15eda7a726ff0fe92111ab4f623
7
+ data.tar.gz: efd79f9bd4fb9a8e188dff1b149dc1d267d7eb5ca0c38124c976d9b142428c9998927948b6ed57825b8b1ec2f8f8cd8aa54237f6a226f6d0094f4464bfd566df
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ### Unreleased
2
+
3
+ ### 1.1.0
4
+
5
+ * [NEW] Add Statements - @anquinn
6
+
1
7
  ### 1.0.3
2
8
 
3
9
  * [FIX] Fixes typo introduced in 1.0.2
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
@@ -1,3 +1,4 @@
1
1
  require "receipts/version"
2
2
  require "receipts/receipt"
3
3
  require "receipts/invoice"
4
+ require "receipts/statement"
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Receipts
2
- VERSION = "1.0.4"
2
+ VERSION = "1.1.0"
3
3
  end
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
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: 2020-08-02 00:00:00.000000000 Z
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.1.2
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: