effective_memberships 0.1.2

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