shoppe 0.0.18 → 0.0.19
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/app/assets/stylesheets/shoppe/application.scss +1 -0
- data/app/assets/stylesheets/shoppe/sub.scss +2 -1
- data/app/controllers/shoppe/countries_controller.rb +47 -0
- data/app/controllers/shoppe/orders_controller.rb +4 -0
- data/app/models/shoppe/order.rb +1 -1
- data/app/models/shoppe/order/actions.rb +18 -14
- data/app/models/shoppe/order/delivery.rb +24 -6
- data/app/models/shoppe/order_item.rb +1 -1
- data/app/models/shoppe/product.rb +0 -8
- data/app/models/shoppe/tax_rate.rb +3 -0
- data/app/views/layouts/shoppe/application.html.haml +1 -0
- data/app/views/shoppe/countries/_form.html.haml +31 -0
- data/app/views/shoppe/countries/edit.html.haml +5 -0
- data/app/views/shoppe/countries/index.html.haml +25 -0
- data/app/views/shoppe/countries/new.html.haml +5 -0
- data/app/views/shoppe/orders/_order_details.html.haml +51 -0
- data/app/views/shoppe/orders/_order_items.html.haml +38 -0
- data/app/views/shoppe/orders/_payments_form.html.haml +15 -0
- data/app/views/shoppe/orders/_payments_table.html.haml +37 -0
- data/app/views/shoppe/orders/_search_form.html.haml +24 -0
- data/app/views/shoppe/orders/_status_bar.html.haml +25 -0
- data/app/views/shoppe/orders/index.html.haml +2 -27
- data/app/views/shoppe/orders/show.html.haml +5 -168
- data/app/views/shoppe/shared/error.html.haml +3 -1
- data/config/routes.rb +1 -0
- data/db/seeds.rb +10 -26
- data/lib/shoppe.rb +0 -5
- data/lib/shoppe/error.rb +21 -0
- data/lib/shoppe/errors/inappropriate_delivery_service.rb +0 -5
- data/lib/shoppe/errors/insufficient_stock_to_fulfil.rb +0 -4
- data/lib/shoppe/errors/not_enough_stock.rb +0 -4
- data/lib/shoppe/errors/payment_declined.rb +1 -10
- data/lib/shoppe/errors/refund_failed.rb +0 -9
- data/lib/shoppe/errors/unorderable_item.rb +0 -5
- data/lib/shoppe/version.rb +1 -1
- data/test/app/log/development.log +2934 -0
- data/test/app/tmp/cache/assets/development/sass/ae14d07da246951103a34baf6ced4dbc454e5f8d/dialog.scssc +0 -0
- data/test/app/tmp/cache/assets/development/sass/edac894564dae62b78e653a08d1c41f10ade93f9/application.scssc +0 -0
- data/test/app/tmp/cache/assets/development/sass/edac894564dae62b78e653a08d1c41f10ade93f9/dialog.scssc +0 -0
- data/test/app/tmp/cache/assets/development/sprockets/08eabc96013073092a91d64aaf3da292 +0 -0
- data/test/app/tmp/cache/assets/development/sprockets/0a6bca3e510625f255083bd154cc470b +0 -0
- data/test/app/tmp/cache/assets/development/sprockets/267ddf6307abe4d3de2ad900609a6c33 +0 -0
- data/test/app/tmp/cache/assets/development/sprockets/2c9164359b1d599a71cebf132035ed6d +0 -0
- data/test/app/tmp/cache/assets/development/sprockets/322295abdd8625fcce4da08f9565cc63 +0 -0
- data/test/app/tmp/cache/assets/development/sprockets/445cd520fe49b793bd58dfe8ed70d16e +0 -0
- data/test/app/tmp/cache/assets/development/sprockets/4df1915796b86f6133a3c75bb30be02a +0 -0
- data/test/app/tmp/cache/assets/development/sprockets/5f32b259cbcc52156d2fe21c185d9390 +0 -0
- data/test/app/tmp/cache/assets/development/sprockets/71293acda556db2f1dd4f22e3f607f57 +0 -0
- data/test/app/tmp/cache/assets/development/sprockets/7938636d16e11b754d4dd046b89863c4 +0 -0
- data/test/app/tmp/cache/assets/development/sprockets/7de0e84287a67005fed3fea41ee2c0e9 +0 -0
- data/test/app/tmp/cache/assets/development/sprockets/8b6802665cb32689236636d16a1f04e3 +0 -0
- data/test/app/tmp/cache/assets/development/sprockets/a7e398541852f6f05ecc5888932a0138 +0 -0
- data/test/app/tmp/cache/assets/development/sprockets/accc4dc17ef18d0b510917a005340da5 +0 -0
- data/test/app/tmp/cache/assets/development/sprockets/af89877010f84851c64ea77c06baf4ba +0 -0
- data/test/app/tmp/cache/assets/development/sprockets/b519a4f6c5b5a0d9236bdca14e0eb00d +0 -0
- data/test/app/tmp/cache/assets/development/sprockets/b9ad7ea18b7e55c3626a15d1dae142ed +0 -0
- data/test/app/tmp/cache/assets/development/sprockets/c76e2374fc93583d158883980db69094 +0 -0
- data/test/app/tmp/cache/assets/development/sprockets/cf45ce1c68370bf536616d1dd87fb89d +0 -0
- data/test/app/tmp/cache/assets/development/sprockets/d7feb1bb9d1746a4c653985285f727cd +0 -0
- data/test/app/tmp/cache/assets/development/sprockets/e60289d4f6dc2754610af229263c914b +0 -0
- data/test/app/tmp/cache/assets/development/sprockets/edf3c55a27678996371bffe56298925b +0 -0
- metadata +44 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a4a6a283ee7752cb07086b2e0d773f9d9b41a579
|
4
|
+
data.tar.gz: 2fafdc5e4fc48385e9f67f6392dca0c7694a61df
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d519ec68770b5fc88f9d75d13f112877ed91f72899f87dc4ac03131b2265410d7f0bba5ae4d90f800ecc5c86c695a9de9caabce98bdacd186bceecfec68fe3fe
|
7
|
+
data.tar.gz: acf90329031a180edc5cc62c331535115357c41bac154476bdce5898409785c1b498fa25f94e724d2733983a3bfac60fe12be19d4d2463fc1887160c533d8655
|
@@ -81,6 +81,7 @@ header.main {
|
|
81
81
|
h2.delivery_services { background-image:image-url('shoppe/icons/box.svg'); background-position: 0 3px; background-size:20px;}
|
82
82
|
h2.tax_rates { background-image:image-url('shoppe/icons/currency.svg'); background-position: 0 2px; background-size:22px;}
|
83
83
|
h2.users { background-image:image-url('shoppe/icons/id.svg'); background-position: 0 2px; background-size:22px;}
|
84
|
+
h2.countries { background-image:image-url('shoppe/icons/globe.svg'); background-position: 0 2px; background-size:22px;}
|
84
85
|
h2.settings { background-image:image-url('shoppe/icons/toolbox.svg'); background-position: 0 2px; background-size:22px;}
|
85
86
|
|
86
87
|
}
|
@@ -46,9 +46,10 @@ html.login {
|
|
46
46
|
padding:25px;
|
47
47
|
line-height:1.5;
|
48
48
|
font-size:0.9em;
|
49
|
-
font-weight:500;
|
50
49
|
text-align:center;
|
50
|
+
h2 { color:#C17391; text-transform:uppercase; font-size:0.8em; margin-bottom:15px;}
|
51
51
|
p.back { margin-top:25px;}
|
52
|
+
p.message { font-size:1.1em;}
|
52
53
|
}
|
53
54
|
|
54
55
|
//
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Shoppe
|
2
|
+
class CountriesController < Shoppe::ApplicationController
|
3
|
+
|
4
|
+
before_filter { @active_nav = :countries }
|
5
|
+
before_filter { params[:id] && @country = Shoppe::Country.find(params[:id]) }
|
6
|
+
|
7
|
+
def index
|
8
|
+
@countries = Shoppe::Country.ordered
|
9
|
+
end
|
10
|
+
|
11
|
+
def new
|
12
|
+
@country = Shoppe::Country.new
|
13
|
+
end
|
14
|
+
|
15
|
+
def create
|
16
|
+
@country = Shoppe::Country.new(safe_params)
|
17
|
+
if @country.save
|
18
|
+
redirect_to :countries, :flash => {:notice => "Country has been created successfully"}
|
19
|
+
else
|
20
|
+
render :action => "new"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def edit
|
25
|
+
end
|
26
|
+
|
27
|
+
def update
|
28
|
+
if @country.update(safe_params)
|
29
|
+
redirect_to [:edit, @country], :flash => {:notice => "Country has been updated successfully"}
|
30
|
+
else
|
31
|
+
render :action => "edit"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def destroy
|
36
|
+
@country.destroy
|
37
|
+
redirect_to :countries, :flash => {:notice => "Country has been removed successfully"}
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def safe_params
|
43
|
+
params[:country].permit(:name, :code2, :code3, :continent, :tld, :currency, :eu_member)
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
@@ -29,11 +29,15 @@ module Shoppe
|
|
29
29
|
def accept
|
30
30
|
@order.accept!(current_user)
|
31
31
|
redirect_to @order, :notice => "Order has been accepted successfully"
|
32
|
+
rescue Shoppe::Errors::PaymentDeclined => e
|
33
|
+
redirect_to @order, :alert => e.message
|
32
34
|
end
|
33
35
|
|
34
36
|
def reject
|
35
37
|
@order.reject!(current_user)
|
36
38
|
redirect_to @order, :notice => "Order has been rejected successfully"
|
39
|
+
rescue Shoppe::Errors::PaymentDeclined => e
|
40
|
+
redirect_to @order, :alert => e.message
|
37
41
|
end
|
38
42
|
|
39
43
|
def ship
|
data/app/models/shoppe/order.rb
CHANGED
@@ -52,13 +52,15 @@ module Shoppe
|
|
52
52
|
#
|
53
53
|
# @param user [Shoppe::User] the user who carried out this action
|
54
54
|
def accept!(user)
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
55
|
+
transaction do
|
56
|
+
run_callbacks :acceptance do
|
57
|
+
self.accepted_at = Time.now
|
58
|
+
self.accepted_by = user.id
|
59
|
+
self.status = 'accepted'
|
60
|
+
self.save!
|
61
|
+
self.order_items.each(&:accept!)
|
62
|
+
Shoppe::OrderMailer.accepted(self).deliver
|
63
|
+
end
|
62
64
|
end
|
63
65
|
end
|
64
66
|
|
@@ -66,13 +68,15 @@ module Shoppe
|
|
66
68
|
#
|
67
69
|
# @param user [Shoppe::User] the user who carried out the action
|
68
70
|
def reject!(user)
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
71
|
+
transaction do
|
72
|
+
run_callbacks :rejection do
|
73
|
+
self.rejected_at = Time.now
|
74
|
+
self.rejected_by = user.id
|
75
|
+
self.status = 'rejected'
|
76
|
+
self.save!
|
77
|
+
self.order_items.each(&:reject!)
|
78
|
+
Shoppe::OrderMailer.rejected(self).deliver
|
79
|
+
end
|
76
80
|
end
|
77
81
|
end
|
78
82
|
|
@@ -29,15 +29,22 @@ module Shoppe
|
|
29
29
|
order.validates :delivery_country, :presence => true
|
30
30
|
end
|
31
31
|
validate do
|
32
|
-
|
33
|
-
|
32
|
+
if self.delivery_required?
|
33
|
+
if self.delivery_service.nil?
|
34
|
+
errors.add :delivery_service_id, "must be specified"
|
35
|
+
return
|
36
|
+
end
|
37
|
+
|
38
|
+
if self.delivery_service && !available_delivery_services.include?(self.delivery_service)
|
39
|
+
errors.add :delivery_service_id, "is not suitable for this order"
|
40
|
+
end
|
34
41
|
end
|
35
42
|
end
|
36
43
|
|
37
44
|
before_confirmation do
|
38
45
|
# Ensure that before we confirm the order that the delivery service which has been selected
|
39
46
|
# is appropritae for the contents of the order.
|
40
|
-
|
47
|
+
if self.delivery_required? && !self.valid_delivery_service?
|
41
48
|
raise Shoppe::Errors::InappropriateDeliveryService, :order => self
|
42
49
|
end
|
43
50
|
|
@@ -86,6 +93,13 @@ module Shoppe
|
|
86
93
|
order_items.inject(BigDecimal(0)) { |t,i| t + i.weight}
|
87
94
|
end
|
88
95
|
|
96
|
+
# Is delivery required for this order?
|
97
|
+
#
|
98
|
+
# @return [Boolean]
|
99
|
+
def delivery_required?
|
100
|
+
total_weight > BigDecimal(0)
|
101
|
+
end
|
102
|
+
|
89
103
|
# An array of all the delivery services which are suitable for this order in it's
|
90
104
|
# current state (based on its current weight)
|
91
105
|
#
|
@@ -101,9 +115,13 @@ module Shoppe
|
|
101
115
|
# @return [Array] an array of Shoppe:DeliveryServicePrice objects
|
102
116
|
def delivery_service_prices
|
103
117
|
@delivery_service_prices ||= begin
|
104
|
-
|
105
|
-
|
106
|
-
|
118
|
+
if delivery_required?
|
119
|
+
prices = Shoppe::DeliveryServicePrice.joins(:delivery_service).where(:shoppe_delivery_services => {:active => true}).order("`default` desc, price asc").for_weight(total_weight)
|
120
|
+
prices = prices.select { |p| p.countries.empty? || p.country?(self.delivery_country) }
|
121
|
+
prices
|
122
|
+
else
|
123
|
+
[]
|
124
|
+
end
|
107
125
|
end
|
108
126
|
end
|
109
127
|
|
@@ -6,7 +6,7 @@ module Shoppe
|
|
6
6
|
# The associated order
|
7
7
|
#
|
8
8
|
# @return [Shoppe::Order]
|
9
|
-
belongs_to :order, :class_name => 'Shoppe::Order'
|
9
|
+
belongs_to :order, :class_name => 'Shoppe::Order', :touch => true
|
10
10
|
|
11
11
|
# The item which has been ordered
|
12
12
|
belongs_to :ordered_item, :polymorphic => true
|
@@ -91,14 +91,6 @@ module Shoppe
|
|
91
91
|
@stock ||= self.stock_level_adjustments.sum(:adjustment)
|
92
92
|
end
|
93
93
|
|
94
|
-
def self.ransackable_attributes(auth_object = nil)
|
95
|
-
["id", "name", "sku"] + _ransackers.keys
|
96
|
-
end
|
97
|
-
|
98
|
-
def self.ransackable_associations(auth_object = nil)
|
99
|
-
[]
|
100
|
-
end
|
101
|
-
|
102
94
|
# Search for products which include the guven attributes and return an active record
|
103
95
|
# scope of these products. Chainable with other scopes and with_attributes methods.
|
104
96
|
# For example:
|
@@ -22,6 +22,9 @@ module Shoppe
|
|
22
22
|
# All tax rates ordered by their ID
|
23
23
|
scope :ordered, -> { order("shoppe_tax_rates.id")}
|
24
24
|
|
25
|
+
# Set the address type if appropriate
|
26
|
+
before_validation { self.address_type = ADDRESS_TYPES.first if self.address_type.blank? }
|
27
|
+
|
25
28
|
# A description of the tax rate including its name & percentage
|
26
29
|
#
|
27
30
|
# @return [String]
|
@@ -21,6 +21,7 @@
|
|
21
21
|
%li= link_to "Delivery Services", [:delivery_services], :class => @active_nav == :delivery_services ? 'active' : ''
|
22
22
|
%li= link_to "Tax Rates", :tax_rates, :class => @active_nav == :tax_rates ? 'active' : ''
|
23
23
|
%li= link_to "Users", [:users], :class => @active_nav == :users ? 'active' : ''
|
24
|
+
%li= link_to "Countries", :countries, :class => @active_nav == :countries ? 'active' : ''
|
24
25
|
%li= link_to "Settings", :settings, :class => @active_nav == :settings ? 'active' : ''
|
25
26
|
%li= link_to "Logout", [:logout], :method => :delete
|
26
27
|
|
@@ -0,0 +1,31 @@
|
|
1
|
+
= form_for @country do |f|
|
2
|
+
= f.error_messages
|
3
|
+
= field_set_tag "User Details" do
|
4
|
+
.splitContainer
|
5
|
+
%dl.third
|
6
|
+
%dt= f.label :name
|
7
|
+
%dd= f.text_field :name, :class => 'focus text'
|
8
|
+
%dl.third
|
9
|
+
%dt= f.label :code2, "ISO 3166-alpha-2"
|
10
|
+
%dd= f.text_field :code2, :class => 'text'
|
11
|
+
%dl.third
|
12
|
+
%dt= f.label :code3, "ISO 3166-alpha-3"
|
13
|
+
%dd= f.text_field :code3, :class => 'text'
|
14
|
+
.splitContainer
|
15
|
+
%dl.third
|
16
|
+
%dt= f.label :continent
|
17
|
+
%dd= f.text_field :continent, :class => 'text'
|
18
|
+
%dl.third
|
19
|
+
%dt= f.label :tld, "TLD"
|
20
|
+
%dd= f.text_field :tld, :class => 'text'
|
21
|
+
%dl.third
|
22
|
+
%dt= f.label :eu_member, "EU Member?"
|
23
|
+
%dd.checkbox
|
24
|
+
= f.check_box :eu_member
|
25
|
+
= f.label :eu_member, 'Country is an EU member?'
|
26
|
+
|
27
|
+
%p.submit
|
28
|
+
- unless @country.new_record?
|
29
|
+
%span.right= link_to "Delete", @country, :class => 'button purple', :method => :delete, :data => {:confirm => "Are you sure you wish to remove this country?"}
|
30
|
+
= f.submit :class => 'button green'
|
31
|
+
= link_to "Cancel", :countries, :class => 'button'
|
@@ -0,0 +1,25 @@
|
|
1
|
+
- @page_title = "Countries"
|
2
|
+
|
3
|
+
= content_for :header do
|
4
|
+
%p.buttons=link_to "New country", :new_country, :class => 'button green'
|
5
|
+
%h2.countries Countries
|
6
|
+
|
7
|
+
.table
|
8
|
+
%table.data
|
9
|
+
%thead
|
10
|
+
%tr
|
11
|
+
%th Name
|
12
|
+
%th ISO 3166-1-alpha-2
|
13
|
+
%th ISO 3166-1-alpha-3
|
14
|
+
%th Continent
|
15
|
+
%th TLD
|
16
|
+
%th EU?
|
17
|
+
%tbody
|
18
|
+
- for country in @countries
|
19
|
+
%tr
|
20
|
+
%td= link_to country.name, [:edit, country]
|
21
|
+
%td= country.code2
|
22
|
+
%td= country.code3
|
23
|
+
%td= country.continent
|
24
|
+
%td= country.tld
|
25
|
+
%td= boolean_tag country.eu_member?
|
@@ -0,0 +1,51 @@
|
|
1
|
+
.details
|
2
|
+
.left
|
3
|
+
%dl
|
4
|
+
%dt Name
|
5
|
+
%dd= @order.first_name + ' ' + @order.last_name
|
6
|
+
%dt Company
|
7
|
+
%dd= @order.company.blank? ? '-' : @order.company
|
8
|
+
%dt Billing#{@order.separate_delivery_address? ? '' : '/Delivery'} Address
|
9
|
+
%dd= @order.billing_address1
|
10
|
+
%dd= @order.billing_address2
|
11
|
+
%dd= @order.billing_address3
|
12
|
+
%dd= @order.billing_address4
|
13
|
+
%dd= @order.billing_postcode
|
14
|
+
%dd= @order.billing_country.try(:name)
|
15
|
+
- if @order.separate_delivery_address?
|
16
|
+
%dt Delivery Address
|
17
|
+
%dd= @order.delivery_name
|
18
|
+
%dd= @order.delivery_address1
|
19
|
+
%dd= @order.delivery_address2
|
20
|
+
%dd= @order.delivery_address3
|
21
|
+
%dd= @order.delivery_address4
|
22
|
+
%dd= @order.delivery_postcode
|
23
|
+
%dd= @order.delivery_country.try(:name)
|
24
|
+
.right
|
25
|
+
%dl
|
26
|
+
%dt E-Mail Address
|
27
|
+
%dd= mail_to @order.email_address
|
28
|
+
%dt Telephone
|
29
|
+
%dd= @order.phone_number
|
30
|
+
%dt Weight
|
31
|
+
%dd= number_to_weight @order.total_weight
|
32
|
+
%dt Build Time
|
33
|
+
%dd= distance_of_time_in_words(@order.created_at, @order.received_at)
|
34
|
+
- if @order.invoiced?
|
35
|
+
%dt Invoice Number
|
36
|
+
%dd= @order.invoice_number
|
37
|
+
%dt Order Balance
|
38
|
+
%dd= boolean_tag @order.paid_in_full?, nil, :true_text => number_to_currency(@order.balance), :false_text => number_to_currency(@order.balance)
|
39
|
+
- if @order.accepted? && !@order.shipped?
|
40
|
+
= form_tag [:ship, @order] do
|
41
|
+
%dl.form
|
42
|
+
%dt.padding= label_tag 'consignment_number', 'Consignment Number'
|
43
|
+
%dd= text_field_tag 'consignment_number', '', :class => 'text'
|
44
|
+
%dl.form
|
45
|
+
%dd= submit_tag "Mark as shipped", :class => 'button green button-mini'
|
46
|
+
|
47
|
+
- unless @order.accepted? || @order.rejected?
|
48
|
+
%dl.form
|
49
|
+
%dd
|
50
|
+
= link_to "Accept", [:accept, @order], :method => :post, :class => 'button green'
|
51
|
+
= link_to "Reject", [:reject, @order], :method => :post, :class => 'button purple'
|
@@ -0,0 +1,38 @@
|
|
1
|
+
.order_items
|
2
|
+
.table
|
3
|
+
%table.data
|
4
|
+
%thead
|
5
|
+
%tr
|
6
|
+
%th.qty Qty
|
7
|
+
%th Item
|
8
|
+
%th SKU
|
9
|
+
%th.money Cost
|
10
|
+
%th.money Price
|
11
|
+
%th.money= Shoppe.settings.tax_name
|
12
|
+
%th.money Sub-Total
|
13
|
+
%tbody
|
14
|
+
- for item in @order.order_items
|
15
|
+
%tr
|
16
|
+
%td.qty= item.quantity
|
17
|
+
%td.product= item.ordered_item.full_name
|
18
|
+
%td.sku= item.ordered_item.sku
|
19
|
+
%td.money= number_to_currency item.total_cost
|
20
|
+
%td.money= number_to_currency item.sub_total
|
21
|
+
%td.money= number_to_currency item.tax_amount
|
22
|
+
%td.money= number_to_currency item.total
|
23
|
+
- if @order.delivery_service
|
24
|
+
%td.qty
|
25
|
+
%td.product= link_to @order.delivery_service.name, [:edit, @order.delivery_service]
|
26
|
+
%td.sku
|
27
|
+
%td.money= number_to_currency @order.delivery_cost_price
|
28
|
+
%td.money= number_to_currency @order.delivery_price
|
29
|
+
%td.money= number_to_currency @order.delivery_tax_amount
|
30
|
+
%td.money= number_to_currency @order.delivery_price + @order.delivery_tax_amount
|
31
|
+
%tfoot
|
32
|
+
%tr
|
33
|
+
%td.qty= @order.total_items
|
34
|
+
%td{:colspan => 2}
|
35
|
+
%td.money= number_to_currency @order.total_cost
|
36
|
+
%td.money= number_to_currency @order.total_before_tax
|
37
|
+
%td.money= number_to_currency @order.tax
|
38
|
+
%td.money= number_to_currency @order.total
|
@@ -0,0 +1,15 @@
|
|
1
|
+
= form_for [@order, Shoppe::Payment.new(:amount => @order.balance)] do |f|
|
2
|
+
%dl.text
|
3
|
+
%dt= f.label :method
|
4
|
+
%dd= f.text_field :method, :class => 'text'
|
5
|
+
%dl.text
|
6
|
+
%dt= f.label :reference
|
7
|
+
%dd= f.text_field :reference, :class => 'text'
|
8
|
+
%dl.amount
|
9
|
+
%dt= f.label :amount
|
10
|
+
%dd
|
11
|
+
.moneyInput
|
12
|
+
.currency= Shoppe.settings.currency_unit.html_safe
|
13
|
+
= f.text_field :amount, :class => 'text'
|
14
|
+
%dl.submit
|
15
|
+
%dd= f.submit "Add Payment", :class => 'button green'
|
@@ -0,0 +1,37 @@
|
|
1
|
+
- unless @payments.empty?
|
2
|
+
.table
|
3
|
+
%table.data
|
4
|
+
%thead
|
5
|
+
%tr
|
6
|
+
%th ID
|
7
|
+
%th Type
|
8
|
+
%th Method
|
9
|
+
%th Reference
|
10
|
+
%th Amount
|
11
|
+
%th Refunded?
|
12
|
+
%th
|
13
|
+
%tbody
|
14
|
+
- for payment in @payments
|
15
|
+
%tr
|
16
|
+
%td= payment.id
|
17
|
+
%td
|
18
|
+
= payment.refund? ? 'Refund' : 'Payment'
|
19
|
+
%span.float-right= boolean_tag payment.confirmed?
|
20
|
+
%td= payment.method
|
21
|
+
%td= link_to_if payment.transaction_url, payment.reference, payment.transaction_url
|
22
|
+
|
23
|
+
- if payment.refund?
|
24
|
+
%td{:colspan => 2}
|
25
|
+
%b= number_to_currency payment.amount
|
26
|
+
- if payment.parent_payment_id
|
27
|
+
from payment ##{payment.parent_payment_id}
|
28
|
+
- else
|
29
|
+
%td= number_to_currency payment.amount
|
30
|
+
%td= boolean_tag payment.refunded?, nil, :true_text => number_to_currency(payment.amount_refunded)
|
31
|
+
%td.refund
|
32
|
+
- if payment.refundable?
|
33
|
+
= link_to "Refund", [:refund, @order, payment], :class => 'button purple button-mini', :rel => 'dialog'
|
34
|
+
- else
|
35
|
+
= link_to "Delete", [@order, payment], :class => 'button purple button-mini', :data => {:confirm => "Are you sure you wish to remove this payment?"}, :method => :delete
|
36
|
+
- else
|
37
|
+
%p.notice There are no payments recorded for this order...
|