effective_work_experience 0.0.1

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 (103) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +188 -0
  4. data/Rakefile +18 -0
  5. data/app/assets/config/effective_work_experience_manifest.js +3 -0
  6. data/app/assets/javascripts/effective_work_experience/base.js +0 -0
  7. data/app/assets/javascripts/effective_work_experience.js +1 -0
  8. data/app/assets/stylesheets/effective_work_experience/base.scss +7 -0
  9. data/app/assets/stylesheets/effective_work_experience.scss +1 -0
  10. data/app/controllers/admin/work_experience_categories_controller.rb +19 -0
  11. data/app/controllers/admin/work_experience_projects_controller.rb +19 -0
  12. data/app/controllers/admin/work_experience_records_controller.rb +19 -0
  13. data/app/controllers/admin/work_experience_reports_controller.rb +21 -0
  14. data/app/controllers/admin/work_experience_subcategories_controller.rb +19 -0
  15. data/app/controllers/admin/work_experience_summaries_controller.rb +19 -0
  16. data/app/controllers/effective/work_experience_projects_controller.rb +17 -0
  17. data/app/controllers/effective/work_experience_records_controller.rb +17 -0
  18. data/app/controllers/effective/work_experience_reports_controller.rb +19 -0
  19. data/app/controllers/effective/work_experience_summaries_controller.rb +17 -0
  20. data/app/datatables/admin/effective_work_experience_categories_datatable.rb +22 -0
  21. data/app/datatables/admin/effective_work_experience_projects_datatable.rb +24 -0
  22. data/app/datatables/admin/effective_work_experience_records_datatable.rb +37 -0
  23. data/app/datatables/admin/effective_work_experience_reports_datatable.rb +34 -0
  24. data/app/datatables/admin/effective_work_experience_subcategories_datatable.rb +24 -0
  25. data/app/datatables/admin/effective_work_experience_summaries_datatable.rb +57 -0
  26. data/app/datatables/effective_work_experience_projects_datatable.rb +38 -0
  27. data/app/datatables/effective_work_experience_records_datatable.rb +61 -0
  28. data/app/datatables/effective_work_experience_reports_review_datatable.rb +15 -0
  29. data/app/datatables/effective_work_experience_summaries_datatable.rb +49 -0
  30. data/app/datatables/effective_work_experience_summaries_review_datatable.rb +43 -0
  31. data/app/helpers/effective_work_experience_helper.rb +46 -0
  32. data/app/mailers/effective/work_experience_mailer.rb +39 -0
  33. data/app/models/concerns/effective_work_experience_summary.rb +264 -0
  34. data/app/models/concerns/effective_work_experience_user.rb +135 -0
  35. data/app/models/effective/work_experience_category.rb +29 -0
  36. data/app/models/effective/work_experience_entry.rb +43 -0
  37. data/app/models/effective/work_experience_outside_mentor.rb +35 -0
  38. data/app/models/effective/work_experience_project.rb +38 -0
  39. data/app/models/effective/work_experience_record.rb +99 -0
  40. data/app/models/effective/work_experience_report.rb +50 -0
  41. data/app/models/effective/work_experience_subcategory.rb +31 -0
  42. data/app/models/effective/work_experience_summary.rb +7 -0
  43. data/app/views/admin/work_experience/_user_fields.html.haml +17 -0
  44. data/app/views/admin/work_experience/_user_work_experience.html.haml +21 -0
  45. data/app/views/admin/work_experience_categories/_form.html.haml +7 -0
  46. data/app/views/admin/work_experience_categories/_form_work_experience_category.html.haml +5 -0
  47. data/app/views/admin/work_experience_projects/_form.html.haml +11 -0
  48. data/app/views/admin/work_experience_projects/_work_experience_project.html.haml +1 -0
  49. data/app/views/admin/work_experience_records/_form.html.haml +12 -0
  50. data/app/views/admin/work_experience_records/_work_experience_record.html.haml +1 -0
  51. data/app/views/admin/work_experience_reports/show.html.haml +2 -0
  52. data/app/views/admin/work_experience_subcategories/_form.html.haml +7 -0
  53. data/app/views/admin/work_experience_subcategories/_form_work_experience_subcategory.html.haml +10 -0
  54. data/app/views/admin/work_experience_summaries/_form.html.haml +7 -0
  55. data/app/views/admin/work_experience_summaries/_form_work_experience_summary.html.haml +32 -0
  56. data/app/views/admin/work_experience_summaries/_work_experience_summary.html.haml +1 -0
  57. data/app/views/effective/work_experience/_dashboard_intern.html.haml +73 -0
  58. data/app/views/effective/work_experience/_dashboard_mentor.html.haml +28 -0
  59. data/app/views/effective/work_experience_mailer/work_experience_summary_reviewed.liquid +13 -0
  60. data/app/views/effective/work_experience_mailer/work_experience_summary_submitted.liquid +15 -0
  61. data/app/views/effective/work_experience_outside_mentors/_fields.html.haml +5 -0
  62. data/app/views/effective/work_experience_projects/_fields.html.haml +7 -0
  63. data/app/views/effective/work_experience_projects/_form.html.haml +3 -0
  64. data/app/views/effective/work_experience_projects/_work_experience_project.html.haml +2 -0
  65. data/app/views/effective/work_experience_records/_fields.html.haml +52 -0
  66. data/app/views/effective/work_experience_records/_form.html.haml +5 -0
  67. data/app/views/effective/work_experience_records/_work_experience_record.html.haml +63 -0
  68. data/app/views/effective/work_experience_reports/_work_experience_report.html.haml +103 -0
  69. data/app/views/effective/work_experience_reports/show.html.haml +2 -0
  70. data/app/views/effective/work_experience_summaries/_content.html.haml +1 -0
  71. data/app/views/effective/work_experience_summaries/_layout.html.haml +3 -0
  72. data/app/views/effective/work_experience_summaries/_projects.html.haml +5 -0
  73. data/app/views/effective/work_experience_summaries/_projects_datatable.html.haml +2 -0
  74. data/app/views/effective/work_experience_summaries/_projects_fields.html.haml +1 -0
  75. data/app/views/effective/work_experience_summaries/_records.html.haml +65 -0
  76. data/app/views/effective/work_experience_summaries/_records_datatable.html.haml +2 -0
  77. data/app/views/effective/work_experience_summaries/_records_fields.html.haml +1 -0
  78. data/app/views/effective/work_experience_summaries/_review.html.haml +4 -0
  79. data/app/views/effective/work_experience_summaries/_review_fields.html.haml +4 -0
  80. data/app/views/effective/work_experience_summaries/_reviewed.html.haml +1 -0
  81. data/app/views/effective/work_experience_summaries/_start_fields.html.haml +1 -0
  82. data/app/views/effective/work_experience_summaries/_summary.html.haml +79 -0
  83. data/app/views/effective/work_experience_summaries/_user.html.haml +7 -0
  84. data/app/views/effective/work_experience_summaries/_work_experience_summary.html.haml +7 -0
  85. data/app/views/effective/work_experience_summaries/projects.html.haml +14 -0
  86. data/app/views/effective/work_experience_summaries/records.html.haml +14 -0
  87. data/app/views/effective/work_experience_summaries/review.html.haml +13 -0
  88. data/app/views/effective/work_experience_summaries/reviewed.html.haml +11 -0
  89. data/app/views/effective/work_experience_summaries/start.html.haml +16 -0
  90. data/app/views/effective/work_experience_summaries/submit.html.haml +10 -0
  91. data/app/views/effective/work_experience_summaries/submitted.html.haml +19 -0
  92. data/config/effective_work_experience.rb +34 -0
  93. data/config/locales/effective_work_experience.en.yml +94 -0
  94. data/config/routes.rb +28 -0
  95. data/db/migrate/101_create_effective_work_experience.rb +120 -0
  96. data/db/seeds.rb +40 -0
  97. data/lib/effective_work_experience/engine.rb +19 -0
  98. data/lib/effective_work_experience/version.rb +3 -0
  99. data/lib/effective_work_experience.rb +34 -0
  100. data/lib/generators/effective_work_experience/install_generator.rb +24 -0
  101. data/lib/generators/templates/effective_work_experience_mailer_preview.rb +4 -0
  102. data/lib/tasks/effective_work_experience_tasks.rake +8 -0
  103. metadata +325 -0
@@ -0,0 +1,94 @@
1
+ en:
2
+ effective_work_experience:
3
+ name: 'Work Experience'
4
+
5
+ activerecord:
6
+ models:
7
+ # These ones might be app level
8
+ app/work_experience_summary: 'Work Experience Summary'
9
+
10
+ # These ones should stay effective
11
+ effective/work_experience_category: 'Work Experience Category'
12
+ effective/work_experience_subcategory: 'Work Experience Subcategory'
13
+ effective/work_experience_record: 'Work Experience Record'
14
+ effective/work_experience_entry: 'Work Experience Entry'
15
+ effective/work_experience_project: 'Work Experience Project'
16
+ effective/work_experience_summary: 'Work Experience Summary'
17
+ effective/work_experience_outside_mentor: 'Outside Mentor'
18
+
19
+ attributes:
20
+ effective/work_experience_category:
21
+ title: 'Title'
22
+ minimum_hours: 'Minimum Hours'
23
+ position: 'Position'
24
+
25
+ effective/work_experience_subcategory:
26
+ title: 'Title'
27
+ minimum_hours: 'Minimum Hours'
28
+ position: 'Position'
29
+ work_experience_category: 'Category'
30
+ body: 'Description'
31
+
32
+ effective/work_experience_record:
33
+ month: 'Month'
34
+ total_hours: 'Hours'
35
+ backdated: 'Backdated'
36
+ submitted_at: 'Submitted'
37
+ reviewed_at: 'Reviewed'
38
+
39
+ effective/work_experience_entry:
40
+ work_experience_subcategory: 'Subcategory'
41
+ week_1: 'Week 1'
42
+ week_2: 'Week 2'
43
+ week_3: 'Week 3'
44
+ week_4: 'Week 4'
45
+ week_5: 'Week 5'
46
+
47
+ effective/work_experience_project:
48
+ name: 'Name'
49
+ description: 'Description'
50
+ start_on: 'Start Date'
51
+ end_on: 'End Date'
52
+
53
+ effective/work_experience_summary:
54
+ user: 'Intern'
55
+ mentor: 'Mentor'
56
+ supervisor: 'Supervisor'
57
+ start_on: 'Start Date'
58
+ end_on: 'End Date'
59
+ total_hours: 'Hours this period'
60
+ total_hours_to_date: 'Total hours to date'
61
+ recommendation: 'Recommendation'
62
+ comments: 'Reviewer Comments'
63
+ submitted_at: 'Submitted'
64
+ reviewed_at: 'Reviewed'
65
+ approve_work_experience_summary: 'Approve Work Experience Summary'
66
+
67
+ effective/work_experience_outside_mentor:
68
+ name: 'Name'
69
+ email: 'Email'
70
+ phone: 'Phone'
71
+ regulated_profession: 'Regulated Profession'
72
+ admin_notes: 'Admin Notes'
73
+
74
+ # The work experience report is an ActiveModel, not an ActiveRecord
75
+ activemodel:
76
+ models:
77
+ effective/work_experience_report: 'Work Experience Report'
78
+
79
+ attributes:
80
+ effective/work_experience_report:
81
+ user: 'Intern'
82
+
83
+ datatables:
84
+ effective_work_experience_summaries_datatable: 'Work Experience Summaries'
85
+ effective_work_experience_summaries_review_datatable: 'Work Experience Summaries to Review'
86
+ effective_work_experience_records_datatable: 'Work Experience Records'
87
+ effective_work_experience_projects_datatable: 'Work Experience Projects'
88
+ effective_work_experience_reports_review_datatable: 'Work Experience Reports'
89
+ admin/effective_work_experience_summaries_datatable: 'Work Experience Summaries'
90
+ admin/effective_work_experience_records_datatable: 'Work Experience Records'
91
+ admin/effective_work_experience_projects_datatable: 'Work Experience Projects'
92
+ admin/effective_work_experience_categories_datatable: 'Work Experience Categories'
93
+ admin/effective_work_experience_subcategories_datatable: 'Work Experience Subcategories'
94
+ admin/effective_work_experience_reports_datatable: 'Work Experience Reports'
data/config/routes.rb ADDED
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ Rails.application.routes.draw do
4
+ mount EffectiveWorkExperience::Engine => '/', as: 'effective_work_experience'
5
+ end
6
+
7
+ EffectiveWorkExperience::Engine.routes.draw do
8
+ # Public routes
9
+ scope module: 'effective' do
10
+ resources :work_experience_records
11
+ resources :work_experience_projects
12
+ resources :work_experience_reports, only: [:show]
13
+
14
+ resources :work_experience_summaries, only: [:new, :create, :show, :destroy] do
15
+ resources :build, controller: :work_experience_summaries, only: [:show, :update]
16
+ end
17
+ end
18
+
19
+ namespace :admin do
20
+ resources :work_experience_categories, only: [:index, :show, :edit, :update]
21
+ resources :work_experience_subcategories, except: [:show]
22
+ resources :work_experience_projects
23
+ resources :work_experience_records
24
+ resources :work_experience_reports, only: [:index, :show]
25
+ resources :work_experience_summaries, only: [:index, :show, :edit, :update, :destroy]
26
+ end
27
+
28
+ end
@@ -0,0 +1,120 @@
1
+ class CreateEffectiveWorkExperience < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :work_experience_categories do |t|
4
+ t.string :title
5
+ t.integer :minimum_hours
6
+ t.integer :position
7
+
8
+ t.timestamps
9
+ end
10
+
11
+ create_table :work_experience_subcategories do |t|
12
+ t.integer :work_experience_category_id
13
+
14
+ t.string :title
15
+ t.integer :minimum_hours
16
+ t.integer :position
17
+
18
+ t.timestamps
19
+ end
20
+
21
+ create_table :work_experience_outside_mentors do |t|
22
+ t.integer :user_id
23
+ t.string :user_type
24
+
25
+ t.string :name
26
+ t.string :email
27
+ t.string :phone
28
+ t.string :regulated_profession
29
+ t.text :admin_notes
30
+
31
+ t.timestamps
32
+ end
33
+
34
+ create_table :work_experience_records do |t|
35
+ t.integer :user_id
36
+ t.string :user_type
37
+
38
+ t.date :month
39
+ t.decimal :total_hours, precision: 10, scale: 2
40
+
41
+ # There can only be one backdated work experience record
42
+ t.boolean :backdated, default: false
43
+
44
+ t.string :status
45
+ t.text :status_steps
46
+
47
+ t.datetime :submitted_at
48
+ t.datetime :reviewed_at
49
+
50
+ t.timestamps
51
+ end
52
+
53
+ create_table :work_experience_entries do |t|
54
+ t.integer :user_id
55
+ t.string :user_type
56
+
57
+ t.integer :work_experience_record_id
58
+ t.integer :work_experience_subcategory_id
59
+
60
+ t.decimal :week_1, precision: 10, scale: 2
61
+ t.decimal :week_2, precision: 10, scale: 2
62
+ t.decimal :week_3, precision: 10, scale: 2
63
+ t.decimal :week_4, precision: 10, scale: 2
64
+ t.decimal :week_5, precision: 10, scale: 2
65
+
66
+ t.timestamps
67
+ end
68
+
69
+ create_table :work_experience_projects do |t|
70
+ t.integer :user_id
71
+ t.string :user_type
72
+
73
+ t.string :name
74
+ t.text :description
75
+
76
+ t.date :start_on
77
+ t.date :end_on
78
+
79
+ t.timestamps
80
+ end
81
+
82
+ create_table :work_experience_summaries do |t|
83
+ t.integer :user_id
84
+ t.string :user_type
85
+
86
+ t.integer :mentor_id
87
+ t.string :mentor_type
88
+
89
+ t.integer :supervisor_id
90
+ t.string :supervisor_type
91
+
92
+ t.string :status
93
+ t.text :status_steps
94
+
95
+ t.text :wizard_steps
96
+
97
+ t.date :start_on
98
+ t.date :end_on
99
+
100
+ t.decimal :total_hours, precision: 10, scale: 2
101
+
102
+ t.string :recommendation
103
+ t.text :comments
104
+
105
+ t.datetime :submitted_at
106
+ t.datetime :reviewed_at
107
+
108
+ t.string :token
109
+
110
+ t.timestamps
111
+ end
112
+
113
+ add_index :work_experience_outside_mentors, [:user_id, :user_type], unique: true
114
+ add_index :work_experience_records, [:user_id, :user_type]
115
+ add_index :work_experience_entries, [:work_experience_record_id]
116
+ add_index :work_experience_projects, [:user_id, :user_type]
117
+ add_index :work_experience_summaries, [:user_id, :user_type]
118
+ add_index :work_experience_summaries, [:mentor_id, :mentor_type]
119
+ end
120
+ end
data/db/seeds.rb ADDED
@@ -0,0 +1,40 @@
1
+ puts "Running effective_work_experience seeds"
2
+
3
+ # An example set of work experience categories and subcategories.
4
+ # Each application will define their own, from the admin screens or their own seeds.
5
+
6
+ categories = [
7
+ { title: 'Design Development', minimum_hours: 500, position: 1 },
8
+ { title: 'Contract Documents', minimum_hours: 1275, position: 2 },
9
+ { title: 'Office Practice', minimum_hours: 155, position: 3 },
10
+ { title: 'Other', minimum_hours: nil, position: 4 }
11
+ ]
12
+
13
+ categories.each do |attributes|
14
+ work_experience_category = Effective::WorkExperienceCategory.where(title: attributes[:title]).first_or_initialize
15
+ work_experience_category.update!(attributes)
16
+ end
17
+
18
+ subcategories = [
19
+ { category: 'Design Development', position: 1, minimum_hours: 200, title: 'Conceptual Designs' },
20
+ { category: 'Design Development', position: 2, minimum_hours: 300, title: 'Other Design Development' },
21
+ { category: 'Contract Documents', position: 3, minimum_hours: 150, title: 'Grading and Drainage Plans' },
22
+ { category: 'Contract Documents', position: 4, minimum_hours: 1125, title: 'Other Contract Documents' },
23
+ { category: 'Office Practice', position: 5, minimum_hours: 155, title: 'Meetings' },
24
+ { category: 'Other', position: 6, minimum_hours: nil, title: 'Other' }
25
+ ]
26
+
27
+ subcategories.each do |attributes|
28
+ work_experience_category = Effective::WorkExperienceCategory.where(title: attributes[:category]).first!
29
+
30
+ work_experience_subcategory = Effective::WorkExperienceSubcategory.where(position: attributes[:position]).first_or_initialize
31
+
32
+ work_experience_subcategory.update!(
33
+ work_experience_category: work_experience_category,
34
+ position: attributes[:position],
35
+ minimum_hours: attributes[:minimum_hours],
36
+ title: attributes[:title]
37
+ )
38
+ end
39
+
40
+ puts "Created #{Effective::WorkExperienceCategory.count} work experience categories and #{Effective::WorkExperienceSubcategory.count} subcategories"
@@ -0,0 +1,19 @@
1
+ module EffectiveWorkExperience
2
+ class Engine < ::Rails::Engine
3
+ engine_name 'effective_work_experience'
4
+
5
+ # Set up our default configuration options.
6
+ initializer 'effective_work_experience.defaults', before: :load_config_initializers do |app|
7
+ eval File.read("#{config.root}/config/effective_work_experience.rb")
8
+ end
9
+
10
+ # Include the work experience concerns and allow any ActiveRecord object to call them
11
+ initializer 'effective_work_experience.active_record' do |app|
12
+ app.config.to_prepare do
13
+ ActiveRecord::Base.extend(EffectiveWorkExperienceSummary::Base)
14
+ ActiveRecord::Base.extend(EffectiveWorkExperienceUser::Base)
15
+ end
16
+ end
17
+
18
+ end
19
+ end
@@ -0,0 +1,3 @@
1
+ module EffectiveWorkExperience
2
+ VERSION = '0.0.1'.freeze
3
+ end
@@ -0,0 +1,34 @@
1
+ require 'effective_resources'
2
+ require 'effective_datatables'
3
+ require 'effective_work_experience/engine'
4
+ require 'effective_work_experience/version'
5
+
6
+ module EffectiveWorkExperience
7
+
8
+ def self.config_keys
9
+ [
10
+ :work_experience_categories_table_name, :work_experience_subcategories_table_name,
11
+ :work_experience_records_table_name, :work_experience_entries_table_name,
12
+ :work_experience_projects_table_name, :work_experience_summaries_table_name,
13
+ :work_experience_outside_mentors_table_name,
14
+
15
+ :work_experience_summary_class_name,
16
+
17
+ :layout, :recommendations, :summary_months,
18
+ :mailer, :parent_mailer, :deliver_method, :mailer_layout, :mailer_sender, :mailer_admin, :mailer_subject,
19
+ :use_effective_email_templates
20
+ ]
21
+ end
22
+
23
+ include EffectiveGem
24
+
25
+ # The only swappable class. Mark yours with effective_work_experience_summary
26
+ def self.WorkExperienceSummary
27
+ work_experience_summary_class_name&.constantize || Effective::WorkExperienceSummary
28
+ end
29
+
30
+ def self.mailer_class
31
+ mailer&.constantize || Effective::WorkExperienceMailer
32
+ end
33
+
34
+ end
@@ -0,0 +1,24 @@
1
+ module EffectiveWorkExperience
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+ include Rails::Generators::Migration
5
+
6
+ desc 'Creates an EffectiveWorkExperience initializer in your application.'
7
+
8
+ source_root File.expand_path('../../templates', __FILE__)
9
+
10
+ def self.next_migration_number(dirname)
11
+ ActiveRecord::Migration.next_migration_number(current_migration_number(dirname) + 1)
12
+ end
13
+
14
+ def copy_initializer
15
+ template ('../' * 3) + 'config/effective_work_experience.rb', 'config/initializers/effective_work_experience.rb'
16
+ end
17
+
18
+ def create_migration_file
19
+ migration_template ('../' * 3) + 'db/migrate/101_create_effective_work_experience.rb', 'db/migrate/create_effective_work_experience.rb'
20
+ end
21
+
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,4 @@
1
+ # Visit http://localhost:3000/rails/mailers
2
+
3
+ class EffectiveWorkExperienceMailerPreview < ActionMailer::Preview
4
+ end
@@ -0,0 +1,8 @@
1
+ namespace :effective_work_experience do
2
+
3
+ # bundle exec rake effective_work_experience:seed
4
+ task seed: :environment do
5
+ load "#{__dir__}/../../db/seeds.rb"
6
+ end
7
+
8
+ end