effective_memberships 0.3.7 → 0.3.10

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 735da58a1a6df3aed501dc23f1d03f01aad80b53c6e90d912a7e3ca245c31145
4
- data.tar.gz: d8d83e2200d6b9e1f707bc157ef4338b94da585373473517912605eb2b2939cd
3
+ metadata.gz: c506926f876b0fe6e4559cce6784e0c0ac8f30891dca21183f74dd5ab1fc5ee6
4
+ data.tar.gz: 980454f32127c3423d33aaaf4136615fac433dbede09f718ae7ebfb1c0cc3b39
5
5
  SHA512:
6
- metadata.gz: 472f5e747d7a7ebcacb8fbf1a3072ee82e158c2672482e0f404e4165b62dc8cafb7f66a380d5e0d625fec7b7cb25de970789332ebfd3d4aa832b269b134172e3
7
- data.tar.gz: 69ade19ab5f49b8218795cefdc8b09fa53a4f53a2726907b5ed361d581f0fab6d2fe2e4ed17a69d202ad461208062a4fee6c4628ea88f94cbe9cc7063cb13c36
6
+ metadata.gz: 29813982537ac083f937e2c1d8df597676b51eb26c7512f773f018fd91e0e2a3a389b6095f89ba8e8acdb44086313b2ff3638f926f380490366b8c7148eaaf46
7
+ data.tar.gz: 436039fe95ff3c095bb755663ec6f51674ffe620957b2f1a0557d598f634eeb651aa317476a887d818cd71bacf5a9708eb34eab2df06a3456201c6b02e1af890
@@ -0,0 +1,19 @@
1
+ module Effective
2
+ class MembershipCardsController < ApplicationController
3
+ before_action(:authenticate_user!) if defined?(Devise)
4
+
5
+ include Effective::CrudController
6
+
7
+ resource_scope -> { EffectiveMemberships.MembershipCard }
8
+
9
+ def show
10
+ membership = Effective::Membership.find(params[:id])
11
+ card = resource_scope.new(membership: membership)
12
+
13
+ EffectiveResources.authorize!(self, :show, card)
14
+
15
+ send_data(card.to_pdf, filename: card.filename, type: card.content_type, disposition: 'attachment')
16
+ end
17
+
18
+ end
19
+ end
@@ -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
@@ -24,11 +24,48 @@ module Admin
24
24
  col :bad_standing_admin, visible: false
25
25
  col :bad_standing_reason, visible: false
26
26
 
27
+ col :email do |membership|
28
+ email = membership.owner.try(:email)
29
+ mail_to(email) if email.present?
30
+ end
31
+
32
+ col :phone do |membership|
33
+ membership.owner.try(:phone) || membership.owner.try(:home_phone) || membership.owner.try(:cell_phone)
34
+ end
35
+
36
+ col :address do |membership|
37
+ membership.owner.try(:addresses).try(:first).try(:to_html)
38
+ end
39
+
40
+ col :address1, visible: false do |membership|
41
+ membership.owner.try(:addresses).try(:first).try(:address1)
42
+ end
43
+
44
+ col :address2, visible: false do |membership|
45
+ membership.owner.try(:addresses).try(:first).try(:address2)
46
+ end
47
+
48
+ col :city, visible: false do |membership|
49
+ membership.owner.try(:addresses).try(:first).try(:city)
50
+ end
51
+
52
+ col :province, visible: false do |membership|
53
+ membership.owner.try(:addresses).try(:first).try(:province)
54
+ end
55
+
56
+ col :country, visible: false do |membership|
57
+ membership.owner.try(:addresses).try(:first).try(:country)
58
+ end
59
+
60
+ col :postal_code, visible: false do |membership|
61
+ membership.owner.try(:addresses).try(:first).try(:postal_code)
62
+ end
63
+
27
64
  actions_col
28
65
  end
29
66
 
30
67
  collection do
31
- memberships = Effective::Membership.deep.all.includes(:owner)
68
+ memberships = Effective::Membership.deep.all.includes(owner: :addresses)
32
69
 
33
70
  raise('expected an owner_id, not user_id') if attributes[:user_id].present?
34
71
 
@@ -11,7 +11,7 @@ class EffectiveMembershipsDirectoryDatatable < Effective::Datatable
11
11
  end
12
12
 
13
13
  collection do
14
- scope = Effective::Membership.deep.includes(:owner)
14
+ scope = Effective::Membership.deep.good_standing.includes(:owner)
15
15
 
16
16
  archived_klasses.each do |klass|
17
17
  scope = scope.where.not(owner_id: klass.archived.select('id'), owner_type: klass.name)
@@ -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.
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ # EffectiveMembershipsCard
4
+ # Mark your card model with include EffectiveMembershipsCard to get all the includes
5
+
6
+ module EffectiveMembershipsCard
7
+ extend ActiveSupport::Concern
8
+
9
+ module ClassMethods
10
+ def effective_memberships_card?; true; end
11
+ end
12
+
13
+ included do
14
+ include ActiveModel::Model
15
+
16
+ attr_accessor :membership
17
+ validates :membership, presence: true
18
+ end
19
+
20
+ # Instance Methods
21
+ def owner
22
+ membership&.owner
23
+ end
24
+
25
+ def content_type
26
+ 'application/pdf'
27
+ end
28
+
29
+ def filename
30
+ "#{self.class.name.split('::').first.downcase}-membership-card-#{Time.zone.now.strftime('%F')}.pdf"
31
+ end
32
+
33
+ def to_pdf
34
+ raise('is invalid') unless valid?
35
+
36
+ return pdf.render() if pdf.respond_to?(:render) # Prawn
37
+ return pdf.to_pdf() if pdf.respond_to?(:to_pdf) # CombinePdf
38
+
39
+ pdf
40
+ end
41
+
42
+ def pdf
43
+ @pdf ||= build_pdf()
44
+ end
45
+
46
+ private
47
+
48
+ def build_pdf()
49
+ raise('to be implemented')
50
+
51
+ # pdf = Prawn::Document.new
52
+ # pdf.text("Membership Card for #{membership.owner} Number #{membership.number}")
53
+ # pdf
54
+ end
55
+
56
+ end
@@ -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
@@ -219,7 +219,7 @@ module EffectiveMembershipsRegistrar
219
219
 
220
220
  if owner.outstanding_fee_payment_fees.present?
221
221
  order = Effective::Order.new(items: owner.outstanding_fee_payment_fees, user: owner)
222
- order.purchase!(skip_buyer_validations: true, email: false)
222
+ order.mark_as_purchased!
223
223
  end
224
224
 
225
225
  owner.update_membership_status!
@@ -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
@@ -29,6 +29,8 @@ module Effective
29
29
  scope :deep, -> { includes(membership_categories: :category) }
30
30
  scope :sorted, -> { order(:id) }
31
31
 
32
+ scope :good_standing, -> { where(bad_standing: [nil, false]) }
33
+
32
34
  scope :with_paid_fees_through, -> (period = nil) {
33
35
  where(arel_table[:fees_paid_period].gteq(period || EffectiveMemberships.Registrar.current_period))
34
36
  }
@@ -0,0 +1,7 @@
1
+ module Effective
2
+ class MembershipCard
3
+
4
+ include EffectiveMembershipsCard
5
+
6
+ end
7
+ end
@@ -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'
@@ -0,0 +1,16 @@
1
+ - owners = current_user.effective_memberships_owners
2
+
3
+ - owners.each do |owner|
4
+ - membership = owner.membership
5
+ - card = EffectiveMemberships.MembershipCard.new(membership: membership)
6
+
7
+ - next unless EffectiveResources.authorized?(self, :show, card)
8
+
9
+ = card('Membership Card') do
10
+ %p
11
+ Your membership card for
12
+ = membership.categories.to_sentence
13
+ = membership.owner.to_s
14
+ is available for download:
15
+
16
+ %p= link_to 'Download Membership Card', effective_memberships.membership_card_membership_path(membership, format: :pdf), class: 'btn btn-primary'
data/config/routes.rb CHANGED
@@ -18,6 +18,13 @@ EffectiveMemberships::Engine.routes.draw do
18
18
  end
19
19
 
20
20
  get '/directory', to: 'memberships_directory#index'
21
+
22
+ resources :membership_cards, only: :index
23
+
24
+ resources :memberships, only: [] do
25
+ get :membership_card, on: :member, to: 'membership_cards#show'
26
+ end
27
+
21
28
  end
22
29
 
23
30
  namespace :admin do
@@ -1,3 +1,3 @@
1
1
  module EffectiveMemberships
2
- VERSION = '0.3.7'
2
+ VERSION = '0.3.10'
3
3
  end
@@ -7,7 +7,7 @@ module EffectiveMemberships
7
7
  def self.config_keys
8
8
  [
9
9
  :categories_table_name, :applicants_table_name, :applicant_reviews_table_name, :fee_payments_table_name,
10
- :category_class_name, :applicant_class_name, :applicant_review_class_name, :fee_payment_class_name, :registrar_class_name,
10
+ :category_class_name, :applicant_class_name, :applicant_review_class_name, :fee_payment_class_name, :registrar_class_name, :membership_card_class_name,
11
11
  :additional_fee_types,
12
12
  :layout,
13
13
  :mailer, :parent_mailer, :deliver_method, :mailer_layout, :mailer_sender, :mailer_admin, :use_effective_email_templates
@@ -32,6 +32,10 @@ module EffectiveMemberships
32
32
  fee_payment_class_name&.constantize || Effective::FeePayment
33
33
  end
34
34
 
35
+ def self.MembershipCard
36
+ membership_card_class_name&.constantize || Effective::MembershipCard
37
+ end
38
+
35
39
  # Singleton
36
40
  def self.Registrar
37
41
  klass = registrar_class_name&.constantize || Effective::Registrar
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.7
4
+ version: 0.3.10
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-02 00:00:00.000000000 Z
11
+ date: 2022-02-24 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
@@ -252,6 +266,7 @@ files:
252
266
  - app/controllers/effective/applicant_references_controller.rb
253
267
  - app/controllers/effective/applicants_controller.rb
254
268
  - app/controllers/effective/fee_payments_controller.rb
269
+ - app/controllers/effective/membership_cards_controller.rb
255
270
  - app/controllers/effective/memberships_directory_controller.rb
256
271
  - app/datatables/admin/effective_applicant_course_areas_datatable.rb
257
272
  - app/datatables/admin/effective_applicant_course_names_datatable.rb
@@ -273,6 +288,7 @@ files:
273
288
  - app/mailers/effective/memberships_mailer.rb
274
289
  - app/models/concerns/effective_memberships_applicant.rb
275
290
  - app/models/concerns/effective_memberships_applicant_review.rb
291
+ - app/models/concerns/effective_memberships_card.rb
276
292
  - app/models/concerns/effective_memberships_category.rb
277
293
  - app/models/concerns/effective_memberships_fee_payment.rb
278
294
  - app/models/concerns/effective_memberships_owner.rb
@@ -289,6 +305,7 @@ files:
289
305
  - app/models/effective/fee.rb
290
306
  - app/models/effective/fee_payment.rb
291
307
  - app/models/effective/membership.rb
308
+ - app/models/effective/membership_card.rb
292
309
  - app/models/effective/membership_category.rb
293
310
  - app/models/effective/membership_history.rb
294
311
  - app/models/effective/registrar.rb
@@ -346,6 +363,7 @@ files:
346
363
  - app/views/effective/applicants/_orders.html.haml
347
364
  - app/views/effective/applicants/_references.html.haml
348
365
  - app/views/effective/applicants/_select.html.haml
366
+ - app/views/effective/applicants/_stamp.html.haml
349
367
  - app/views/effective/applicants/_summary.html.haml
350
368
  - app/views/effective/applicants/billing.html.haml
351
369
  - app/views/effective/applicants/checkout.html.haml
@@ -357,6 +375,7 @@ files:
357
375
  - app/views/effective/applicants/files.html.haml
358
376
  - app/views/effective/applicants/references.html.haml
359
377
  - app/views/effective/applicants/select.html.haml
378
+ - app/views/effective/applicants/stamp.html.haml
360
379
  - app/views/effective/applicants/start.html.haml
361
380
  - app/views/effective/applicants/submitted.html.haml
362
381
  - app/views/effective/applicants/summary.html.haml
@@ -379,6 +398,7 @@ files:
379
398
  - app/views/effective/fee_payments/summary.html.haml
380
399
  - app/views/effective/fees/_dashboard.html.haml
381
400
  - app/views/effective/fees/_fee.html.haml
401
+ - app/views/effective/membership_cards/index.html.haml
382
402
  - app/views/effective/memberships/_dashboard.html.haml
383
403
  - app/views/effective/memberships/_membership.html.haml
384
404
  - app/views/effective/memberships_directory/index.html.haml