effective_memberships 0.3.8 → 0.3.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a5429d3c4c93088302ef65577a3f97649d2bb56191f701a5475f41973860ad21
4
- data.tar.gz: 276b0b0d68ebf151cf67d8f542105b656688b1bf4969c5047c13c1667d364dca
3
+ metadata.gz: bf72d5bb8220dd574786eceebb0f8722521e6b097c1aff7a97742681f74bd0de
4
+ data.tar.gz: 00564617a0a0b722d39aa4466fa16c8fff00dfa60ed372e7cca86d9f5f8b95bf
5
5
  SHA512:
6
- metadata.gz: 5b1c53a8c3cec9712413f4d2c8f58786db72d8e2a12da1f40920fa39ffae3162e67c9782c72bf290ec91b1a29e3aa93374b0c09cb09dafda6151803aec93d578
7
- data.tar.gz: f7bb8c97dbbc5c4f45f6c8b60cc4979fc4de32822b06f4a930a69fc6e7844fba015bf2dd9fa5a4038e885ab6353497cee7a1db0aafb1ec20c561389255315fd1
6
+ metadata.gz: 67ee50afa73bd30d416a152d8e43b6ed3827733ab1c01565a270fb295f8eb47ffe327d5b9155ff584b8e1a6558f2a5b0c3f33e016e9cb966fe16d0ca250c1d6e
7
+ data.tar.gz: d2af28eea6edf0bc4790e819e712be0b7fe3eb4981b9a1068d9699b3274480a0b7e8ed78a44bbbb7fd8646cf0cca5579b0b712450e486b9fbe2388a18b5e597d
@@ -1,9 +1,10 @@
1
1
  module Admin
2
2
  class EffectiveApplicantsDatatable < Effective::Datatable
3
3
  filters do
4
- scope :all
4
+ scope :not_draft, label: 'All'
5
5
  scope :in_progress, label: 'Open / Active'
6
6
  scope :done, label: 'Done'
7
+ scope :draft
7
8
  end
8
9
 
9
10
  datatable do
@@ -49,6 +49,7 @@ module EffectiveMembershipsApplicant
49
49
  experience: 'Work Experience',
50
50
  references: 'References',
51
51
  files: 'Attach Files',
52
+ stamp: 'Professional Stamp',
52
53
  declarations: 'Declarations',
53
54
  summary: 'Review',
54
55
  billing: 'Billing Address',
@@ -93,10 +94,14 @@ module EffectiveMembershipsApplicant
93
94
  has_many :applicant_references, -> { order(:id) }, class_name: 'Effective::ApplicantReference', as: :applicant, inverse_of: :applicant, dependent: :destroy
94
95
  accepts_nested_attributes_for :applicant_references, reject_if: :all_blank, allow_destroy: true
95
96
 
96
- has_many :fees, -> { order(:id) }, as: :parent, inverse_of: :parent, class_name: 'Effective::Fee', dependent: :nullify
97
+ has_many :stamps, -> { order(:id) }, class_name: 'Effective::Stamp', as: :applicant, inverse_of: :applicant, dependent: :destroy
98
+ accepts_nested_attributes_for :stamps, reject_if: :all_blank, allow_destroy: true
99
+
100
+ # Effective Namespace polymorphic
101
+ has_many :fees, -> { order(:id) }, class_name: 'Effective::Fee', as: :parent, inverse_of: :parent, dependent: :destroy
97
102
  accepts_nested_attributes_for :fees, reject_if: :all_blank, allow_destroy: true
98
103
 
99
- has_many :orders, -> { order(:id) }, as: :parent, inverse_of: :parent, class_name: 'Effective::Order', dependent: :nullify
104
+ has_many :orders, -> { order(:id) }, class_name: 'Effective::Order', as: :parent, inverse_of: :parent, dependent: :destroy
100
105
  accepts_nested_attributes_for :orders
101
106
 
102
107
  effective_resource do
@@ -138,6 +143,8 @@ module EffectiveMembershipsApplicant
138
143
  scope :in_progress, -> { where.not(status: [:approved, :declined]) }
139
144
  scope :done, -> { where(status: [:approved, :declined]) }
140
145
 
146
+ scope :not_draft, -> { where.not(status: :draft) }
147
+
141
148
  # Set Apply to Join or Reclassification
142
149
  before_validation(if: -> { new_record? && owner.present? }) do
143
150
  self.applicant_type ||= (owner.membership.blank? ? 'Apply to Join' : 'Apply to Reclassify')
@@ -274,6 +281,9 @@ module EffectiveMembershipsApplicant
274
281
 
275
282
  applicant_steps = Array(category&.applicant_wizard_steps)
276
283
 
284
+ # Special logic for stamp step
285
+ applicant_steps.delete(:stamp) unless apply_to_join?
286
+
277
287
  wizard_steps.select do |step|
278
288
  required_steps.include?(step) || category.blank? || applicant_steps.include?(step)
279
289
  end
@@ -282,30 +292,30 @@ module EffectiveMembershipsApplicant
282
292
 
283
293
  # All Fees and Orders
284
294
  def submit_fees
285
- fees.select { |fee| fee.applicant_submit_fee? }
286
- end
287
-
288
- def submit_order
289
- orders.find { |order| order.purchasables.any?(&:applicant_submit_fee?) }
290
- end
291
-
292
- def submit_fee_qb_item_name
293
- 'Applicant'
294
- end
295
+ # Find or build submit fee
296
+ fee = fees.first || fees.build(owner: owner, fee_type: 'Applicant')
297
+
298
+ unless fee.purchased?
299
+ fee.assign_attributes(
300
+ category: category,
301
+ price: category.applicant_fee,
302
+ tax_exempt: category.applicant_fee_tax_exempt,
303
+ qb_item_name: category.applicant_fee_qb_item_name
304
+ )
305
+ end
295
306
 
296
- def find_or_build_submit_fees
297
- return submit_fees if submit_fees.present?
307
+ # Update stamp price
308
+ stamp = stamps.first
298
309
 
299
- fees.build(
300
- owner: owner,
301
- fee_type: 'Applicant',
302
- category: category,
303
- price: category.applicant_fee,
304
- tax_exempt: category.tax_exempt,
305
- qb_item_name: submit_fee_qb_item_name()
306
- )
310
+ if stamp.present? && !stamp.purchased?
311
+ stamp.assign_attributes(
312
+ price: category.stamp_fee,
313
+ tax_exempt: category.stamp_fee_tax_exempt,
314
+ qb_item_name: category.stamp_fee_qb_item_name
315
+ )
316
+ end
307
317
 
308
- submit_fees
318
+ (fees + stamps)
309
319
  end
310
320
 
311
321
  # Draft -> Submitted requirements
@@ -315,7 +325,9 @@ module EffectiveMembershipsApplicant
315
325
 
316
326
  wizard_steps[:checkout] ||= Time.zone.now
317
327
  wizard_steps[:submitted] = Time.zone.now
328
+
318
329
  submitted!
330
+ stamps.each { |stamp| stamp.submit! }
319
331
 
320
332
  after_commit do
321
333
  applicant_references.each { |reference| reference.notify! if reference.submitted? }
@@ -410,10 +422,6 @@ module EffectiveMembershipsApplicant
410
422
  # Reset the progress so far. They have to click through screens again.
411
423
  assign_attributes(wizard_steps: wizard_steps.slice(:start, :select))
412
424
 
413
- # Delete any fees and orders. Keep all other data.
414
- submit_fees.each { |fee| fee.mark_for_destruction }
415
- submit_order.mark_for_destruction if submit_order
416
-
417
425
  save!
418
426
  end
419
427
 
@@ -463,6 +471,16 @@ module EffectiveMembershipsApplicant
463
471
  category&.min_applicant_files.to_i
464
472
  end
465
473
 
474
+ # Stamps step
475
+ def stamp
476
+ stamps.first || stamps.build(
477
+ owner: owner,
478
+ name: owner.to_s,
479
+ shipping_address: (owner.try(:shipping_address) || owner.try(:billing_address)),
480
+ price: 0
481
+ )
482
+ end
483
+
466
484
  # The submit! method used to be here
467
485
  # But it needs to be inside the included do block
468
486
  # So see above. Sorry.
@@ -180,7 +180,7 @@ module EffectiveMembershipsCategory
180
180
  end
181
181
 
182
182
  def applicant_wizard_steps_collection
183
- wizard_steps = EffectiveMemberships.Applicant.all_wizard_steps
183
+ wizard_steps = EffectiveMemberships.Applicant.wizard_steps_hash
184
184
  required_steps = EffectiveMemberships.Applicant.required_wizard_steps
185
185
 
186
186
  wizard_steps.map do |step, title|
@@ -189,7 +189,7 @@ module EffectiveMembershipsCategory
189
189
  end
190
190
 
191
191
  def fee_payment_wizard_steps_collection
192
- wizard_steps = EffectiveMemberships.FeePayment.all_wizard_steps
192
+ wizard_steps = EffectiveMemberships.FeePayment.wizard_steps_hash
193
193
  required_steps = EffectiveMemberships.FeePayment.required_wizard_steps
194
194
 
195
195
  wizard_steps.map do |step, title|
@@ -197,4 +197,24 @@ module EffectiveMembershipsCategory
197
197
  end
198
198
  end
199
199
 
200
+ def applicant_fee_qb_item_name
201
+ 'Applicant'
202
+ end
203
+
204
+ def applicant_fee_tax_exempt
205
+ tax_exempt
206
+ end
207
+
208
+ def stamp_fee
209
+ 0
210
+ end
211
+
212
+ def stamp_fee_qb_item_name
213
+ qb_item_name
214
+ end
215
+
216
+ def stamp_fee_tax_exempt
217
+ tax_exempt
218
+ end
219
+
200
220
  end
@@ -2,7 +2,12 @@ module Effective
2
2
  class ApplicantReference < ActiveRecord::Base
3
3
  acts_as_tokened
4
4
  acts_as_addressable :reference
5
- acts_as_statused :submitted, :completed
5
+
6
+ acts_as_statused(
7
+ :submitted, # Was submitted by the applicant
8
+ :completed # Was completed by the reference.
9
+ )
10
+
6
11
  log_changes(to: :applicant) if respond_to?(:log_changes)
7
12
 
8
13
  belongs_to :applicant, polymorphic: true
@@ -35,7 +35,7 @@
35
35
 
36
36
  - if applicant.owner.applicants.any? { |other| other.was_submitted? && other.id != applicant.id }
37
37
  = tab 'Other Applications' do
38
- = render_datatable(Admin::EffectiveApplicantsDatatable.new(owner_id: applicant.owner_id, except_id: applicant.id))
38
+ = render_datatable(Admin::EffectiveApplicantsDatatable.new(owner: applicant.owner, except_id: applicant.id))
39
39
 
40
40
  - if applicant.persisted? && applicant.respond_to?(:log_changes_datatable)
41
41
  = tab 'Logs' do
@@ -0,0 +1,36 @@
1
+ .card
2
+ .card-body
3
+ .row
4
+ .col-sm
5
+ %h5.card-title= applicant.wizard_step_title(:stamp)
6
+ .col-sm-auto.text-right
7
+ = link_to('Edit', wizard_path(:stamp)) if edit_effective_wizard?
8
+
9
+ - applicant.stamps.each do |stamp|
10
+ %table.table.table-sm
11
+ %tbody
12
+ %tr
13
+ %th Name
14
+ %td= stamp.name
15
+
16
+ %tr
17
+ %th Name Confirmation
18
+ %td= stamp.name_confirmation
19
+
20
+ %tr
21
+ %th Category
22
+ %td= stamp.category
23
+
24
+ - if stamp.shipping_address.present?
25
+ %tr
26
+ %th Shipping Address
27
+ %td= stamp.shipping_address.to_html
28
+
29
+ - if applicant.was_approved?
30
+ %tr
31
+ %th Submitted
32
+ %td= stamp.submitted_at&.strftime('%F') || '-'
33
+
34
+ %tr
35
+ %th Issued
36
+ %td= stamp.issued_at&.strftime('%F') || 'Not Issued'
@@ -0,0 +1,28 @@
1
+ = render 'layout' do
2
+ = render 'effective/applicants/content', resource: resource
3
+
4
+ .card
5
+ .card-body
6
+ %p Should your application be approved, you are eligible to receive a Professional Stamp.
7
+
8
+ %p Please confirm your name as it should appear on any 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.fields_for(:stamps, f.object.stamp) do |fs|
14
+ = fs.hidden_field :applicant_id
15
+ = fs.hidden_field :applicant_type
16
+
17
+ = fs.hidden_field :owner_id
18
+ = fs.hidden_field :owner_type
19
+
20
+ = fs.hidden_field :price
21
+ = fs.hidden_field :tax_exempt
22
+ = fs.hidden_field :qb_item_name
23
+
24
+ = render 'effective/stamps/fields', f: fs
25
+
26
+ %p Stamps will be processed after approval of this application.
27
+
28
+ = f.save 'Save and Continue'
@@ -1,3 +1,3 @@
1
1
  module EffectiveMemberships
2
- VERSION = '0.3.8'
2
+ VERSION = '0.3.9'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_memberships
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.8
4
+ version: 0.3.9
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-02-03 00:00:00.000000000 Z
11
+ date: 2022-02-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: effective_products
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: effective_resources
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -349,6 +363,7 @@ files:
349
363
  - app/views/effective/applicants/_orders.html.haml
350
364
  - app/views/effective/applicants/_references.html.haml
351
365
  - app/views/effective/applicants/_select.html.haml
366
+ - app/views/effective/applicants/_stamp.html.haml
352
367
  - app/views/effective/applicants/_summary.html.haml
353
368
  - app/views/effective/applicants/billing.html.haml
354
369
  - app/views/effective/applicants/checkout.html.haml
@@ -360,6 +375,7 @@ files:
360
375
  - app/views/effective/applicants/files.html.haml
361
376
  - app/views/effective/applicants/references.html.haml
362
377
  - app/views/effective/applicants/select.html.haml
378
+ - app/views/effective/applicants/stamp.html.haml
363
379
  - app/views/effective/applicants/start.html.haml
364
380
  - app/views/effective/applicants/submitted.html.haml
365
381
  - app/views/effective/applicants/summary.html.haml