payday 1.0.3 → 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,4 +1,3 @@
1
1
  source "http://rubygems.org"
2
2
 
3
3
  gemspec
4
-
@@ -1,26 +1,26 @@
1
1
  module Payday
2
-
2
+
3
3
  # The PDF renderer. We use this internally in Payday to render pdfs, but really you should just need to call
4
4
  # {{Payday::Invoiceable#render_pdf}} to render pdfs yourself.
5
5
  class PdfRenderer
6
-
6
+
7
7
  # Renders the given invoice as a pdf on disk
8
- def self.render_to_file(invoice, path)
8
+ def self.render_to_file(invoice, path)
9
9
  pdf(invoice).render_file(path)
10
10
  end
11
-
11
+
12
12
  # Renders the given invoice as a pdf, returning a string
13
13
  def self.render(invoice)
14
14
  pdf(invoice).render
15
15
  end
16
-
16
+
17
17
  private
18
18
  def self.pdf(invoice)
19
19
  pdf = Prawn::Document.new(:page_size => invoice_or_default(invoice, :page_size))
20
20
 
21
21
  # set up some default styling
22
22
  pdf.font_size(8)
23
-
23
+
24
24
  stamp(invoice, pdf)
25
25
  company_banner(invoice, pdf)
26
26
  bill_to_ship_to(invoice, pdf)
@@ -28,12 +28,12 @@ module Payday
28
28
  line_items_table(invoice, pdf)
29
29
  totals_lines(invoice, pdf)
30
30
  notes(invoice, pdf)
31
-
31
+
32
32
  page_numbers(pdf)
33
33
 
34
34
  pdf
35
35
  end
36
-
36
+
37
37
  def self.stamp(invoice, pdf)
38
38
  stamp = nil
39
39
  if invoice.paid?
@@ -53,41 +53,41 @@ module Payday
53
53
 
54
54
  pdf.fill_color "000000"
55
55
  end
56
-
56
+
57
57
  def self.company_banner(invoice, pdf)
58
58
  # render the logo
59
59
  logo_info = pdf.image(invoice_or_default(invoice, :invoice_logo), :at => pdf.bounds.top_left)
60
-
60
+
61
61
  # render the company details
62
62
  table_data = []
63
63
  table_data << [bold_cell(pdf, invoice_or_default(invoice, :company_name).strip, :size => 12)]
64
-
64
+
65
65
  invoice_or_default(invoice, :company_details).lines.each { |line| table_data << [line] }
66
-
66
+
67
67
  table = pdf.make_table(table_data, :cell_style => { :borders => [], :padding => 0 })
68
68
  pdf.bounding_box([pdf.bounds.width - table.width, pdf.bounds.top], :width => table.width, :height => table.height + 5) do
69
69
  table.draw
70
70
  end
71
-
71
+
72
72
  pdf.move_cursor_to(pdf.bounds.top - logo_info.scaled_height - 20)
73
73
  end
74
-
74
+
75
75
  def self.bill_to_ship_to(invoice, pdf)
76
76
  bill_to_cell_style = { :borders => [], :padding => [2, 0]}
77
77
  bill_to_ship_to_bottom = 0
78
-
78
+
79
79
  # render bill to
80
80
  pdf.float do
81
- table = pdf.table([[bold_cell(pdf, I18n.t('payday.invoice.bill_to', :default => "Bill To"))],
81
+ table = pdf.table([[bold_cell(pdf, I18n.t('payday.invoice.bill_to', :default => "Bill To"))],
82
82
  [invoice.bill_to]], :column_widths => [200], :cell_style => bill_to_cell_style)
83
83
  bill_to_ship_to_bottom = pdf.cursor
84
84
  end
85
85
 
86
86
  # render ship to
87
87
  if defined?(invoice.ship_to) && !invoice.ship_to.nil?
88
- table = pdf.make_table([[bold_cell(pdf, I18n.t('payday.invoice.ship_to', :default => "Ship To"))],
88
+ table = pdf.make_table([[bold_cell(pdf, I18n.t('payday.invoice.ship_to', :default => "Ship To"))],
89
89
  [invoice.ship_to]], :column_widths => [200], :cell_style => bill_to_cell_style)
90
-
90
+
91
91
  pdf.bounding_box([pdf.bounds.width - table.width, pdf.cursor], :width => table.width, :height => table.height + 2) do
92
92
  table.draw
93
93
  end
@@ -97,14 +97,14 @@ module Payday
97
97
  bill_to_ship_to_bottom = pdf.cursor if pdf.cursor < bill_to_ship_to_bottom
98
98
  pdf.move_cursor_to(bill_to_ship_to_bottom - 20)
99
99
  end
100
-
100
+
101
101
  def self.invoice_details(invoice, pdf)
102
102
  # invoice details
103
103
  table_data = []
104
104
 
105
105
  # invoice number
106
106
  if defined?(invoice.invoice_number) && invoice.invoice_number
107
- table_data << [bold_cell(pdf, I18n.t('payday.invoice.invoice_no', :default => "Invoice #:")),
107
+ table_data << [bold_cell(pdf, I18n.t('payday.invoice.invoice_no', :default => "Invoice #:")),
108
108
  bold_cell(pdf, invoice.invoice_number.to_s, :align => :right)]
109
109
  end
110
110
 
@@ -116,7 +116,7 @@ module Payday
116
116
  due_date = invoice.due_at.to_s
117
117
  end
118
118
 
119
- table_data << [bold_cell(pdf, I18n.t('payday.invoice.due_date', :default => "Due Date:")),
119
+ table_data << [bold_cell(pdf, I18n.t('payday.invoice.due_date', :default => "Due Date:")),
120
120
  bold_cell(pdf, due_date, :align => :right)]
121
121
  end
122
122
 
@@ -128,13 +128,13 @@ module Payday
128
128
  paid_date = invoice.paid_at.to_s
129
129
  end
130
130
 
131
- table_data << [bold_cell(pdf, I18n.t('payday.invoice.paid_date', :default => "Paid Date:")),
131
+ table_data << [bold_cell(pdf, I18n.t('payday.invoice.paid_date', :default => "Paid Date:")),
132
132
  bold_cell(pdf, paid_date, :align => :right)]
133
133
  end
134
134
 
135
135
  # loop through invoice_details and include them
136
136
  invoice.each_detail do |key, value|
137
- table_data << [bold_cell(pdf, key),
137
+ table_data << [bold_cell(pdf, key),
138
138
  bold_cell(pdf, value, :align => :right)]
139
139
  end
140
140
 
@@ -142,12 +142,12 @@ module Payday
142
142
  pdf.table(table_data, :cell_style => { :borders => [], :padding => [1, 10, 1, 1] })
143
143
  end
144
144
  end
145
-
145
+
146
146
  def self.line_items_table(invoice, pdf)
147
147
  table_data = []
148
- table_data << [bold_cell(pdf, I18n.t('payday.line_item.description', :default => "Description"), :borders => []),
149
- bold_cell(pdf, I18n.t('payday.line_item.unit_price', :default => "Unit Price"), :align => :center, :borders => []),
150
- bold_cell(pdf, I18n.t('payday.line_item.quantity', :default => "Quantity"), :align => :center, :borders => []),
148
+ table_data << [bold_cell(pdf, I18n.t('payday.line_item.description', :default => "Description"), :borders => []),
149
+ bold_cell(pdf, I18n.t('payday.line_item.unit_price', :default => "Unit Price"), :align => :center, :borders => []),
150
+ bold_cell(pdf, I18n.t('payday.line_item.quantity', :default => "Quantity"), :align => :center, :borders => []),
151
151
  bold_cell(pdf, I18n.t('payday.line_item.amount', :default => "Amount"), :align => :center, :borders => [])]
152
152
  invoice.line_items.each do |line|
153
153
  table_data << [line.description,
@@ -157,7 +157,7 @@ module Payday
157
157
  end
158
158
 
159
159
  pdf.move_cursor_to(pdf.cursor - 20)
160
- pdf.table(table_data, :width => pdf.bounds.width, :header => true,
160
+ pdf.table(table_data, :width => pdf.bounds.width, :header => true,
161
161
  :cell_style => {:border_width => 0.5, :border_color => "cccccc", :padding => [5, 10]},
162
162
  :row_colors => ["dfdfdf", "ffffff"]) do
163
163
  # left align the number columns
@@ -170,29 +170,29 @@ module Payday
170
170
  column_widths = natural
171
171
  end
172
172
  end
173
-
173
+
174
174
  def self.totals_lines(invoice, pdf)
175
175
  table_data = []
176
- table_data << [bold_cell(pdf, I18n.t('payday.invoice.subtotal', :default => "Subtotal:")),
176
+ table_data << [bold_cell(pdf, I18n.t('payday.invoice.subtotal', :default => "Subtotal:")),
177
177
  cell(pdf, number_to_currency(invoice.subtotal, invoice), :align => :right)]
178
178
  if invoice.tax_rate > 0
179
179
  table_data << [bold_cell(pdf,
180
- invoice.tax_description.nil? ? I18n.t('payday.invoice.tax', :default => "Tax:") : invoice.tax_description),
180
+ invoice.tax_description.nil? ? I18n.t('payday.invoice.tax', :default => "Tax:") : invoice.tax_description),
181
181
  cell(pdf, number_to_currency(invoice.tax, invoice), :align => :right)]
182
182
  end
183
183
  if invoice.shipping_rate > 0
184
184
  table_data << [bold_cell(pdf,
185
- invoice.shipping_description.nil? ? I18n.t('payday.invoice.shipping', :default => "Shipping:") : invoice.shipping_description),
185
+ invoice.shipping_description.nil? ? I18n.t('payday.invoice.shipping', :default => "Shipping:") : invoice.shipping_description),
186
186
  cell(pdf, number_to_currency(invoice.shipping, invoice), :align => :right)]
187
187
  end
188
- table_data << [bold_cell(pdf, I18n.t('payday.invoice.total', :default => "Total:"), :size => 12),
188
+ table_data << [bold_cell(pdf, I18n.t('payday.invoice.total', :default => "Total:"), :size => 12),
189
189
  cell(pdf, number_to_currency(invoice.total, invoice), :size => 12, :align => :right)]
190
190
  table = pdf.make_table(table_data, :cell_style => { :borders => [] })
191
191
  pdf.bounding_box([pdf.bounds.width - table.width, pdf.cursor], :width => table.width, :height => table.height + 2) do
192
192
  table.draw
193
193
  end
194
194
  end
195
-
195
+
196
196
  def self.notes(invoice, pdf)
197
197
  if defined?(invoice.notes) && invoice.notes
198
198
  pdf.move_cursor_to(pdf.cursor - 30)
@@ -206,13 +206,13 @@ module Payday
206
206
  pdf.text(invoice.notes.to_s)
207
207
  end
208
208
  end
209
-
209
+
210
210
  def self.page_numbers(pdf)
211
211
  if pdf.page_count > 1
212
212
  pdf.number_pages("<page> / <total>", [pdf.bounds.right - 18, -15])
213
213
  end
214
214
  end
215
-
215
+
216
216
  def self.invoice_or_default(invoice, property)
217
217
  if invoice.respond_to?(property) && invoice.send(property)
218
218
  invoice.send(property)
@@ -220,21 +220,21 @@ module Payday
220
220
  Payday::Config.default.send(property)
221
221
  end
222
222
  end
223
-
223
+
224
224
  def self.cell(pdf, text, options = {})
225
225
  Prawn::Table::Cell::Text.make(pdf, text, options)
226
226
  end
227
-
227
+
228
228
  def self.bold_cell(pdf, text, options = {})
229
229
  options[:font] = "Helvetica-Bold"
230
230
  cell(pdf, text, options)
231
231
  end
232
-
232
+
233
233
  # Converts this number to a formatted currency string
234
234
  def self.number_to_currency(number, invoice)
235
235
  number.to_money(invoice_or_default(invoice, :currency)).format
236
236
  end
237
-
237
+
238
238
  def self.max_cell_width(cell_proxy)
239
239
  max = 0
240
240
  cell_proxy.each do |cell|
@@ -242,7 +242,7 @@ module Payday
242
242
  max = cell.natural_content_width
243
243
  end
244
244
  end
245
-
245
+
246
246
  max
247
247
  end
248
248
  end
@@ -2,5 +2,5 @@
2
2
  module Payday
3
3
 
4
4
  # Current Version
5
- VERSION = "1.0.3"
5
+ VERSION = "1.0.4"
6
6
  end
data/payday.gemspec CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
12
12
  s.summary = %q{git remote add origin git@github.com:commondream/payday.git}
13
13
  s.description = %q{Payday is a library for rendering invoices. At present it supports rendering invoices to pdfs, but we're planning on adding support for other formats in the near future.}
14
14
 
15
- s.add_dependency("prawn", "~> 0.11.1")
15
+ s.add_dependency("prawn", "~> 0.12.0")
16
16
  s.add_dependency("money", "~> 3.6.1")
17
17
  s.add_dependency("i18n", ">= 0.5.0")
18
18
 
metadata CHANGED
@@ -1,72 +1,69 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: payday
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.4
4
5
  prerelease:
5
- version: 1.0.3
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Alan Johnson
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2011-05-24 00:00:00 -04:00
14
- default_executable:
15
- dependencies:
16
- - !ruby/object:Gem::Dependency
12
+ date: 2011-11-17 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
17
15
  name: prawn
18
- prerelease: false
19
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &70204475070780 !ruby/object:Gem::Requirement
20
17
  none: false
21
- requirements:
18
+ requirements:
22
19
  - - ~>
23
- - !ruby/object:Gem::Version
24
- version: 0.11.1
20
+ - !ruby/object:Gem::Version
21
+ version: 0.12.0
25
22
  type: :runtime
26
- version_requirements: *id001
27
- - !ruby/object:Gem::Dependency
28
- name: money
29
23
  prerelease: false
30
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *70204475070780
25
+ - !ruby/object:Gem::Dependency
26
+ name: money
27
+ requirement: &70204475070280 !ruby/object:Gem::Requirement
31
28
  none: false
32
- requirements:
29
+ requirements:
33
30
  - - ~>
34
- - !ruby/object:Gem::Version
31
+ - !ruby/object:Gem::Version
35
32
  version: 3.6.1
36
33
  type: :runtime
37
- version_requirements: *id002
38
- - !ruby/object:Gem::Dependency
39
- name: i18n
40
34
  prerelease: false
41
- requirement: &id003 !ruby/object:Gem::Requirement
35
+ version_requirements: *70204475070280
36
+ - !ruby/object:Gem::Dependency
37
+ name: i18n
38
+ requirement: &70204475069820 !ruby/object:Gem::Requirement
42
39
  none: false
43
- requirements:
44
- - - ">="
45
- - !ruby/object:Gem::Version
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
46
43
  version: 0.5.0
47
44
  type: :runtime
48
- version_requirements: *id003
49
- - !ruby/object:Gem::Dependency
50
- name: minitest
51
45
  prerelease: false
52
- requirement: &id004 !ruby/object:Gem::Requirement
46
+ version_requirements: *70204475069820
47
+ - !ruby/object:Gem::Dependency
48
+ name: minitest
49
+ requirement: &70204475069380 !ruby/object:Gem::Requirement
53
50
  none: false
54
- requirements:
55
- - - ">="
56
- - !ruby/object:Gem::Version
57
- version: "0"
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
58
55
  type: :development
59
- version_requirements: *id004
60
- description: Payday is a library for rendering invoices. At present it supports rendering invoices to pdfs, but we're planning on adding support for other formats in the near future.
61
- email:
56
+ prerelease: false
57
+ version_requirements: *70204475069380
58
+ description: Payday is a library for rendering invoices. At present it supports rendering
59
+ invoices to pdfs, but we're planning on adding support for other formats in the
60
+ near future.
61
+ email:
62
62
  - alan@commondream.net
63
63
  executables: []
64
-
65
64
  extensions: []
66
-
67
65
  extra_rdoc_files: []
68
-
69
- files:
66
+ files:
70
67
  - .gitignore
71
68
  - Gemfile
72
69
  - README.md
@@ -94,35 +91,31 @@ files:
94
91
  - test/invoice_test.rb
95
92
  - test/line_item_test.rb
96
93
  - test/test_helper.rb
97
- has_rdoc: true
98
- homepage: ""
94
+ homepage: ''
99
95
  licenses: []
100
-
101
96
  post_install_message:
102
97
  rdoc_options: []
103
-
104
- require_paths:
98
+ require_paths:
105
99
  - lib
106
- required_ruby_version: !ruby/object:Gem::Requirement
100
+ required_ruby_version: !ruby/object:Gem::Requirement
107
101
  none: false
108
- requirements:
109
- - - ">="
110
- - !ruby/object:Gem::Version
111
- version: "0"
112
- required_rubygems_version: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ! '>='
104
+ - !ruby/object:Gem::Version
105
+ version: '0'
106
+ required_rubygems_version: !ruby/object:Gem::Requirement
113
107
  none: false
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: "0"
108
+ requirements:
109
+ - - ! '>='
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
118
112
  requirements: []
119
-
120
113
  rubyforge_project:
121
- rubygems_version: 1.6.2
114
+ rubygems_version: 1.8.10
122
115
  signing_key:
123
116
  specification_version: 3
124
117
  summary: git remote add origin git@github.com:commondream/payday.git
125
- test_files:
118
+ test_files:
126
119
  - test/invoice_test.rb
127
120
  - test/line_item_test.rb
128
121
  - test/test_helper.rb