effective_memberships 0.3.7 → 0.3.10

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: 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