caboose-cms 0.5.144 → 0.5.145
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/app/controllers/caboose/orders_controller.rb +16 -2
- data/app/models/caboose/pending_orders_pdf.rb +214 -55
- data/app/views/caboose/orders_mailer/customer_new_order.html.erb +12 -12
- data/app/views/caboose/orders_mailer/customer_status_updated.html.erb +96 -1
- data/lib/caboose/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
Zjk4OTU1YWUyMzU5YmFiOWNjYzc3NTMyYThkOWFjMDcxYzNjYjBlOQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
YWI0OTVkODQyOTY5Yjc0NmQzOGQyMzBlMTRlNGJiYTgzNTRjYWM5Mw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YTE1OTI2ZGQ5MzIyMmIwOTBiNGRmMDJkZjdkMjBhZjUwMDczYmFjYTcwYjJl
|
10
|
+
MjMwMWRiY2Y1OGYzZTM4MjQ0MThlYTg0NGIyMTM0NjI1YmQ2ZjI1NTk2ZDU5
|
11
|
+
OTEyYTg2ZmQzOGE3OTRmYWVjMjU5ODMzOTU5MGVhN2QxMmY5ODc=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MmQwZjQ1MTA2YTQ4ZGFmOWI0MjFjZDZlMTA0NGUyYTcwMWNmYjI4NWVkYjg4
|
14
|
+
NTIyNmYxYjNkMjBkNTBmMzJkYWRmZjhhNzlkOWQ4NzBlOTU4MjI0ZWJmZGMx
|
15
|
+
MTc1YTk5YzI3ZTE1NTljOGJiOWZlNmVjMjAxODQ5MzcxMjhkYTI=
|
@@ -62,10 +62,10 @@ module Caboose
|
|
62
62
|
def capture_funds
|
63
63
|
return if !user_is_allowed('orders', 'edit')
|
64
64
|
|
65
|
-
|
65
|
+
resp = Caboose::StdClass.new
|
66
66
|
order = Order.find(params[:id])
|
67
67
|
t = OrderTransaction.where(:order_id => order.id, :transaction_type => OrderTransaction::TYPE_AUTHORIZE, :success => true).first
|
68
|
-
|
68
|
+
|
69
69
|
if order.financial_status == Order::FINANCIAL_STATUS_CAPTURED
|
70
70
|
resp.error = "Funds for this order have already been captured."
|
71
71
|
elsif order.total > t.amount
|
@@ -87,6 +87,20 @@ module Caboose
|
|
87
87
|
)
|
88
88
|
order.update_attribute(:financial_status, Order::FINANCIAL_STATUS_CAPTURED)
|
89
89
|
resp.success = 'Captured funds successfully'
|
90
|
+
|
91
|
+
Caboose.log(response.inspect)
|
92
|
+
|
93
|
+
ot = Caboose::OrderTransaction.new(
|
94
|
+
:order_id => order.id,
|
95
|
+
:date_processed => DateTime.now.utc,
|
96
|
+
:transaction_type => Caboose::OrderTransaction::TYPE_CAPTURE
|
97
|
+
)
|
98
|
+
ot.success = response.success?
|
99
|
+
ot.transaction_id = response.transaction_id
|
100
|
+
ot.response_code = response.response_code
|
101
|
+
ot.amount = order.total
|
102
|
+
ot.save
|
103
|
+
|
90
104
|
when 'payscape'
|
91
105
|
# TODO: Implement capture funds for payscape
|
92
106
|
|
@@ -3,81 +3,240 @@ require 'prawn'
|
|
3
3
|
module Caboose
|
4
4
|
class PendingOrdersPdf < Prawn::Document
|
5
5
|
|
6
|
-
attr_accessor :orders
|
7
|
-
attr_accessor :order
|
6
|
+
attr_accessor :orders, :card_type, :card_number
|
8
7
|
|
9
8
|
def to_pdf
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
9
|
+
|
10
|
+
# Get the type of card and last four digits
|
11
|
+
|
12
|
+
orders.each_with_index do |o,index|
|
13
|
+
get_card_details(o)
|
14
|
+
font_size 9
|
15
|
+
move_down 10
|
16
|
+
order_info(o)
|
17
|
+
move_down 15
|
18
|
+
order_table(o)
|
19
|
+
move_down 15
|
20
|
+
customer_info(o)
|
21
|
+
move_down 15
|
22
|
+
payment_info(o)
|
23
|
+
if index + 1 < orders.count then start_new_page end
|
24
|
+
end
|
25
|
+
|
19
26
|
render
|
20
27
|
end
|
21
28
|
|
22
|
-
def
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
if
|
28
|
-
|
29
|
+
def formatted_phone(str)
|
30
|
+
return '' if str.nil?
|
31
|
+
str = str.gsub(/[^0-9]/i, '')
|
32
|
+
return "#{str[0]} (#{str[1..3]}) #{str[4..6]}-#{str[7..10]}" if str.length == 11
|
33
|
+
return "(#{str[0..2]}) #{str[3..5]}-#{str[6..9]}" if str.length == 10
|
34
|
+
return "#{str[0..2]}-#{str[3..6]}" if str.length == 7
|
35
|
+
return str
|
36
|
+
end
|
37
|
+
|
38
|
+
def get_card_details(order)
|
39
|
+
sc = order.site.store_config
|
40
|
+
ot = order.order_transactions.where(:transaction_type => OrderTransaction::TYPE_AUTHORIZE, :success => true).first
|
41
|
+
case sc.pp_name
|
42
|
+
when 'authorize.net'
|
43
|
+
t = AuthorizeNet::Reporting::Transaction.new(sc.pp_username, sc.pp_password)
|
44
|
+
resp = t.get_transaction_details(ot.transaction_id)
|
45
|
+
t2 = resp.transaction
|
46
|
+
self.card_type = t2.payment_method.card_type.upcase
|
47
|
+
self.card_number = t2.payment_method.card_number.gsub('X', '')
|
29
48
|
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def order_info(order)
|
52
|
+
order_info = "Order Number: #{order.id}\n"
|
53
|
+
order_info << "Order Date: #{order.date_created.strftime('%d %b %Y %H:%M:%S %p')}\n"
|
54
|
+
order_info << "Status: #{order.status.capitalize}\n"
|
55
|
+
tbl = []
|
56
|
+
tbl << [
|
57
|
+
{ :content => order_info }
|
58
|
+
]
|
59
|
+
move_down 4
|
60
|
+
table tbl, :position => 7, :width => 530
|
61
|
+
end
|
62
|
+
|
63
|
+
|
64
|
+
def customer_info(order)
|
65
|
+
c = order.customer
|
66
|
+
ba = order.billing_address
|
67
|
+
billed_to = []
|
68
|
+
billed_to << [
|
69
|
+
{ :content => "Name", :border_width => 0 },
|
70
|
+
{ :content => "#{ba.first_name} #{ba.last_name}", :border_width => 0}
|
71
|
+
]
|
72
|
+
billed_to << [
|
73
|
+
{ :content => "Address", :border_width => 0 },
|
74
|
+
{ :content => "#{ba.address1}" + (ba.address2.blank? ? '' : "\n#{ba.address2}") + "\n#{ba.city}, #{ba.state} #{ba.zip}", :border_width => 0}
|
75
|
+
]
|
76
|
+
billed_to << [
|
77
|
+
{ :content => "Email", :border_width => 0 },
|
78
|
+
{ :content => "#{c.email}", :border_width => 0}
|
79
|
+
]
|
80
|
+
billed_to << [
|
81
|
+
{ :content => "Phone", :border_width => 0 },
|
82
|
+
{ :content => "#{self.formatted_phone(c.phone)}", :border_width => 0}
|
83
|
+
]
|
30
84
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
shipped_to <<
|
38
|
-
|
85
|
+
sa = order.shipping_address
|
86
|
+
shipped_to = []
|
87
|
+
shipped_to << [
|
88
|
+
{ :content => "Name", :border_width => 0 },
|
89
|
+
{ :content => "#{sa.first_name} #{sa.last_name}", :border_width => 0}
|
90
|
+
]
|
91
|
+
shipped_to << [
|
92
|
+
{ :content => "Address", :border_width => 0 },
|
93
|
+
{ :content => "#{sa.address1}" + (sa.address2.blank? ? '' : "\n#{sa.address2}") + "\n#{sa.city}, #{sa.state} #{sa.zip}", :border_width => 0}
|
94
|
+
]
|
95
|
+
shipped_to << [
|
96
|
+
{ :content => "Email", :border_width => 0 },
|
97
|
+
{ :content => "#{c.email}", :border_width => 0}
|
98
|
+
]
|
99
|
+
shipped_to << [
|
100
|
+
{ :content => "Phone", :border_width => 0 },
|
101
|
+
{ :content => "#{self.formatted_phone(c.phone)}", :border_width => 0}
|
102
|
+
]
|
103
|
+
|
39
104
|
tbl = []
|
40
105
|
tbl << [
|
41
|
-
{ :content => "
|
42
|
-
{ :content => "
|
43
|
-
{ :content => "Shipped To" , :align => :center, :valign => :bottom, :width => 180 }
|
106
|
+
{ :content => "Shipping Information" , :align => :left, :width => 255, :font_style => :bold },
|
107
|
+
{ :content => "Billing Information" , :align => :left, :width => 255, :font_style => :bold }
|
44
108
|
]
|
45
109
|
tbl << [
|
46
|
-
{ :content =>
|
47
|
-
{ :content => billed_to
|
48
|
-
|
49
|
-
|
50
|
-
table tbl
|
110
|
+
{ :content => shipped_to },
|
111
|
+
{ :content => billed_to }
|
112
|
+
]
|
113
|
+
move_down 4
|
114
|
+
table tbl, :position => 7, :width => 530
|
51
115
|
|
52
116
|
end
|
53
117
|
|
54
|
-
def order_table
|
118
|
+
def order_table(order)
|
55
119
|
|
56
120
|
tbl = []
|
57
121
|
tbl << [
|
58
|
-
{ :content => "
|
59
|
-
{ :content => "
|
60
|
-
{ :content => "
|
61
|
-
|
62
|
-
{ :content => "
|
122
|
+
{ :content => "Package" , :align => :left, :valign => :bottom },
|
123
|
+
{ :content => "Product" , :align => :left, :valign => :bottom, :colspan => 2 },
|
124
|
+
{ :content => "Attributes" , :align => :left, :valign => :bottom },
|
125
|
+
{ :content => "Quantity" , :align => :right, :valign => :bottom },
|
126
|
+
{ :content => "Price" , :align => :right, :valign => :bottom },
|
127
|
+
{ :content => "Amount" , :align => :right, :valign => :bottom }
|
63
128
|
]
|
129
|
+
|
130
|
+
order.calculate
|
64
131
|
|
65
|
-
order.
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
132
|
+
order.order_packages.all.each do |pk|
|
133
|
+
|
134
|
+
carrier = pk.shipping_method.carrier
|
135
|
+
service = pk.shipping_method.service_name
|
136
|
+
package = pk.shipping_package.name
|
137
|
+
|
138
|
+
pk.line_items.each_with_index do |li, index|
|
139
|
+
options = ''
|
140
|
+
if li.variant.product.option1 && li.variant.option1 then options += li.variant.product.option1 + ": " + li.variant.option1 + "\n" end
|
141
|
+
if li.variant.product.option2 && li.variant.option2 then options += li.variant.product.option2 + ": " + li.variant.option2 + "\n" end
|
142
|
+
if li.variant.product.option3 && li.variant.option3 then options += li.variant.product.option3 + ": " + li.variant.option3 + "\n" end
|
143
|
+
if li.variant.product.product_images.count > 0
|
144
|
+
image = open("#{li.variant.product.product_images.first.url(:tiny)}")
|
145
|
+
else
|
146
|
+
image = ""
|
147
|
+
end
|
148
|
+
arr = []
|
149
|
+
if index == 0
|
150
|
+
arr << { :content => package + "\n" + carrier + "\n" + service, :width => 115, :rowspan => (index == 0 ? pk.line_items.count : 1) }
|
151
|
+
end
|
152
|
+
|
153
|
+
arr << { :image => image, :fit => [40, 40], :borders => [:top, :bottom, :left], :width => 50 }
|
154
|
+
arr << { :content => "#{li.variant.product.title}\n#{li.variant.sku}", :borders => [:top, :right, :bottom], :width => 100 }
|
155
|
+
arr << { :content => options }
|
156
|
+
arr << { :content => "#{li.quantity}" , :align => :right }
|
157
|
+
arr << { :content => "$" + sprintf("%.2f", li.unit_price) , :align => :right }
|
158
|
+
arr << { :content => "$" + sprintf("%.2f", li.subtotal) , :align => :right }
|
159
|
+
|
160
|
+
tbl << arr
|
161
|
+
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
unassigned = order.line_items.where("order_package_id IS NULL OR order_package_id = ?",-1)
|
166
|
+
unassigned.each_with_index do |li, index|
|
167
|
+
options = ''
|
168
|
+
if li.variant.product.option1 && li.variant.option1 then options += li.variant.product.option1 + ": " + li.variant.option1 + "\n" end
|
169
|
+
if li.variant.product.option2 && li.variant.option2 then options += li.variant.product.option2 + ": " + li.variant.option2 + "\n" end
|
170
|
+
if li.variant.product.option3 && li.variant.option3 then options += li.variant.product.option3 + ": " + li.variant.option3 + "\n" end
|
171
|
+
if li.variant.product.product_images.count > 0
|
172
|
+
image = open("#{li.variant.product.product_images.first.url(:tiny)}")
|
173
|
+
else
|
174
|
+
image = ""
|
175
|
+
end
|
176
|
+
arr = []
|
177
|
+
if index == 0
|
178
|
+
arr << { :content => "Unassigned", :width => 115, :rowspan => (index == 0 ? unassigned.count : 1) }
|
179
|
+
end
|
180
|
+
arr << { :image => image, :fit => [40, 40], :borders => [:top, :bottom, :left], :width => 50 }
|
181
|
+
arr << { :content => "#{li.variant.product.title}\n#{li.variant.sku}", :borders => [:top, :right, :bottom], :width => 100 }
|
182
|
+
arr << { :content => options }
|
183
|
+
arr << { :content => "#{li.quantity}" , :align => :right }
|
184
|
+
arr << { :content => "$" + sprintf("%.2f", li.price) , :align => :right }
|
185
|
+
arr << { :content => "$" + sprintf("%.2f", li.subtotal) , :align => :right }
|
186
|
+
tbl << arr
|
187
|
+
end
|
188
|
+
|
189
|
+
tbl << [{ :content => "Subtotal" , :colspan => 6, :align => :right }, { :content => "$" + sprintf("%.2f", order.subtotal ) , :align => :right }]
|
190
|
+
tbl << [{ :content => "Discount" , :colspan => 6, :align => :right }, { :content => "(-) $" + sprintf("%.2f", order.discount ? order.discount : 0.0 ) , :align => :right }]
|
191
|
+
tbl << [{ :content => "Shipping and Handling Charges" , :colspan => 6, :align => :right }, { :content => "(+) $" + sprintf("%.2f", order.shipping_and_handling ) , :align => :right }]
|
192
|
+
tbl << [{ :content => "Sales Tax" , :colspan => 6, :align => :right }, { :content => "(+) $" + sprintf("%.2f", order.tax ? order.tax : 0.0 ) , :align => :right }]
|
193
|
+
tbl << [{ :content => "Grand Total" , :colspan => 6, :align => :right, :font_style => :bold }, { :content => "$" + sprintf("%.2f", order.total ) , :align => :right, :font_style => :bold }]
|
79
194
|
|
80
|
-
table tbl
|
195
|
+
table tbl , :position => 7, :width => 530
|
196
|
+
end
|
197
|
+
|
198
|
+
def payment_info(order)
|
199
|
+
|
200
|
+
trans = order.order_transactions.where(:transaction_type => OrderTransaction::TYPE_AUTHORIZE, :success => true).first
|
201
|
+
tbl = []
|
202
|
+
tbl2 = []
|
203
|
+
tbl3 = []
|
204
|
+
|
205
|
+
tbl2 << [
|
206
|
+
{ :content => "Card Type", :width => 127, :border_width => 0 },
|
207
|
+
{ :content => self.card_type, :width => 128, :border_width => 0 }
|
208
|
+
]
|
209
|
+
tbl2 << [
|
210
|
+
{ :content => "Transaction ID", :width => 127, :border_width => 0 },
|
211
|
+
{ :content => trans.transaction_id.to_s, :width => 128, :border_width => 0 }
|
212
|
+
]
|
213
|
+
tbl2 << [
|
214
|
+
{ :content => "Gateway Response", :width => 127, :border_width => 0},
|
215
|
+
{ :content => trans.response_code.to_s, :width => 128, :border_width => 0 }
|
216
|
+
]
|
217
|
+
tbl3 << [
|
218
|
+
{ :content => "Card Number", :width => 127, :border_width => 0},
|
219
|
+
{ :content => "XXXX XXXX XXXX " + self.card_number, :width => 128, :border_width => 0 }
|
220
|
+
]
|
221
|
+
tbl3 << [
|
222
|
+
{ :content => "Transaction Time", :width => 127, :border_width => 0},
|
223
|
+
{ :content => trans.date_processed.strftime("%d %b %Y %H:%M:%S %p"), :width => 128, :border_width => 0 }
|
224
|
+
]
|
225
|
+
tbl3 << [
|
226
|
+
{ :content => "Payment Process", :width => 127, :border_width => 0},
|
227
|
+
{ :content => trans.success ? "Successful" : "Failed", :width => 128, :border_width => 0 }
|
228
|
+
]
|
229
|
+
tbl << [
|
230
|
+
{ :content => "Authorization Details", :colspan => 2, :font_style => :bold }
|
231
|
+
]
|
232
|
+
tbl << [
|
233
|
+
{ :content => tbl2, :width => 255 },
|
234
|
+
{ :content => tbl3, :width => 255 }
|
235
|
+
]
|
236
|
+
|
237
|
+
table tbl, :position => 7, :width => 530
|
238
|
+
|
81
239
|
end
|
240
|
+
|
82
241
|
end
|
83
242
|
end
|
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
<h1>Thank you for your order!</h1>
|
4
4
|
|
5
|
-
<p>Order #<%= @order.order_number %></p>
|
6
|
-
|
7
5
|
<h2>Order Details</h2>
|
8
6
|
|
9
|
-
<
|
7
|
+
<p>Order #<%= @order.order_number %></p>
|
8
|
+
|
9
|
+
<table border='1' style='border-collapse: collapse;'>
|
10
10
|
<tr>
|
11
11
|
<th>Package</th>
|
12
12
|
<th>Line Item</th>
|
@@ -55,21 +55,21 @@
|
|
55
55
|
<td align='right'><%= number_to_currency(li.subtotal) %></td>
|
56
56
|
</tr>
|
57
57
|
<% end %>
|
58
|
-
<tr><td colspan="4">Subtotal: </td><td><%= number_to_currency(@order.subtotal) %></td></tr>
|
59
|
-
<tr><td colspan="4">Tax: </td><td><%= number_to_currency(@order.tax) %></td></tr>
|
60
|
-
<tr><td colspan="4">Shipping and Handling: </td><td><%= number_to_currency(@order.shipping + @order.handling) %></td></tr>
|
58
|
+
<tr><td colspan="4" align='right'>Subtotal: </td><td align='right'><%= number_to_currency(@order.subtotal) %></td></tr>
|
59
|
+
<tr><td colspan="4" align='right'>Tax: </td><td align='right'><%= number_to_currency(@order.tax) %></td></tr>
|
60
|
+
<tr><td colspan="4" align='right'>Shipping and Handling: </td><td align='right'><%= number_to_currency(@order.shipping + @order.handling) %></td></tr>
|
61
61
|
<% if @order.gift_wrap && @order.gift_wrap > 0 %>
|
62
|
-
<tr><td colspan="4">Gift wrap: </td><td><%= number_to_currency(@order.gift_wrap) %></td></tr>
|
62
|
+
<tr><td colspan="4" align='right'>Gift wrap: </td><td align='right'><%= number_to_currency(@order.gift_wrap) %></td></tr>
|
63
63
|
<% end %>
|
64
64
|
<% if @order.discounts %>
|
65
65
|
<% @order.discounts.each do |d| %>
|
66
|
-
<tr><td colspan="4">"<%= d.gift_card.code %>" gift card: </td><td><%= number_to_currency(d.amount) %></td></tr>
|
66
|
+
<tr><td colspan="4" align='right'>"<%= d.gift_card.code %>" gift card: </td><td align='right'><%= number_to_currency(d.amount) %></td></tr>
|
67
67
|
<% end %>
|
68
68
|
<% end %>
|
69
69
|
<% if @order.custom_discount %>
|
70
|
-
<tr><td colspan="4">Discount: </td><td><%= number_to_currency(@order.custom_discount) %></td></tr>
|
70
|
+
<tr><td colspan="4" align='right'>Discount: </td><td align='right'><%= number_to_currency(@order.custom_discount) %></td></tr>
|
71
71
|
<% end %>
|
72
|
-
<tr><td colspan="4">Total: </td><td><%= number_to_currency(@order.total) %></td></tr>
|
72
|
+
<tr><td colspan="4" align='right'>Total: </td><td align='right'><%= number_to_currency(@order.total) %></td></tr>
|
73
73
|
</table>
|
74
74
|
|
75
75
|
<% if @order.shipping_address %>
|
@@ -78,7 +78,7 @@
|
|
78
78
|
<p>
|
79
79
|
<%= sa.first_name %> <%= sa.last_name %><br />
|
80
80
|
<%= sa.address1 %><br />
|
81
|
-
<% if sa.address2 %><%= sa.address2 %><br /><% end %>
|
81
|
+
<% if sa.address2 && sa.address2.strip.length > 0 %><%= sa.address2 %><br /><% end %>
|
82
82
|
<%= sa.city %>, <%= sa.state %> <%= sa.zip %>
|
83
83
|
</p>
|
84
84
|
<% end %>
|
@@ -89,7 +89,7 @@
|
|
89
89
|
<p>
|
90
90
|
<%= ba.first_name %> <%= ba.last_name %><br />
|
91
91
|
<%= ba.address1 %><br />
|
92
|
-
<% if ba.address2 %><%= ba.address2 %><br /><% end %>
|
92
|
+
<% if ba.address2 && ba.address2.strip.length > 0 %><%= ba.address2 %><br /><% end %>
|
93
93
|
<%= ba.city %>, <%= ba.state %> <%= ba.zip %>
|
94
94
|
</p>
|
95
95
|
<% end %>
|
@@ -1 +1,96 @@
|
|
1
|
-
<
|
1
|
+
<p><img src='<%= @order.site.logo.url(:thumb) %>' /></p>
|
2
|
+
|
3
|
+
<h1>Your order has been updated</h1>
|
4
|
+
|
5
|
+
<h2>Order Details</h2>
|
6
|
+
|
7
|
+
<p>Order #<%= @order.order_number %></p>
|
8
|
+
|
9
|
+
<table border='1' style='border-collapse: collapse;'>
|
10
|
+
<tr>
|
11
|
+
<th>Package</th>
|
12
|
+
<th>Line Item</th>
|
13
|
+
<th>Unit Price</th>
|
14
|
+
<th>Quantity</th>
|
15
|
+
<th>Subtotal</th>
|
16
|
+
</tr>
|
17
|
+
<% @order.order_packages.each do |op| %>
|
18
|
+
<% op.line_items.each_with_index do |li, i| %>
|
19
|
+
<% v = li.variant %>
|
20
|
+
<% p = v.product %>
|
21
|
+
<tr>
|
22
|
+
<% if i == 0 %>
|
23
|
+
<td rowspan="<%= op.line_items.count %>">
|
24
|
+
<div><%= op.shipping_method.service_name %></div>
|
25
|
+
<div><%= op.status %></div>
|
26
|
+
<% if op.tracking_number %><div><%= op.tracking_number %></div><% end %>
|
27
|
+
</td>
|
28
|
+
<% end %>
|
29
|
+
<td>
|
30
|
+
<%= p.title %>
|
31
|
+
<% if li.is_gift %>
|
32
|
+
<p>This item is a gift.</p>
|
33
|
+
<ul>
|
34
|
+
<li><% if li.gift_wrap %>Gift wrap (<%= number_to_currency(p.gift_wrap_price) %>)<% else %>Do not gift wrap<% end %></li>
|
35
|
+
<li><% if li.include_gift_message %>Gift message: <%= li.gift_message %><% else %>No gift message<% end %></li>
|
36
|
+
<li><% if li.hide_prices %>Hide all prices<% else %>Show all prices<% end %></li>
|
37
|
+
</ul>
|
38
|
+
<% end %>
|
39
|
+
</td>
|
40
|
+
<td align='right'><%= number_to_currency(li.unit_price) %></td>
|
41
|
+
<td align='right'><%= li.quantity %></td>
|
42
|
+
<td align='right'><%= number_to_currency(li.subtotal) %></td>
|
43
|
+
</tr>
|
44
|
+
<% end %>
|
45
|
+
<% end %>
|
46
|
+
<% @order.line_items.each do |li| %>
|
47
|
+
<% next if li.order_package_id %>
|
48
|
+
<% v = li.variant %>
|
49
|
+
<% p = v.product %>
|
50
|
+
<tr>
|
51
|
+
<td>Not assigned to a package</td>
|
52
|
+
<td><%= p.title %></td></td>
|
53
|
+
<td align='right'><%= number_to_currency(li.unit_price) %></td>
|
54
|
+
<td align='right'><%= li.quantity %></td>
|
55
|
+
<td align='right'><%= number_to_currency(li.subtotal) %></td>
|
56
|
+
</tr>
|
57
|
+
<% end %>
|
58
|
+
<tr><td colspan="4" align='right'>Subtotal: </td><td align='right'><%= number_to_currency(@order.subtotal) %></td></tr>
|
59
|
+
<tr><td colspan="4" align='right'>Tax: </td><td align='right'><%= number_to_currency(@order.tax) %></td></tr>
|
60
|
+
<tr><td colspan="4" align='right'>Shipping and Handling: </td><td align='right'><%= number_to_currency(@order.shipping + @order.handling) %></td></tr>
|
61
|
+
<% if @order.gift_wrap && @order.gift_wrap > 0 %>
|
62
|
+
<tr><td colspan="4" align='right'>Gift wrap: </td><td align='right'><%= number_to_currency(@order.gift_wrap) %></td></tr>
|
63
|
+
<% end %>
|
64
|
+
<% if @order.discounts %>
|
65
|
+
<% @order.discounts.each do |d| %>
|
66
|
+
<tr><td colspan="4" align='right'>"<%= d.gift_card.code %>" gift card: </td><td align='right'><%= number_to_currency(d.amount) %></td></tr>
|
67
|
+
<% end %>
|
68
|
+
<% end %>
|
69
|
+
<% if @order.custom_discount %>
|
70
|
+
<tr><td colspan="4" align='right'>Discount: </td><td align='right'><%= number_to_currency(@order.custom_discount) %></td></tr>
|
71
|
+
<% end %>
|
72
|
+
<tr><td colspan="4" align='right'>Total: </td><td align='right'><%= number_to_currency(@order.total) %></td></tr>
|
73
|
+
</table>
|
74
|
+
|
75
|
+
<% if @order.shipping_address %>
|
76
|
+
<% sa = @order.shipping_address %>
|
77
|
+
<h2>Shipping Address</h2>
|
78
|
+
<p>
|
79
|
+
<%= sa.first_name %> <%= sa.last_name %><br />
|
80
|
+
<%= sa.address1 %><br />
|
81
|
+
<% if sa.address2 && sa.address2.strip.length > 0 %><%= sa.address2 %><br /><% end %>
|
82
|
+
<%= sa.city %>, <%= sa.state %> <%= sa.zip %>
|
83
|
+
</p>
|
84
|
+
<% end %>
|
85
|
+
|
86
|
+
<% if @order.billing_address %>
|
87
|
+
<% ba = @order.billing_address %>
|
88
|
+
<h2>Billing Address</h2>
|
89
|
+
<p>
|
90
|
+
<%= ba.first_name %> <%= ba.last_name %><br />
|
91
|
+
<%= ba.address1 %><br />
|
92
|
+
<% if ba.address2 && ba.address2.strip.length > 0 %><%= ba.address2 %><br /><% end %>
|
93
|
+
<%= ba.city %>, <%= ba.state %> <%= ba.zip %>
|
94
|
+
</p>
|
95
|
+
<% end %>
|
96
|
+
|
data/lib/caboose/version.rb
CHANGED