effective_products 0.0.3 → 0.0.7
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/controllers/admin/stamps_controller.rb +11 -0
- data/app/controllers/effective/ring_wizards_controller.rb +0 -21
- data/app/controllers/effective/stamp_wizards_controller.rb +10 -0
- data/app/datatables/admin/effective_stamps_datatable.rb +52 -0
- data/app/datatables/effective_stamp_wizards_datatable.rb +36 -0
- data/app/helpers/effective_products_helper.rb +0 -1
- data/app/models/concerns/effective_products_ring_wizard.rb +20 -29
- data/app/models/concerns/effective_products_stamp_wizard.rb +139 -0
- data/app/models/effective/ring.rb +0 -12
- data/app/models/effective/stamp.rb +114 -0
- data/app/models/effective/stamp_wizard.rb +7 -0
- data/app/views/admin/stamps/_form.html.haml +12 -0
- data/app/views/admin/stamps/_stamp.html.haml +53 -0
- data/app/views/effective/ring_wizards/_dashboard.html.haml +1 -1
- data/app/views/effective/ring_wizards/_ring.html.haml +34 -27
- data/app/views/effective/ring_wizards/_ring_wizard.html.haml +1 -6
- data/app/views/effective/ring_wizards/submitted.html.haml +1 -0
- data/app/views/effective/stamp_wizards/_content.html.haml +10 -0
- data/app/views/effective/stamp_wizards/_dashboard.html.haml +27 -0
- data/app/views/effective/stamp_wizards/_layout.html.haml +3 -0
- data/app/views/effective/stamp_wizards/_orders.html.haml +4 -0
- data/app/views/effective/stamp_wizards/_stamp.html.haml +45 -0
- data/app/views/effective/stamp_wizards/_stamp_fields.html.haml +45 -0
- data/app/views/effective/stamp_wizards/_stamp_wizard.html.haml +3 -0
- data/app/views/effective/stamp_wizards/_summary.html.haml +31 -0
- data/app/views/effective/stamp_wizards/billing.html.haml +15 -0
- data/app/views/effective/stamp_wizards/checkout.html.haml +6 -0
- data/app/views/effective/stamp_wizards/stamp.html.haml +18 -0
- data/app/views/effective/stamp_wizards/start.html.haml +16 -0
- data/app/views/effective/stamp_wizards/submitted.html.haml +16 -0
- data/app/views/effective/stamp_wizards/summary.html.haml +8 -0
- data/app/views/effective/stamps/_fields.html.haml +11 -0
- data/config/routes.rb +8 -0
- data/db/migrate/01_create_effective_products.rb.erb +55 -0
- data/lib/effective_products/engine.rb +1 -0
- data/lib/effective_products/version.rb +1 -1
- metadata +26 -3
- data/app/views/effective/rings/_fields.html.haml +0 -39
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 36f1b24a9da60c9e39f6d27fd085283bd0f5b061f80c14a53f7a4a59edb1d31a
|
4
|
+
data.tar.gz: 713caaaaa536356ede62d6d207166a8861190bb3d8ea41c16296637f49033c84
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8bc5e5606f1fe01fde2bc06429ba9f4813a0f6115cfafaa7fa657aaee71c4440f61a00bf523446a4b82af4e2513bf5593c19801030f50e1d7f82aafd87bddead
|
7
|
+
data.tar.gz: aa6f08d926456c04c97f34b7ad4d53b26e021339a98c3e54781ce3475056771b22ec46063d6daf0a47af990362c7e1d84213bc5392c07725673e71f3cf44db7c
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module Admin
|
2
|
+
class StampsController < ApplicationController
|
3
|
+
before_action(:authenticate_user!) if defined?(Devise)
|
4
|
+
before_action { EffectiveResources.authorize!(self, :admin, :effective_products) }
|
5
|
+
|
6
|
+
include Effective::CrudController
|
7
|
+
|
8
|
+
submit :mark_paid, 'Save and Mark Paid'
|
9
|
+
|
10
|
+
end
|
11
|
+
end
|
@@ -6,26 +6,5 @@ module Effective
|
|
6
6
|
|
7
7
|
resource_scope -> { EffectiveProducts.RingWizard.deep.where(owner: current_user) }
|
8
8
|
|
9
|
-
# Allow only 1 in-progress application at a time
|
10
|
-
before_action(only: [:new, :show], unless: -> { resource&.done? }) do
|
11
|
-
existing = resource_scope.in_progress.where.not(id: resource).first
|
12
|
-
|
13
|
-
if existing.present?
|
14
|
-
flash[:success] = "You have been redirected to your existing in progress payment"
|
15
|
-
redirect_to effective_products.ring_wizard_build_path(existing, existing.next_step)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
after_save do
|
20
|
-
flash.now[:success] = ''
|
21
|
-
end
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def permitted_params
|
26
|
-
model = (params.key?(:effective_ring_wizard) ? :effective_ring_wizard : :ring_wizard)
|
27
|
-
params.require(model).permit!.except(:status, :status_steps, :wizard_steps, :submitted_at)
|
28
|
-
end
|
29
|
-
|
30
9
|
end
|
31
10
|
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module Effective
|
2
|
+
class StampWizardsController < ApplicationController
|
3
|
+
before_action(:authenticate_user!) if defined?(Devise)
|
4
|
+
|
5
|
+
include Effective::WizardController
|
6
|
+
|
7
|
+
resource_scope -> { EffectiveProducts.StampWizard.deep.where(owner: current_user) }
|
8
|
+
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Admin
|
2
|
+
class EffectiveStampsDatatable < Effective::Datatable
|
3
|
+
filters do
|
4
|
+
scope :ready_to_issue
|
5
|
+
scope :issued
|
6
|
+
scope :all
|
7
|
+
end
|
8
|
+
|
9
|
+
datatable do
|
10
|
+
order :updated_at
|
11
|
+
|
12
|
+
col :updated_at, visible: false
|
13
|
+
col :created_at, visible: false
|
14
|
+
col :id, visible: false
|
15
|
+
|
16
|
+
col :created_at, as: :date
|
17
|
+
col :owner, search: :string
|
18
|
+
|
19
|
+
col :applicant, visible: false
|
20
|
+
col :stamp_wizard, visible: false
|
21
|
+
|
22
|
+
col(:email) { |stamp| stamp.owner.email }
|
23
|
+
col(:phone) { |stamp| stamp.owner.phone }
|
24
|
+
|
25
|
+
col :member_number, label: 'Member #' do |stamp|
|
26
|
+
stamp.owner.try(:membership).try(:number)
|
27
|
+
end
|
28
|
+
|
29
|
+
col :name
|
30
|
+
col :name_confirmation, visible: false
|
31
|
+
|
32
|
+
col :category, visible: false
|
33
|
+
|
34
|
+
col :shipping_address, label: 'Address'
|
35
|
+
|
36
|
+
col :purchased_order, visible: false
|
37
|
+
col :price, visible: false
|
38
|
+
col :tax_exempt, visible: false
|
39
|
+
col :qb_item_name, visible: false
|
40
|
+
|
41
|
+
col :status, visible: false
|
42
|
+
|
43
|
+
col :issued_at
|
44
|
+
|
45
|
+
actions_col
|
46
|
+
end
|
47
|
+
|
48
|
+
collection do
|
49
|
+
Effective::Stamp.deep.all
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# Dashboard Stamp Payments
|
2
|
+
class EffectiveStampWizardsDatatable < Effective::Datatable
|
3
|
+
datatable do
|
4
|
+
order :created_at
|
5
|
+
|
6
|
+
col :token, visible: false
|
7
|
+
col :created_at, visible: false
|
8
|
+
|
9
|
+
col(:submitted_at, label: 'Submitted on') do |resource|
|
10
|
+
resource.submitted_at&.strftime('%F') || 'Incomplete'
|
11
|
+
end
|
12
|
+
|
13
|
+
col :owner, visible: false, search: :ststamp
|
14
|
+
col :status, visible: false
|
15
|
+
col :orders, action: :show
|
16
|
+
|
17
|
+
col(:issued_at, label: 'Issued on') do |resource|
|
18
|
+
resource.stamp.issued_at&.strftime('%F') || '-'
|
19
|
+
end
|
20
|
+
|
21
|
+
actions_col(actions: []) do |resource|
|
22
|
+
if resource.draft?
|
23
|
+
dropdown_link_to('Continue', effective_products.stamp_wizard_build_path(resource, reource.next_step), 'data-turbolinks' => false)
|
24
|
+
dropdown_link_to('Delete', effective_products.stamp_wizard_path(resource), 'data-confirm': "Really delete #{resource}?", 'data-method': :delete)
|
25
|
+
else
|
26
|
+
dropdown_link_to('Show', effective_products.stamp_wizard_path(resource))
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
collection do
|
33
|
+
EffectiveProducts.StampWizard.deep.done.where(owner: current_user)
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -15,14 +15,6 @@ module EffectiveProductsRingWizard
|
|
15
15
|
|
16
16
|
module ClassMethods
|
17
17
|
def effective_products_ring_wizard?; true; end
|
18
|
-
|
19
|
-
def all_wizard_steps
|
20
|
-
const_get(:WIZARD_STEPS).keys
|
21
|
-
end
|
22
|
-
|
23
|
-
def required_wizard_steps
|
24
|
-
[:start, :billing, :checkout, :submitted]
|
25
|
-
end
|
26
18
|
end
|
27
19
|
|
28
20
|
included do
|
@@ -83,7 +75,7 @@ module EffectiveProductsRingWizard
|
|
83
75
|
# All Steps validations
|
84
76
|
validates :owner, presence: true
|
85
77
|
|
86
|
-
#
|
78
|
+
# Ring Step
|
87
79
|
validate(if: -> { current_step == :ring }) do
|
88
80
|
self.errors.add(:rings, "can't be blank") unless present_rings.present?
|
89
81
|
end
|
@@ -117,14 +109,7 @@ module EffectiveProductsRingWizard
|
|
117
109
|
end
|
118
110
|
|
119
111
|
def build_ring
|
120
|
-
ring = rings.build(
|
121
|
-
owner: owner,
|
122
|
-
first_name: owner.try(:first_name),
|
123
|
-
last_name: owner.try(:last_name),
|
124
|
-
email: owner.try(:email),
|
125
|
-
phone: owner.try(:phone)
|
126
|
-
)
|
127
|
-
|
112
|
+
ring = rings.build(owner: owner)
|
128
113
|
address = owner.try(:shipping_address) || owner.try(:billing_address)
|
129
114
|
|
130
115
|
if address.present?
|
@@ -135,23 +120,29 @@ module EffectiveProductsRingWizard
|
|
135
120
|
end
|
136
121
|
|
137
122
|
def assign_pricing
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
123
|
+
raise('to be implemented by including class')
|
124
|
+
|
125
|
+
# raise('expected a persisted ring') unless ring&.persisted?
|
126
|
+
|
127
|
+
# price = case ring.metal
|
128
|
+
# when '14k Yellow Gold' then 450_00
|
129
|
+
# when 'Sterling Silver' then 175_00
|
130
|
+
# when 'Titanium' then 50_00
|
131
|
+
# else
|
132
|
+
# raise "unexpected ring metal: #{ring.metal || 'none'}"
|
133
|
+
# end
|
134
|
+
|
135
|
+
# qb_item_name = "Professional Ring"
|
136
|
+
# tax_exempt = false
|
137
|
+
|
138
|
+
# ring.assign_attributes(price: price, qb_item_name: qb_item_name, tax_exempt: tax_exempt)
|
150
139
|
end
|
151
140
|
|
152
141
|
# After the configure Ring step
|
153
142
|
def ring!
|
154
143
|
assign_pricing() if ring.present?
|
144
|
+
raise('expected ring to have a price') if ring.price.blank?
|
145
|
+
|
155
146
|
save!
|
156
147
|
end
|
157
148
|
|
@@ -0,0 +1,139 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# EffectiveProductsStampWizard
|
4
|
+
#
|
5
|
+
# Mark your owner model with effective_products_stamp_wizard to get all the includes
|
6
|
+
|
7
|
+
module EffectiveProductsStampWizard
|
8
|
+
extend ActiveSupport::Concern
|
9
|
+
|
10
|
+
module Base
|
11
|
+
def effective_products_stamp_wizard
|
12
|
+
include ::EffectiveProductsStampWizard
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
module ClassMethods
|
17
|
+
def effective_products_stamp_wizard?; true; end
|
18
|
+
end
|
19
|
+
|
20
|
+
included do
|
21
|
+
acts_as_purchasable_parent
|
22
|
+
acts_as_tokened
|
23
|
+
|
24
|
+
acts_as_statused(
|
25
|
+
:draft, # Just Started
|
26
|
+
:submitted # All done
|
27
|
+
)
|
28
|
+
|
29
|
+
acts_as_wizard(
|
30
|
+
start: 'Start',
|
31
|
+
stamp: 'Select Stamp',
|
32
|
+
summary: 'Review',
|
33
|
+
billing: 'Billing Address',
|
34
|
+
checkout: 'Checkout',
|
35
|
+
submitted: 'Submitted'
|
36
|
+
)
|
37
|
+
|
38
|
+
acts_as_purchasable_wizard
|
39
|
+
|
40
|
+
log_changes(except: :wizard_steps) if respond_to?(:log_changes)
|
41
|
+
|
42
|
+
# Application Namespace
|
43
|
+
belongs_to :owner, polymorphic: true
|
44
|
+
accepts_nested_attributes_for :owner
|
45
|
+
|
46
|
+
# Effective Namespace
|
47
|
+
has_many :stamps, -> { order(:id) }, class_name: 'Effective::Stamp', inverse_of: :stamp_wizard, dependent: :destroy
|
48
|
+
accepts_nested_attributes_for :stamps, reject_if: :all_blank, allow_destroy: true
|
49
|
+
|
50
|
+
has_many :orders, -> { order(:id) }, as: :parent, class_name: 'Effective::Order', dependent: :nullify
|
51
|
+
accepts_nested_attributes_for :orders
|
52
|
+
|
53
|
+
effective_resource do
|
54
|
+
# Acts as Statused
|
55
|
+
status :string, permitted: false
|
56
|
+
status_steps :text, permitted: false
|
57
|
+
|
58
|
+
# Dates
|
59
|
+
submitted_at :datetime
|
60
|
+
|
61
|
+
# Acts as Wizard
|
62
|
+
wizard_steps :text, permitted: false
|
63
|
+
|
64
|
+
timestamps
|
65
|
+
end
|
66
|
+
|
67
|
+
scope :deep, -> { includes(:owner, :orders, :stamps) }
|
68
|
+
scope :sorted, -> { order(:id) }
|
69
|
+
|
70
|
+
scope :in_progress, -> { where.not(status: [:submitted]) }
|
71
|
+
scope :done, -> { where(status: [:submitted]) }
|
72
|
+
|
73
|
+
scope :for, -> (user) { where(owner: user) }
|
74
|
+
|
75
|
+
# All Steps validations
|
76
|
+
validates :owner, presence: true
|
77
|
+
|
78
|
+
# Stamp Step
|
79
|
+
validate(if: -> { current_step == :stamp }) do
|
80
|
+
self.errors.add(:stamps, "can't be blank") unless present_stamps.present?
|
81
|
+
end
|
82
|
+
|
83
|
+
# All Fees and Orders
|
84
|
+
def submit_fees
|
85
|
+
stamps
|
86
|
+
end
|
87
|
+
|
88
|
+
def after_submit_purchased!
|
89
|
+
stamps.each { |stamp| stamp.submit! }
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
# Instance Methods
|
95
|
+
def to_s
|
96
|
+
'stamp payment'
|
97
|
+
end
|
98
|
+
|
99
|
+
def in_progress?
|
100
|
+
draft?
|
101
|
+
end
|
102
|
+
|
103
|
+
def done?
|
104
|
+
submitted?
|
105
|
+
end
|
106
|
+
|
107
|
+
def stamp
|
108
|
+
stamps.first
|
109
|
+
end
|
110
|
+
|
111
|
+
def build_stamp
|
112
|
+
address = owner.try(:shipping_address) || owner.try(:billing_address)
|
113
|
+
stamps.build(owner: owner, shipping_address: address)
|
114
|
+
end
|
115
|
+
|
116
|
+
def assign_pricing
|
117
|
+
raise('to be implemented by including class')
|
118
|
+
|
119
|
+
# price = (stamp.physical? ? 100_00 : 50_00)
|
120
|
+
# qb_item_name = "Professional Stamp"
|
121
|
+
# tax_exempt = false
|
122
|
+
|
123
|
+
# stamp.assign_attributes(price: price, qb_item_name: qb_item_name, tax_exempt: tax_exempt)
|
124
|
+
end
|
125
|
+
|
126
|
+
# After the configure Stamp step
|
127
|
+
def stamp!
|
128
|
+
assign_pricing() if stamp.present?
|
129
|
+
raise('expected stamp to have a price') if stamp.price.blank?
|
130
|
+
save!
|
131
|
+
end
|
132
|
+
|
133
|
+
private
|
134
|
+
|
135
|
+
def present_stamps
|
136
|
+
stamps.reject(&:marked_for_destruction?)
|
137
|
+
end
|
138
|
+
|
139
|
+
end
|
@@ -53,17 +53,5 @@ module Effective
|
|
53
53
|
issued_at.present?
|
54
54
|
end
|
55
55
|
|
56
|
-
# This is the Admin Save and Mark Paid action
|
57
|
-
def mark_paid!
|
58
|
-
raise('expected a blank ring payment') if ring_wizard.present?
|
59
|
-
|
60
|
-
save!
|
61
|
-
|
62
|
-
order = Effective::Order.new(items: self, user: owner)
|
63
|
-
order.purchase!(skip_buyer_validations: true, email: false)
|
64
|
-
|
65
|
-
true
|
66
|
-
end
|
67
|
-
|
68
56
|
end
|
69
57
|
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Effective
|
4
|
+
class Stamp < ActiveRecord::Base
|
5
|
+
acts_as_purchasable
|
6
|
+
acts_as_addressable :shipping
|
7
|
+
|
8
|
+
acts_as_statused(
|
9
|
+
:draft, # Built in an application
|
10
|
+
:submitted, # Submitted by an applicant or stamp wizard
|
11
|
+
:issued # Issued by an admin
|
12
|
+
)
|
13
|
+
|
14
|
+
#CATEGORIES = ['Physical', 'Digital-only']
|
15
|
+
CATEGORIES = ['Physical']
|
16
|
+
|
17
|
+
log_changes if respond_to?(:log_changes)
|
18
|
+
|
19
|
+
# This stamp is charged to an owner
|
20
|
+
belongs_to :owner, polymorphic: true
|
21
|
+
|
22
|
+
# Sometimes a stamp is built through an applicant
|
23
|
+
belongs_to :applicant, polymorphic: true, optional: true
|
24
|
+
|
25
|
+
# Other times through the stamp_wizard
|
26
|
+
belongs_to :stamp_wizard, polymorphic: true, optional: true
|
27
|
+
|
28
|
+
effective_resource do
|
29
|
+
name :string
|
30
|
+
name_confirmation :string
|
31
|
+
|
32
|
+
category :string
|
33
|
+
|
34
|
+
# Admin issues stamps
|
35
|
+
issued_at :datetime # Present when issued by an admin
|
36
|
+
|
37
|
+
# Acts as Statused
|
38
|
+
status :string
|
39
|
+
status_steps :text
|
40
|
+
|
41
|
+
# Acts as Purchasable
|
42
|
+
price :integer
|
43
|
+
qb_item_name :string
|
44
|
+
tax_exempt :boolean
|
45
|
+
|
46
|
+
timestamps
|
47
|
+
end
|
48
|
+
|
49
|
+
scope :deep, -> { includes(:owner) }
|
50
|
+
|
51
|
+
scope :with_approved_applicants, -> { where(applicant_id: EffectiveMemberships.Applicant.approved) }
|
52
|
+
scope :with_stamp_wizards, -> { where(applicant_id: nil).where.not(stamp_wizard_id: nil) }
|
53
|
+
|
54
|
+
scope :ready_to_issue, -> {
|
55
|
+
with_approved_applicants.or(with_stamp_wizards).purchased.where.not(issued_at: nil)
|
56
|
+
}
|
57
|
+
|
58
|
+
validates :category, presence: true, inclusion: { in: CATEGORIES }
|
59
|
+
validates :name, presence: true
|
60
|
+
validates :name_confirmation, presence: true
|
61
|
+
|
62
|
+
validate(if: -> { name.present? && name_confirmation.present? }) do
|
63
|
+
self.errors.add(:name_confirmation, "doesn't match name") unless name == name_confirmation
|
64
|
+
end
|
65
|
+
|
66
|
+
validate(if: -> { physical? }) do
|
67
|
+
self.errors.add(:shipping_address, "can't be blank when physical stamp") unless shipping_address.present?
|
68
|
+
end
|
69
|
+
|
70
|
+
def to_s
|
71
|
+
['Professional Stamp', *name.presence].join(' ')
|
72
|
+
end
|
73
|
+
|
74
|
+
def issued?
|
75
|
+
issued_at.present?
|
76
|
+
end
|
77
|
+
|
78
|
+
def mark_as_issued!
|
79
|
+
issued!
|
80
|
+
end
|
81
|
+
|
82
|
+
def physical?
|
83
|
+
category == 'Physical'
|
84
|
+
end
|
85
|
+
|
86
|
+
def created_by_admin?
|
87
|
+
stamp_wizard_id.blank? && applicant_id.blank?
|
88
|
+
end
|
89
|
+
|
90
|
+
# Called by an application when submitted
|
91
|
+
# Called by a stamp wizard when submitted
|
92
|
+
def submit!
|
93
|
+
raise('expected a purchased order') unless purchased?
|
94
|
+
submitted!
|
95
|
+
end
|
96
|
+
|
97
|
+
# This is the Admin Save and Mark Paid action
|
98
|
+
def mark_paid!
|
99
|
+
raise('expected an user with a membership category') unless owner && owner.try(:membership).present?
|
100
|
+
|
101
|
+
category = owner.membership.categories.first
|
102
|
+
|
103
|
+
assign_attributes(
|
104
|
+
price: category.stamp_fee,
|
105
|
+
tax_exempt: category.stamp_fee_tax_exempt,
|
106
|
+
qb_item_name: category.stamp_fee_qb_item_name
|
107
|
+
)
|
108
|
+
|
109
|
+
save!
|
110
|
+
Effective::Order.new(items: self, user: owner).mark_as_purchased!
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
114
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
= effective_form_with(model: [:admin, stamp], engine: true) do |f|
|
2
|
+
- if f.object.new_record?
|
3
|
+
= f.select :owner, { 'Users' => current_user.class.members.sorted }, polymorphic: true
|
4
|
+
- else
|
5
|
+
= f.static_field :owner
|
6
|
+
|
7
|
+
= render 'effective/stamps/fields', f: f, stamp: f.object
|
8
|
+
|
9
|
+
- if f.object.new_record?
|
10
|
+
= f.submit 'Save and Mark Paid'
|
11
|
+
- else
|
12
|
+
= f.submit 'Save'
|
@@ -0,0 +1,53 @@
|
|
1
|
+
%table.table
|
2
|
+
%tbody
|
3
|
+
%tr
|
4
|
+
%th Owner
|
5
|
+
%td
|
6
|
+
- url = (edit_polymorphic_path(stamp.owner) rescue "/admin/users/#{stamp.owner.to_param}/edit")
|
7
|
+
= link_to(stamp.owner, url)
|
8
|
+
|
9
|
+
%tr
|
10
|
+
%th Purchased Order
|
11
|
+
%td
|
12
|
+
- if stamp.purchased_order.present?
|
13
|
+
= link_to(stamp.purchased_order, effective_orders.admin_order_path(stamp.purchased_order))
|
14
|
+
|
15
|
+
%tr
|
16
|
+
%th Contact
|
17
|
+
%td
|
18
|
+
- owner = stamp.owner
|
19
|
+
|
20
|
+
= owner.to_s
|
21
|
+
|
22
|
+
- if owner.try(:email).present?
|
23
|
+
%br
|
24
|
+
= mail_to(owner.email)
|
25
|
+
|
26
|
+
- if owner.try(:phone).present?
|
27
|
+
%br
|
28
|
+
= owner.phone
|
29
|
+
|
30
|
+
- if owner.try(:membership).try(:number).present?
|
31
|
+
%br
|
32
|
+
Member Number #{owner.membership.number}
|
33
|
+
|
34
|
+
%tr
|
35
|
+
%th
|
36
|
+
%td= stamp.physical? ? 'Physical' : 'Digital Only'
|
37
|
+
|
38
|
+
- if stamp.shipping_address.present?
|
39
|
+
%tr
|
40
|
+
%th Address
|
41
|
+
%td= stamp.shipping_address.to_html
|
42
|
+
|
43
|
+
%tr
|
44
|
+
%th Name on Stamp
|
45
|
+
%td= stamp.name
|
46
|
+
|
47
|
+
%tr
|
48
|
+
%th Name Confirmation
|
49
|
+
%td= stamp.name_confirmation
|
50
|
+
|
51
|
+
%tr
|
52
|
+
%th Issued At
|
53
|
+
%td= stamp.issued_at&.strftime('%F') || 'Not Issued'
|
@@ -11,7 +11,7 @@
|
|
11
11
|
Please
|
12
12
|
= link_to("Continue payment for #{existing}", effective_products.ring_wizard_build_path(existing, existing.next_step), 'data-turbolinks' => false, class: 'btn btn-primary')
|
13
13
|
or you can
|
14
|
-
= link_to('Abandon
|
14
|
+
= link_to('Abandon payment', effective_products.ring_wizard_path(existing), 'data-confirm': "Really delete #{existing}?", 'data-method': :delete, class: 'btn btn-danger')
|
15
15
|
to start over.
|
16
16
|
|
17
17
|
%hr
|
@@ -1,33 +1,40 @@
|
|
1
|
-
|
2
|
-
-
|
3
|
-
|
1
|
+
.card
|
2
|
+
.card-body
|
3
|
+
.row
|
4
|
+
.col-sm
|
5
|
+
%h5.card-title= ring_wizard.wizard_step_title(:ring)
|
6
|
+
.col-sm-auto.text-right
|
7
|
+
= link_to('Edit', wizard_path(:ring)) if edit_effective_wizard?
|
4
8
|
|
5
|
-
|
6
|
-
|
7
|
-
%tr
|
8
|
-
%th Owner
|
9
|
-
%td
|
10
|
-
= owner.to_s
|
11
|
-
- if owner.try(:email).present?
|
12
|
-
%br
|
13
|
-
= mail_to(owner.email)
|
9
|
+
- ring = ring_wizard.ring
|
10
|
+
- owner = ring_wizard.owner
|
14
11
|
|
15
|
-
|
16
|
-
|
17
|
-
|
12
|
+
%table.table.table-sm
|
13
|
+
%tbody
|
14
|
+
%tr
|
15
|
+
%th Owner
|
16
|
+
%td
|
17
|
+
= owner.to_s
|
18
|
+
- if owner.try(:email).present?
|
19
|
+
%br
|
20
|
+
= mail_to(owner.email)
|
18
21
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
+
- if owner.try(:phone).present?
|
23
|
+
%br
|
24
|
+
= owner.phone
|
22
25
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
+
- if owner.try(:membership).try(:number).present?
|
27
|
+
%br
|
28
|
+
Member Number #{owner.membership.number}
|
26
29
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
+
%tr
|
31
|
+
%th Address
|
32
|
+
%td= ring.shipping_address.to_html
|
30
33
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
+
%tr
|
35
|
+
%th Metal
|
36
|
+
%td= ring.metal
|
37
|
+
|
38
|
+
%tr
|
39
|
+
%th Size
|
40
|
+
%td Size #{ring.size}
|
@@ -1,8 +1,3 @@
|
|
1
1
|
.effective-ring-payment
|
2
|
-
-
|
3
|
-
- steps = ring_wizard.required_steps - blacklist
|
4
|
-
|
5
|
-
= render "effective/ring_wizards/summary", ring_wizard: ring_wizard
|
6
|
-
|
7
|
-
- steps.select { |step| ring_wizard.has_completed_step?(step) }.each do |partial|
|
2
|
+
- ring_wizard.render_steps.each do |partial|
|
8
3
|
= render "effective/ring_wizards/#{partial}", ring_wizard: ring_wizard, step: partial
|
@@ -9,6 +9,7 @@
|
|
9
9
|
|
10
10
|
= link_to "Return to Dashboard", root_path, class: 'btn btn-lg btn-primary mb-4'
|
11
11
|
|
12
|
+
= render 'effective/ring_wizards/summary', ring_wizard: resource
|
12
13
|
= render 'effective/ring_wizards/ring_wizard', ring_wizard: resource
|
13
14
|
= render 'effective/ring_wizards/orders', ring_wizard: resource
|
14
15
|
|
@@ -0,0 +1,10 @@
|
|
1
|
+
- all_steps_content = resource.try(:rich_text_all_steps_content)
|
2
|
+
- step_content = resource.try("rich_text_#{step}_content")
|
3
|
+
|
4
|
+
- if all_steps_content.present?
|
5
|
+
.card.mb-4
|
6
|
+
.card-body= all_steps_content
|
7
|
+
|
8
|
+
- if step_content.present?
|
9
|
+
.card.mb-4
|
10
|
+
.card-body= step_content
|
@@ -0,0 +1,27 @@
|
|
1
|
+
-# In progress payments
|
2
|
+
- existing = EffectiveProducts.StampWizard.in_progress.for(current_user).first
|
3
|
+
- datatable = EffectiveResources.best('EffectiveStampWizardsDatatable').new(self, namespace: :effective)
|
4
|
+
|
5
|
+
- if existing.present?
|
6
|
+
%h2 In Progress Stamp Payments
|
7
|
+
|
8
|
+
%p Your payment for Professional Stamp is incomplete
|
9
|
+
|
10
|
+
%p
|
11
|
+
Please
|
12
|
+
= link_to("Continue payment for #{existing}", effective_products.stamp_wizard_build_path(existing, existing.next_step), 'data-turbolinks' => false, class: 'btn btn-primary')
|
13
|
+
or you can
|
14
|
+
= link_to('Abandon payment', effective_products.stamp_wizard_path(existing), 'data-confirm': "Really delete #{existing}?", 'data-method': :delete, class: 'btn btn-danger')
|
15
|
+
to start over.
|
16
|
+
|
17
|
+
%hr
|
18
|
+
|
19
|
+
%h2 Stamp Payments
|
20
|
+
|
21
|
+
- if datatable.present?
|
22
|
+
= render_simple_datatable(datatable)
|
23
|
+
- else
|
24
|
+
%p You have no past stamp payments. When you do, we'll show them here.
|
25
|
+
|
26
|
+
- if existing.blank?
|
27
|
+
%p= link_to 'Order a Professional Stamp', effective_products.new_stamp_wizard_path, class: 'btn btn-primary'
|
@@ -0,0 +1,45 @@
|
|
1
|
+
.card
|
2
|
+
.card-body
|
3
|
+
.row
|
4
|
+
.col-sm
|
5
|
+
%h5.card-title= stamp_wizard.wizard_step_title(:stamp)
|
6
|
+
.col-sm-auto.text-right
|
7
|
+
= link_to('Edit', wizard_path(:stamp)) if edit_effective_wizard?
|
8
|
+
|
9
|
+
- stamp = stamp_wizard.stamp
|
10
|
+
- owner = stamp_wizard.owner
|
11
|
+
|
12
|
+
%table.table.table-sm
|
13
|
+
%tbody
|
14
|
+
%tr
|
15
|
+
%th Owner
|
16
|
+
%td
|
17
|
+
= owner.to_s
|
18
|
+
- if owner.try(:email).present?
|
19
|
+
%br
|
20
|
+
= mail_to(owner.email)
|
21
|
+
|
22
|
+
- if owner.try(:phone).present?
|
23
|
+
%br
|
24
|
+
= owner.phone
|
25
|
+
|
26
|
+
- if owner.try(:membership).try(:number).present?
|
27
|
+
%br
|
28
|
+
Member Number #{owner.membership.number}
|
29
|
+
|
30
|
+
%tr
|
31
|
+
%th Category
|
32
|
+
%td= stamp.category
|
33
|
+
|
34
|
+
- if stamp.shipping_address.present?
|
35
|
+
%tr
|
36
|
+
%th Address
|
37
|
+
%td= stamp.shipping_address.to_html
|
38
|
+
|
39
|
+
%tr
|
40
|
+
%th Name
|
41
|
+
%td= stamp.name
|
42
|
+
|
43
|
+
%tr
|
44
|
+
%th Name Confirmation
|
45
|
+
%td= stamp.name_confirmation
|
@@ -0,0 +1,45 @@
|
|
1
|
+
%h2 Contact Information
|
2
|
+
|
3
|
+
- owner = f.object.owner
|
4
|
+
|
5
|
+
%p
|
6
|
+
= owner.to_s
|
7
|
+
|
8
|
+
- if owner.try(:email).present?
|
9
|
+
%br
|
10
|
+
= mail_to(owner.email)
|
11
|
+
|
12
|
+
- if owner.try(:phone).present?
|
13
|
+
%br
|
14
|
+
= owner.phone
|
15
|
+
|
16
|
+
- if owner.try(:membership).try(:number).present?
|
17
|
+
%br
|
18
|
+
Member Number #{owner.membership.number}
|
19
|
+
|
20
|
+
%h2 Display Name
|
21
|
+
%p Please enter and confirm your name as it should appear on the Professional Stamp.
|
22
|
+
|
23
|
+
= f.text_field :name
|
24
|
+
= f.text_field :name_confirmation, hint: 'must match name'
|
25
|
+
|
26
|
+
%h2 Stamp Information
|
27
|
+
|
28
|
+
%table.table
|
29
|
+
%thead
|
30
|
+
%th Stamp
|
31
|
+
%th.order_price Cost
|
32
|
+
%tbody
|
33
|
+
%tr
|
34
|
+
%td Physical
|
35
|
+
%td.order_price $50.00 + GST
|
36
|
+
%tr
|
37
|
+
%td Digital-only
|
38
|
+
%td.order_price $25.00 + GST
|
39
|
+
|
40
|
+
%p Please select a stamp:
|
41
|
+
|
42
|
+
= f.select :category, Effective::Stamp::CATEGORIES
|
43
|
+
|
44
|
+
= f.show_if :category, 'Physical' do
|
45
|
+
= effective_address_fields(f, :shipping)
|
@@ -0,0 +1,31 @@
|
|
1
|
+
= card('Stamp Payment') do
|
2
|
+
- stamp = stamp_wizard.stamp
|
3
|
+
|
4
|
+
%table.table.table-sm
|
5
|
+
%tbody
|
6
|
+
- if request.path.start_with?('/admin')
|
7
|
+
%tr
|
8
|
+
%th Owner
|
9
|
+
%td
|
10
|
+
- url = (polymorphic_admin_path(stamp_wizard.owner) rescue "/admin/users/#{stamp_wizard.owner.to_param}/edit")
|
11
|
+
= link_to(stamp_wizard.owner, url)
|
12
|
+
- else
|
13
|
+
%tr
|
14
|
+
%th Owner
|
15
|
+
%td= stamp_wizard.owner
|
16
|
+
|
17
|
+
- if stamp_wizard.orders.present?
|
18
|
+
%tr
|
19
|
+
%th Order
|
20
|
+
%td
|
21
|
+
- stamp_wizard.orders.each do |order|
|
22
|
+
= link_to(order, effective_orders.order_path(order))
|
23
|
+
|
24
|
+
- if stamp_wizard.was_submitted?
|
25
|
+
%tr
|
26
|
+
%th Submitted
|
27
|
+
%td= stamp_wizard.submitted_at.strftime('%F')
|
28
|
+
|
29
|
+
%tr
|
30
|
+
%th Issued
|
31
|
+
%td= stamp.issued_at&.strftime('%F') || 'Not Issued'
|
@@ -0,0 +1,15 @@
|
|
1
|
+
= render 'layout' do
|
2
|
+
= render 'effective/stamp_wizards/content', resource: resource
|
3
|
+
|
4
|
+
- raise('expected owner to respond to billing_address') unless resource.owner.respond_to?(:billing_address)
|
5
|
+
|
6
|
+
= card('Billing Address') do
|
7
|
+
%p Please enter your billing address
|
8
|
+
|
9
|
+
= effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
|
10
|
+
= f.hidden_field :id
|
11
|
+
|
12
|
+
= f.fields_for(:owner, f.object.owner) do |fu|
|
13
|
+
= effective_address_fields(fu, :billing)
|
14
|
+
|
15
|
+
= f.save 'Save and Continue'
|
@@ -0,0 +1,6 @@
|
|
1
|
+
= render 'layout' do
|
2
|
+
= render 'effective/stamp_wizards/content', resource: resource
|
3
|
+
|
4
|
+
.card
|
5
|
+
.card-body
|
6
|
+
= render_checkout_step2(resource.submit_order, purchased_url: wizard_path(:submitted), deferred_url: wizard_path(:checkout), declined_url: wizard_path(:checkout))
|
@@ -0,0 +1,18 @@
|
|
1
|
+
= render 'layout' do
|
2
|
+
= render 'effective/stamp_wizards/content', resource: resource
|
3
|
+
|
4
|
+
.card
|
5
|
+
.card-body
|
6
|
+
= effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
|
7
|
+
= f.hidden_field :id
|
8
|
+
|
9
|
+
= f.fields_for :stamps, (f.object.stamp || f.object.build_stamp) do |fr|
|
10
|
+
= fr.hidden_field :stamp_wizard_id
|
11
|
+
= fr.hidden_field :stamp_wizard_type
|
12
|
+
|
13
|
+
= fr.hidden_field :owner_id
|
14
|
+
= fr.hidden_field :owner_type
|
15
|
+
|
16
|
+
= render('effective/stamp_wizards/stamp_fields', f: fr)
|
17
|
+
|
18
|
+
= f.save 'Save and Continue'
|
@@ -0,0 +1,16 @@
|
|
1
|
+
= render 'layout' do
|
2
|
+
= render 'effective/stamp_wizards/content', resource: resource
|
3
|
+
|
4
|
+
.card
|
5
|
+
.card-body
|
6
|
+
%p Welcome #{current_user}!
|
7
|
+
|
8
|
+
%p You are about to purchase a Professional Stamp.
|
9
|
+
|
10
|
+
= effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
|
11
|
+
= f.hidden_field :id
|
12
|
+
|
13
|
+
= f.hidden_field :owner_type
|
14
|
+
= f.hidden_field :owner_id
|
15
|
+
|
16
|
+
= f.save 'Save and Continue'
|
@@ -0,0 +1,16 @@
|
|
1
|
+
= render 'layout' do
|
2
|
+
= render 'effective/stamp_wizards/content', resource: resource
|
3
|
+
|
4
|
+
- raise('expected a submitted resource') unless resource.was_submitted?
|
5
|
+
- raise('expected a purchased resource submit_order') unless resource.submit_order&.purchased?
|
6
|
+
|
7
|
+
.alert.alert-warning.mb-4
|
8
|
+
Successfully paid on #{resource.submit_order.purchased_at.strftime('%F')}.
|
9
|
+
|
10
|
+
= link_to "Return to Dashboard", root_path, class: 'btn btn-lg btn-primary mb-4'
|
11
|
+
|
12
|
+
= render 'effective/stamp_wizards/summary', stamp_wizard: resource
|
13
|
+
= render 'effective/stamp_wizards/stamp_wizard', stamp_wizard: resource
|
14
|
+
= render 'effective/stamp_wizards/orders', stamp_wizard: resource
|
15
|
+
|
16
|
+
= link_to 'Return to Dashboard', root_path, class: 'btn btn-lg btn-primary'
|
@@ -0,0 +1,8 @@
|
|
1
|
+
= render 'layout' do
|
2
|
+
= render 'effective/stamp_wizards/content', resource: resource
|
3
|
+
|
4
|
+
= render 'effective/stamp_wizards/stamp_wizard', stamp_wizard: resource
|
5
|
+
|
6
|
+
= effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
|
7
|
+
= f.hidden_field :id
|
8
|
+
= f.submit 'Save and Continue', class: 'btn btn-primary'
|
@@ -0,0 +1,11 @@
|
|
1
|
+
= f.text_field :name
|
2
|
+
= f.text_field :name_confirmation, hint: 'must match name'
|
3
|
+
|
4
|
+
%h2 Stamp Information
|
5
|
+
|
6
|
+
%p Please select a stamp and enter a shipping address.
|
7
|
+
|
8
|
+
= f.select :category, Effective::Stamp::CATEGORIES
|
9
|
+
|
10
|
+
= f.show_if :category, 'Physical' do
|
11
|
+
= effective_address_fields(f, :shipping)
|
data/config/routes.rb
CHANGED
@@ -10,6 +10,10 @@ EffectiveProducts::Engine.routes.draw do
|
|
10
10
|
resources :ring_wizards, name: :ring_wizard, only: [:new, :show, :destroy] do
|
11
11
|
resources :build, controller: :ring_wizards, only: [:show, :update]
|
12
12
|
end
|
13
|
+
|
14
|
+
resources :stamp_wizards, name: :stamp_wizard, only: [:new, :show, :destroy] do
|
15
|
+
resources :build, controller: :stamp_wizards, only: [:show, :update]
|
16
|
+
end
|
13
17
|
end
|
14
18
|
|
15
19
|
namespace :admin do
|
@@ -18,6 +22,10 @@ EffectiveProducts::Engine.routes.draw do
|
|
18
22
|
resources :rings, only: [:index, :show] do
|
19
23
|
post :mark_as_issued, on: :member
|
20
24
|
end
|
25
|
+
|
26
|
+
resources :stamps do
|
27
|
+
post :mark_as_issued, on: :member
|
28
|
+
end
|
21
29
|
end
|
22
30
|
|
23
31
|
end
|
@@ -48,5 +48,60 @@ class CreateEffectiveProducts < ActiveRecord::Migration[6.1]
|
|
48
48
|
add_index :ring_wizards, :status
|
49
49
|
add_index :ring_wizards, :token
|
50
50
|
|
51
|
+
create_table :stamps do |t|
|
52
|
+
t.integer :owner_id
|
53
|
+
t.string :owner_type
|
54
|
+
|
55
|
+
t.integer :stamp_wizard_id
|
56
|
+
t.string :stamp_wizard_type
|
57
|
+
|
58
|
+
t.integer :applicant_id
|
59
|
+
t.string :applicant_type
|
60
|
+
|
61
|
+
t.string :status
|
62
|
+
t.text :status_steps
|
63
|
+
|
64
|
+
t.string :category
|
65
|
+
t.string :name
|
66
|
+
t.string :name_confirmation
|
67
|
+
|
68
|
+
t.datetime :issued_at
|
69
|
+
|
70
|
+
# Acts as purchasable
|
71
|
+
t.integer :purchased_order_id
|
72
|
+
t.integer :price
|
73
|
+
t.boolean :tax_exempt, default: false
|
74
|
+
t.string :qb_item_name
|
75
|
+
|
76
|
+
t.timestamps
|
77
|
+
end
|
78
|
+
|
79
|
+
create_table :stamp_wizards do |t|
|
80
|
+
t.string :token
|
81
|
+
|
82
|
+
t.integer :owner_id
|
83
|
+
t.string :owner_type
|
84
|
+
|
85
|
+
t.integer :user_id
|
86
|
+
t.string :user_type
|
87
|
+
|
88
|
+
# Acts as Statused
|
89
|
+
t.string :status
|
90
|
+
t.text :status_steps
|
91
|
+
|
92
|
+
# Acts as Wizard
|
93
|
+
t.text :wizard_steps
|
94
|
+
|
95
|
+
# Dates
|
96
|
+
t.datetime :submitted_at
|
97
|
+
|
98
|
+
t.datetime :updated_at
|
99
|
+
t.datetime :created_at
|
100
|
+
end
|
101
|
+
|
102
|
+
add_index :stamp_wizards, [:owner_id, :owner_type]
|
103
|
+
add_index :stamp_wizards, :status
|
104
|
+
add_index :stamp_wizards, :token
|
105
|
+
|
51
106
|
end
|
52
107
|
end
|
@@ -11,6 +11,7 @@ module EffectiveProducts
|
|
11
11
|
initializer 'effective_products.active_record' do |app|
|
12
12
|
ActiveSupport.on_load :active_record do
|
13
13
|
ActiveRecord::Base.extend(EffectiveProductsRingWizard::Base)
|
14
|
+
ActiveRecord::Base.extend(EffectiveProductsStampWizard::Base)
|
14
15
|
end
|
15
16
|
end
|
16
17
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: effective_products
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Code and Effect
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-02-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -222,14 +222,23 @@ files:
|
|
222
222
|
- app/assets/stylesheets/effective_products.scss
|
223
223
|
- app/assets/stylesheets/effective_products/base.scss
|
224
224
|
- app/controllers/admin/rings_controller.rb
|
225
|
+
- app/controllers/admin/stamps_controller.rb
|
225
226
|
- app/controllers/effective/ring_wizards_controller.rb
|
227
|
+
- app/controllers/effective/stamp_wizards_controller.rb
|
226
228
|
- app/datatables/admin/effective_rings_datatable.rb
|
229
|
+
- app/datatables/admin/effective_stamps_datatable.rb
|
227
230
|
- app/datatables/effective_ring_wizards_datatable.rb
|
231
|
+
- app/datatables/effective_stamp_wizards_datatable.rb
|
228
232
|
- app/helpers/effective_products_helper.rb
|
229
233
|
- app/models/concerns/effective_products_ring_wizard.rb
|
234
|
+
- app/models/concerns/effective_products_stamp_wizard.rb
|
230
235
|
- app/models/effective/ring.rb
|
231
236
|
- app/models/effective/ring_wizard.rb
|
237
|
+
- app/models/effective/stamp.rb
|
238
|
+
- app/models/effective/stamp_wizard.rb
|
232
239
|
- app/views/admin/rings/_ring.html.haml
|
240
|
+
- app/views/admin/stamps/_form.html.haml
|
241
|
+
- app/views/admin/stamps/_stamp.html.haml
|
233
242
|
- app/views/effective/ring_wizards/_content.html.haml
|
234
243
|
- app/views/effective/ring_wizards/_dashboard.html.haml
|
235
244
|
- app/views/effective/ring_wizards/_layout.html.haml
|
@@ -244,7 +253,21 @@ files:
|
|
244
253
|
- app/views/effective/ring_wizards/start.html.haml
|
245
254
|
- app/views/effective/ring_wizards/submitted.html.haml
|
246
255
|
- app/views/effective/ring_wizards/summary.html.haml
|
247
|
-
- app/views/effective/
|
256
|
+
- app/views/effective/stamp_wizards/_content.html.haml
|
257
|
+
- app/views/effective/stamp_wizards/_dashboard.html.haml
|
258
|
+
- app/views/effective/stamp_wizards/_layout.html.haml
|
259
|
+
- app/views/effective/stamp_wizards/_orders.html.haml
|
260
|
+
- app/views/effective/stamp_wizards/_stamp.html.haml
|
261
|
+
- app/views/effective/stamp_wizards/_stamp_fields.html.haml
|
262
|
+
- app/views/effective/stamp_wizards/_stamp_wizard.html.haml
|
263
|
+
- app/views/effective/stamp_wizards/_summary.html.haml
|
264
|
+
- app/views/effective/stamp_wizards/billing.html.haml
|
265
|
+
- app/views/effective/stamp_wizards/checkout.html.haml
|
266
|
+
- app/views/effective/stamp_wizards/stamp.html.haml
|
267
|
+
- app/views/effective/stamp_wizards/start.html.haml
|
268
|
+
- app/views/effective/stamp_wizards/submitted.html.haml
|
269
|
+
- app/views/effective/stamp_wizards/summary.html.haml
|
270
|
+
- app/views/effective/stamps/_fields.html.haml
|
248
271
|
- config/effective_products.rb
|
249
272
|
- config/routes.rb
|
250
273
|
- db/migrate/01_create_effective_products.rb.erb
|
@@ -1,39 +0,0 @@
|
|
1
|
-
%h2 Contact Information
|
2
|
-
|
3
|
-
= f.text_field :first_name
|
4
|
-
= f.text_field :last_name
|
5
|
-
= f.email_field :email
|
6
|
-
= f.phone_field :phone
|
7
|
-
= f.static_field :member_number, value: f.object.owner&.membership&.number || 'None'
|
8
|
-
|
9
|
-
= effective_address_fields(f, :shipping)
|
10
|
-
|
11
|
-
%h2 Ring Information
|
12
|
-
|
13
|
-
%table.table
|
14
|
-
%thead
|
15
|
-
%th Ring Size
|
16
|
-
%th Composition
|
17
|
-
%th.order_price Cost
|
18
|
-
%tbody
|
19
|
-
%tr
|
20
|
-
%td 3-8
|
21
|
-
%td 14k Yellow Gold
|
22
|
-
%td.order_price $425.00 + GST
|
23
|
-
%tr
|
24
|
-
%td 3-8
|
25
|
-
%td Sterling Silver
|
26
|
-
%td.order_price $175.00 + GST
|
27
|
-
%tr
|
28
|
-
%td 3-13
|
29
|
-
%td Titanium
|
30
|
-
%td.order_price $50.00 + GST
|
31
|
-
|
32
|
-
%ul
|
33
|
-
%li 14k Yellow Gold and Sterling Silver rings are available in sizes 3 - 8.
|
34
|
-
%li Titanium rings are available in sizes 3 - 13.
|
35
|
-
|
36
|
-
%p Please select a ring metal and size:
|
37
|
-
|
38
|
-
= f.select :metal, Effective::Ring::METALS
|
39
|
-
= f.select :size, Effective::Ring::TITANIUM_SIZES
|