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.
- checksums.yaml +4 -4
- data/README.md +89 -10
- data/app/controllers/admin/cpd_audit_level_questions_controller.rb +13 -0
- data/app/controllers/admin/cpd_audit_levels_controller.rb +13 -0
- data/app/controllers/admin/cpd_audit_reviews_controller.rb +13 -0
- data/app/controllers/admin/cpd_audits_controller.rb +41 -0
- data/app/controllers/effective/cpd_audit_reviews_controller.rb +60 -0
- data/app/controllers/effective/cpd_audits_controller.rb +55 -0
- data/app/controllers/effective/cpd_cycles_controller.rb +1 -0
- data/app/controllers/effective/cpd_statements_controller.rb +1 -3
- data/app/datatables/admin/effective_cpd_audit_level_questions_datatable.rb +30 -0
- data/app/datatables/admin/effective_cpd_audit_levels_datatable.rb +34 -0
- data/app/datatables/admin/effective_cpd_audit_reviews_datatable.rb +29 -0
- data/app/datatables/admin/effective_cpd_audits_datatable.rb +67 -0
- data/app/datatables/admin/effective_cpd_statements_datatable.rb +3 -3
- data/app/datatables/effective_cpd_available_audit_reviews_datatable.rb +37 -0
- data/app/datatables/effective_cpd_available_audits_datatable.rb +30 -0
- data/app/datatables/{effective_cpd_datatable.rb → effective_cpd_available_cycles_datatable.rb} +3 -4
- data/app/datatables/effective_cpd_completed_audit_reviews_datatable.rb +32 -0
- data/app/datatables/effective_cpd_completed_audits_datatable.rb +24 -0
- data/app/datatables/effective_cpd_completed_statements_datatable.rb +28 -0
- data/app/helpers/effective_cpd_audits_helper.rb +48 -0
- data/app/mailers/effective/cpd_mailer.rb +155 -3
- data/app/models/effective/cpd_activity.rb +16 -3
- data/app/models/effective/cpd_audit.rb +380 -0
- data/app/models/effective/cpd_audit_level.rb +87 -0
- data/app/models/effective/cpd_audit_level_question.rb +91 -0
- data/app/models/effective/cpd_audit_level_question_option.rb +34 -0
- data/app/models/effective/cpd_audit_level_section.rb +50 -0
- data/app/models/effective/cpd_audit_response.rb +86 -0
- data/app/models/effective/cpd_audit_response_option.rb +6 -0
- data/app/models/effective/cpd_audit_review.rb +222 -0
- data/app/models/effective/cpd_audit_review_item.rb +34 -0
- data/app/models/effective/cpd_category.rb +12 -3
- data/app/models/effective/cpd_cycle.rb +7 -0
- data/app/models/effective/cpd_rule.rb +3 -1
- data/app/models/effective/cpd_statement.rb +15 -8
- data/app/views/admin/cpd_activities/_form.html.haml +1 -1
- data/app/views/admin/cpd_audit_level_questions/_form.html.haml +100 -0
- data/app/views/admin/cpd_audit_levels/_form.html.haml +24 -0
- data/app/views/admin/cpd_audit_levels/_form_content_audit.html.haml +15 -0
- data/app/views/admin/cpd_audit_levels/_form_content_audit_review.html.haml +15 -0
- data/app/views/admin/cpd_audit_levels/_form_cpd_audit_level.html.haml +52 -0
- data/app/views/admin/cpd_audit_levels/_form_cpd_audit_level_section.html.haml +10 -0
- data/app/views/admin/cpd_audit_reviews/_cpd_audit_review.html.haml +1 -0
- data/app/views/admin/cpd_audit_reviews/_form.html.haml +13 -0
- data/app/views/admin/cpd_audits/_audit_reviewer_fields.html.haml +2 -0
- data/app/views/admin/cpd_audits/_auditee_fields.html.haml +2 -0
- data/app/views/admin/cpd_audits/_form.html.haml +46 -0
- data/app/views/admin/cpd_audits/_form_conflict.html.haml +24 -0
- data/app/views/admin/cpd_audits/_form_determination.html.haml +10 -0
- data/app/views/admin/cpd_audits/_form_exemption.html.haml +24 -0
- data/app/views/admin/cpd_audits/_form_extension.html.haml +24 -0
- data/app/views/admin/cpd_audits/_form_new.html.haml +28 -0
- data/app/views/admin/cpd_audits/_status.html.haml +121 -0
- data/app/views/admin/cpd_categories/_form.html.haml +1 -1
- data/app/views/admin/cpd_cycles/_form.html.haml +4 -4
- data/app/views/admin/cpd_cycles/_form_cpd_cycle.html.haml +3 -0
- data/app/views/admin/cpd_statements/_cpd_statement.html.haml +7 -0
- data/app/views/effective/cpd_audit_level_questions/_cpd_audit_level_question.html.haml +5 -0
- data/app/views/effective/cpd_audit_responses/_cpd_audit_response.html.haml +4 -0
- data/app/views/effective/cpd_audit_responses/_fields.html.haml +13 -0
- data/app/views/effective/cpd_audit_responses/fields/_choose_one.html.haml +1 -0
- data/app/views/effective/cpd_audit_responses/fields/_date.html.haml +2 -0
- data/app/views/effective/cpd_audit_responses/fields/_email.html.haml +2 -0
- data/app/views/effective/cpd_audit_responses/fields/_long_answer.html.haml +1 -0
- data/app/views/effective/cpd_audit_responses/fields/_number.html.haml +2 -0
- data/app/views/effective/cpd_audit_responses/fields/_select_all_that_apply.html.haml +1 -0
- data/app/views/effective/cpd_audit_responses/fields/_select_up_to_1.html.haml +1 -0
- data/app/views/effective/cpd_audit_responses/fields/_select_up_to_2.html.haml +1 -0
- data/app/views/effective/cpd_audit_responses/fields/_select_up_to_3.html.haml +1 -0
- data/app/views/effective/cpd_audit_responses/fields/_select_up_to_4.html.haml +1 -0
- data/app/views/effective/cpd_audit_responses/fields/_select_up_to_5.html.haml +1 -0
- data/app/views/effective/cpd_audit_responses/fields/_short_answer.html.haml +1 -0
- data/app/views/effective/cpd_audit_responses/fields/_upload_file.html.haml +1 -0
- data/app/views/effective/cpd_audit_responses/responses/_choose_one.html.haml +1 -0
- data/app/views/effective/cpd_audit_responses/responses/_date.html.haml +1 -0
- data/app/views/effective/cpd_audit_responses/responses/_email.html.haml +1 -0
- data/app/views/effective/cpd_audit_responses/responses/_long_answer.html.haml +1 -0
- data/app/views/effective/cpd_audit_responses/responses/_number.html.haml +1 -0
- data/app/views/effective/cpd_audit_responses/responses/_select_all_that_apply.html.haml +5 -0
- data/app/views/effective/cpd_audit_responses/responses/_select_up_to_1.html.haml +1 -0
- data/app/views/effective/cpd_audit_responses/responses/_select_up_to_2.html.haml +5 -0
- data/app/views/effective/cpd_audit_responses/responses/_select_up_to_3.html.haml +5 -0
- data/app/views/effective/cpd_audit_responses/responses/_select_up_to_4.html.haml +5 -0
- data/app/views/effective/cpd_audit_responses/responses/_select_up_to_5.html.haml +5 -0
- data/app/views/effective/cpd_audit_responses/responses/_short_answer.html.haml +1 -0
- data/app/views/effective/cpd_audit_responses/responses/_upload_file.html.haml +4 -0
- data/app/views/effective/cpd_audit_review_items/_cpd_audit_review_item.html.haml +6 -0
- data/app/views/effective/cpd_audit_review_items/_fields.html.haml +11 -0
- data/app/views/effective/cpd_audit_reviews/_conflict.html.haml +15 -0
- data/app/views/effective/cpd_audit_reviews/_cpd_audit_level_section.html.haml +23 -0
- data/app/views/effective/cpd_audit_reviews/_cpd_audit_review.html.haml +17 -0
- data/app/views/effective/cpd_audit_reviews/_cpd_statement.html.haml +15 -0
- data/app/views/effective/cpd_audit_reviews/_layout.html.haml +24 -0
- data/app/views/effective/cpd_audit_reviews/_recommendation.html.haml +9 -0
- data/app/views/effective/cpd_audit_reviews/_summary.html.haml +47 -0
- data/app/views/effective/cpd_audit_reviews/complete.html.haml +20 -0
- data/app/views/effective/cpd_audit_reviews/conflict.html.haml +21 -0
- data/app/views/effective/cpd_audit_reviews/cpd_audit_level_section.html.haml +43 -0
- data/app/views/effective/cpd_audit_reviews/cpd_statement.html.haml +35 -0
- data/app/views/effective/cpd_audit_reviews/information.html.haml +5 -0
- data/app/views/effective/cpd_audit_reviews/instructions.html.haml +10 -0
- data/app/views/effective/cpd_audit_reviews/questionnaire.html.haml +8 -0
- data/app/views/effective/cpd_audit_reviews/recommendation.html.haml +21 -0
- data/app/views/effective/cpd_audit_reviews/start.html.haml +10 -0
- data/app/views/effective/cpd_audit_reviews/statements.html.haml +29 -0
- data/app/views/effective/cpd_audit_reviews/submit.html.haml +14 -0
- data/app/views/effective/cpd_audit_reviews/waiting.html.haml +9 -0
- data/app/views/effective/cpd_audits/_conflict.html.haml +15 -0
- data/app/views/effective/cpd_audits/_cpd_audit.html.haml +12 -0
- data/app/views/effective/cpd_audits/_cpd_audit_level_section.html.haml +14 -0
- data/app/views/effective/cpd_audits/_exemption.html.haml +26 -0
- data/app/views/effective/cpd_audits/_extension.html.haml +30 -0
- data/app/views/effective/cpd_audits/_files.html.haml +12 -0
- data/app/views/effective/cpd_audits/_layout.html.haml +33 -0
- data/app/views/effective/cpd_audits/_summary.html.haml +54 -0
- data/app/views/effective/cpd_audits/_waiting.html.haml +6 -0
- data/app/views/effective/cpd_audits/complete.html.haml +24 -0
- data/app/views/effective/cpd_audits/conflict.html.haml +22 -0
- data/app/views/effective/cpd_audits/cpd_audit_level_section.html.haml +20 -0
- data/app/views/effective/cpd_audits/exemption.html.haml +19 -0
- data/app/views/effective/cpd_audits/extension.html.haml +21 -0
- data/app/views/effective/cpd_audits/files.html.haml +7 -0
- data/app/views/effective/cpd_audits/information.html.haml +5 -0
- data/app/views/effective/cpd_audits/instructions.html.haml +5 -0
- data/app/views/effective/cpd_audits/questionnaire.html.haml +5 -0
- data/app/views/effective/cpd_audits/start.html.haml +11 -0
- data/app/views/effective/cpd_audits/submit.html.haml +15 -0
- data/app/views/effective/cpd_audits/waiting.html.haml +24 -0
- data/app/views/effective/cpd_mailer/README.md +1 -0
- data/app/views/effective/cpd_mailer/cpd_audit_closed.liquid +15 -0
- data/app/views/effective/cpd_mailer/cpd_audit_conflict_resolved.liquid +15 -0
- data/app/views/effective/cpd_mailer/cpd_audit_conflicted.liquid +13 -0
- data/app/views/effective/cpd_mailer/cpd_audit_exemption_denied.liquid +13 -0
- data/app/views/effective/cpd_mailer/cpd_audit_exemption_granted.liquid +13 -0
- data/app/views/effective/cpd_mailer/cpd_audit_exemption_request.liquid +13 -0
- data/app/views/effective/cpd_mailer/cpd_audit_extension_denied.liquid +13 -0
- data/app/views/effective/cpd_mailer/cpd_audit_extension_granted.liquid +13 -0
- data/app/views/effective/cpd_mailer/cpd_audit_extension_request.liquid +13 -0
- data/app/views/effective/cpd_mailer/cpd_audit_opened.liquid +13 -0
- data/app/views/effective/cpd_mailer/cpd_audit_review_opened.liquid +15 -0
- data/app/views/effective/cpd_mailer/cpd_audit_review_ready.liquid +13 -0
- data/app/views/effective/cpd_mailer/cpd_audit_review_submitted.liquid +11 -0
- data/app/views/effective/cpd_mailer/cpd_audit_reviewed.liquid +13 -0
- data/app/views/effective/cpd_mailer/cpd_audit_submitted.liquid +13 -0
- data/app/views/effective/cpd_statement_activities/_cpd_statement_activity.html.haml +65 -0
- data/app/views/effective/cpd_statement_activities/_form.html.haml +9 -10
- data/app/views/effective/cpd_statements/_activities.html.haml +3 -64
- data/app/views/effective/cpd_statements/_activities_edit.html.haml +2 -0
- data/app/views/effective/cpd_statements/_activities_table.html.haml +64 -0
- data/app/views/effective/cpd_statements/_agreements.html.haml +19 -5
- data/app/views/effective/cpd_statements/_cpd_statement.html.haml +6 -3
- data/app/views/effective/cpd_statements/_summary.html.haml +26 -31
- data/app/views/effective/cpd_statements/activities.html.haml +1 -1
- data/app/views/effective/cpd_statements/agreements.html.haml +7 -1
- data/app/views/effective/cpd_statements/submit.html.haml +1 -1
- data/config/effective_cpd.rb +47 -10
- data/config/routes.rb +18 -1
- data/db/migrate/01_create_effective_cpd.rb.erb +157 -1
- data/db/seeds.rb +2 -1
- data/lib/effective_cpd.rb +42 -3
- data/lib/effective_cpd/version.rb +1 -1
- data/lib/generators/effective_cpd/install_generator.rb +16 -3
- metadata +168 -9
- data/app/datatables/effective_cpd_statements_datatable.rb +0 -23
- data/app/views/admin/cpd_statements/_form.html.haml +0 -6
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
module Effective
|
|
2
|
+
class CpdAuditReviewItem < ActiveRecord::Base
|
|
3
|
+
belongs_to :cpd_audit_review
|
|
4
|
+
belongs_to :item, polymorphic: true # CpdAuditResponse or CpdStatementActivity
|
|
5
|
+
|
|
6
|
+
if respond_to?(:log_changes)
|
|
7
|
+
log_changes(to: :cpd_audit_review)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
effective_resource do
|
|
11
|
+
recommendation :string
|
|
12
|
+
comments :text
|
|
13
|
+
|
|
14
|
+
timestamps
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
scope :deep, -> { includes(:cpd_audit_review, :item) }
|
|
18
|
+
scope :sorted, -> { order(:id) }
|
|
19
|
+
|
|
20
|
+
validates :recommendation, presence: true
|
|
21
|
+
validates :item_id, presence: true, uniqueness: { scope: [:cpd_audit_review_id, :item_type] }
|
|
22
|
+
|
|
23
|
+
validate(if: -> { recommendation.present? && cpd_audit_review.present? }) do
|
|
24
|
+
unless cpd_audit_review.cpd_audit_level.recommendations.include?(recommendation)
|
|
25
|
+
self.errors.add(:recommendation, 'must exist in this audit level')
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def to_s
|
|
30
|
+
recommendation.presence || 'cpd audit review item'
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
module Effective
|
|
2
2
|
class CpdCategory < ActiveRecord::Base
|
|
3
3
|
has_rich_text :body
|
|
4
|
-
log_changes if respond_to?(:log_changes)
|
|
5
4
|
|
|
6
5
|
has_many :cpd_activities, -> { order(:position) }, inverse_of: :cpd_category, dependent: :destroy
|
|
7
6
|
accepts_nested_attributes_for :cpd_activities, allow_destroy: true
|
|
8
7
|
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
has_many :rules, class_name: 'Effective::CpdRule', as: :ruleable
|
|
9
|
+
has_many :cpd_statement_activities
|
|
10
|
+
|
|
11
|
+
if respond_to?(:log_changes)
|
|
12
|
+
log_changes(except: [:rules, :cpd_statement_activities])
|
|
13
|
+
end
|
|
11
14
|
|
|
12
15
|
effective_resource do
|
|
13
16
|
title :string
|
|
@@ -27,6 +30,12 @@ module Effective
|
|
|
27
30
|
validates :position, presence: true
|
|
28
31
|
validates :body, presence: true
|
|
29
32
|
|
|
33
|
+
before_destroy do
|
|
34
|
+
if (count = cpd_statement_activities.length) > 0
|
|
35
|
+
raise("#{count} statement activities belong to this category")
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
30
39
|
def to_s
|
|
31
40
|
title.presence || 'category'
|
|
32
41
|
end
|
|
@@ -49,11 +49,18 @@ module Effective
|
|
|
49
49
|
|
|
50
50
|
validates :title, presence: true
|
|
51
51
|
validates :start_at, presence: true
|
|
52
|
+
validates :required_score, numericality: { greater_than: 0, allow_nil: true }
|
|
52
53
|
|
|
53
54
|
validate(if: -> { start_at.present? && end_at.present? }) do
|
|
54
55
|
self.errors.add(:end_at, 'must be after the start date') unless end_at > start_at
|
|
55
56
|
end
|
|
56
57
|
|
|
58
|
+
before_destroy do
|
|
59
|
+
if (count = cpd_statements.length) > 0
|
|
60
|
+
raise("#{count} statement belong to this cycle")
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
57
64
|
def self.latest_cycle
|
|
58
65
|
order(id: :desc).first
|
|
59
66
|
end
|
|
@@ -3,7 +3,9 @@ module Effective
|
|
|
3
3
|
belongs_to :cpd_cycle
|
|
4
4
|
belongs_to :ruleable, polymorphic: true # Activity or Category
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
if respond_to?(:log_changes)
|
|
7
|
+
log_changes(to: :cpd_cycle)
|
|
8
|
+
end
|
|
7
9
|
|
|
8
10
|
# Only permit the words amount, amount2 and any charater 0-9 + - / * ( )
|
|
9
11
|
INVALID_FORMULA_CHARS = /[^0-9\+\-\/\*\(\)]/
|
|
@@ -10,7 +10,10 @@ module Effective
|
|
|
10
10
|
accepts_nested_attributes_for :cpd_statement_activities
|
|
11
11
|
|
|
12
12
|
has_many_attached :files
|
|
13
|
-
|
|
13
|
+
|
|
14
|
+
if respond_to?(:log_changes)
|
|
15
|
+
log_changes(except: [:wizard_steps])
|
|
16
|
+
end
|
|
14
17
|
|
|
15
18
|
acts_as_tokened
|
|
16
19
|
|
|
@@ -29,21 +32,22 @@ module Effective
|
|
|
29
32
|
confirm_factual :boolean
|
|
30
33
|
confirm_readonly :boolean
|
|
31
34
|
|
|
32
|
-
|
|
35
|
+
submitted_at :datetime, permitted: false
|
|
33
36
|
|
|
34
37
|
# Acts as tokened
|
|
35
38
|
token :string, permitted: false
|
|
36
39
|
|
|
37
40
|
# Acts as Wizard
|
|
38
41
|
wizard_steps :text, permitted: false
|
|
42
|
+
|
|
39
43
|
timestamps
|
|
40
44
|
end
|
|
41
45
|
|
|
42
46
|
scope :deep, -> { includes(:cpd_cycle, :user, cpd_statement_activities: [:files_attachments, :cpd_category, :original, cpd_activity: [:rich_text_body]]) }
|
|
43
47
|
scope :sorted, -> { order(:cpd_cycle_id) }
|
|
44
48
|
|
|
45
|
-
scope :draft, -> { where(
|
|
46
|
-
scope :completed, -> { where.not(
|
|
49
|
+
scope :draft, -> { where(submitted_at: nil) }
|
|
50
|
+
scope :completed, -> { where.not(submitted_at: nil) }
|
|
47
51
|
|
|
48
52
|
before_validation(if: -> { new_record? }) do
|
|
49
53
|
self.user ||= current_user
|
|
@@ -65,19 +69,22 @@ module Effective
|
|
|
65
69
|
end
|
|
66
70
|
|
|
67
71
|
def to_s
|
|
68
|
-
|
|
72
|
+
cpd_cycle.present? ? "#{cpd_cycle} Statement" : 'statement'
|
|
69
73
|
end
|
|
70
74
|
|
|
71
75
|
# This is the review step where they click Submit Ballot
|
|
72
76
|
def submit!
|
|
73
77
|
wizard_steps[:complete] ||= Time.zone.now
|
|
74
|
-
self.completed_at ||= Time.zone.now
|
|
75
78
|
|
|
76
|
-
|
|
79
|
+
update!(submitted_at: Time.zone.now)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def in_progress?
|
|
83
|
+
submitted_at.blank?
|
|
77
84
|
end
|
|
78
85
|
|
|
79
86
|
def completed?
|
|
80
|
-
|
|
87
|
+
submitted_at.present?
|
|
81
88
|
end
|
|
82
89
|
|
|
83
90
|
def carry_forward
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
= effective_form_with(model: [:admin, cpd_audit_level_question], engine: true) do |f|
|
|
2
|
+
- if inline_datatable?
|
|
3
|
+
= f.hidden_field :cpd_audit_level_section_id
|
|
4
|
+
- else
|
|
5
|
+
= f.select :cpd_audit_level_section_id, Effective::CpdAuditLevelSection.sorted.all
|
|
6
|
+
|
|
7
|
+
= f.text_field :title, label: 'Question Title'
|
|
8
|
+
= f.rich_text_area :body, label: 'Body (optional)'
|
|
9
|
+
|
|
10
|
+
= f.check_box :required, hint: 'A response to this question will be required'
|
|
11
|
+
= f.select :category, Effective::CpdAuditLevelQuestion::CATEGORIES
|
|
12
|
+
|
|
13
|
+
= f.show_if :category, 'Choose one' do
|
|
14
|
+
.card
|
|
15
|
+
.card-body
|
|
16
|
+
%h5 Choose one
|
|
17
|
+
%p Display radio buttons to choose one option
|
|
18
|
+
|
|
19
|
+
= f.show_if :category, 'Select all that apply' do
|
|
20
|
+
.card
|
|
21
|
+
.card-body
|
|
22
|
+
%h5 Select all that apply
|
|
23
|
+
%p Display checkboxes to select all options that apply
|
|
24
|
+
|
|
25
|
+
= f.show_if :category, 'Select up to 1' do
|
|
26
|
+
.card
|
|
27
|
+
.card-body
|
|
28
|
+
%h5 Select up to 1 (one)
|
|
29
|
+
%p Display checkboxes to select up to 1 option
|
|
30
|
+
|
|
31
|
+
= f.show_if :category, 'Select up to 2' do
|
|
32
|
+
.card
|
|
33
|
+
.card-body
|
|
34
|
+
%h5 Select up to 2 (two)
|
|
35
|
+
%p Display checkboxes to select up to 2 options
|
|
36
|
+
|
|
37
|
+
= f.show_if :category, 'Select up to 3' do
|
|
38
|
+
.card
|
|
39
|
+
.card-body
|
|
40
|
+
%h5 Select up to 3 (three)
|
|
41
|
+
%p Display checkboxes to select up to 3 options
|
|
42
|
+
|
|
43
|
+
= f.show_if :category, 'Select up to 4' do
|
|
44
|
+
.card
|
|
45
|
+
.card-body
|
|
46
|
+
%h5 Select up to 4 (four)
|
|
47
|
+
%p Display checkboxes to select up to 4 options
|
|
48
|
+
|
|
49
|
+
= f.show_if :category, 'Select up to 5' do
|
|
50
|
+
.card
|
|
51
|
+
.card-body
|
|
52
|
+
%h5 Select up to 5 (five)
|
|
53
|
+
%p Display checkboxes to select up to 5 options
|
|
54
|
+
|
|
55
|
+
= f.show_if :category, 'Short Answer' do
|
|
56
|
+
.card
|
|
57
|
+
.card-body
|
|
58
|
+
%h5 Short Answer
|
|
59
|
+
%p Display a text field to enter a short text answer
|
|
60
|
+
|
|
61
|
+
= f.show_if :category, 'Long Answer' do
|
|
62
|
+
.card
|
|
63
|
+
.card-body
|
|
64
|
+
%h5 Long Answer
|
|
65
|
+
%p Display a textarea to enter a long text answer
|
|
66
|
+
|
|
67
|
+
= f.show_if :category, 'Date' do
|
|
68
|
+
.card
|
|
69
|
+
.card-body
|
|
70
|
+
%h5 Date
|
|
71
|
+
%p Display a date field to enter a date
|
|
72
|
+
|
|
73
|
+
= f.show_if :category, 'Email' do
|
|
74
|
+
.card
|
|
75
|
+
.card-body
|
|
76
|
+
%h5 Email
|
|
77
|
+
%p Display an email field to enter an email
|
|
78
|
+
|
|
79
|
+
= f.show_if :category, 'Number' do
|
|
80
|
+
.card
|
|
81
|
+
.card-body
|
|
82
|
+
%h5 Number
|
|
83
|
+
%p Display a number field to enter an integer number
|
|
84
|
+
|
|
85
|
+
= f.show_if :category, 'Upload File' do
|
|
86
|
+
.card
|
|
87
|
+
.card-body
|
|
88
|
+
%h5 Upload File
|
|
89
|
+
%p Display a file field to upload a file
|
|
90
|
+
|
|
91
|
+
= f.show_if_any :category, Effective::CpdAuditLevelQuestion::WITH_OPTIONS_CATEGORIES do
|
|
92
|
+
.mt-3.card
|
|
93
|
+
.card-body
|
|
94
|
+
%h5 Options
|
|
95
|
+
%p Display the following options:
|
|
96
|
+
|
|
97
|
+
= f.has_many :cpd_audit_level_question_options, class: 'tight' do |fa|
|
|
98
|
+
= fa.text_field :title, label: false
|
|
99
|
+
|
|
100
|
+
= effective_submit(f)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
= tabs do
|
|
2
|
+
= tab 'Audit Level' do
|
|
3
|
+
= render 'admin/cpd_audit_levels/form_cpd_audit_level', cpd_audit_level: cpd_audit_level
|
|
4
|
+
|
|
5
|
+
- if cpd_audit_level.persisted?
|
|
6
|
+
= tab 'Sections and Questions' do
|
|
7
|
+
%p
|
|
8
|
+
Each of the following sections is a step on the audit wizard.
|
|
9
|
+
The All Steps content will be displayed as well as the top and bottom content.
|
|
10
|
+
|
|
11
|
+
= tabs do
|
|
12
|
+
- cpd_audit_level.cpd_audit_level_sections.each do |cpd_audit_level_section|
|
|
13
|
+
= tab(cpd_audit_level_section.to_s) do
|
|
14
|
+
= render 'admin/cpd_audit_levels/form_cpd_audit_level_section', cpd_audit_level: cpd_audit_level, cpd_audit_level_section: cpd_audit_level_section
|
|
15
|
+
|
|
16
|
+
= tab 'Auditee Wizard' do
|
|
17
|
+
= render 'admin/cpd_audit_levels/form_content_audit', cpd_audit_level: cpd_audit_level
|
|
18
|
+
|
|
19
|
+
= tab 'Audit Reviewer Wizard' do
|
|
20
|
+
= render 'admin/cpd_audit_levels/form_content_audit_review', cpd_audit_level: cpd_audit_level
|
|
21
|
+
|
|
22
|
+
- if cpd_audit_level.respond_to?(:log_changes_datatable)
|
|
23
|
+
= tab 'Logs' do
|
|
24
|
+
= render_inline_datatable(cpd_audit_level.log_changes_datatable)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
%p Each of the following content areas will be displayed on the auditee wizard.
|
|
2
|
+
|
|
3
|
+
= effective_form_with(model: [:admin, cpd_audit_level], engine: true) do |f|
|
|
4
|
+
= card("All Steps Content") do
|
|
5
|
+
= f.rich_text_area "rich_text_all_steps_audit_content", label: false,
|
|
6
|
+
hint: "displayed on all steps"
|
|
7
|
+
|
|
8
|
+
%hr
|
|
9
|
+
|
|
10
|
+
- Effective::CpdAudit::WIZARD_STEPS.each do |step, title|
|
|
11
|
+
= card("#{title} Content") do
|
|
12
|
+
= f.rich_text_area "rich_text_#{step}_audit_content", label: false,
|
|
13
|
+
hint: "displayed on the auditee wizard #{step} wizard step only"
|
|
14
|
+
|
|
15
|
+
= f.submit
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
%p Each of the following content areas will be displayed on the audit reviewer wizard.
|
|
2
|
+
|
|
3
|
+
= effective_form_with(model: [:admin, cpd_audit_level], engine: true) do |f|
|
|
4
|
+
= card("All Steps Content") do
|
|
5
|
+
= f.rich_text_area "rich_text_all_steps_audit_review_content", label: false,
|
|
6
|
+
hint: "displayed on all steps"
|
|
7
|
+
|
|
8
|
+
%hr
|
|
9
|
+
|
|
10
|
+
- Effective::CpdAuditReview::WIZARD_STEPS.each do |step, title|
|
|
11
|
+
= card("#{title} Content") do
|
|
12
|
+
= f.rich_text_area "rich_text_#{step}_audit_review_content", label: false,
|
|
13
|
+
hint: "displayed on the audit reviewer #{step} wizard step only"
|
|
14
|
+
|
|
15
|
+
= f.submit
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
= effective_form_with(model: [:admin, cpd_audit_level], engine: true) do |f|
|
|
2
|
+
= f.text_field :title, hint: 'A title for this kind of audit'
|
|
3
|
+
|
|
4
|
+
= f.select :recommendations, f.object.recommendations,
|
|
5
|
+
label: 'Audit Review recommendation choices', tags: true, placeholder: 'Type to add item...',
|
|
6
|
+
hint: 'The recommendation made by an audit reviewer when reviewing an audit. Begin typing and then press enter to add a choice'
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
= f.select :determinations, f.object.determinations,
|
|
10
|
+
label: 'Audit determination choices', tags: true, placeholder: 'Type to add item...',
|
|
11
|
+
hint: 'The final determination made by the auditor when closing an audit. Begin typing and then press enter to add a choice.'
|
|
12
|
+
|
|
13
|
+
%h2 Sections
|
|
14
|
+
%p
|
|
15
|
+
Please add at least one section.
|
|
16
|
+
Each section is a step on the audit wizard with its own content and questions.
|
|
17
|
+
|
|
18
|
+
= f.has_many :cpd_audit_level_sections, class: 'tight' do |fas|
|
|
19
|
+
= fas.text_field :title, label: false
|
|
20
|
+
|
|
21
|
+
%h2 Deadlines
|
|
22
|
+
%p.text-muted Leave blank for no deadlines
|
|
23
|
+
.row
|
|
24
|
+
.col= f.text_field :days_to_submit, label: 'Days for auditee to submit', hint: "The number of business days from the date of notification or approved extension that an auditee has to complete their submission."
|
|
25
|
+
.col= f.text_field :days_to_review, label: 'Days for auditor to review', hint: "The number of business days from the auditee's deadline that an auditor has to review the submission and provide a recommendation."
|
|
26
|
+
|
|
27
|
+
%h2 Workflows
|
|
28
|
+
%p.text-muted Each of these workflows will be displayed to the audittee and/or auditor on their wizard steps. Leave blank for no deadlines.
|
|
29
|
+
|
|
30
|
+
.row
|
|
31
|
+
.col
|
|
32
|
+
%h3 Conflict of Interest
|
|
33
|
+
= f.check_box :conflict_of_interest, label: 'Yes, the auditee and auditor may declare a conflict of interest with their matching'
|
|
34
|
+
|
|
35
|
+
= f.show_if :conflict_of_interest, true do
|
|
36
|
+
= f.text_field :days_to_declare_conflict, label: 'Days to declare conflict of interest', hint: "The number of business days from the date of notification that an auditee and auditors have to declare a conflict of interest with the matching."
|
|
37
|
+
|
|
38
|
+
.col
|
|
39
|
+
%h3 Exemption
|
|
40
|
+
= f.check_box :can_request_exemption, label: "Yes, the auditee may request an exemption<br><br>".html_safe
|
|
41
|
+
|
|
42
|
+
= f.show_if :can_request_exemption, true do
|
|
43
|
+
= f.text_field :days_to_request_exemption, label: 'Days to request exemption', hint: "The number of business days from the date of notification that an auditee may request an exemption."
|
|
44
|
+
|
|
45
|
+
.col
|
|
46
|
+
%h3 Extension
|
|
47
|
+
= f.check_box :can_request_extension, label: "Yes, the auditee may request an extension<br><br>"
|
|
48
|
+
|
|
49
|
+
= f.show_if :can_request_extension, true do
|
|
50
|
+
= f.text_field :days_to_request_extension, label: 'Days to request extension', hint: "The number of business days from the date of notification that an auditee may request an extension."
|
|
51
|
+
|
|
52
|
+
= effective_submit(f)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
= effective_form_with(model: [:admin, cpd_audit_level], engine: true) do |f|
|
|
2
|
+
= f.fields_for :cpd_audit_level_sections, cpd_audit_level_section do |fas|
|
|
3
|
+
= fas.rich_text_area :top_content
|
|
4
|
+
= fas.rich_text_area :bottom_content
|
|
5
|
+
|
|
6
|
+
= f.submit
|
|
7
|
+
|
|
8
|
+
%h2 Questions
|
|
9
|
+
- datatable = Admin::EffectiveCpdAuditLevelQuestionsDatatable.new(cpd_audit_level_section_id: cpd_audit_level_section.id)
|
|
10
|
+
= render_datatable(datatable, inline: true, simple: true)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
= render('effective/cpd_audit_reviews/cpd_audit_review', cpd_audit_review: cpd_audit_review)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
= effective_form_with(model: [:admin, cpd_audit_review], engine: true) do |f|
|
|
2
|
+
- if inline_datatable?
|
|
3
|
+
= f.hidden_field :cpd_audit_id
|
|
4
|
+
= f.static_field :cpd_audit, label: 'CPD Audit'
|
|
5
|
+
- else
|
|
6
|
+
= f.select :cpd_audit_id, Effective::CpdAudit.available.sorted.all
|
|
7
|
+
|
|
8
|
+
= render('admin/cpd_audits/audit_reviewer_fields', f: f)
|
|
9
|
+
|
|
10
|
+
%p Send email
|
|
11
|
+
= email_form_fields(f, :cpd_audit_review_opened)
|
|
12
|
+
|
|
13
|
+
= effective_submit(f)
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
= tabs do
|
|
2
|
+
- if cpd_audit.new_record?
|
|
3
|
+
= tab 'New Audit' do
|
|
4
|
+
= render 'admin/cpd_audits/form_new', cpd_audit: cpd_audit
|
|
5
|
+
|
|
6
|
+
- if cpd_audit.persisted?
|
|
7
|
+
- if cpd_audit.completed?
|
|
8
|
+
= tab 'Audit' do
|
|
9
|
+
= render 'effective/cpd_audits/cpd_audit', cpd_audit: cpd_audit
|
|
10
|
+
|
|
11
|
+
= tab 'Status' do
|
|
12
|
+
= render 'admin/cpd_audits/status', cpd_audit: cpd_audit
|
|
13
|
+
- else
|
|
14
|
+
= tab 'Status' do
|
|
15
|
+
= render 'admin/cpd_audits/status', cpd_audit: cpd_audit
|
|
16
|
+
|
|
17
|
+
= tab 'Audit' do
|
|
18
|
+
= render 'effective/cpd_audits/cpd_audit', cpd_audit: cpd_audit
|
|
19
|
+
|
|
20
|
+
= tab 'Statements' do
|
|
21
|
+
- datatable = Admin::EffectiveCpdStatementsDatatable.new(user_id: cpd_audit.user.id, user_type: cpd_audit.user.class.name)
|
|
22
|
+
= render_datatable(datatable, inline: true, simple: true)
|
|
23
|
+
|
|
24
|
+
= tab 'Audit Reviews' do
|
|
25
|
+
- datatable = Admin::EffectiveCpdAuditReviewsDatatable.new(cpd_audit_id: cpd_audit.id)
|
|
26
|
+
= render_datatable(datatable, inline: true, simple: true)
|
|
27
|
+
|
|
28
|
+
- unless cpd_audit.closed?
|
|
29
|
+
= tab 'Determination' do
|
|
30
|
+
= render 'admin/cpd_audits/form_determination', cpd_audit: cpd_audit
|
|
31
|
+
|
|
32
|
+
- if cpd_audit.conflicted?
|
|
33
|
+
= tab 'Process Conflict of Interest' do
|
|
34
|
+
= render 'admin/cpd_audits/form_conflict', cpd_audit: cpd_audit
|
|
35
|
+
|
|
36
|
+
- if cpd_audit.exemption_requested?
|
|
37
|
+
= tab 'Process Exemption Request' do
|
|
38
|
+
= render 'admin/cpd_audits/form_exemption', cpd_audit: cpd_audit
|
|
39
|
+
|
|
40
|
+
- if cpd_audit.extension_requested?
|
|
41
|
+
= tab 'Process Extension Request' do
|
|
42
|
+
= render 'admin/cpd_audits/form_extension', cpd_audit: cpd_audit
|
|
43
|
+
|
|
44
|
+
- if cpd_audit.respond_to?(:log_changes_datatable)
|
|
45
|
+
= tab 'Logs' do
|
|
46
|
+
= render_inline_datatable(cpd_audit.log_changes_datatable)
|