effective_mentorships 0.2.3 → 0.3.0

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 (48) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/admin/mentorship_bulk_groups_controller.rb +19 -0
  3. data/app/datatables/admin/effective_mentorship_bulk_group_mentees_datatable.rb +65 -0
  4. data/app/datatables/admin/effective_mentorship_bulk_group_mentors_datatable.rb +66 -0
  5. data/app/datatables/admin/effective_mentorship_bulk_groups_datatable.rb +32 -0
  6. data/app/datatables/admin/effective_mentorship_cycles_datatable.rb +0 -1
  7. data/app/datatables/admin/effective_mentorship_groups_datatable.rb +59 -7
  8. data/app/datatables/admin/effective_mentorship_registrations_datatable.rb +18 -3
  9. data/app/datatables/effective_mentorships_available_cycles_datatable.rb +1 -1
  10. data/app/datatables/effective_mentorships_groups_datatable.rb +1 -1
  11. data/app/datatables/effective_mentorships_registrations_datatable.rb +1 -0
  12. data/app/helpers/effective_mentorships_helper.rb +1 -0
  13. data/app/jobs/effective/mentorships_bulk_create_groups_job.rb +10 -0
  14. data/app/jobs/effective/mentorships_bulk_notify_groups_job.rb +10 -0
  15. data/app/mailers/effective/mentorships_mailer.rb +41 -3
  16. data/app/models/concerns/effective_mentorships_bulk_group.rb +368 -0
  17. data/app/models/concerns/effective_mentorships_group.rb +80 -5
  18. data/app/models/concerns/effective_mentorships_registration.rb +69 -8
  19. data/app/models/concerns/effective_mentorships_user.rb +42 -0
  20. data/app/models/effective/mentorship_bulk_group.rb +6 -0
  21. data/app/models/effective/mentorship_cycle.rb +1 -1
  22. data/app/models/effective/mentorship_group_user.rb +15 -0
  23. data/app/views/admin/mentorship_bulk_groups/_content.html.haml +1 -0
  24. data/app/views/admin/mentorship_bulk_groups/_creation.html.haml +9 -0
  25. data/app/views/admin/mentorship_bulk_groups/_layout.html.haml +3 -0
  26. data/app/views/admin/mentorship_bulk_groups/_selection.html.haml +24 -0
  27. data/app/views/admin/mentorship_bulk_groups/finished.html.haml +35 -0
  28. data/app/views/admin/mentorship_bulk_groups/group.html.haml +31 -0
  29. data/app/views/admin/mentorship_bulk_groups/grouping.html.haml +10 -0
  30. data/app/views/admin/mentorship_bulk_groups/notify.html.haml +49 -0
  31. data/app/views/admin/mentorship_bulk_groups/notifying.html.haml +10 -0
  32. data/app/views/admin/mentorship_bulk_groups/publish.html.haml +30 -0
  33. data/app/views/admin/mentorship_bulk_groups/review.html.haml +49 -0
  34. data/app/views/admin/mentorship_bulk_groups/start.html.haml +8 -0
  35. data/app/views/admin/mentorship_cycles/_form_mentorship_cycle.html.haml +0 -4
  36. data/app/views/admin/mentorship_groups/_form_mentorship_group.html.haml +11 -4
  37. data/app/views/effective/mentorship_registrations/_fields.html.haml +2 -2
  38. data/app/views/effective/mentorships/_dashboard.html.haml +1 -1
  39. data/app/views/effective/mentorships_mailer/mentorship_group_created_to_mentee.liquid +14 -0
  40. data/app/views/effective/mentorships_mailer/mentorship_group_created_to_mentor.liquid +14 -0
  41. data/config/effective_mentorships.rb +1 -0
  42. data/config/locales/effective_mentorships.en.yml +1 -0
  43. data/config/routes.rb +12 -5
  44. data/db/migrate/101_create_effective_mentorships.rb +26 -2
  45. data/lib/effective_mentorships/engine.rb +1 -0
  46. data/lib/effective_mentorships/version.rb +1 -1
  47. data/lib/effective_mentorships.rb +6 -2
  48. metadata +24 -2
@@ -5,6 +5,9 @@ module Effective
5
5
 
6
6
  # App scoped
7
7
  belongs_to :mentorship_group
8
+
9
+ # Polymorphic app scoped
10
+ belongs_to :mentorship_registration, polymorphic: true, optional: true
8
11
  belongs_to :user, polymorphic: true
9
12
 
10
13
  effective_resource do
@@ -28,6 +31,11 @@ module Effective
28
31
  self.mentorship_cycle = mentorship_group.mentorship_cycle
29
32
  end
30
33
 
34
+ # Assign registration, if present
35
+ before_validation(if: -> { user.present? && mentorship_cycle.present? }) do
36
+ self.mentorship_registration ||= user.mentorship_registrations.find { |mentorship_registration| mentorship_registration.mentorship_cycle_id == mentorship_cycle.id }
37
+ end
38
+
31
39
  # Denormalized data for searching
32
40
  before_validation(if: -> { user.present? }) do
33
41
  assign_attributes(name: user.to_s, email: user.email)
@@ -39,5 +47,12 @@ module Effective
39
47
  user.to_s.presence || model_name.human
40
48
  end
41
49
 
50
+ def mentor?
51
+ mentorship_role.to_s == 'mentor'
52
+ end
53
+
54
+ def mentee?
55
+ mentorship_role.to_s == 'mentee'
56
+ end
42
57
  end
43
58
  end
@@ -0,0 +1 @@
1
+ -# Intentionally blank
@@ -0,0 +1,9 @@
1
+ %h3 Create #{mentorship_groups_label}
2
+
3
+ %p
4
+ Upon clicking the button below, the #{badge(:draft)}
5
+ = mentorship_groups_label.downcase
6
+ will be created in a background process.
7
+
8
+ %p
9
+ This process may take a few moments. No emails will be sent.
@@ -0,0 +1,3 @@
1
+ .row
2
+ .col-lg-3.mb-3= render_wizard_sidebar(resource)
3
+ .col-lg-9= yield
@@ -0,0 +1,24 @@
1
+ %h3 Selection Criteria
2
+
3
+ - cycle = resource.mentorship_cycle
4
+
5
+ %p
6
+ = mentorships_mentors_label
7
+ and
8
+ = mentorships_mentees_label
9
+ with
10
+ = link_to(mentorship_registrations_label, effective_mentorships.admin_mentorship_registrations_path, target: '_blank')
11
+ that opted-in to the
12
+ = link_to(cycle, effective_mentorships.edit_admin_mentorship_cycle_path(cycle), target: '_blank')
13
+ will be selected.
14
+
15
+ %p
16
+ = succeed('.') do
17
+ Each of the new
18
+ = link_to(mentorship_groups_label, effective_mentorships.admin_mentorship_groups_path, target: '_blank')
19
+ will be created with a maximum of
20
+ = pluralize(resource.max_pairings_mentee, mentorships_mentee_label)
21
+
22
+ %p
23
+ Members already in
24
+ #{mentorship_groups_label.downcase} for #{cycle} will not be selected.
@@ -0,0 +1,35 @@
1
+ = render 'layout' do
2
+ = render 'admin/mentorship_bulk_groups/content', resource: resource
3
+
4
+ = card do
5
+ - cycle = resource.mentorship_cycle
6
+
7
+ - groups_datatable = EffectiveResources.best('Admin::EffectiveMentorshipGroupsDatatable').new(self, mentorship_bulk_group: resource)
8
+ - opt_in_without_groups_registrations_datatable = EffectiveResources.best('Admin::EffectiveMentorshipRegistrationsDatatable').new(self, mentorship_cycle: cycle, opt_in_without_groups: true)
9
+
10
+ %h3 #{mentorship_groups_label}
11
+ %p
12
+ The following
13
+ = pluralize(resource.mentorship_groups.count, mentorship_group_label.downcase)
14
+ for
15
+ = link_to(cycle, effective_mentorships.edit_admin_mentorship_cycle_path(cycle), target: '_blank')
16
+ have been created:
17
+
18
+ = collapse("Show all #{mentorship_groups_label.downcase}...", card_class: '', show: true) do
19
+ = render_datatable(groups_datatable, filters: false)
20
+
21
+ .my-4
22
+
23
+ %h3 Ungrouped #{mentorship_registrations_label}
24
+ %p
25
+ There are
26
+ = pluralize(opt_in_without_groups_registrations_datatable.collection.mentors.count, mentorships_mentors_label.downcase).html_safe
27
+ and
28
+ = pluralize(opt_in_without_groups_registrations_datatable.collection.mentees.count, mentorships_mentees_label.downcase).html_safe
29
+ who opted-in but were not placed into #{mentorship_groups_label.downcase}.
30
+
31
+ - # Mentorship Registrations
32
+ = collapse("Show ungrouped opt-in #{mentorship_registrations_label.downcase}...", card_class: '') do
33
+ = render_datatable(opt_in_without_groups_registrations_datatable, inline: true, filters: false)
34
+
35
+
@@ -0,0 +1,31 @@
1
+ = render 'layout' do
2
+ = render 'admin/mentorship_bulk_groups/content', resource: resource
3
+
4
+ = card do
5
+ = render('admin/mentorship_bulk_groups/selection', resource: resource)
6
+
7
+ %h3 Eligible #{mentorships_mentors_label}
8
+ - datatable = EffectiveResources.best('Admin::EffectiveMentorshipBulkGroupMentorsDatatable').new(self, mentorship_bulk_group: resource)
9
+ - raise('expected a mentors datatable') if datatable.nil?
10
+
11
+ %p The following #{pluralize(datatable.collection.count, mentorships_mentor_label)} will be grouped:
12
+ = collapse("Show #{mentorships_mentors_label}...", card_class: '') do
13
+ = render_datatable(datatable)
14
+
15
+ .my-4
16
+
17
+ %h3 Eligible #{mentorships_mentees_label}
18
+ - datatable = EffectiveResources.best('Admin::EffectiveMentorshipBulkGroupMenteesDatatable').new(self, mentorship_bulk_group: resource)
19
+ - raise('expected a mentees datatable') if datatable.nil?
20
+
21
+ %p The following #{pluralize(datatable.collection.count, mentorships_mentee_label)} will be grouped:
22
+ = collapse("Show #{mentorships_mentees_label}...", card_class: '') do
23
+ = render_datatable(datatable)
24
+
25
+ .my-4
26
+
27
+ = render('admin/mentorship_bulk_groups/creation', resource: resource)
28
+
29
+ = effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
30
+ = f.hidden_field :id
31
+ = f.submit "Create #{mentorship_groups_label}", center: true
@@ -0,0 +1,10 @@
1
+ = render 'layout' do
2
+ = render 'admin/mentorship_bulk_groups/content', resource: resource
3
+
4
+ = card do
5
+ = render('effective/acts_as_job_status/wizard_step', resource: resource)
6
+
7
+ - if resource.job_status == 'completed'
8
+ = effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
9
+ = f.hidden_field :id
10
+ = f.submit 'Save and Continue', center: true
@@ -0,0 +1,49 @@
1
+ = render 'layout' do
2
+ = render 'admin/mentorship_bulk_groups/content', resource: resource
3
+
4
+ = card do
5
+ - groups_datatable = EffectiveResources.best('Admin::EffectiveMentorshipGroupsDatatable').new(self, mentorship_bulk_group: resource)
6
+
7
+ %h3 #{mentorship_groups_label}
8
+ %p
9
+ There are
10
+ = pluralize(resource.mentorship_groups.published.not_notified.count, badge(:published) + ' and not yet notified ' + mentorship_group_label.downcase).html_safe
11
+ ready to be notified.
12
+
13
+ - # Mentorship Groups
14
+ = collapse("Show #{mentorship_groups_label.downcase}...", card_class: '') do
15
+ = render_datatable(groups_datatable, inline: true, filters: false)
16
+
17
+ .my-4
18
+
19
+ = effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
20
+ = f.hidden_field :id
21
+
22
+ %h3 Email to send
23
+ = f.check_box :email_form_skip, label: 'Do not send email'
24
+
25
+ = f.show_if :email_form_skip, true do
26
+ %p
27
+ No emails will be sent.
28
+ Notifications can be sent from the
29
+ = link_to(mentorship_groups_label, effective_mentorships.admin_mentorship_groups_path, target: '_blank')
30
+ page at any time.
31
+
32
+ = f.submit "Skip notifying the #{mentorship_groups_label.downcase}", center: true
33
+
34
+ = f.hide_if :email_form_skip, true do
35
+ %p
36
+ The
37
+ - email = Effective::EmailTemplate.where(template_name: :mentorship_group_created_to_mentor).first!
38
+ = link_to('mentorship_group_created_to_mentor email', effective_email_templates.edit_admin_email_template_path(email), target: '_blank')
39
+ email will be sent to each #{mentorships_mentor_label.downcase}.
40
+
41
+ %p
42
+ The
43
+ - email = Effective::EmailTemplate.where(template_name: :mentorship_group_created_to_mentee).first!
44
+ = link_to('mentorship_group_created_to_mentee email', effective_email_templates.edit_admin_email_template_path(email), target: '_blank')
45
+ email will be sent to each #{mentorships_mentee_label.downcase}.
46
+
47
+ %p Only #{badge(:published)} #{mentorship_groups_label.downcase} that have not been previously notified will be sent an email.
48
+
49
+ = f.submit "Yes, notify the #{mentorship_groups_label.downcase}", center: true
@@ -0,0 +1,10 @@
1
+ = render 'layout' do
2
+ = render 'admin/mentorship_bulk_groups/content', resource: resource
3
+
4
+ = card do
5
+ = render('effective/acts_as_job_status/wizard_step', resource: resource)
6
+
7
+ - if resource.job_status == 'completed'
8
+ = effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
9
+ = f.hidden_field :id
10
+ = f.submit 'Save and Continue', center: true
@@ -0,0 +1,30 @@
1
+ = render 'layout' do
2
+ = render 'admin/mentorship_bulk_groups/content', resource: resource
3
+
4
+ = card do
5
+ - groups_datatable = EffectiveResources.best('Admin::EffectiveMentorshipGroupsDatatable').new(self, mentorship_bulk_group: resource)
6
+
7
+ %h3 #{mentorship_groups_label}
8
+ %p
9
+ There are
10
+ = pluralize(resource.mentorship_groups.draft.count, badge(:draft) + ' ' + mentorship_group_label.downcase).html_safe
11
+ ready to be published.
12
+
13
+ - # Mentorship Groups
14
+ = collapse("Show #{mentorship_groups_label.downcase}...", card_class: '') do
15
+ = render_datatable(groups_datatable, inline: true, filters: false)
16
+
17
+ .my-4
18
+
19
+ %h3 Publish #{mentorship_groups_label}
20
+
21
+ %p
22
+ Upon clicking the button below, the above draft
23
+ = mentorship_groups_label.downcase
24
+ will be marked published.
25
+
26
+ %p Members will be able to access them from their dashboard.
27
+
28
+ = effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
29
+ = f.hidden_field :id
30
+ = f.submit "Yes, publish the #{mentorship_groups_label.downcase}", center: true
@@ -0,0 +1,49 @@
1
+ = render 'layout' do
2
+ = render 'admin/mentorship_bulk_groups/content', resource: resource
3
+
4
+ = card do
5
+ - cycle = resource.mentorship_cycle
6
+
7
+ - groups_datatable = EffectiveResources.best('Admin::EffectiveMentorshipGroupsDatatable').new(self, mentorship_bulk_group: resource)
8
+ - all_registrations_datatable = EffectiveResources.best('Admin::EffectiveMentorshipRegistrationsDatatable').new(self, mentorship_cycle: cycle)
9
+ - opt_in_without_groups_registrations_datatable = EffectiveResources.best('Admin::EffectiveMentorshipRegistrationsDatatable').new(self, mentorship_cycle: cycle, opt_in_without_groups: true)
10
+
11
+ %h3 All #{mentorship_registrations_label}
12
+
13
+ - # Mentorship Registrations
14
+ = collapse("Show all #{mentorship_registrations_label.downcase}...", card_class: '') do
15
+ = render_datatable(all_registrations_datatable, inline: true, filters: false)
16
+
17
+ .my-4
18
+
19
+ %h3 Ungrouped #{mentorship_registrations_label}
20
+ %p
21
+ There are
22
+ = pluralize(opt_in_without_groups_registrations_datatable.collection.mentors.count, mentorships_mentors_label.downcase).html_safe
23
+ and
24
+ = pluralize(opt_in_without_groups_registrations_datatable.collection.mentees.count, mentorships_mentees_label.downcase).html_safe
25
+ who opted-in but were not placed into #{mentorship_groups_label.downcase}.
26
+
27
+ - # Mentorship Registrations
28
+ = collapse("Show ungrouped opt-in #{mentorship_registrations_label.downcase}...", card_class: '') do
29
+ = render_datatable(opt_in_without_groups_registrations_datatable, inline: true, filters: false)
30
+
31
+ .my-4
32
+
33
+ %h3 Created #{mentorship_groups_label}
34
+ %p
35
+ Based on the above
36
+ = link_to(cycle, effective_mentorships.edit_admin_mentorship_cycle_path(cycle), target: '_blank')
37
+ = mentorship_registrations_label.downcase
38
+ the following
39
+ = pluralize(groups_datatable.collection.count, badge(:draft) + ' ' + mentorship_groups_label.downcase).html_safe
40
+ have been created.
41
+
42
+ %p Please edit, delete or create additional #{mentorship_groups_label.downcase} as needed.
43
+
44
+ -# Mentorship Groups
45
+ = render_datatable(groups_datatable, inline: true, filters: false)
46
+
47
+ = effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
48
+ = f.hidden_field :id
49
+ = f.submit 'Save and Continue', center: true
@@ -0,0 +1,8 @@
1
+ = render 'layout' do
2
+ = render 'admin/mentorship_bulk_groups/content', resource: resource
3
+
4
+ = card do
5
+ = effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
6
+ = f.hidden_field :id
7
+ = f.select :mentorship_cycle_id, Effective::MentorshipCycle.all
8
+ = f.save 'Save and Continue'
@@ -8,10 +8,6 @@
8
8
 
9
9
  .row
10
10
  .col-md-6
11
- = f.number_field :max_pairings_mentor,
12
- label: "Max #{mentorships_mentors_label} per #{mentorship_group_label}",
13
- hint: "The maximum number of #{mentorships_mentors_label} that will be assigned to a #{mentorship_group_label}. Leave blank for no maximum."
14
-
15
11
  = f.number_field :max_pairings_mentee, label: "Max #{mentorships_mentees_label} per #{mentorship_group_label}",
16
12
  hint: "The maximum number of #{mentorships_mentees_label} that will be assigned to a #{mentorship_group_label}. Leave blank for no maximum."
17
13
 
@@ -1,14 +1,21 @@
1
1
  = effective_form_with(model: [:admin, mentorship_group], engine: true) do |f|
2
- = f.select :mentorship_cycle_id, Effective::MentorshipCycle.sorted.all
3
- = f.text_field :title
2
+ - if f.object.persisted?
3
+ = f.static_field :title
4
+
5
+ - if inline_datatable? && inline_datatable.attributes[:mentorship_bulk_group_id].present?
6
+ = f.hidden_field :mentorship_bulk_group_id
7
+ = f.hidden_field :save_as_draft, value: true
8
+
9
+ = f.static_field :mentorship_cycle, value: f.object.mentorship_bulk_group.mentorship_cycle
10
+ - else
11
+ = f.select :mentorship_cycle_id, Effective::MentorshipCycle.sorted.all
12
+ = acts_as_published_fields(f)
4
13
 
5
14
  - if defined?(EffectiveArticleEditor)
6
15
  = f.article_editor :rich_text_admin_notes, label: "Admin Notes"
7
16
  - else
8
17
  = f.rich_text_area :rich_text_admin_notes, label: "Admin Notes"
9
18
 
10
- = f.check_box :archived, label: "Yes, this #{mentorship_group_label} is archived"
11
-
12
19
  %hr
13
20
 
14
21
  %h4= mentorship_group_users_label
@@ -1,7 +1,7 @@
1
1
  - unless local_assigns[:namespace] == :admin
2
2
  = f.hidden_field :mentorship_cycle_id
3
3
 
4
- - if f.object.mentorship_cycle.rich_text_registration_content.present?
4
+ - if f.object.mentorship_cycle&.rich_text_registration_content.present?
5
5
  = f.object.mentorship_cycle.rich_text_registration_content
6
6
 
7
7
  = f.radios :opt_in, :boolean, label: "Do you wish to register in the #{f.object.mentorship_cycle || et('effective_mentorships.name')}?"
@@ -16,7 +16,7 @@
16
16
  = f.select :location, f.object.class.locations(), required: true
17
17
  = f.radios :venue, f.object.class.venues(), required: true
18
18
 
19
- - if f.object.mentorship_cycle.rich_text_agreement_content.present?
19
+ - if f.object.mentorship_cycle&.rich_text_agreement_content.present?
20
20
  = card do
21
21
  = f.object.mentorship_cycle.rich_text_agreement_content
22
22
 
@@ -17,5 +17,5 @@
17
17
  - if available.present?
18
18
  = render_datatable(available, simple: true)
19
19
 
20
- - if available.blank? && registered.blank?
20
+ - if available.blank? && registered.blank? && groups.blank?
21
21
  %p There are no #{'additional ' if groups.present? || registered.present?}#{etsd(Effective::MentorshipCycle)} available for registration. When there are, we'll show them here.
@@ -0,0 +1,14 @@
1
+ ---
2
+ subject: 'You have been selected for a mentorship group'
3
+ ---
4
+ Hello {{ user.name }},
5
+
6
+ You have been selected as a {{ user.mentorship_role }} in the following mentorship group:
7
+
8
+ {{ group.mentorship_cycle }} - {{ group.title }}
9
+
10
+ To access the group please click below
11
+
12
+ {{ url }}
13
+
14
+ Thank you
@@ -0,0 +1,14 @@
1
+ ---
2
+ subject: 'You have been selected for a mentorship group'
3
+ ---
4
+ Hello {{ user.name }},
5
+
6
+ You have been selected as a {{ user.mentorship_role }} in the following mentorship group:
7
+
8
+ {{ group.mentorship_cycle }} - {{ group.title }}
9
+
10
+ To access the group please click below
11
+
12
+ {{ url }}
13
+
14
+ Thank you
@@ -9,6 +9,7 @@ EffectiveMentorships.setup do |config|
9
9
  # Mentorship Class Settings
10
10
  # Configure the class responsible for the mentorships
11
11
  # config.mentorship_group_class_name = 'Effective::MentorshipGroup'
12
+ # config.mentorship_bulk_group_class_name = 'Effective::MentorshipBulkGroup'
12
13
  # config.mentorship_registration_class_name = 'Effective::MentorshipRegistration'
13
14
 
14
15
  # Mailer Settings
@@ -10,6 +10,7 @@ en:
10
10
  # Application namespace
11
11
  app/mentorship_group: 'Mentorship group'
12
12
  app/mentorship_registration: 'Mentorship registration'
13
+ app/mentorship_bulk_group: 'Bulk Create Mentorship groups'
13
14
 
14
15
  # Effective namespace
15
16
  effective/mentorship_cycle: 'Mentorship cycle'
data/config/routes.rb CHANGED
@@ -13,13 +13,20 @@ EffectiveMentorships::Engine.routes.draw do
13
13
 
14
14
  namespace :admin do
15
15
  resources :mentorship_cycles, except: [:show]
16
- resources :mentorship_registrations, except: [:show]
16
+ resources :mentorship_registrations, only: [:index, :edit, :update, :delete]
17
+
18
+ resources :mentorship_bulk_groups, only: [:index, :new, :show, :destroy] do
19
+ resources :build, controller: :mentorship_bulk_groups, only: [:show, :update]
20
+ end
17
21
 
18
22
  resources :mentorship_groups, except: [:show] do
19
- post :archive, on: :member
20
- post :unarchive, on: :member
21
- post :bulk_archive, on: :collection
22
- post :bulk_unarchive, on: :collection
23
+ post :publish, on: :member
24
+ post :draft, on: :member
25
+ post :notify, on: :member
26
+
27
+ post :bulk_notify, on: :collection
28
+ post :bulk_publish, on: :collection
29
+ post :bulk_draft, on: :collection
23
30
  end
24
31
 
25
32
  resources :mentorship_group_users, except: [:show]
@@ -9,7 +9,6 @@ class CreateEffectiveMentorships < ActiveRecord::Migration[6.0]
9
9
  t.datetime :registration_start_at
10
10
  t.datetime :registration_end_at
11
11
 
12
- t.integer :max_pairings_mentor
13
12
  t.integer :max_pairings_mentee
14
13
 
15
14
  t.integer :mentorship_groups_count, default: 0
@@ -21,10 +20,13 @@ class CreateEffectiveMentorships < ActiveRecord::Migration[6.0]
21
20
 
22
21
  create_table :mentorship_groups do |t|
23
22
  t.integer :mentorship_cycle_id
23
+ t.integer :mentorship_bulk_group_id
24
24
 
25
25
  t.string :title
26
26
 
27
- t.boolean :archived, default: false
27
+ t.datetime :published_start_at
28
+ t.datetime :published_end_at
29
+ t.datetime :last_notified_at
28
30
 
29
31
  t.string :token
30
32
 
@@ -36,6 +38,9 @@ class CreateEffectiveMentorships < ActiveRecord::Migration[6.0]
36
38
  t.integer :mentorship_cycle_id
37
39
  t.integer :mentorship_group_id
38
40
 
41
+ t.string :mentorship_registration_type
42
+ t.integer :mentorship_registration_id
43
+
39
44
  t.string :user_type
40
45
  t.integer :user_id
41
46
 
@@ -75,5 +80,24 @@ class CreateEffectiveMentorships < ActiveRecord::Migration[6.0]
75
80
  t.datetime :updated_at
76
81
  t.datetime :created_at
77
82
  end
83
+
84
+ create_table :mentorship_bulk_groups do |t|
85
+ t.integer :mentorship_cycle_id
86
+ t.integer :mentorship_groups_count, default: 0
87
+
88
+ t.boolean :email_form_skip, default: false
89
+ t.text :wizard_steps
90
+
91
+ t.string :token
92
+
93
+ t.string :job_status
94
+ t.datetime :job_started_at
95
+ t.datetime :job_ended_at
96
+ t.text :job_error
97
+
98
+ t.datetime :updated_at
99
+ t.datetime :created_at
100
+ end
101
+
78
102
  end
79
103
  end
@@ -12,6 +12,7 @@ module EffectiveMentorships
12
12
  app.config.to_prepare do
13
13
  ActiveRecord::Base.extend(EffectiveMentorshipsUser::Base)
14
14
  ActiveRecord::Base.extend(EffectiveMentorshipsGroup::Base)
15
+ ActiveRecord::Base.extend(EffectiveMentorshipsBulkGroup::Base)
15
16
  ActiveRecord::Base.extend(EffectiveMentorshipsRegistration::Base)
16
17
  end
17
18
  end
@@ -1,3 +1,3 @@
1
1
  module EffectiveMentorships
2
- VERSION = '0.2.3'
2
+ VERSION = '0.3.0'
3
3
  end
@@ -7,8 +7,8 @@ module EffectiveMentorships
7
7
 
8
8
  def self.config_keys
9
9
  [
10
- :mentorship_cycles_table_name, :mentorship_groups_table_name, :mentorship_registrations_table_name,
11
- :mentorship_group_class_name, :mentorship_registration_class_name,
10
+ :mentorship_cycles_table_name, :mentorship_bulk_groups_table_name, :mentorship_groups_table_name, :mentorship_registrations_table_name,
11
+ :mentorship_group_class_name, :mentorship_registration_class_name, :mentorship_bulk_group_class_name,
12
12
  :layout,
13
13
  :mailer, :parent_mailer, :deliver_method, :mailer_layout, :mailer_sender, :mailer_froms, :mailer_admin, :mailer_subject,
14
14
  ]
@@ -20,6 +20,10 @@ module EffectiveMentorships
20
20
  mailer&.constantize || Effective::MentorshipsMailer
21
21
  end
22
22
 
23
+ def self.MentorshipBulkGroup
24
+ mentorship_bulk_group_class_name&.constantize || Effective::MentorshipBulkGroup
25
+ end
26
+
23
27
  def self.MentorshipGroup
24
28
  mentorship_group_class_name&.constantize || Effective::MentorshipGroup
25
29
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_mentorships
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.3.0
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: 2024-11-30 00:00:00.000000000 Z
11
+ date: 2025-01-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -205,12 +205,16 @@ files:
205
205
  - app/assets/config/effective_mentorships_manifest.js
206
206
  - app/assets/javascripts/effective_mentorships.js
207
207
  - app/assets/stylesheets/effective_mentorships.scss
208
+ - app/controllers/admin/mentorship_bulk_groups_controller.rb
208
209
  - app/controllers/admin/mentorship_cycles_controller.rb
209
210
  - app/controllers/admin/mentorship_group_users_controller.rb
210
211
  - app/controllers/admin/mentorship_groups_controller.rb
211
212
  - app/controllers/admin/mentorship_registrations_controller.rb
212
213
  - app/controllers/effective/mentorship_groups_controller.rb
213
214
  - app/controllers/effective/mentorship_registrations_controller.rb
215
+ - app/datatables/admin/effective_mentorship_bulk_group_mentees_datatable.rb
216
+ - app/datatables/admin/effective_mentorship_bulk_group_mentors_datatable.rb
217
+ - app/datatables/admin/effective_mentorship_bulk_groups_datatable.rb
214
218
  - app/datatables/admin/effective_mentorship_cycles_datatable.rb
215
219
  - app/datatables/admin/effective_mentorship_group_users_datatable.rb
216
220
  - app/datatables/admin/effective_mentorship_groups_datatable.rb
@@ -219,14 +223,30 @@ files:
219
223
  - app/datatables/effective_mentorships_groups_datatable.rb
220
224
  - app/datatables/effective_mentorships_registrations_datatable.rb
221
225
  - app/helpers/effective_mentorships_helper.rb
226
+ - app/jobs/effective/mentorships_bulk_create_groups_job.rb
227
+ - app/jobs/effective/mentorships_bulk_notify_groups_job.rb
222
228
  - app/mailers/effective/mentorships_mailer.rb
229
+ - app/models/concerns/effective_mentorships_bulk_group.rb
223
230
  - app/models/concerns/effective_mentorships_group.rb
224
231
  - app/models/concerns/effective_mentorships_registration.rb
225
232
  - app/models/concerns/effective_mentorships_user.rb
233
+ - app/models/effective/mentorship_bulk_group.rb
226
234
  - app/models/effective/mentorship_cycle.rb
227
235
  - app/models/effective/mentorship_group.rb
228
236
  - app/models/effective/mentorship_group_user.rb
229
237
  - app/models/effective/mentorship_registration.rb
238
+ - app/views/admin/mentorship_bulk_groups/_content.html.haml
239
+ - app/views/admin/mentorship_bulk_groups/_creation.html.haml
240
+ - app/views/admin/mentorship_bulk_groups/_layout.html.haml
241
+ - app/views/admin/mentorship_bulk_groups/_selection.html.haml
242
+ - app/views/admin/mentorship_bulk_groups/finished.html.haml
243
+ - app/views/admin/mentorship_bulk_groups/group.html.haml
244
+ - app/views/admin/mentorship_bulk_groups/grouping.html.haml
245
+ - app/views/admin/mentorship_bulk_groups/notify.html.haml
246
+ - app/views/admin/mentorship_bulk_groups/notifying.html.haml
247
+ - app/views/admin/mentorship_bulk_groups/publish.html.haml
248
+ - app/views/admin/mentorship_bulk_groups/review.html.haml
249
+ - app/views/admin/mentorship_bulk_groups/start.html.haml
230
250
  - app/views/admin/mentorship_cycles/_form.html.haml
231
251
  - app/views/admin/mentorship_cycles/_form_mentorship_cycle.html.haml
232
252
  - app/views/admin/mentorship_group_users/_form.html.haml
@@ -240,6 +260,8 @@ files:
240
260
  - app/views/effective/mentorship_registrations/_mentorship_registration.html.haml
241
261
  - app/views/effective/mentorships/_dashboard.html.haml
242
262
  - app/views/effective/mentorships_mailer/README.md
263
+ - app/views/effective/mentorships_mailer/mentorship_group_created_to_mentee.liquid
264
+ - app/views/effective/mentorships_mailer/mentorship_group_created_to_mentor.liquid
243
265
  - config/effective_mentorships.rb
244
266
  - config/locales/effective_mentorships.en.yml
245
267
  - config/routes.rb