effective_products 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/effective/{ring_payments_controller.rb → ring_wizards_controller.rb} +4 -4
- data/app/datatables/admin/effective_rings_datatable.rb +4 -5
- data/app/datatables/{effective_ring_payments_datatable.rb → effective_ring_wizards_datatable.rb} +5 -5
- data/app/models/concerns/{effective_products_ring_payment.rb → effective_products_ring_wizard.rb} +7 -7
- data/app/models/effective/ring.rb +3 -13
- data/app/models/effective/ring_wizard.rb +7 -0
- data/app/views/admin/rings/_ring.html.haml +23 -15
- data/app/views/effective/{ring_payments → ring_wizards}/_content.html.haml +0 -0
- data/app/views/effective/ring_wizards/_dashboard.html.haml +27 -0
- data/app/views/effective/{ring_payments → ring_wizards}/_layout.html.haml +0 -0
- data/app/views/effective/ring_wizards/_orders.html.haml +4 -0
- data/app/views/effective/ring_wizards/_ring.html.haml +33 -0
- data/app/views/effective/ring_wizards/_ring_fields.html.haml +57 -0
- data/app/views/effective/ring_wizards/_ring_wizard.html.haml +8 -0
- data/app/views/effective/ring_wizards/_summary.html.haml +31 -0
- data/app/views/effective/{ring_payments → ring_wizards}/billing.html.haml +1 -1
- data/app/views/effective/{ring_payments → ring_wizards}/checkout.html.haml +1 -1
- data/app/views/effective/{ring_payments → ring_wizards}/ring.html.haml +4 -4
- data/app/views/effective/{ring_payments → ring_wizards}/start.html.haml +1 -1
- data/app/views/effective/{ring_payments → ring_wizards}/submitted.html.haml +3 -3
- data/app/views/effective/{ring_payments → ring_wizards}/summary.html.haml +2 -2
- data/config/effective_products.rb +4 -4
- data/config/routes.rb +3 -3
- data/db/migrate/01_create_effective_products.rb.erb +49 -1
- data/lib/effective_products/engine.rb +1 -1
- data/lib/effective_products/version.rb +1 -1
- data/lib/effective_products.rb +6 -6
- metadata +20 -20
- data/app/models/effective/ring_payment.rb +0 -7
- data/app/views/effective/ring_payments/_dashboard.html.haml +0 -27
- data/app/views/effective/ring_payments/_orders.html.haml +0 -4
- data/app/views/effective/ring_payments/_ring.html.haml +0 -29
- data/app/views/effective/ring_payments/_ring_fields.html.haml +0 -4
- data/app/views/effective/ring_payments/_ring_payment.html.haml +0 -8
- data/app/views/effective/ring_payments/_summary.html.haml +0 -31
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dd6de56034ed84b15b02ab52785db58b37b0839e67a0db8cf31b77da8f4db148
|
4
|
+
data.tar.gz: e7a59c34d1c681a582c7c7c510ad9cc8c8f911e7bfbe339864678bca3f4db4d7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4383a40c636b788b989b22a8dedbc8d7afac6be72313ec737d3fe3ea1457365054194f99739651e3d61cacfa5a412e3aaa0d7068c39bfa3d41819446a226119f
|
7
|
+
data.tar.gz: b33a258e854dfdd4211edfb7143105d1c6af606cd8274886c548e65e414919a0d41e651cbd07e8399e497e2b06e9137f695cc053e43acf4509b663b01149f1de
|
@@ -1,10 +1,10 @@
|
|
1
1
|
module Effective
|
2
|
-
class
|
2
|
+
class RingWizardsController < ApplicationController
|
3
3
|
before_action(:authenticate_user!) if defined?(Devise)
|
4
4
|
|
5
5
|
include Effective::WizardController
|
6
6
|
|
7
|
-
resource_scope -> { EffectiveProducts.
|
7
|
+
resource_scope -> { EffectiveProducts.RingWizard.deep.where(owner: current_user) }
|
8
8
|
|
9
9
|
# Allow only 1 in-progress application at a time
|
10
10
|
before_action(only: [:new, :show], unless: -> { resource&.done? }) do
|
@@ -12,7 +12,7 @@ module Effective
|
|
12
12
|
|
13
13
|
if existing.present?
|
14
14
|
flash[:success] = "You have been redirected to your existing in progress payment"
|
15
|
-
redirect_to effective_products.
|
15
|
+
redirect_to effective_products.ring_wizard_build_path(existing, existing.next_step)
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
@@ -23,7 +23,7 @@ module Effective
|
|
23
23
|
private
|
24
24
|
|
25
25
|
def permitted_params
|
26
|
-
model = (params.key?(:
|
26
|
+
model = (params.key?(:effective_ring_wizard) ? :effective_ring_wizard : :ring_wizard)
|
27
27
|
params.require(model).permit!.except(:status, :status_steps, :wizard_steps, :submitted_at)
|
28
28
|
end
|
29
29
|
|
@@ -16,11 +16,10 @@ module Admin
|
|
16
16
|
col :created_at, as: :date
|
17
17
|
col :owner, search: :string
|
18
18
|
|
19
|
-
col
|
20
|
-
col
|
21
|
-
|
22
|
-
col
|
23
|
-
col :phone
|
19
|
+
col(:first_name) { |ring| ring.owner.first_name }
|
20
|
+
col(:last_name) { |ring| ring.owner.last_name }
|
21
|
+
col(:email) { |ring| ring.owner.email }
|
22
|
+
col(:phone) { |ring| ring.owner.phone }
|
24
23
|
|
25
24
|
col :member_number, label: 'Member #' do |ring|
|
26
25
|
ring.owner.try(:membership).try(:number)
|
data/app/datatables/{effective_ring_payments_datatable.rb → effective_ring_wizards_datatable.rb}
RENAMED
@@ -1,5 +1,5 @@
|
|
1
1
|
# Dashboard Ring Payments
|
2
|
-
class
|
2
|
+
class EffectiveRingWizardsDatatable < Effective::Datatable
|
3
3
|
datatable do
|
4
4
|
order :created_at
|
5
5
|
|
@@ -20,17 +20,17 @@ class EffectiveRingPaymentsDatatable < Effective::Datatable
|
|
20
20
|
|
21
21
|
actions_col(actions: []) do |resource|
|
22
22
|
if resource.draft?
|
23
|
-
dropdown_link_to('Continue', effective_products.
|
24
|
-
dropdown_link_to('Delete', effective_products.
|
23
|
+
dropdown_link_to('Continue', effective_products.ring_wizard_build_path(resource, reource.next_step), 'data-turbolinks' => false)
|
24
|
+
dropdown_link_to('Delete', effective_products.ring_wizard_path(resource), 'data-confirm': "Really delete #{resource}?", 'data-method': :delete)
|
25
25
|
else
|
26
|
-
dropdown_link_to('Show', effective_products.
|
26
|
+
dropdown_link_to('Show', effective_products.ring_wizard_path(resource))
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
30
|
end
|
31
31
|
|
32
32
|
collection do
|
33
|
-
EffectiveProducts.
|
33
|
+
EffectiveProducts.RingWizard.deep.done.where(owner: current_user)
|
34
34
|
end
|
35
35
|
|
36
36
|
end
|
data/app/models/concerns/{effective_products_ring_payment.rb → effective_products_ring_wizard.rb}
RENAMED
@@ -1,20 +1,20 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
#
|
3
|
+
# EffectiveProductsRingWizard
|
4
4
|
#
|
5
|
-
# Mark your owner model with
|
5
|
+
# Mark your owner model with effective_products_ring_wizard to get all the includes
|
6
6
|
|
7
|
-
module
|
7
|
+
module EffectiveProductsRingWizard
|
8
8
|
extend ActiveSupport::Concern
|
9
9
|
|
10
10
|
module Base
|
11
|
-
def
|
12
|
-
include ::
|
11
|
+
def effective_products_ring_wizard
|
12
|
+
include ::EffectiveProductsRingWizard
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
16
|
module ClassMethods
|
17
|
-
def
|
17
|
+
def effective_products_ring_wizard?; true; end
|
18
18
|
|
19
19
|
def all_wizard_steps
|
20
20
|
const_get(:WIZARD_STEPS).keys
|
@@ -52,7 +52,7 @@ module EffectiveProductsRingPayment
|
|
52
52
|
accepts_nested_attributes_for :owner
|
53
53
|
|
54
54
|
# Effective Namespace
|
55
|
-
has_many :rings, -> { order(:id) }, class_name: 'Effective::Ring', inverse_of: :
|
55
|
+
has_many :rings, -> { order(:id) }, class_name: 'Effective::Ring', inverse_of: :ring_wizard, dependent: :destroy
|
56
56
|
accepts_nested_attributes_for :rings, reject_if: :all_blank, allow_destroy: true
|
57
57
|
|
58
58
|
has_many :orders, -> { order(:id) }, as: :parent, class_name: 'Effective::Order', dependent: :nullify
|
@@ -14,15 +14,10 @@ module Effective
|
|
14
14
|
# This ring is charged to an owner
|
15
15
|
belongs_to :owner, polymorphic: true
|
16
16
|
|
17
|
-
# Through the
|
18
|
-
belongs_to :
|
17
|
+
# Through the ring_wizard
|
18
|
+
belongs_to :ring_wizard, polymorphic: true, optional: true
|
19
19
|
|
20
20
|
effective_resource do
|
21
|
-
first_name :string
|
22
|
-
last_name :string
|
23
|
-
phone :string
|
24
|
-
email :string
|
25
|
-
|
26
21
|
size :integer
|
27
22
|
metal :string
|
28
23
|
|
@@ -40,11 +35,6 @@ module Effective
|
|
40
35
|
scope :ready_to_issue, -> { purchased.where(issued_at: nil) }
|
41
36
|
scope :issued, -> { where.not(issued_at: nil) }
|
42
37
|
|
43
|
-
validates :first_name, presence: true
|
44
|
-
validates :last_name, presence: true
|
45
|
-
validates :phone, presence: true
|
46
|
-
validates :email, presence: true, email: true
|
47
|
-
|
48
38
|
validates :metal, presence: true, inclusion: { in: METALS }
|
49
39
|
|
50
40
|
validates :size, presence: true
|
@@ -65,7 +55,7 @@ module Effective
|
|
65
55
|
|
66
56
|
# This is the Admin Save and Mark Paid action
|
67
57
|
def mark_paid!
|
68
|
-
raise('expected a blank ring payment') if
|
58
|
+
raise('expected a blank ring payment') if ring_wizard.present?
|
69
59
|
|
70
60
|
save!
|
71
61
|
|
@@ -11,30 +11,38 @@
|
|
11
11
|
%td
|
12
12
|
- if ring.purchased_order.present?
|
13
13
|
= link_to(ring.purchased_order, effective_orders.admin_order_path(ring.purchased_order))
|
14
|
+
|
14
15
|
%tr
|
15
|
-
%th
|
16
|
-
%td
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
16
|
+
%th Contact
|
17
|
+
%td
|
18
|
+
- owner = ring.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
|
+
|
29
34
|
%tr
|
30
35
|
%th Address
|
31
36
|
%td= ring.shipping_address.to_html
|
37
|
+
|
32
38
|
%tr
|
33
39
|
%th Size
|
34
40
|
%td= ring.size
|
41
|
+
|
35
42
|
%tr
|
36
43
|
%th Metal
|
37
44
|
%td= ring.metal
|
45
|
+
|
38
46
|
%tr
|
39
47
|
%th Issued At
|
40
|
-
%td= ring.issued_at
|
48
|
+
%td= ring.issued_at&.strftime('%F') || 'Not Issued'
|
File without changes
|
@@ -0,0 +1,27 @@
|
|
1
|
+
-# In progress payments
|
2
|
+
- existing = EffectiveProducts.RingWizard.in_progress.for(current_user).first
|
3
|
+
- datatable = EffectiveResources.best('EffectiveRingWizardsDatatable').new(self, namespace: :effective)
|
4
|
+
|
5
|
+
- if existing.present?
|
6
|
+
%h2 In Progress Ring Payments
|
7
|
+
|
8
|
+
%p Your payment for Professional Ring is incomplete
|
9
|
+
|
10
|
+
%p
|
11
|
+
Please
|
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
|
+
or you can
|
14
|
+
= link_to('Abandon registration', effective_products.ring_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 Ring Payments
|
20
|
+
|
21
|
+
- if datatable.present?
|
22
|
+
= render_simple_datatable(datatable)
|
23
|
+
- else
|
24
|
+
%p You have no past ring payments. When you do, we'll show them here.
|
25
|
+
|
26
|
+
- if existing.blank?
|
27
|
+
%p= link_to 'Order a Professional Ring', effective_products.new_ring_wizard_path, class: 'btn btn-primary'
|
File without changes
|
@@ -0,0 +1,33 @@
|
|
1
|
+
= card('Ring') do
|
2
|
+
- ring = ring_wizard.ring
|
3
|
+
- owner = ring_wizard.owner
|
4
|
+
|
5
|
+
%table.table.table-sm
|
6
|
+
%tbody
|
7
|
+
%tr
|
8
|
+
%th Owner
|
9
|
+
%td
|
10
|
+
= owner.to_s
|
11
|
+
- if owner.try(:email).present?
|
12
|
+
%br
|
13
|
+
= mail_to(owner.email)
|
14
|
+
|
15
|
+
- if owner.try(:phone).present?
|
16
|
+
%br
|
17
|
+
= owner.phone
|
18
|
+
|
19
|
+
- if owner.try(:membership).try(:number).present?
|
20
|
+
%br
|
21
|
+
Member Number #{owner.membership.number}
|
22
|
+
|
23
|
+
%tr
|
24
|
+
%th Address
|
25
|
+
%td= ring.shipping_address.to_html
|
26
|
+
|
27
|
+
%tr
|
28
|
+
%th Metal
|
29
|
+
%td= ring.metal
|
30
|
+
|
31
|
+
%tr
|
32
|
+
%th Size
|
33
|
+
%td Size #{ring.size}
|
@@ -0,0 +1,57 @@
|
|
1
|
+
|
2
|
+
%h2 Member Information
|
3
|
+
|
4
|
+
- owner = f.object.owner
|
5
|
+
|
6
|
+
%p
|
7
|
+
= owner.to_s
|
8
|
+
|
9
|
+
- if owner.try(:email).present?
|
10
|
+
%br
|
11
|
+
= mail_to(owner.email)
|
12
|
+
|
13
|
+
- if owner.try(:phone).present?
|
14
|
+
%br
|
15
|
+
= owner.phone
|
16
|
+
|
17
|
+
- if owner.try(:membership).try(:number).present?
|
18
|
+
%br
|
19
|
+
Member Number #{owner.membership.number}
|
20
|
+
|
21
|
+
%h2 Ring Information
|
22
|
+
%p
|
23
|
+
The 14k Yellow Gold and Sterling Silver rings will have the association's letters as well as your membership number engraved inside the band.
|
24
|
+
Titanium rings do not come engraved.
|
25
|
+
|
26
|
+
%p Please choose your desired metal and ring size:
|
27
|
+
|
28
|
+
%table.table
|
29
|
+
%thead
|
30
|
+
%th Ring Size
|
31
|
+
%th Composition
|
32
|
+
%th.order_price Cost
|
33
|
+
%tbody
|
34
|
+
%tr
|
35
|
+
%td 3-8
|
36
|
+
%td 14k Yellow Gold
|
37
|
+
%td.order_price $425.00 + GST
|
38
|
+
%tr
|
39
|
+
%td 3-8
|
40
|
+
%td Sterling Silver
|
41
|
+
%td.order_price $175.00 + GST
|
42
|
+
%tr
|
43
|
+
%td 3-13
|
44
|
+
%td Titanium
|
45
|
+
%td.order_price $50.00 + GST
|
46
|
+
|
47
|
+
%ul
|
48
|
+
%li 14k Yellow Gold and Sterling Silver rings are available in sizes 3 - 8.
|
49
|
+
%li Titanium rings are available in sizes 3 - 13.
|
50
|
+
|
51
|
+
%p Please select a ring metal and size:
|
52
|
+
|
53
|
+
= f.select :metal, Effective::Ring::METALS
|
54
|
+
= f.select :size, Effective::Ring::TITANIUM_SIZES
|
55
|
+
|
56
|
+
%h2 Shipping Information
|
57
|
+
= effective_address_fields(f, :shipping)
|
@@ -0,0 +1,8 @@
|
|
1
|
+
.effective-ring-payment
|
2
|
+
- blacklist = ring_wizard.class.required_wizard_steps + [:summary]
|
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|
|
8
|
+
= render "effective/ring_wizards/#{partial}", ring_wizard: ring_wizard, step: partial
|
@@ -0,0 +1,31 @@
|
|
1
|
+
= card('Ring Payment') do
|
2
|
+
- ring = ring_wizard.ring
|
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(ring_wizard.owner) rescue "/admin/users/#{ring_wizard.owner.to_param}/edit")
|
11
|
+
= link_to(ring_wizard.owner, url)
|
12
|
+
- else
|
13
|
+
%tr
|
14
|
+
%th Owner
|
15
|
+
%td= ring_wizard.owner
|
16
|
+
|
17
|
+
- if ring_wizard.orders.present?
|
18
|
+
%tr
|
19
|
+
%th Order
|
20
|
+
%td
|
21
|
+
- ring_wizard.orders.each do |order|
|
22
|
+
= link_to(order, effective_orders.order_path(order))
|
23
|
+
|
24
|
+
- if ring_wizard.was_submitted?
|
25
|
+
%tr
|
26
|
+
%th Submitted
|
27
|
+
%td= ring_wizard.submitted_at.strftime('%F')
|
28
|
+
|
29
|
+
%tr
|
30
|
+
%th Issued
|
31
|
+
%td= ring.issued_at&.strftime('%F') || 'Not Issued'
|
@@ -1,5 +1,5 @@
|
|
1
1
|
= render 'layout' do
|
2
|
-
= render 'effective/
|
2
|
+
= render 'effective/ring_wizards/content', resource: resource
|
3
3
|
|
4
4
|
.card
|
5
5
|
.card-body
|
@@ -7,12 +7,12 @@
|
|
7
7
|
= f.hidden_field :id
|
8
8
|
|
9
9
|
= f.fields_for :rings, (f.object.ring || f.object.build_ring) do |fr|
|
10
|
-
= fr.hidden_field :
|
11
|
-
= fr.hidden_field :
|
10
|
+
= fr.hidden_field :ring_wizard_id
|
11
|
+
= fr.hidden_field :ring_wizard_type
|
12
12
|
|
13
13
|
= fr.hidden_field :owner_id
|
14
14
|
= fr.hidden_field :owner_type
|
15
15
|
|
16
|
-
= render('effective/
|
16
|
+
= render('effective/ring_wizards/ring_fields', f: fr)
|
17
17
|
|
18
18
|
= f.save 'Save and Continue'
|
@@ -1,5 +1,5 @@
|
|
1
1
|
= render 'layout' do
|
2
|
-
= render 'effective/
|
2
|
+
= render 'effective/ring_wizards/content', resource: resource
|
3
3
|
|
4
4
|
- raise('expected a submitted resource') unless resource.was_submitted?
|
5
5
|
- raise('expected a purchased resource submit_order') unless resource.submit_order&.purchased?
|
@@ -9,7 +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/
|
13
|
-
= render 'effective/
|
12
|
+
= render 'effective/ring_wizards/ring_wizard', ring_wizard: resource
|
13
|
+
= render 'effective/ring_wizards/orders', ring_wizard: resource
|
14
14
|
|
15
15
|
= link_to 'Return to Dashboard', root_path, class: 'btn btn-lg btn-primary'
|
@@ -1,7 +1,7 @@
|
|
1
1
|
= render 'layout' do
|
2
|
-
= render 'effective/
|
2
|
+
= render 'effective/ring_wizards/content', resource: resource
|
3
3
|
|
4
|
-
= render 'effective/
|
4
|
+
= render 'effective/ring_wizards/ring_wizard', ring_wizard: resource
|
5
5
|
|
6
6
|
= effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
|
7
7
|
= f.hidden_field :id
|
@@ -1,16 +1,16 @@
|
|
1
1
|
EffectiveProducts.setup do |config|
|
2
2
|
config.rings_table_name = :rings
|
3
|
-
config.
|
3
|
+
config.ring_wizards_table_name = :ring_wizards
|
4
4
|
config.stamps_table_name = :stamps
|
5
|
-
config.
|
5
|
+
config.stamp_wizards_table_name = :stamp_wizards
|
6
6
|
|
7
7
|
# Layout Settings
|
8
8
|
# Configure the Layout per controller, or all at once
|
9
9
|
# config.layout = { application: 'application', admin: 'admin' }
|
10
10
|
|
11
11
|
# Payment Wizard Settings
|
12
|
-
# config.
|
13
|
-
# config.
|
12
|
+
# config.ring_wizards_class_name = 'Effective::RingWizard'
|
13
|
+
# config.stamp_wizards_class_name = 'Effective::StampWizard'
|
14
14
|
|
15
15
|
# Use effective roles. Not sure what this does yet.
|
16
16
|
config.use_effective_roles = true
|
data/config/routes.rb
CHANGED
@@ -7,13 +7,13 @@ end
|
|
7
7
|
EffectiveProducts::Engine.routes.draw do
|
8
8
|
# Public routes
|
9
9
|
scope module: 'effective' do
|
10
|
-
resources :
|
11
|
-
resources :build, controller: :
|
10
|
+
resources :ring_wizards, name: :ring_wizard, only: [:new, :show, :destroy] do
|
11
|
+
resources :build, controller: :ring_wizards, only: [:show, :update]
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
15
|
namespace :admin do
|
16
|
-
resources :
|
16
|
+
resources :ring_wizards, except: [:new, :create, :show]
|
17
17
|
|
18
18
|
resources :rings, only: [:index, :show] do
|
19
19
|
post :mark_as_issued, on: :member
|
@@ -1,4 +1,52 @@
|
|
1
|
-
class CreateEffectiveProducts < ActiveRecord::Migration[6.
|
1
|
+
class CreateEffectiveProducts < ActiveRecord::Migration[6.1]
|
2
2
|
def change
|
3
|
+
create_table :rings do |t|
|
4
|
+
t.integer :owner_id
|
5
|
+
t.string :owner_type
|
6
|
+
|
7
|
+
t.integer :ring_wizard_id
|
8
|
+
t.string :ring_wizard_type
|
9
|
+
|
10
|
+
t.integer :size
|
11
|
+
t.string :metal
|
12
|
+
|
13
|
+
t.datetime :issued_at
|
14
|
+
|
15
|
+
# Acts as purchasable
|
16
|
+
t.integer :purchased_order_id
|
17
|
+
t.integer :price
|
18
|
+
t.boolean :tax_exempt, default: false
|
19
|
+
t.string :qb_item_name
|
20
|
+
|
21
|
+
t.timestamps
|
22
|
+
end
|
23
|
+
|
24
|
+
create_table :ring_wizards do |t|
|
25
|
+
t.string :token
|
26
|
+
|
27
|
+
t.integer :owner_id
|
28
|
+
t.string :owner_type
|
29
|
+
|
30
|
+
t.integer :user_id
|
31
|
+
t.string :user_type
|
32
|
+
|
33
|
+
# Acts as Statused
|
34
|
+
t.string :status
|
35
|
+
t.text :status_steps
|
36
|
+
|
37
|
+
# Acts as Wizard
|
38
|
+
t.text :wizard_steps
|
39
|
+
|
40
|
+
# Dates
|
41
|
+
t.datetime :submitted_at
|
42
|
+
|
43
|
+
t.datetime :updated_at
|
44
|
+
t.datetime :created_at
|
45
|
+
end
|
46
|
+
|
47
|
+
add_index :ring_wizards, [:owner_id, :owner_type]
|
48
|
+
add_index :ring_wizards, :status
|
49
|
+
add_index :ring_wizards, :token
|
50
|
+
|
3
51
|
end
|
4
52
|
end
|
@@ -10,7 +10,7 @@ module EffectiveProducts
|
|
10
10
|
# Include acts_as_addressable concern and allow any ActiveRecord object to call it
|
11
11
|
initializer 'effective_products.active_record' do |app|
|
12
12
|
ActiveSupport.on_load :active_record do
|
13
|
-
ActiveRecord::Base.extend(
|
13
|
+
ActiveRecord::Base.extend(EffectiveProductsRingWizard::Base)
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
data/lib/effective_products.rb
CHANGED
@@ -7,20 +7,20 @@ module EffectiveProducts
|
|
7
7
|
|
8
8
|
def self.config_keys
|
9
9
|
[
|
10
|
-
:rings_table_name, :
|
11
|
-
:stamps_table_name, :
|
10
|
+
:rings_table_name, :ring_wizards_table_name, :ring_wizard_class_name,
|
11
|
+
:stamps_table_name, :stamp_wizards_table_name, :stamp_wizard_class_name,
|
12
12
|
:layout, :use_effective_roles
|
13
13
|
]
|
14
14
|
end
|
15
15
|
|
16
16
|
include EffectiveGem
|
17
17
|
|
18
|
-
def self.
|
19
|
-
|
18
|
+
def self.RingWizard
|
19
|
+
ring_wizard_class_name&.constantize || Effective::RingWizard
|
20
20
|
end
|
21
21
|
|
22
|
-
def self.
|
23
|
-
|
22
|
+
def self.StampWizard
|
23
|
+
stamp_wizard_class_name&.constantize || Effective::StampWizard
|
24
24
|
end
|
25
25
|
|
26
26
|
end
|
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.3
|
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-01-
|
11
|
+
date: 2022-01-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -222,28 +222,28 @@ 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/effective/
|
225
|
+
- app/controllers/effective/ring_wizards_controller.rb
|
226
226
|
- app/datatables/admin/effective_rings_datatable.rb
|
227
|
-
- app/datatables/
|
227
|
+
- app/datatables/effective_ring_wizards_datatable.rb
|
228
228
|
- app/helpers/effective_products_helper.rb
|
229
|
-
- app/models/concerns/
|
229
|
+
- app/models/concerns/effective_products_ring_wizard.rb
|
230
230
|
- app/models/effective/ring.rb
|
231
|
-
- app/models/effective/
|
231
|
+
- app/models/effective/ring_wizard.rb
|
232
232
|
- app/views/admin/rings/_ring.html.haml
|
233
|
-
- app/views/effective/
|
234
|
-
- app/views/effective/
|
235
|
-
- app/views/effective/
|
236
|
-
- app/views/effective/
|
237
|
-
- app/views/effective/
|
238
|
-
- app/views/effective/
|
239
|
-
- app/views/effective/
|
240
|
-
- app/views/effective/
|
241
|
-
- app/views/effective/
|
242
|
-
- app/views/effective/
|
243
|
-
- app/views/effective/
|
244
|
-
- app/views/effective/
|
245
|
-
- app/views/effective/
|
246
|
-
- app/views/effective/
|
233
|
+
- app/views/effective/ring_wizards/_content.html.haml
|
234
|
+
- app/views/effective/ring_wizards/_dashboard.html.haml
|
235
|
+
- app/views/effective/ring_wizards/_layout.html.haml
|
236
|
+
- app/views/effective/ring_wizards/_orders.html.haml
|
237
|
+
- app/views/effective/ring_wizards/_ring.html.haml
|
238
|
+
- app/views/effective/ring_wizards/_ring_fields.html.haml
|
239
|
+
- app/views/effective/ring_wizards/_ring_wizard.html.haml
|
240
|
+
- app/views/effective/ring_wizards/_summary.html.haml
|
241
|
+
- app/views/effective/ring_wizards/billing.html.haml
|
242
|
+
- app/views/effective/ring_wizards/checkout.html.haml
|
243
|
+
- app/views/effective/ring_wizards/ring.html.haml
|
244
|
+
- app/views/effective/ring_wizards/start.html.haml
|
245
|
+
- app/views/effective/ring_wizards/submitted.html.haml
|
246
|
+
- app/views/effective/ring_wizards/summary.html.haml
|
247
247
|
- app/views/effective/rings/_fields.html.haml
|
248
248
|
- config/effective_products.rb
|
249
249
|
- config/routes.rb
|
@@ -1,27 +0,0 @@
|
|
1
|
-
-# In progress payments
|
2
|
-
- existing = EffectiveProducts.RingPayment.in_progress.for(current_user).first
|
3
|
-
- datatable = EffectiveResources.best('EffectiveRingPaymentsDatatable').new(self, namespace: :effective)
|
4
|
-
|
5
|
-
- if existing.present?
|
6
|
-
%h2 In Progress Ring Payments
|
7
|
-
|
8
|
-
%p Your payment for Professional Ring is incomplete
|
9
|
-
|
10
|
-
%p
|
11
|
-
Please
|
12
|
-
= link_to("Continue payment for #{existing}", effective_products.ring_payment_build_path(existing, existing.next_step), 'data-turbolinks' => false, class: 'btn btn-primary')
|
13
|
-
or you can
|
14
|
-
= link_to('Abandon registration', effective_products.ring_payment_path(existing), 'data-confirm': "Really delete #{existing}?", 'data-method': :delete, class: 'btn btn-danger')
|
15
|
-
to start over.
|
16
|
-
|
17
|
-
%hr
|
18
|
-
|
19
|
-
%h2 Ring Payments
|
20
|
-
|
21
|
-
- if datatable.present?
|
22
|
-
= render_simple_datatable(datatable)
|
23
|
-
- else
|
24
|
-
%p You have no past ring payments. When you do, we'll show them here.
|
25
|
-
|
26
|
-
- if existing.blank?
|
27
|
-
%p= link_to 'Order a Professional Ring', effective_products.new_ring_payment_path, class: 'btn btn-primary'
|
@@ -1,29 +0,0 @@
|
|
1
|
-
= card('Ring') do
|
2
|
-
- ring = ring_payment.ring
|
3
|
-
|
4
|
-
%table.table.table-sm
|
5
|
-
%tbody
|
6
|
-
%tr
|
7
|
-
%th Contact Info
|
8
|
-
%td
|
9
|
-
#{ring.first_name} #{ring.last_name}
|
10
|
-
%br
|
11
|
-
= mail_to(ring.email)
|
12
|
-
%br
|
13
|
-
= ring.phone
|
14
|
-
|
15
|
-
%tr
|
16
|
-
%th Address
|
17
|
-
%td= ring.shipping_address.to_html
|
18
|
-
|
19
|
-
%tr
|
20
|
-
%th Member Number
|
21
|
-
%td= ring_payment.owner.membership&.number || 'None'
|
22
|
-
|
23
|
-
%tr
|
24
|
-
%th Metal
|
25
|
-
%td= ring.metal
|
26
|
-
|
27
|
-
%tr
|
28
|
-
%th Size
|
29
|
-
%td Size #{ring.size}
|
@@ -1,8 +0,0 @@
|
|
1
|
-
.effective-ring-payment
|
2
|
-
- blacklist = ring_payment.class.required_wizard_steps + [:summary]
|
3
|
-
- steps = ring_payment.required_steps - blacklist
|
4
|
-
|
5
|
-
= render "effective/ring_payments/summary", ring_payment: ring_payment
|
6
|
-
|
7
|
-
- steps.select { |step| ring_payment.has_completed_step?(step) }.each do |partial|
|
8
|
-
= render "effective/ring_payments/#{partial}", ring_payment: ring_payment, step: partial
|
@@ -1,31 +0,0 @@
|
|
1
|
-
= card('Ring Payment') do
|
2
|
-
- ring = ring_payment.ring
|
3
|
-
|
4
|
-
%table.table.table-sm
|
5
|
-
%tbody
|
6
|
-
- if request.path.start_with?('/admin')
|
7
|
-
%tr
|
8
|
-
%th Ordered by
|
9
|
-
%td
|
10
|
-
- url = (polymorphic_admin_path(ring_payment.owner) rescue "/admin/users/#{ring_payment.owner.to_param}/edit")
|
11
|
-
= link_to(ring_payment.owner, url)
|
12
|
-
- else
|
13
|
-
%tr
|
14
|
-
%th Ordered by
|
15
|
-
%td= ring_payment.owner
|
16
|
-
|
17
|
-
- if ring_payment.orders.present?
|
18
|
-
%tr
|
19
|
-
%th Order
|
20
|
-
%td
|
21
|
-
- ring_payment.orders.each do |order|
|
22
|
-
= link_to(order, effective_orders.order_path(order))
|
23
|
-
|
24
|
-
- if ring_payment.was_submitted?
|
25
|
-
%tr
|
26
|
-
%th Submitted
|
27
|
-
%td= ring_payment.submitted_at.strftime('%F')
|
28
|
-
|
29
|
-
%tr
|
30
|
-
%th Issued
|
31
|
-
%td= ring.issued_at&.strftime('%F') || 'Not Issued'
|