effective_products 0.0.2 → 0.0.3
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/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'
|