effective_cpd 0.3.1 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/datatables/admin/effective_cpd_audit_reviews_datatable.rb +8 -1
- data/app/datatables/admin/effective_cpd_audits_datatable.rb +23 -0
- data/app/models/effective/cpd_audit.rb +6 -3
- data/app/views/admin/cpd_activities/_form.html.haml +6 -1
- data/app/views/admin/cpd_audit_level_questions/_form.html.haml +5 -1
- data/app/views/admin/cpd_audit_levels/_form_content_audit.html.haml +8 -4
- data/app/views/admin/cpd_audit_levels/_form_content_audit_review.html.haml +8 -4
- data/app/views/admin/cpd_audits/_form.html.haml +3 -0
- data/app/views/admin/cpd_audits/_form_deadlines.html.haml +12 -0
- data/app/views/admin/cpd_categories/_form_cpd_category.html.haml +5 -1
- data/app/views/admin/cpd_cycles/_form_content.html.haml +28 -7
- data/app/views/effective/cpd_audits/conflict.html.haml +1 -1
- data/app/views/effective/cpd_audits/exemption.html.haml +1 -1
- data/app/views/effective/cpd_audits/extension.html.haml +1 -1
- data/db/migrate/01_create_effective_cpd.rb.erb +2 -0
- data/lib/effective_cpd/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f290e98f25e51c9ebc4497830cd628ac7921a01c2a2be09b1a335af28bc6c003
|
4
|
+
data.tar.gz: fe7d20bb2bbdada0b0a30f53801ad877f51e5a01d8d56d3af4b225c820ec402e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b7bbf3b41e25cdd4b5ebe86d0f186c531450e614ef454367a08623f6868aa93e9ba5e37f35e7ad7f867a04e04f6a8c458acec9dd69cf2e98aca6329a1d21580e
|
7
|
+
data.tar.gz: 4050c510065598ca04809542bd50a16e54e93c9284610dc610693a06212cd9c897ef40e39508cc5f14e0d2f2e1239492bb42deb71fe257a3a51aadd8a7276843
|
@@ -2,8 +2,8 @@ module Admin
|
|
2
2
|
class EffectiveCpdAuditReviewsDatatable < Effective::Datatable
|
3
3
|
filters do
|
4
4
|
scope :all
|
5
|
-
scope :available, label: 'In Progress'
|
6
5
|
scope :completed
|
6
|
+
scope :available, label: 'In Progress'
|
7
7
|
end
|
8
8
|
|
9
9
|
datatable do
|
@@ -12,7 +12,14 @@ module Admin
|
|
12
12
|
col :id, visible: false
|
13
13
|
|
14
14
|
col :cpd_audit
|
15
|
+
|
16
|
+
col :auditee do |cpd_audit_review|
|
17
|
+
user = cpd_audit_review.cpd_audit.user
|
18
|
+
link_to(user, edit_admin_user_path(user))
|
19
|
+
end
|
20
|
+
|
15
21
|
col :user, label: 'Audit Reviewer'
|
22
|
+
|
16
23
|
col :due_date
|
17
24
|
col :submitted_at, as: :date, label: 'Submitted'
|
18
25
|
col :conflict_of_interest
|
@@ -47,6 +47,29 @@ module Admin
|
|
47
47
|
col :due_date
|
48
48
|
|
49
49
|
col :status
|
50
|
+
|
51
|
+
col(:cpd_audit_recommendations, label: 'Recommendation', visible: false) do |cpd_audit|
|
52
|
+
cpd_audit.cpd_audit_reviews.map(&:recommendation).map do |recommendation|
|
53
|
+
content_tag(:div, recommendation.to_s, class: 'col-resource_item')
|
54
|
+
end.join.html_safe
|
55
|
+
end
|
56
|
+
|
57
|
+
col(:cpd_audit_reveiw_item_recommendations, label: 'Item Recommendations', search: :string, visible: false) do |cpd_audit|
|
58
|
+
recommendations = cpd_audit.cpd_audit_reviews.map(&:recommendation)
|
59
|
+
item_recommendations = cpd_audit.cpd_audit_reviews.flat_map { |r| r.cpd_audit_review_items.map(&:recommendation) }
|
60
|
+
|
61
|
+
reviews = ((recommendations + item_recommendations) - ['', nil]).uniq
|
62
|
+
reviews.to_sentence
|
63
|
+
end
|
64
|
+
|
65
|
+
col(:cpd_audit_comments, label: 'Reviewer Comments', search: :string, visible: false) do |cpd_audit|
|
66
|
+
item_comments = cpd_audit.cpd_audit_reviews.flat_map { |r| r.cpd_audit_review_items.map(&:comments) }.join
|
67
|
+
|
68
|
+
cpd_audit.cpd_audit_reviews.map(&:comments).map do |comments|
|
69
|
+
content_tag(:div, simple_format(comments.to_s + item_comments), class: 'col-resource_item')
|
70
|
+
end.join.html_safe
|
71
|
+
end
|
72
|
+
|
50
73
|
col :determination
|
51
74
|
|
52
75
|
col(:auditee_cpd_statements, label: 'Auditee Statements', visible: false) do |cpd_audit|
|
@@ -76,6 +76,9 @@ module Effective
|
|
76
76
|
# Final determination
|
77
77
|
determination :string
|
78
78
|
|
79
|
+
# Override Deadlines
|
80
|
+
ignore_deadlines :boolean
|
81
|
+
|
79
82
|
# Auditee response
|
80
83
|
conflict_of_interest :boolean
|
81
84
|
conflict_of_interest_reason :text
|
@@ -130,17 +133,17 @@ module Effective
|
|
130
133
|
validates :extension_request_date, presence: true, if: -> { extension_request? }
|
131
134
|
validates :extension_request_reason, presence: true, if: -> { extension_request? }
|
132
135
|
|
133
|
-
validate(if: -> { current_step == :conflict && conflict_of_interest? }) do
|
136
|
+
validate(if: -> { current_step == :conflict && conflict_of_interest? && !ignore_deadlines? }) do
|
134
137
|
deadline = deadline_to_conflict_of_interest()
|
135
138
|
self.errors.add(:base, 'deadline to declare conflict of interest has already passed') if deadline && deadline < Time.zone.now
|
136
139
|
end
|
137
140
|
|
138
|
-
validate(if: -> { current_step == :exemption && exemption_request? }) do
|
141
|
+
validate(if: -> { current_step == :exemption && exemption_request? && !ignore_deadlines? }) do
|
139
142
|
deadline = deadline_to_exemption()
|
140
143
|
self.errors.add(:base, 'deadline to request exemption has already passed') if deadline && deadline < Time.zone.now
|
141
144
|
end
|
142
145
|
|
143
|
-
validate(if: -> { current_step == :extension && extension_request? }) do
|
146
|
+
validate(if: -> { current_step == :extension && extension_request? && !ignore_deadlines? }) do
|
144
147
|
deadline = deadline_to_extension()
|
145
148
|
self.errors.add(:base, 'deadline to request extension has already passed') if deadline && deadline < Time.zone.now
|
146
149
|
end
|
@@ -7,7 +7,12 @@
|
|
7
7
|
.row
|
8
8
|
.col
|
9
9
|
= f.text_field :title, label: 'Title'
|
10
|
-
|
10
|
+
|
11
|
+
- if defined?(EffectiveArticleEditor)
|
12
|
+
= f.article_editor :body, label: 'Body (optional)'
|
13
|
+
- else
|
14
|
+
= f.rich_text_area :body, label: 'Body (optional)'
|
15
|
+
|
11
16
|
.col
|
12
17
|
= f.text_field :amount_label,
|
13
18
|
hint: 'hours of work, papers written, courses attended'
|
@@ -5,7 +5,11 @@
|
|
5
5
|
= f.select :cpd_audit_level_section_id, Effective::CpdAuditLevelSection.sorted.all
|
6
6
|
|
7
7
|
= f.text_field :title, label: 'Question Title'
|
8
|
-
|
8
|
+
|
9
|
+
- if defined?(EffectiveArticleEditor)
|
10
|
+
= f.article_editor :body, label: 'Body (optional)'
|
11
|
+
- else
|
12
|
+
= f.rich_text_area :body, label: 'Body (optional)'
|
9
13
|
|
10
14
|
= f.check_box :required, hint: 'A response to this question will be required'
|
11
15
|
= f.select :category, Effective::CpdAuditLevelQuestion::CATEGORIES
|
@@ -2,14 +2,18 @@
|
|
2
2
|
|
3
3
|
= effective_form_with(model: [:admin, cpd_audit_level], engine: true) do |f|
|
4
4
|
= card("All Steps Content") do
|
5
|
-
|
6
|
-
hint: "displayed on all steps"
|
5
|
+
- if defined?(EffectiveArticleEditor)
|
6
|
+
= f.article_editor "rich_text_all_steps_audit_content", label: false, hint: "displayed on all steps"
|
7
|
+
- else
|
8
|
+
= f.rich_text_area "rich_text_all_steps_audit_content", label: false, hint: "displayed on all steps"
|
7
9
|
|
8
10
|
%hr
|
9
11
|
|
10
12
|
- Effective::CpdAudit::WIZARD_STEPS.each do |step, title|
|
11
13
|
= card("#{title} Content") do
|
12
|
-
|
13
|
-
hint: "displayed on the auditee wizard #{step} wizard step only"
|
14
|
+
- if defined?(EffectiveArticleEditor)
|
15
|
+
= f.article_editor "rich_text_#{step}_audit_content", label: false, hint: "displayed on the auditee wizard #{step} wizard step only"
|
16
|
+
- else
|
17
|
+
= f.rich_text_area "rich_text_#{step}_audit_content", label: false, hint: "displayed on the auditee wizard #{step} wizard step only"
|
14
18
|
|
15
19
|
= f.submit
|
@@ -2,14 +2,18 @@
|
|
2
2
|
|
3
3
|
= effective_form_with(model: [:admin, cpd_audit_level], engine: true) do |f|
|
4
4
|
= card("All Steps Content") do
|
5
|
-
|
6
|
-
hint: "displayed on all steps"
|
5
|
+
- if defined?(EffectiveArticleEditor)
|
6
|
+
= f.article_editor "rich_text_all_steps_audit_review_content", label: false, hint: "displayed on all steps"
|
7
|
+
- else
|
8
|
+
= f.rich_text_area "rich_text_all_steps_audit_review_content", label: false, hint: "displayed on all steps"
|
7
9
|
|
8
10
|
%hr
|
9
11
|
|
10
12
|
- Effective::CpdAuditReview::WIZARD_STEPS.each do |step, title|
|
11
13
|
= card("#{title} Content") do
|
12
|
-
|
13
|
-
hint: "displayed on the audit reviewer #{step} wizard step only"
|
14
|
+
- if defined?(EffectiveArticleEditor)
|
15
|
+
= f.article_editor "rich_text_#{step}_audit_review_content", label: false, hint: "displayed on the audit reviewer #{step} wizard step only"
|
16
|
+
- else
|
17
|
+
= f.rich_text_area "rich_text_#{step}_audit_review_content", label: false, hint: "displayed on the audit reviewer #{step} wizard step only"
|
14
18
|
|
15
19
|
= f.submit
|
@@ -17,6 +17,9 @@
|
|
17
17
|
= tab 'Audit' do
|
18
18
|
= render 'effective/cpd_audits/cpd_audit', cpd_audit: cpd_audit
|
19
19
|
|
20
|
+
= tab 'Deadlines' do
|
21
|
+
= render 'admin/cpd_audits/form_deadlines', cpd_audit: cpd_audit
|
22
|
+
|
20
23
|
= tab 'Statements' do
|
21
24
|
- datatable = Admin::EffectiveCpdStatementsDatatable.new(user_id: cpd_audit.user.id, user_type: cpd_audit.user.class.name)
|
22
25
|
= render_datatable(datatable, inline: true, simple: true)
|
@@ -0,0 +1,12 @@
|
|
1
|
+
= card('Deadlines') do
|
2
|
+
= effective_form_with(model: [:admin, cpd_audit], engine: true) do |f|
|
3
|
+
%p The audittee has the following deadlines:
|
4
|
+
|
5
|
+
%ul
|
6
|
+
%li To declare conflict of interest: #{f.object.deadline_to_conflict_of_interest}
|
7
|
+
%li To request exemption: #{f.object.deadline_to_exemption}
|
8
|
+
%li To request extension: #{f.object.deadline_to_extension}
|
9
|
+
|
10
|
+
= f.check_box :ignore_deadlines, label: 'Yes, ignore audittee deadlines and allow these actions to be performed'
|
11
|
+
|
12
|
+
= f.submit 'Save', center: true
|
@@ -4,37 +4,58 @@
|
|
4
4
|
.card.mb-4
|
5
5
|
.card-body
|
6
6
|
%h5.card-title All Steps Content
|
7
|
-
|
7
|
+
- if defined?(EffectiveArticleEditor)
|
8
|
+
= f.article_editor :all_steps_content, label: false, hint: 'displayed on all statement steps'
|
9
|
+
- else
|
10
|
+
= f.rich_text_area :all_steps_content, label: false, hint: 'displayed on all statement steps'
|
8
11
|
|
9
12
|
.card.mb-4
|
10
13
|
.card-body
|
11
14
|
%h5.card-title Sidebar Content
|
12
|
-
|
15
|
+
- if defined?(EffectiveArticleEditor)
|
16
|
+
= f.article_editor :sidebar_content, label: false, hint: 'displayed on the sidebar on all statement steps'
|
17
|
+
- else
|
18
|
+
= f.rich_text_area :sidebar_content, label: false, hint: 'displayed on the sidebar on all statement steps'
|
13
19
|
|
14
20
|
%h2 Individual Steps Content
|
15
21
|
.card.mb-4
|
16
22
|
.card-body
|
17
23
|
%h5.card-title Start Step
|
18
|
-
|
24
|
+
- if defined?(EffectiveArticleEditor)
|
25
|
+
= f.article_editor :start_content, label: false, hint: 'displayed on the start step only'
|
26
|
+
- else
|
27
|
+
= f.rich_text_area :start_content, label: false, hint: 'displayed on the start step only'
|
19
28
|
|
20
29
|
.card.mb-4
|
21
30
|
.card-body
|
22
31
|
%h5.card-title Activities Step
|
23
|
-
|
32
|
+
- if defined?(EffectiveArticleEditor)
|
33
|
+
= f.article_editor :activities_content, label: false, hint: 'displayed on the activities step only'
|
34
|
+
- else
|
35
|
+
= f.rich_text_area :activities_content, label: false, hint: 'displayed on the activities step only'
|
24
36
|
|
25
37
|
.card.mb-4
|
26
38
|
.card-body
|
27
39
|
%h5.card-title Agreements Step
|
28
|
-
|
40
|
+
- if defined?(EffectiveArticleEditor)
|
41
|
+
= f.article_editor :agreements_content, label: false, hint: 'displayed on the agreements step only'
|
42
|
+
- else
|
43
|
+
= f.rich_text_area :agreements_content, label: false, hint: 'displayed on the agreements step only'
|
29
44
|
|
30
45
|
.card.mb-4
|
31
46
|
.card-body
|
32
47
|
%h5.card-title Submit Step
|
33
|
-
|
48
|
+
- if defined?(EffectiveArticleEditor)
|
49
|
+
= f.article_editor :submit_content, label: false, hint: 'displayed on the submit step only'
|
50
|
+
- else
|
51
|
+
= f.rich_text_area :submit_content, label: false, hint: 'displayed on the submit step only'
|
34
52
|
|
35
53
|
.card.mb-4
|
36
54
|
.card-body
|
37
55
|
%h5.card-title Complete Step
|
38
|
-
|
56
|
+
- if defined?(EffectiveArticleEditor)
|
57
|
+
= f.article_editor :complete_content, label: false, hint: 'displayed on the complete step only'
|
58
|
+
- else
|
59
|
+
= f.rich_text_area :complete_content, label: false, hint: 'displayed on the complete step only'
|
39
60
|
|
40
61
|
= f.submit
|
@@ -5,7 +5,7 @@
|
|
5
5
|
- resource.cpd_audit_reviews.each do |cpd_audit_review|
|
6
6
|
%li #{cpd_audit_review.user} <#{mail_to(cpd_audit_review.user.email)}>
|
7
7
|
|
8
|
-
- if resource.deadline_to_conflict_of_interest.present?
|
8
|
+
- if resource.deadline_to_conflict_of_interest.present? && !resource.ignore_deadlines?
|
9
9
|
%p The deadline to declare a conflict of interest is: #{resource.deadline_to_conflict_of_interest.strftime('%F')}.
|
10
10
|
|
11
11
|
= effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
|
@@ -2,7 +2,7 @@
|
|
2
2
|
- if resource.was_exemption_requested?
|
3
3
|
= render('effective/cpd_audits/exemption', cpd_audit: resource, step: :exemption)
|
4
4
|
|
5
|
-
- if resource.deadline_to_exemption.present?
|
5
|
+
- if resource.deadline_to_exemption.present? && !resource.ignore_deadlines?
|
6
6
|
%p The deadline to request an exemption is: #{resource.deadline_to_exemption.strftime('%F')}.
|
7
7
|
|
8
8
|
= effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
|
@@ -2,7 +2,7 @@
|
|
2
2
|
- if resource.was_extension_requested?
|
3
3
|
= render('effective/cpd_audits/extension', cpd_audit: resource, step: :extension)
|
4
4
|
|
5
|
-
- if resource.deadline_to_extension.present?
|
5
|
+
- if resource.deadline_to_extension.present? && !resource.ignore_deadlines?
|
6
6
|
%p The deadline to request an extension is: #{resource.deadline_to_extension.strftime('%F')}.
|
7
7
|
|
8
8
|
= effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: effective_cpd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.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: 2022-
|
11
|
+
date: 2022-08-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -246,6 +246,7 @@ files:
|
|
246
246
|
- app/views/admin/cpd_audits/_auditee_fields.html.haml
|
247
247
|
- app/views/admin/cpd_audits/_form.html.haml
|
248
248
|
- app/views/admin/cpd_audits/_form_conflict.html.haml
|
249
|
+
- app/views/admin/cpd_audits/_form_deadlines.html.haml
|
249
250
|
- app/views/admin/cpd_audits/_form_determination.html.haml
|
250
251
|
- app/views/admin/cpd_audits/_form_exemption.html.haml
|
251
252
|
- app/views/admin/cpd_audits/_form_extension.html.haml
|