effective_cpd 0.0.1 → 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 (167) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +89 -10
  3. data/app/controllers/admin/cpd_audit_level_questions_controller.rb +13 -0
  4. data/app/controllers/admin/cpd_audit_levels_controller.rb +13 -0
  5. data/app/controllers/admin/cpd_audit_reviews_controller.rb +13 -0
  6. data/app/controllers/admin/cpd_audits_controller.rb +41 -0
  7. data/app/controllers/effective/cpd_audit_reviews_controller.rb +60 -0
  8. data/app/controllers/effective/cpd_audits_controller.rb +55 -0
  9. data/app/controllers/effective/cpd_cycles_controller.rb +1 -0
  10. data/app/controllers/effective/cpd_statements_controller.rb +1 -3
  11. data/app/datatables/admin/effective_cpd_audit_level_questions_datatable.rb +30 -0
  12. data/app/datatables/admin/effective_cpd_audit_levels_datatable.rb +34 -0
  13. data/app/datatables/admin/effective_cpd_audit_reviews_datatable.rb +29 -0
  14. data/app/datatables/admin/effective_cpd_audits_datatable.rb +67 -0
  15. data/app/datatables/admin/effective_cpd_statements_datatable.rb +3 -3
  16. data/app/datatables/effective_cpd_available_audit_reviews_datatable.rb +37 -0
  17. data/app/datatables/effective_cpd_available_audits_datatable.rb +30 -0
  18. data/app/datatables/{effective_cpd_datatable.rb → effective_cpd_available_cycles_datatable.rb} +3 -4
  19. data/app/datatables/effective_cpd_completed_audit_reviews_datatable.rb +32 -0
  20. data/app/datatables/effective_cpd_completed_audits_datatable.rb +24 -0
  21. data/app/datatables/effective_cpd_completed_statements_datatable.rb +28 -0
  22. data/app/helpers/effective_cpd_audits_helper.rb +48 -0
  23. data/app/mailers/effective/cpd_mailer.rb +155 -3
  24. data/app/models/effective/cpd_activity.rb +16 -3
  25. data/app/models/effective/cpd_audit.rb +380 -0
  26. data/app/models/effective/cpd_audit_level.rb +87 -0
  27. data/app/models/effective/cpd_audit_level_question.rb +91 -0
  28. data/app/models/effective/cpd_audit_level_question_option.rb +34 -0
  29. data/app/models/effective/cpd_audit_level_section.rb +50 -0
  30. data/app/models/effective/cpd_audit_response.rb +86 -0
  31. data/app/models/effective/cpd_audit_response_option.rb +6 -0
  32. data/app/models/effective/cpd_audit_review.rb +222 -0
  33. data/app/models/effective/cpd_audit_review_item.rb +34 -0
  34. data/app/models/effective/cpd_category.rb +12 -3
  35. data/app/models/effective/cpd_cycle.rb +7 -0
  36. data/app/models/effective/cpd_rule.rb +3 -1
  37. data/app/models/effective/cpd_statement.rb +15 -8
  38. data/app/views/admin/cpd_activities/_form.html.haml +1 -1
  39. data/app/views/admin/cpd_audit_level_questions/_form.html.haml +100 -0
  40. data/app/views/admin/cpd_audit_levels/_form.html.haml +24 -0
  41. data/app/views/admin/cpd_audit_levels/_form_content_audit.html.haml +15 -0
  42. data/app/views/admin/cpd_audit_levels/_form_content_audit_review.html.haml +15 -0
  43. data/app/views/admin/cpd_audit_levels/_form_cpd_audit_level.html.haml +52 -0
  44. data/app/views/admin/cpd_audit_levels/_form_cpd_audit_level_section.html.haml +10 -0
  45. data/app/views/admin/cpd_audit_reviews/_cpd_audit_review.html.haml +1 -0
  46. data/app/views/admin/cpd_audit_reviews/_form.html.haml +13 -0
  47. data/app/views/admin/cpd_audits/_audit_reviewer_fields.html.haml +2 -0
  48. data/app/views/admin/cpd_audits/_auditee_fields.html.haml +2 -0
  49. data/app/views/admin/cpd_audits/_form.html.haml +46 -0
  50. data/app/views/admin/cpd_audits/_form_conflict.html.haml +24 -0
  51. data/app/views/admin/cpd_audits/_form_determination.html.haml +10 -0
  52. data/app/views/admin/cpd_audits/_form_exemption.html.haml +24 -0
  53. data/app/views/admin/cpd_audits/_form_extension.html.haml +24 -0
  54. data/app/views/admin/cpd_audits/_form_new.html.haml +28 -0
  55. data/app/views/admin/cpd_audits/_status.html.haml +121 -0
  56. data/app/views/admin/cpd_categories/_form.html.haml +1 -1
  57. data/app/views/admin/cpd_cycles/_form.html.haml +4 -4
  58. data/app/views/admin/cpd_cycles/_form_cpd_cycle.html.haml +3 -0
  59. data/app/views/admin/cpd_statements/_cpd_statement.html.haml +7 -0
  60. data/app/views/effective/cpd_audit_level_questions/_cpd_audit_level_question.html.haml +5 -0
  61. data/app/views/effective/cpd_audit_responses/_cpd_audit_response.html.haml +4 -0
  62. data/app/views/effective/cpd_audit_responses/_fields.html.haml +13 -0
  63. data/app/views/effective/cpd_audit_responses/fields/_choose_one.html.haml +1 -0
  64. data/app/views/effective/cpd_audit_responses/fields/_date.html.haml +2 -0
  65. data/app/views/effective/cpd_audit_responses/fields/_email.html.haml +2 -0
  66. data/app/views/effective/cpd_audit_responses/fields/_long_answer.html.haml +1 -0
  67. data/app/views/effective/cpd_audit_responses/fields/_number.html.haml +2 -0
  68. data/app/views/effective/cpd_audit_responses/fields/_select_all_that_apply.html.haml +1 -0
  69. data/app/views/effective/cpd_audit_responses/fields/_select_up_to_1.html.haml +1 -0
  70. data/app/views/effective/cpd_audit_responses/fields/_select_up_to_2.html.haml +1 -0
  71. data/app/views/effective/cpd_audit_responses/fields/_select_up_to_3.html.haml +1 -0
  72. data/app/views/effective/cpd_audit_responses/fields/_select_up_to_4.html.haml +1 -0
  73. data/app/views/effective/cpd_audit_responses/fields/_select_up_to_5.html.haml +1 -0
  74. data/app/views/effective/cpd_audit_responses/fields/_short_answer.html.haml +1 -0
  75. data/app/views/effective/cpd_audit_responses/fields/_upload_file.html.haml +1 -0
  76. data/app/views/effective/cpd_audit_responses/responses/_choose_one.html.haml +1 -0
  77. data/app/views/effective/cpd_audit_responses/responses/_date.html.haml +1 -0
  78. data/app/views/effective/cpd_audit_responses/responses/_email.html.haml +1 -0
  79. data/app/views/effective/cpd_audit_responses/responses/_long_answer.html.haml +1 -0
  80. data/app/views/effective/cpd_audit_responses/responses/_number.html.haml +1 -0
  81. data/app/views/effective/cpd_audit_responses/responses/_select_all_that_apply.html.haml +5 -0
  82. data/app/views/effective/cpd_audit_responses/responses/_select_up_to_1.html.haml +1 -0
  83. data/app/views/effective/cpd_audit_responses/responses/_select_up_to_2.html.haml +5 -0
  84. data/app/views/effective/cpd_audit_responses/responses/_select_up_to_3.html.haml +5 -0
  85. data/app/views/effective/cpd_audit_responses/responses/_select_up_to_4.html.haml +5 -0
  86. data/app/views/effective/cpd_audit_responses/responses/_select_up_to_5.html.haml +5 -0
  87. data/app/views/effective/cpd_audit_responses/responses/_short_answer.html.haml +1 -0
  88. data/app/views/effective/cpd_audit_responses/responses/_upload_file.html.haml +4 -0
  89. data/app/views/effective/cpd_audit_review_items/_cpd_audit_review_item.html.haml +6 -0
  90. data/app/views/effective/cpd_audit_review_items/_fields.html.haml +11 -0
  91. data/app/views/effective/cpd_audit_reviews/_conflict.html.haml +15 -0
  92. data/app/views/effective/cpd_audit_reviews/_cpd_audit_level_section.html.haml +23 -0
  93. data/app/views/effective/cpd_audit_reviews/_cpd_audit_review.html.haml +17 -0
  94. data/app/views/effective/cpd_audit_reviews/_cpd_statement.html.haml +15 -0
  95. data/app/views/effective/cpd_audit_reviews/_layout.html.haml +24 -0
  96. data/app/views/effective/cpd_audit_reviews/_recommendation.html.haml +9 -0
  97. data/app/views/effective/cpd_audit_reviews/_summary.html.haml +47 -0
  98. data/app/views/effective/cpd_audit_reviews/complete.html.haml +20 -0
  99. data/app/views/effective/cpd_audit_reviews/conflict.html.haml +21 -0
  100. data/app/views/effective/cpd_audit_reviews/cpd_audit_level_section.html.haml +43 -0
  101. data/app/views/effective/cpd_audit_reviews/cpd_statement.html.haml +35 -0
  102. data/app/views/effective/cpd_audit_reviews/information.html.haml +5 -0
  103. data/app/views/effective/cpd_audit_reviews/instructions.html.haml +10 -0
  104. data/app/views/effective/cpd_audit_reviews/questionnaire.html.haml +8 -0
  105. data/app/views/effective/cpd_audit_reviews/recommendation.html.haml +21 -0
  106. data/app/views/effective/cpd_audit_reviews/start.html.haml +10 -0
  107. data/app/views/effective/cpd_audit_reviews/statements.html.haml +29 -0
  108. data/app/views/effective/cpd_audit_reviews/submit.html.haml +14 -0
  109. data/app/views/effective/cpd_audit_reviews/waiting.html.haml +9 -0
  110. data/app/views/effective/cpd_audits/_conflict.html.haml +15 -0
  111. data/app/views/effective/cpd_audits/_cpd_audit.html.haml +12 -0
  112. data/app/views/effective/cpd_audits/_cpd_audit_level_section.html.haml +14 -0
  113. data/app/views/effective/cpd_audits/_exemption.html.haml +26 -0
  114. data/app/views/effective/cpd_audits/_extension.html.haml +30 -0
  115. data/app/views/effective/cpd_audits/_files.html.haml +12 -0
  116. data/app/views/effective/cpd_audits/_layout.html.haml +33 -0
  117. data/app/views/effective/cpd_audits/_summary.html.haml +54 -0
  118. data/app/views/effective/cpd_audits/_waiting.html.haml +6 -0
  119. data/app/views/effective/cpd_audits/complete.html.haml +24 -0
  120. data/app/views/effective/cpd_audits/conflict.html.haml +22 -0
  121. data/app/views/effective/cpd_audits/cpd_audit_level_section.html.haml +20 -0
  122. data/app/views/effective/cpd_audits/exemption.html.haml +19 -0
  123. data/app/views/effective/cpd_audits/extension.html.haml +21 -0
  124. data/app/views/effective/cpd_audits/files.html.haml +7 -0
  125. data/app/views/effective/cpd_audits/information.html.haml +5 -0
  126. data/app/views/effective/cpd_audits/instructions.html.haml +5 -0
  127. data/app/views/effective/cpd_audits/questionnaire.html.haml +5 -0
  128. data/app/views/effective/cpd_audits/start.html.haml +11 -0
  129. data/app/views/effective/cpd_audits/submit.html.haml +15 -0
  130. data/app/views/effective/cpd_audits/waiting.html.haml +24 -0
  131. data/app/views/effective/cpd_mailer/README.md +1 -0
  132. data/app/views/effective/cpd_mailer/cpd_audit_closed.liquid +15 -0
  133. data/app/views/effective/cpd_mailer/cpd_audit_conflict_resolved.liquid +15 -0
  134. data/app/views/effective/cpd_mailer/cpd_audit_conflicted.liquid +13 -0
  135. data/app/views/effective/cpd_mailer/cpd_audit_exemption_denied.liquid +13 -0
  136. data/app/views/effective/cpd_mailer/cpd_audit_exemption_granted.liquid +13 -0
  137. data/app/views/effective/cpd_mailer/cpd_audit_exemption_request.liquid +13 -0
  138. data/app/views/effective/cpd_mailer/cpd_audit_extension_denied.liquid +13 -0
  139. data/app/views/effective/cpd_mailer/cpd_audit_extension_granted.liquid +13 -0
  140. data/app/views/effective/cpd_mailer/cpd_audit_extension_request.liquid +13 -0
  141. data/app/views/effective/cpd_mailer/cpd_audit_opened.liquid +13 -0
  142. data/app/views/effective/cpd_mailer/cpd_audit_review_opened.liquid +15 -0
  143. data/app/views/effective/cpd_mailer/cpd_audit_review_ready.liquid +13 -0
  144. data/app/views/effective/cpd_mailer/cpd_audit_review_submitted.liquid +11 -0
  145. data/app/views/effective/cpd_mailer/cpd_audit_reviewed.liquid +13 -0
  146. data/app/views/effective/cpd_mailer/cpd_audit_submitted.liquid +13 -0
  147. data/app/views/effective/cpd_statement_activities/_cpd_statement_activity.html.haml +65 -0
  148. data/app/views/effective/cpd_statement_activities/_form.html.haml +9 -10
  149. data/app/views/effective/cpd_statements/_activities.html.haml +3 -64
  150. data/app/views/effective/cpd_statements/_activities_edit.html.haml +2 -0
  151. data/app/views/effective/cpd_statements/_activities_table.html.haml +64 -0
  152. data/app/views/effective/cpd_statements/_agreements.html.haml +19 -5
  153. data/app/views/effective/cpd_statements/_cpd_statement.html.haml +6 -3
  154. data/app/views/effective/cpd_statements/_summary.html.haml +26 -31
  155. data/app/views/effective/cpd_statements/activities.html.haml +1 -1
  156. data/app/views/effective/cpd_statements/agreements.html.haml +7 -1
  157. data/app/views/effective/cpd_statements/submit.html.haml +1 -1
  158. data/config/effective_cpd.rb +47 -10
  159. data/config/routes.rb +18 -1
  160. data/db/migrate/01_create_effective_cpd.rb.erb +157 -1
  161. data/db/seeds.rb +2 -1
  162. data/lib/effective_cpd.rb +42 -3
  163. data/lib/effective_cpd/version.rb +1 -1
  164. data/lib/generators/effective_cpd/install_generator.rb +16 -3
  165. metadata +168 -9
  166. data/app/datatables/effective_cpd_statements_datatable.rb +0 -23
  167. data/app/views/admin/cpd_statements/_form.html.haml +0 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 96dbf47b702128c10b5b8f1ee07f9fb4798efdd77220b506b75124737e55e8ec
4
- data.tar.gz: a5e0a5a658c43ffef382a8becb65b7a84b61a24a01f701dbb7daaecf63aa391f
3
+ metadata.gz: 03ea8530cc9464864529c2138bc50c557e6673bfe603c506a61536938f088fb2
4
+ data.tar.gz: 6cc9d5170e3aa9f4ad18b86422f4634a0a1127d1b133a598288f816e544cbcba
5
5
  SHA512:
6
- metadata.gz: 3ee41586315d02240cbdaa075b91aec80122db0c6820db8f5c79595af3e45a617fcabbe5284d67ef149209bd998870dd9684bf3d3bce0c88ddfec836e7e82e6b
7
- data.tar.gz: ab8a10bd1aed88b3971d596a22bae191a6e9d77c20ba1f7343bc8888d9930feb57ab8d57cc2cb3aded11b938d5c83e8689ed2c54f85bd28cdd76291921c7fc7e
6
+ metadata.gz: d82e2b524bf841a537aecdee7c17a6f29d1ff5d046d7af4a42d7cb05e19c39ed7c23d9886f5603dbfca389eecd144846cbb49ccc83ce182143c0961b804b2ddb
7
+ data.tar.gz: 60f571e5289e2376eeefe5b465ad1f11685cfb6718269c121ba45b69408a8f2f94b73f216191e16ab8f669f33c3369f256ce12611e08d4943ad101d2000b2387
data/README.md CHANGED
@@ -43,19 +43,66 @@ Then migrate the database:
43
43
  rake db:migrate
44
44
  ```
45
45
 
46
- Render the "available statements for current_user" datatable on your user dashboard:
46
+ Please add the following to your User model:
47
+
48
+ ```
49
+ has_many :cpd_statements, -> { Effective::CpdStatement.sorted }, class_name: 'Effective::CpdStatement'
50
+ ```
51
+
52
+ Use the following datatables to display to your user their statements and audits and audit reviews:
47
53
 
48
54
  ```haml
49
55
  %h2 Continuing Professional Development
50
56
 
51
- %p Please submit a CPD statement for the following available #{cpd_cycles_label}:
52
- = render_datatable(EffectiveCpdDatatable.new, simple: true)
57
+ - # Auditee datatables (4)
58
+ - auditing = EffectiveCpdAvailableAuditsDatatable.new(self)
59
+ - if auditing.present?
60
+ .mt-4
61
+ %p You have been selected for audit:
62
+ = render_datatable(auditing, simple: true)
63
+
64
+ - audited = EffectiveCpdCompletedAuditsDatatable.new(self)
65
+ - if audited.present?
66
+ .mt-4
67
+ %p You have completed these past audits:
68
+ = render_datatable(audited, simple: true)
53
69
 
54
- - datatable = EffectiveCpdStatementsDatatable.new(self)
55
- - if datatable.present?
70
+ - available = EffectiveCpdAvailableCyclesDatatable.new(self)
71
+ - if available.present?
56
72
  .mt-4
57
- %p You completed these statements:
58
- = render_datatable(datatable, simple: true)
73
+ %p Please submit a CPD statement for the following available #{cpd_cycles_label}:
74
+ = render_datatable(available, simple: true)
75
+
76
+ - completed = EffectiveCpdCompletedStatementsDatatable.new(self)
77
+ - if completed.present?
78
+ .mt-4
79
+ %p You have completed these past statements:
80
+ = render_datatable(completed, simple: true)
81
+
82
+ - # Auditor / Audit reviewer datatables (2)
83
+ - reviewing = EffectiveCpdAvailableAuditReviewsDatatable.new(self)
84
+ - if reviewing.present?
85
+ .mt-4
86
+ %p You have been selected to review the following audits:
87
+ = render_datatable(reviewing, simple: true)
88
+
89
+ - reviewed = EffectiveCpdCompletedAuditReviewsDatatable.new(self)
90
+ - if reviewed.present?
91
+ .mt-4
92
+ %p You have completed these past audit reviews:
93
+ = render_datatable(reviewed, simple: true)
94
+ ```
95
+
96
+ On the Admin::Users#edit, you can use the following datatables as well:
97
+
98
+ ```haml
99
+ %h2 CPD Statements
100
+ - datatable = Admin::EffectiveCpdStatementsDatatable.new(user_id: user.id, user_type: user.class.name)
101
+ = render_datatable(datatable, inline: true)
102
+
103
+ %h2 CPD Audits
104
+ - datatable = Admin::EffectiveCpdAuditsDatatable.new(user_id: user.id, user_type: user.class.name)
105
+ = render_datatable(datatable)
59
106
 
60
107
  ```
61
108
 
@@ -63,11 +110,30 @@ Add a link to the admin menu:
63
110
 
64
111
  ```haml
65
112
  - if can? :admin, :effective_cpd
66
- = link_to 'CPD Categories', effective_cpd.admin_cpd_categories_path
67
- = link_to 'CPD Cycles', effective_cpd.admin_cpd_cycles_path
68
- = link_to 'CPD Statements', effective_cpd.admin_cpd_statements_path
113
+ - if can? :index, Effective::CpdCategory
114
+ = nav_link_to 'CPD Categories', effective_cpd.admin_cpd_categories_path
115
+
116
+ - if can? :index, Effective::CpdCycle
117
+ = nav_link_to 'CPD Cycles', effective_cpd.admin_cpd_cycles_path
118
+
119
+ - if can? :index, Effective::CpdAuditLevel
120
+ = nav_link_to 'CPD Audit Levels', effective_cpd.admin_cpd_audit_levels_path
121
+
122
+ = nav_divider
123
+
124
+ - if can? :index, Effective::CpdStatement
125
+ = nav_link_to 'CPD Statements', effective_cpd.admin_cpd_statements_path
126
+
127
+ - if can? :index, Effective::CpdAudit
128
+ = nav_link_to 'CPD Audits', effective_cpd.admin_cpd_audits_path
69
129
  ```
70
130
 
131
+ ## Configuration
132
+
133
+ As an admin, visit the CPD Categories, then CPD Cycles, and CPD Audit levels.
134
+
135
+ Once all these 3 areas have been configured, users can submit statements and audits can be performed.
136
+
71
137
  ## Authorization
72
138
 
73
139
  All authorization checks are handled via the effective_resources gem found in the `config/initializers/effective_resources.rb` file.
@@ -83,6 +149,12 @@ if user.persisted?
83
149
  can [:index, :show, :update], Effective::CpdStatement, user_id: user.id
84
150
  can [:index, :show], Effective::CpdCycle
85
151
  can([:create, :update, :destroy], Effective::CpdStatementActivity) { |sa| sa.cpd_statement.user_id == user.id }
152
+ can [:index, :show, :update], Effective::CpdAudit, user_id: user.id
153
+ end
154
+
155
+ if user.reviewer?
156
+ can [:index], Effective::CpdAudit
157
+ can [:index, :show, :update], Effective::CpdAuditReview, user_id: user.id
86
158
  end
87
159
 
88
160
  if user.admin?
@@ -91,7 +163,14 @@ if user.admin?
91
163
  can :manage, Effective::CpdCategory
92
164
  can :manage, Effective::CpdCycle
93
165
  can :manage, Effective::CpdRule
166
+
167
+ can :manage, Effective::CpdAuditLevel
168
+ can :manage, Effective::CpdAuditLevelSection
169
+ can :manage, Effective::CpdAuditLevelQuestion
170
+
94
171
  can :manage, Effective::CpdStatement
172
+ can :manage, Effective::CpdAudit
173
+ can :manage, Effective::CpdAuditReview
95
174
  end
96
175
  ```
97
176
 
@@ -0,0 +1,13 @@
1
+ module Admin
2
+ class CpdAuditLevelQuestionsController < ApplicationController
3
+ before_action(:authenticate_user!) if defined?(Devise)
4
+ before_action { EffectiveResources.authorize!(self, :admin, :effective_cpd) }
5
+
6
+ include Effective::CrudController
7
+
8
+ def permitted_params
9
+ params.require(:effective_cpd_audit_level_question).permit!
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Admin
2
+ class CpdAuditLevelsController < ApplicationController
3
+ before_action(:authenticate_user!) if defined?(Devise)
4
+ before_action { EffectiveResources.authorize!(self, :admin, :effective_cpd) }
5
+
6
+ include Effective::CrudController
7
+
8
+ def permitted_params
9
+ params.require(:effective_cpd_audit_level).permit!
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Admin
2
+ class CpdAuditReviewsController < ApplicationController
3
+ before_action(:authenticate_user!) if defined?(Devise)
4
+ before_action { EffectiveResources.authorize!(self, :admin, :effective_cpd) }
5
+
6
+ include Effective::CrudController
7
+
8
+ def permitted_params
9
+ params.require(:effective_cpd_audit_review).permit!
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,41 @@
1
+ module Admin
2
+ class CpdAuditsController < ApplicationController
3
+ before_action(:authenticate_user!) if defined?(Devise)
4
+ before_action { EffectiveResources.authorize!(self, :admin, :effective_cpd) }
5
+
6
+ include Effective::CrudController
7
+
8
+ submit :resolve_conflict, 'Resolve Conflict of Interest', success: -> {
9
+ [
10
+ "Successfully resolved #{resource}",
11
+ ("and sent #{resource.user.email} a notification" unless resource.email_form_skip?)
12
+ ].compact.join(' ')
13
+ }
14
+
15
+ submit :close, 'Close Audit', success: -> {
16
+ [
17
+ "Successfully closed #{resource}",
18
+ ("and sent #{resource.user.email} a notification" unless resource.email_form_skip?)
19
+ ].compact.join(' ')
20
+ }
21
+
22
+ submit :process_exemption, 'Process Exemption Request', success: -> {
23
+ [
24
+ "Successfully #{resource.status.gsub('_', ' ')} #{resource}",
25
+ ("and sent #{resource.user.email} a notification" unless resource.email_form_skip?)
26
+ ].compact.join(' ')
27
+ }
28
+
29
+ submit :process_extension, 'Process Extension Request', success: -> {
30
+ [
31
+ "Successfully #{resource.status.gsub('_', ' ')} #{resource}",
32
+ ("and sent #{resource.user.email} a notification" unless resource.email_form_skip?)
33
+ ].compact.join(' ')
34
+ }
35
+
36
+ def permitted_params
37
+ params.require(:effective_cpd_audit).permit!
38
+ end
39
+
40
+ end
41
+ end
@@ -0,0 +1,60 @@
1
+ module Effective
2
+ class CpdAuditReviewsController < ApplicationController
3
+ before_action(:authenticate_user!) if defined?(Devise)
4
+
5
+ include Effective::WizardController
6
+
7
+ resource_scope do
8
+ Effective::CpdAuditReview.deep.where(user: current_user)
9
+ end
10
+
11
+ # Reuse the same view for all cpd_audit_level_section steps
12
+ # https://github.com/zombocom/wicked/blob/v1.3.4/lib/wicked/controller/concerns/render_redirect.rb#L32
13
+ def render_step(the_step, options = {}, params = {})
14
+ if resource.dynamic_wizard_statement_steps.keys.include?(the_step)
15
+ render('cpd_statement', options)
16
+ elsif resource.dynamic_wizard_questionnaire_steps.keys.include?(the_step)
17
+ render('cpd_audit_level_section', options)
18
+ else
19
+ super
20
+ end
21
+ end
22
+
23
+ def permitted_params
24
+ case step
25
+ when :start
26
+ params.require(:effective_cpd_audit_review).permit(:current_step, :comments)
27
+ when :information
28
+ params.require(:effective_cpd_audit_review).permit(:current_step, :comments)
29
+ when :instructions
30
+ params.require(:effective_cpd_audit_review).permit(:current_step, :comments)
31
+ when :conflict
32
+ params.require(:effective_cpd_audit_review)
33
+ .permit(:current_step, :comments, :conflict_of_interest, :conflict_of_interest_reason)
34
+ when :statements
35
+ params.require(:effective_cpd_audit_review).permit(:current_step, :comments)
36
+ when :questionnaire
37
+ params.require(:effective_cpd_audit_review).permit(:current_step, :comments)
38
+ when :recommendation
39
+ params.require(:effective_cpd_audit_review).permit(:current_step, :comments, :recommendation)
40
+ when :submit
41
+ params.require(:effective_cpd_audit_review).permit(:current_step)
42
+ when :complete
43
+ raise('unexpected post to complete')
44
+ else
45
+ if step.to_s.start_with?('statement')
46
+ params.require(:effective_cpd_audit_review).permit(:current_step, :comments,
47
+ cpd_audit_review_items_attributes: [:id, :item_id, :item_type, :recommendation, :comments]
48
+ )
49
+ elsif step.to_s.start_with?('section')
50
+ params.require(:effective_cpd_audit_review).permit(:current_step, :comments,
51
+ cpd_audit_review_items_attributes: [:id, :item_id, :item_type, :recommendation, :comments]
52
+ )
53
+ else
54
+ raise('unexpected step')
55
+ end
56
+ end
57
+ end
58
+
59
+ end
60
+ end
@@ -0,0 +1,55 @@
1
+ module Effective
2
+ class CpdAuditsController < ApplicationController
3
+ before_action(:authenticate_user!) if defined?(Devise)
4
+
5
+ include Effective::WizardController
6
+
7
+ resource_scope do
8
+ Effective::CpdAudit.deep.where(user: current_user)
9
+ end
10
+
11
+ # Reuse the same view for all cpd_audit_level_section steps
12
+ # https://github.com/zombocom/wicked/blob/v1.3.4/lib/wicked/controller/concerns/render_redirect.rb#L32
13
+ def render_step(the_step, options = {}, params = {})
14
+ return super unless resource.dynamic_wizard_steps.keys.include?(the_step)
15
+ render('cpd_audit_level_section', options)
16
+ end
17
+
18
+ def permitted_params
19
+ case step
20
+ when :start
21
+ params.require(:effective_cpd_audit).permit(:current_step)
22
+ when :information
23
+ params.require(:effective_cpd_audit).permit(:current_step)
24
+ when :instructions
25
+ params.require(:effective_cpd_audit).permit(:current_step)
26
+ when :conflict
27
+ params.require(:effective_cpd_audit)
28
+ .permit(:current_step, :conflict_of_interest, :conflict_of_interest_reason)
29
+ when :exemption
30
+ params.require(:effective_cpd_audit)
31
+ .permit(:current_step, :exemption_request, :exemption_request_reason)
32
+ when :extension
33
+ params.require(:effective_cpd_audit)
34
+ .permit(:current_step, :extension_request, :extension_request_date, :extension_request_reason)
35
+ when :questionnaire
36
+ params.require(:effective_cpd_audit).permit(:current_step)
37
+ when :files
38
+ params.require(:effective_cpd_audit).permit(:current_step, files: [])
39
+ when :submit
40
+ params.require(:effective_cpd_audit).permit(:current_step)
41
+ when :complete
42
+ raise('unexpected post to complete')
43
+ else
44
+ raise('unexpected step') unless step.to_s.start_with?('section')
45
+
46
+ params.require(:effective_cpd_audit).permit(:current_step,
47
+ cpd_audit_responses_attributes: [
48
+ :id, :cpd_audit_id, :cpd_audit_level_question_id, :date, :email, :number, :long_answer, :short_answer, :upload_file, cpd_audit_level_question_option_ids: []
49
+ ]
50
+ )
51
+ end
52
+ end
53
+
54
+ end
55
+ end
@@ -2,6 +2,7 @@ module Effective
2
2
  class CpdCyclesController < ApplicationController
3
3
  before_action(:authenticate_user!) if defined?(Devise)
4
4
 
5
+ # If they visit /cpd_cycles/1, redirect to their statement for that cycle
5
6
  def show
6
7
  cycle = Effective::CpdCycle.find(params[:id])
7
8
  EffectiveResources.authorize!(self, :show, cycle)
@@ -57,9 +57,7 @@ module Effective
57
57
  :current_step, :confirm_read, :confirm_factual, files: []
58
58
  )
59
59
  when :submit
60
- params.require(:effective_cpd_statement).permit(
61
- :current_step, :confirm_readonly
62
- )
60
+ params.require(:effective_cpd_statement).permit(:current_step, :confirm_readonly)
63
61
  when :complete
64
62
  raise('unexpected post to complete')
65
63
  else
@@ -0,0 +1,30 @@
1
+ module Admin
2
+ class EffectiveCpdAuditLevelQuestionsDatatable < Effective::Datatable
3
+ datatable do
4
+ reorder :position
5
+
6
+ col :created_at, visible: false
7
+ col :updated_at, visible: false
8
+ col :id, visible: false
9
+
10
+ col :cpd_audit_level_section
11
+
12
+ col :position do |cpd_audit_level_question|
13
+ cpd_audit_level_question.position.to_i + 1
14
+ end
15
+
16
+ col :title
17
+ col :body
18
+ col :required
19
+
20
+ col :category, label: 'Type'
21
+ col :cpd_audit_level_question_options, label: 'Options'
22
+
23
+ actions_col
24
+ end
25
+
26
+ collection do
27
+ Effective::CpdAuditLevelQuestion.all.deep
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,34 @@
1
+ module Admin
2
+ class EffectiveCpdAuditLevelsDatatable < Effective::Datatable
3
+ datatable do
4
+ order :title
5
+
6
+ col :id, visible: false
7
+ col :created_at, visible: false
8
+ col :updated_at, visible: false
9
+
10
+ col :title
11
+
12
+ col :days_to_submit, visible: false
13
+ col :days_to_review, visible: false
14
+
15
+ col :conflict_of_interest, visible: false
16
+ col :days_to_declare_conflict, visible: false
17
+
18
+ col :can_request_exemption, visible: false
19
+ col :days_to_request_exemption, visible: false
20
+
21
+ col :can_request_extension, visible: false
22
+ col :days_to_request_extension, visible: false
23
+
24
+ col :cpd_audit_level_sections, label: 'Sections', action: false
25
+ col :cpd_audit_level_questions, label: 'Questions', action: false
26
+
27
+ actions_col
28
+ end
29
+
30
+ collection do
31
+ Effective::CpdAuditLevel.all.deep
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,29 @@
1
+ module Admin
2
+ class EffectiveCpdAuditReviewsDatatable < Effective::Datatable
3
+ filters do
4
+ scope :all
5
+ scope :available, label: 'In Progress'
6
+ scope :completed
7
+ end
8
+
9
+ datatable do
10
+ col :created_at, visible: false
11
+ col :updated_at, visible: false
12
+ col :id, visible: false
13
+
14
+ col :cpd_audit
15
+ col :user, label: 'Audit Reviewer'
16
+ col :due_date
17
+ col :submitted_at, as: :date, label: 'Submitted'
18
+ col :conflict_of_interest
19
+ col :recommendation
20
+ col :comments
21
+
22
+ actions_col(edit: false)
23
+ end
24
+
25
+ collection do
26
+ Effective::CpdAuditReview.all.deep
27
+ end
28
+ end
29
+ end