effective_memberships 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (152) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +114 -0
  4. data/Rakefile +18 -0
  5. data/app/assets/config/effective_memberships_manifest.js +3 -0
  6. data/app/assets/javascripts/effective_memberships/applicant_courses.js +29 -0
  7. data/app/assets/javascripts/effective_memberships/applicant_experiences.js +38 -0
  8. data/app/assets/javascripts/effective_memberships/base.js +0 -0
  9. data/app/assets/javascripts/effective_memberships.js +1 -0
  10. data/app/assets/stylesheets/effective_memberships/base.scss +5 -0
  11. data/app/assets/stylesheets/effective_memberships.scss +1 -0
  12. data/app/controllers/admin/applicant_course_areas_controller.rb +15 -0
  13. data/app/controllers/admin/applicant_course_names_controller.rb +15 -0
  14. data/app/controllers/admin/applicants_controller.rb +33 -0
  15. data/app/controllers/admin/categories_controller.rb +19 -0
  16. data/app/controllers/admin/fees_controller.rb +18 -0
  17. data/app/controllers/admin/registrar_actions_controller.rb +49 -0
  18. data/app/controllers/effective/applicant_references_controller.rb +37 -0
  19. data/app/controllers/effective/applicants_controller.rb +34 -0
  20. data/app/controllers/effective/fee_payments_controller.rb +29 -0
  21. data/app/datatables/admin/effective_applicant_course_areas_datatable.rb +17 -0
  22. data/app/datatables/admin/effective_applicant_course_names_datatable.rb +17 -0
  23. data/app/datatables/admin/effective_applicants_datatable.rb +55 -0
  24. data/app/datatables/admin/effective_categories_datatable.rb +23 -0
  25. data/app/datatables/admin/effective_fees_datatable.rb +69 -0
  26. data/app/datatables/admin/effective_membership_histories_datatable.rb +35 -0
  27. data/app/datatables/effective_applicant_courses_datatable.rb +30 -0
  28. data/app/datatables/effective_applicant_educations_datatable.rb +22 -0
  29. data/app/datatables/effective_applicant_experiences_datatable.rb +42 -0
  30. data/app/datatables/effective_applicant_references_datatable.rb +34 -0
  31. data/app/datatables/effective_applicants_datatable.rb +34 -0
  32. data/app/helpers/effective_memberships_helper.rb +15 -0
  33. data/app/mailers/effective/memberships_mailer.rb +84 -0
  34. data/app/models/concerns/effective_memberships_applicant.rb +612 -0
  35. data/app/models/concerns/effective_memberships_applicant_review.rb +149 -0
  36. data/app/models/concerns/effective_memberships_category.rb +196 -0
  37. data/app/models/concerns/effective_memberships_fee_payment.rb +229 -0
  38. data/app/models/concerns/effective_memberships_owner.rb +263 -0
  39. data/app/models/concerns/effective_memberships_registrar.rb +300 -0
  40. data/app/models/effective/applicant.rb +7 -0
  41. data/app/models/effective/applicant_course.rb +40 -0
  42. data/app/models/effective/applicant_course_area.rb +31 -0
  43. data/app/models/effective/applicant_course_name.rb +29 -0
  44. data/app/models/effective/applicant_education.rb +36 -0
  45. data/app/models/effective/applicant_experience.rb +79 -0
  46. data/app/models/effective/applicant_reference.rb +81 -0
  47. data/app/models/effective/applicant_review.rb +7 -0
  48. data/app/models/effective/category.rb +7 -0
  49. data/app/models/effective/fee.rb +142 -0
  50. data/app/models/effective/fee_payment.rb +7 -0
  51. data/app/models/effective/membership.rb +119 -0
  52. data/app/models/effective/membership_category.rb +11 -0
  53. data/app/models/effective/membership_history.rb +40 -0
  54. data/app/models/effective/registrar.rb +19 -0
  55. data/app/models/effective/registrar_action.rb +97 -0
  56. data/app/views/admin/applicant_course_areas/_form.html.haml +8 -0
  57. data/app/views/admin/applicant_course_areas/_form_applicant_course_area.html.haml +8 -0
  58. data/app/views/admin/applicant_course_areas/index.html.haml +8 -0
  59. data/app/views/admin/applicant_course_name/_form.html.haml +9 -0
  60. data/app/views/admin/applicants/_form.html.haml +38 -0
  61. data/app/views/admin/applicants/_form_approve.html.haml +34 -0
  62. data/app/views/admin/applicants/_form_decline.html.haml +11 -0
  63. data/app/views/admin/applicants/_form_process.html.haml +18 -0
  64. data/app/views/admin/applicants/_status.html.haml +133 -0
  65. data/app/views/admin/categories/_form.html.haml +14 -0
  66. data/app/views/admin/categories/_form_applicant.html.haml +12 -0
  67. data/app/views/admin/categories/_form_applicant_content.html.haml +19 -0
  68. data/app/views/admin/categories/_form_applicant_eligibility.html.haml +13 -0
  69. data/app/views/admin/categories/_form_applicant_fees.html.haml +29 -0
  70. data/app/views/admin/categories/_form_applicant_steps.html.haml +42 -0
  71. data/app/views/admin/categories/_form_category.html.haml +10 -0
  72. data/app/views/admin/categories/_form_fee_payment.html.haml +9 -0
  73. data/app/views/admin/categories/_form_fee_payment_content.html.haml +19 -0
  74. data/app/views/admin/categories/_form_fee_payment_steps.html.haml +9 -0
  75. data/app/views/admin/categories/_form_renewals.html.haml +32 -0
  76. data/app/views/admin/fees/_fee.html.haml +1 -0
  77. data/app/views/admin/fees/_form.html.haml +14 -0
  78. data/app/views/admin/memberships/_status.html.haml +6 -0
  79. data/app/views/admin/registrar_actions/_form.html.haml +10 -0
  80. data/app/views/admin/registrar_actions/_form_bad_standing.html.haml +43 -0
  81. data/app/views/admin/registrar_actions/_form_fees_paid.html.haml +30 -0
  82. data/app/views/admin/registrar_actions/_form_reclassify.html.haml +43 -0
  83. data/app/views/admin/registrar_actions/_form_register.html.haml +44 -0
  84. data/app/views/admin/registrar_actions/_form_remove.html.haml +17 -0
  85. data/app/views/effective/applicant_references/_applicant_reference.html.haml +51 -0
  86. data/app/views/effective/applicant_references/_datatable_actions.html.haml +4 -0
  87. data/app/views/effective/applicant_references/_form.html.haml +18 -0
  88. data/app/views/effective/applicant_references/_form_declaration.html.haml +37 -0
  89. data/app/views/effective/applicant_references/complete.html.haml +3 -0
  90. data/app/views/effective/applicant_references/edit.html.haml +8 -0
  91. data/app/views/effective/applicants/_applicant.html.haml +6 -0
  92. data/app/views/effective/applicants/_content.html.haml +10 -0
  93. data/app/views/effective/applicants/_course_amounts.html.haml +19 -0
  94. data/app/views/effective/applicants/_dashboard.html.haml +19 -0
  95. data/app/views/effective/applicants/_declarations.html.haml +16 -0
  96. data/app/views/effective/applicants/_demographics.html.haml +9 -0
  97. data/app/views/effective/applicants/_demographics_fields.html.haml +11 -0
  98. data/app/views/effective/applicants/_demographics_owner.html.haml +20 -0
  99. data/app/views/effective/applicants/_education.html.haml +14 -0
  100. data/app/views/effective/applicants/_experience.html.haml +28 -0
  101. data/app/views/effective/applicants/_files.html.haml +27 -0
  102. data/app/views/effective/applicants/_layout.html.haml +3 -0
  103. data/app/views/effective/applicants/_orders.html.haml +4 -0
  104. data/app/views/effective/applicants/_references.html.haml +15 -0
  105. data/app/views/effective/applicants/_summary.html.haml +40 -0
  106. data/app/views/effective/applicants/billing.html.haml +14 -0
  107. data/app/views/effective/applicants/checkout.html.haml +6 -0
  108. data/app/views/effective/applicants/course_amounts.html.haml +50 -0
  109. data/app/views/effective/applicants/declarations.html.haml +19 -0
  110. data/app/views/effective/applicants/demographics.html.haml +11 -0
  111. data/app/views/effective/applicants/education.html.haml +27 -0
  112. data/app/views/effective/applicants/experience.html.haml +51 -0
  113. data/app/views/effective/applicants/files.html.haml +14 -0
  114. data/app/views/effective/applicants/references.html.haml +24 -0
  115. data/app/views/effective/applicants/select.html.haml +27 -0
  116. data/app/views/effective/applicants/start.html.haml +18 -0
  117. data/app/views/effective/applicants/submitted.html.haml +44 -0
  118. data/app/views/effective/applicants/summary.html.haml +8 -0
  119. data/app/views/effective/fee_payments/_content.html.haml +8 -0
  120. data/app/views/effective/fee_payments/_declarations.html.haml +16 -0
  121. data/app/views/effective/fee_payments/_demographics.html.haml +9 -0
  122. data/app/views/effective/fee_payments/_demographics_fields.html.haml +11 -0
  123. data/app/views/effective/fee_payments/_demographics_owner.html.haml +20 -0
  124. data/app/views/effective/fee_payments/_fee_payment.html.haml +6 -0
  125. data/app/views/effective/fee_payments/_layout.html.haml +3 -0
  126. data/app/views/effective/fee_payments/_orders.html.haml +4 -0
  127. data/app/views/effective/fee_payments/billing.html.haml +14 -0
  128. data/app/views/effective/fee_payments/checkout.html.haml +6 -0
  129. data/app/views/effective/fee_payments/declarations.html.haml +20 -0
  130. data/app/views/effective/fee_payments/demographics.html.haml +12 -0
  131. data/app/views/effective/fee_payments/start.html.haml +20 -0
  132. data/app/views/effective/fee_payments/submitted.html.haml +14 -0
  133. data/app/views/effective/fee_payments/summary.html.haml +8 -0
  134. data/app/views/effective/fees/_dashboard.html.haml +22 -0
  135. data/app/views/effective/fees/_fee.html.haml +37 -0
  136. data/app/views/effective/memberships/_dashboard.html.haml +29 -0
  137. data/app/views/effective/memberships/_membership.html.haml +40 -0
  138. data/app/views/effective/memberships_mailer/applicant_approved.liquid +15 -0
  139. data/app/views/effective/memberships_mailer/applicant_declined.liquid +13 -0
  140. data/app/views/effective/memberships_mailer/applicant_reference_notification.liquid +15 -0
  141. data/app/views/layouts/effective_memberships_mailer_layout.html.haml +7 -0
  142. data/config/effective_memberships.rb +47 -0
  143. data/config/routes.rb +32 -0
  144. data/db/migrate/01_create_effective_memberships.rb.erb +380 -0
  145. data/db/seeds.rb +59 -0
  146. data/lib/effective_memberships/engine.rb +23 -0
  147. data/lib/effective_memberships/version.rb +3 -0
  148. data/lib/effective_memberships.rb +86 -0
  149. data/lib/generators/effective_memberships/install_generator.rb +40 -0
  150. data/lib/generators/templates/effective_memberships_mailer_preview.rb +4 -0
  151. data/lib/tasks/effective_memberships_tasks.rake +17 -0
  152. metadata +377 -0
@@ -0,0 +1,18 @@
1
+ = render 'layout' do
2
+ = render 'effective/applicants/content', resource: resource
3
+
4
+ .card
5
+ .card-body
6
+ - fees = resource.owner.outstanding_fee_payment_fees
7
+
8
+ - if fees.present?
9
+ %p You have #{pluralize(fees.length , 'outstanding fee')}.
10
+ %p
11
+ Please
12
+ = link_to 'Make a fee payment', effective_memberships.new_fee_payment_path
13
+ before continuing with any applications
14
+
15
+ - if fees.blank?
16
+ = effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
17
+ = f.hidden_field :id
18
+ = f.save 'Save and Continue'
@@ -0,0 +1,44 @@
1
+ = render 'layout' do
2
+ = render 'effective/applicants/content', resource: resource
3
+
4
+ - raise('expected a submitted applicant') unless resource.was_submitted?
5
+ - raise('expected a purchased applicant submit_order') unless resource.submit_order&.purchased?
6
+
7
+ .alert.alert-success.mb-4
8
+ This application was submitted on
9
+ = resource.submit_order.purchased_at.strftime('%F')
10
+
11
+ - unless resource.approved?
12
+ .card
13
+ .card-body
14
+ %p
15
+ Your application must still be approved.
16
+ We will send
17
+ %strong= resource.owner.email
18
+ an email notifying you of the application's approval status.
19
+
20
+ .card
21
+ .card-body= render 'effective/applicants/summary', applicant: resource
22
+
23
+ - if resource.min_applicant_references.to_i > 0 || resource.applicant_references.present?
24
+ .card
25
+ .card-body
26
+ %h3 Confidential References
27
+ %p
28
+ References are automatically sent a reference request.
29
+ Click 'New' to add an additional reference, or click 'Notify' to resend the reference request.
30
+
31
+ = render_datatable(EffectiveApplicantReferencesDatatable.new(applicant_id: resource.id), inline: true, simple: true)
32
+
33
+ .mb-4
34
+ = collapse('Show application...', card_class: 'my-2') do
35
+ = render 'effective/applicants/applicant', applicant: resource
36
+
37
+ = render 'effective/applicants/orders', applicant: resource
38
+
39
+ -# - if resource.can_visit_step?(next_step)
40
+ -# = effective_form_with(model: resource, url: wizard_path(step)) do |f|
41
+ -# = f.hidden_field :current_step
42
+ -# = f.submit 'Save and Continue', class: 'btn btn-primary'
43
+
44
+ = link_to "Return to Dashboard", root_path, class: 'btn btn-lg btn-primary btn-block'
@@ -0,0 +1,8 @@
1
+ = render 'layout' do
2
+ = render 'effective/applicants/content', resource: resource
3
+
4
+ = render('effective/applicants/applicant', applicant: resource)
5
+
6
+ = effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
7
+ = f.hidden_field :id
8
+ = f.submit 'Save and Continue', border: false, left: true
@@ -0,0 +1,8 @@
1
+ - all_steps_content = resource.category&.rich_text_fee_payment_all_steps_content
2
+ - step_content = resource.category&.send("rich_text_fee_payment_#{step}_content")
3
+
4
+ - if all_steps_content.present?
5
+ .mb-2= all_steps_content
6
+
7
+ - if step_content.present?
8
+ .mb-2= step_content
@@ -0,0 +1,16 @@
1
+ .card
2
+ .card-body
3
+ .row
4
+ .col-sm
5
+ %h5.card-title= fee_payment.wizard_step_title(:declarations)
6
+ .col-sm-auto.text-right
7
+ = link_to('Edit', wizard_path(:declarations)) if edit_effective_fee_payments_wizard?
8
+
9
+ %table.table
10
+ %tbody
11
+ %tr
12
+ %td= icon('check')
13
+ %td Yes, I hereby certify that I have read and will adhere to the Code of Ethics
14
+ %tr
15
+ %td= icon('check')
16
+ %td Yes, I hereby certify that the statements and information contained herein are correct
@@ -0,0 +1,9 @@
1
+ .card
2
+ .card-body
3
+ .row
4
+ .col-sm
5
+ %h5.card-title= fee_payment.wizard_step_title(:demographics)
6
+ .col-sm-auto.text-right
7
+ = link_to('Edit', wizard_path(:demographics)) if edit_effective_fee_payments_wizard?
8
+
9
+ = render 'effective/fee_payments/demographics_owner', fee_payment: fee_payment, owner: fee_payment.owner
@@ -0,0 +1,11 @@
1
+ - if f.object.respond_to?(:first_name)
2
+ = f.text_field :first_name
3
+
4
+ - if f.object.respond_to?(:last_name)
5
+ = f.text_field :last_name
6
+
7
+ - if f.object.respond_to?(:date_of_birth)
8
+ = f.date_field :date_of_birth
9
+
10
+ - if f.object.respond_to?(:phone)
11
+ = f.tel_field :phone
@@ -0,0 +1,20 @@
1
+ %table.table
2
+ %tbody
3
+ %tr
4
+ %th Name
5
+ %td= owner.to_s
6
+
7
+ - if owner.respond_to?(:email) && owner.email.present?
8
+ %tr
9
+ %th Email
10
+ %td= mail_to owner.email
11
+
12
+ - if owner.respond_to?(:date_of_birth) && owner.date_of_birth.present?
13
+ %tr
14
+ %th Date of Birth
15
+ %td= owner.date_of_birth.strftime('%F')
16
+
17
+ - if owner.respond_to?(:phone) && owner.phone.present?
18
+ %tr
19
+ %th Phone:
20
+ %td= owner.phone
@@ -0,0 +1,6 @@
1
+ .effective-fee-payment
2
+ - blacklist = EffectiveMemberships.FeePayment.required_wizard_steps
3
+ - steps = fee_payment.required_steps - blacklist
4
+
5
+ - steps.select { |step| fee_payment.has_completed_step?(step) }.each do |partial|
6
+ = render "effective/fee_payments/#{partial}", fee_payment: fee_payment, step: partial
@@ -0,0 +1,3 @@
1
+ .row
2
+ .col-lg-3= render_wizard_sidebar(resource)
3
+ .col-lg-9= yield
@@ -0,0 +1,4 @@
1
+ - if fee_payment.submit_order&.purchased?
2
+ .card.mb-4
3
+ .card-body
4
+ = render(fee_payment.submit_order)
@@ -0,0 +1,14 @@
1
+ = render 'layout' do
2
+ = render 'effective/fee_payments/content', resource: resource
3
+
4
+ - raise('expected owner to respond to billing_address') unless resource.owner.respond_to?(:billing_address)
5
+
6
+ .card
7
+ .card-body
8
+ = effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
9
+ = f.hidden_field :id
10
+
11
+ = f.fields_for(:owner, f.object.owner) do |fu|
12
+ = effective_address_fields(fu, :billing)
13
+
14
+ = f.save 'Save and Continue'
@@ -0,0 +1,6 @@
1
+ = render 'layout' do
2
+ = render 'effective/fee_payments/content', resource: resource
3
+
4
+ .card
5
+ .card-body
6
+ = render_checkout_step2(resource.submit_order, purchased_url: wizard_path(:submitted), deferred_url: wizard_path(:checkout), declined_url: wizard_path(:checkout))
@@ -0,0 +1,20 @@
1
+ = render 'layout' do
2
+
3
+ = render 'effective/fee_payments/content', resource: resource
4
+
5
+ - completed = resource.has_completed_step?(:declarations)
6
+ - resource.declare_code_of_ethics = completed
7
+ - resource.declare_truth = completed
8
+
9
+ .card
10
+ .card-body
11
+ = effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
12
+ = f.hidden_field :id
13
+
14
+ = f.check_box :declare_code_of_ethics,
15
+ label: 'Yes, I hereby certify that I have read and will adhere to the Code of Ethics'
16
+
17
+ = f.check_box :declare_truth,
18
+ label: 'Yes, I hereby certify that the statements and information contained herein are correct'
19
+
20
+ = f.save 'Save and Continue'
@@ -0,0 +1,12 @@
1
+ = render 'layout' do
2
+ = render 'effective/fee_payments/content', resource: resource
3
+
4
+ .card
5
+ .card-body
6
+ = effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
7
+ = f.hidden_field :id
8
+
9
+ = f.fields_for(:owner, f.object.owner) do |fu|
10
+ = render 'effective/fee_payments/demographics_fields', f: fu
11
+
12
+ = f.save 'Save and Continue'
@@ -0,0 +1,20 @@
1
+ = render 'layout' do
2
+
3
+ .card
4
+ .card-body
5
+ %p Welcome #{current_user.effective_memberships_owner}!
6
+
7
+ = render 'effective/fee_payments/content', resource: resource
8
+
9
+ - if resource.outstanding_fees.blank?
10
+ %p You have no fees due at this time.
11
+ = link_to 'Home', root_path, class: 'btn btn-primary'
12
+
13
+ - if resource.outstanding_fees.present?
14
+ %p You have the following fees due at this time:
15
+
16
+ = render_purchasables(resource.outstanding_fees)
17
+
18
+ = effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
19
+ = f.hidden_field :id
20
+ = f.save 'Save and Continue'
@@ -0,0 +1,14 @@
1
+ = render 'layout' do
2
+ = render 'effective/fee_payments/content', resource: resource
3
+
4
+ - raise('expected a submitted fee_payment') unless resource.was_submitted?
5
+ - raise('expected a purchased fee_payment submit_order') unless resource.submit_order&.purchased?
6
+
7
+ .alert.alert-success.mb-4
8
+ Fee successfully paid on
9
+ = resource.submit_order.purchased_at.strftime('%F')
10
+
11
+ = render 'effective/fee_payments/fee_payment', fee_payment: resource
12
+ = render 'effective/fee_payments/orders', fee_payment: resource
13
+
14
+ = link_to "Return to Dashboard", root_path, class: 'btn btn-lg btn-primary btn-block'
@@ -0,0 +1,8 @@
1
+ = render 'layout' do
2
+ = render 'effective/fee_payments/content', resource: resource
3
+
4
+ = render('effective/fee_payments/fee_payment', fee_payment: resource)
5
+
6
+ = effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
7
+ = f.hidden_field :id
8
+ = f.submit 'Save and Continue', class: 'btn btn-primary'
@@ -0,0 +1,22 @@
1
+ %h2 Fees
2
+ - current_owner = current_user.effective_memberships_owner
3
+
4
+ - fees = current_owner.outstanding_fee_payment_fees
5
+ - membership = current_owner.membership
6
+
7
+ - if membership.present?
8
+ - if membership.category.create_renewal_fees?
9
+ - date = EffectiveMemberships.Registrar.renewal_fee_date(date: Time.zone.now)
10
+ %p Annual fees become available for purchase on #{date.strftime('%B %d')} of each year.
11
+
12
+ - if membership.category.create_late_fees?
13
+ - date = EffectiveMemberships.Registrar.late_fee_date(date: Time.zone.now)
14
+ %p Late fees will be applied on #{date.strftime('%B %d')}.
15
+
16
+ - if fees.present?
17
+ .alert.alert-warning.mb-3 You have #{pluralize(fees.length , 'outstanding fee')}.
18
+
19
+ %p= link_to 'Pay Fees', effective_memberships.new_fee_payment_path, class: 'btn btn-primary'
20
+
21
+ - else
22
+ %p You have no outstanding fees at this time. Thank you!
@@ -0,0 +1,37 @@
1
+ %table.table
2
+ %tbody
3
+ %tr
4
+ %th Category
5
+ %td= fee.category
6
+
7
+ - if fee.category.present?
8
+ %tr
9
+ %th Membership Category
10
+ %td
11
+ - if request.path.start_with?('/admin')
12
+ = link_to(fee.category, effective_memberships.edit_admin_category_path(fee.category))
13
+ - else
14
+ = fee.category
15
+
16
+ - if request.path.start_with?('/admin')
17
+ %tr
18
+ %th Owner
19
+ %td
20
+ - url = (edit_admin_user_path(fee.owner) rescue "/admin/users/#{fee.owner.to_param}/edit")
21
+ = link_to(fee.owner, url)
22
+
23
+ %tr
24
+ %th Purchased
25
+ %td
26
+ - if fee.purchased_order.present?
27
+ = link_to(fee.purchased_order, effective_orders.admin_order_path(fee.purchased_order))
28
+ - else
29
+ Not Purchased
30
+
31
+ %tr
32
+ %th Period
33
+ %td= fee.period
34
+
35
+ %tr
36
+ %th Price
37
+ %td= price_to_currency(fee.price)
@@ -0,0 +1,29 @@
1
+ %h2 Membership
2
+ - current_owner = current_user.effective_memberships_owner
3
+ - membership = current_owner.membership
4
+
5
+ - if membership.present?
6
+ - if membership.categories.length == 0
7
+ You are a member.
8
+ - elsif membership.categories.length == 1
9
+ %p You are a #{membership.category} member.
10
+ - else
11
+ %p You are a member of the following:
12
+
13
+ %ul
14
+ - membership.categories.each do |category|
15
+ %li= category
16
+
17
+ %p Your membership number is ##{membership.number} and you joined on #{membership.joined_on.strftime('%F')}.
18
+
19
+ - if membership.registration_on > membership.joined_on
20
+ %p You last changed categories on #{membership.registration_on.strftime('%F')}.
21
+
22
+ - if membership.bad_standing?
23
+ %p Your membership is in bad standing with the following reason: #{membership.bad_standing_reason}.
24
+
25
+ - elsif current_owner.membership_removed?
26
+ %p Your membership was removed on #{current_owner.membership_removed_on.strftime('%F')}.
27
+
28
+ - else
29
+ %p You are not a member.
@@ -0,0 +1,40 @@
1
+ %table.table
2
+ %tbody
3
+ %tr
4
+ %th Joined
5
+ %td= membership.joined_on.strftime('%F')
6
+
7
+ %tr
8
+ %th Registered
9
+ %td= membership.registration_on.strftime('%F')
10
+
11
+ - if membership.categories.length == 0
12
+ %tr
13
+ %th Category
14
+ %td None
15
+ - elsif membership.categories.length == 1
16
+ %tr
17
+ %th Category
18
+ %td= membership.category
19
+ - else
20
+ %tr
21
+ %th Categories
22
+ %td
23
+ - membership.categories.each do |category|
24
+ %div= category
25
+
26
+ %tr
27
+ %th Number
28
+ %td= membership.number
29
+
30
+ %tr
31
+ %th Fees Paid Through
32
+ %td= membership.fees_paid_through_period&.strftime('%F') || '-'
33
+
34
+ %tr
35
+ %th In Bad Standing
36
+ %td
37
+ - if membership.bad_standing?
38
+ %p Yes. #{membership.bad_standing_reason}
39
+ - else
40
+ = '-'
@@ -0,0 +1,15 @@
1
+ ---
2
+ subject: 'Your application was approved!'
3
+ from: 'admin@example.com'
4
+ ---
5
+ Hello {{ user.name }},
6
+
7
+ Your application for {{ applicant.to_category }} was approved!
8
+
9
+ Please log in and purchase any outstanding fees.
10
+
11
+ {{ applicant.url }}
12
+
13
+ Thank you.
14
+
15
+ Please contact us for assistance.
@@ -0,0 +1,13 @@
1
+ ---
2
+ subject: 'Your application to join was declined'
3
+ from: 'admin@example.com'
4
+ ---
5
+ Hello {{ user.name }},
6
+
7
+ Your application for {{ applicant.to_category }} has been declined with the following reason:
8
+
9
+ {{ applicant.declined_reason }}
10
+
11
+ Thank you.
12
+
13
+ Please contact us for assistance.
@@ -0,0 +1,15 @@
1
+ ---
2
+ subject: 'Your reference has been requested'
3
+ from: 'admin@example.com'
4
+ ---
5
+ Hello {{ reference.name }},
6
+
7
+ An applicant, {{ user.name }}, has added you as a reference.
8
+
9
+ Would you please complete the reference declaration form at this url:
10
+
11
+ {{ reference.url }}
12
+
13
+ Thank you.
14
+
15
+ Please contact us for assistance.
@@ -0,0 +1,7 @@
1
+ !!!
2
+ %html{style: 'background: #fff;'}
3
+ %head
4
+ %meta{:content => 'text/html; charset=UTF-8', 'http-equiv' => 'Content-Type'}
5
+
6
+ %body{style: 'background: #fff;'}
7
+ = yield
@@ -0,0 +1,47 @@
1
+ EffectiveMemberships.setup do |config|
2
+ config.categories_table_name = :categories
3
+ config.applicants_table_name = :applicants
4
+ config.applicant_reviews_table_name = :applicant_reviews
5
+ config.fee_payments_table_name = :fee_payments
6
+
7
+ # Layout Settings
8
+ # Configure the Layout per controller, or all at once
9
+ # config.layout = { application: 'application', admin: 'admin' }
10
+
11
+ # Membership Categories Settings
12
+ # Configure the class responsible for the membership categories.
13
+ # This should extend from Effective::Category
14
+ # And handle all the business logic for your membership categories.
15
+ # config.category_class_name = 'Effective::Category'
16
+ # config.applicant_class_name = 'Effective::Applicant'
17
+ # config.applicant_review_class_name = 'Effective::ApplicantReview'
18
+ # config.registrar_class_name = 'Effective::Registrar'
19
+
20
+ # Fee Categories
21
+ # The defaults include: Applicant, Prorated, Renewal, Late, Admin
22
+ # config.additional_fee_types = []
23
+
24
+ # Mailer Configuration
25
+ # Configure the class responsible to send e-mails.
26
+ # config.mailer = 'Effective::MembershipsMailer'
27
+
28
+ # Configure the parent class responsible to send e-mails.
29
+ # config.parent_mailer = 'ActionMailer::Base'
30
+
31
+ # Default deliver method
32
+ # config.deliver_method = :deliver_later
33
+
34
+ # Default layout
35
+ config.mailer_layout = 'effective_memberships_mailer_layout'
36
+
37
+ # Default From
38
+ config.mailer_sender = "no-reply@example.com"
39
+
40
+ # Send Admin correspondence To
41
+ config.mailer_admin = "admin@example.com"
42
+
43
+ # Will work with effective_email_templates gem:
44
+ # - The audit and audit review email content will be preopulated based off the template
45
+ # - Uses an EmailTemplatesMailer mailer instead of ActionMailer::Base for default parent_mailer
46
+ config.use_effective_email_templates = false
47
+ end
data/config/routes.rb ADDED
@@ -0,0 +1,32 @@
1
+ Rails.application.routes.draw do
2
+ mount EffectiveMemberships::Engine => '/', as: 'effective_memberships'
3
+ end
4
+
5
+ EffectiveMemberships::Engine.routes.draw do
6
+ # Public routes
7
+ scope module: 'effective' do
8
+ resources :applicants, only: [:new, :show, :destroy] do
9
+ resources :build, controller: :applicants, only: [:show, :update]
10
+ end
11
+
12
+ resources :applicant_references, only: [:new, :create, :show, :update] do
13
+ post :notify, on: :member
14
+ end
15
+
16
+ resources :fee_payments, only: [:new, :show] do
17
+ resources :build, controller: :fee_payments, only: [:show, :update]
18
+ end
19
+ end
20
+
21
+ namespace :admin do
22
+ resources :applicants, except: [:new, :create, :show]
23
+ resources :fees
24
+ resources :categories, except: [:show]
25
+
26
+ resources :applicant_course_areas, except: [:show]
27
+ resources :applicant_course_names, except: [:show]
28
+
29
+ resources :registrar_actions, only: [:create]
30
+ end
31
+
32
+ end