effective_cpd 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 80e098e09ddea7dbc4d43707500e647e1795dd750b63f6e21ac44512a430fbcb
4
- data.tar.gz: 72590ba94aa5535c8431afb6bcd4a4ef1b4a90be5f21f120914c94dbcfbe4cd0
3
+ metadata.gz: 814bc46856da481c1463852a7bcf2070e48fb494fd107f28e11385b8e4c6a4a5
4
+ data.tar.gz: e304434f2182696dcd63a7ccefb8f06191230ec023988950c3efca2f74ccf23d
5
5
  SHA512:
6
- metadata.gz: b3b459b4701245f5953e2ce0d01135dbc19e8d5587ba0a7e1b2e9de94897ae7c59e940b7bd8b3ad364e2bd1c8b78c617f83da2ffa075cb8e4fc19670d6b94f18
7
- data.tar.gz: 238cc81c30a48006ca4e4886cdd654add4b322dd3bd612e5186e0b6fb15bb50a24639fa434639ca32d86506ef165a369ab22435f60d17c7a2e255f643975e42e
6
+ metadata.gz: d691015664b852d423d7dffe069b3ce96a3ad966918034cb1313325bcc0665a4a05b3bef44d205beccf0223cbc25429f0b806109f65579d62b13feddeed7c165
7
+ data.tar.gz: 732028a6c199f87be5e9cb3934ae9ba87b1d8a56b142ea2adddbec68f29b914535d79fe2a84e5603f402976dc4877dd46b0b5eecb5f56ccefc9cf735388907ba
@@ -32,6 +32,8 @@ module Effective
32
32
  when :extension
33
33
  params.require(:effective_cpd_audit)
34
34
  .permit(:current_step, :extension_request, :extension_request_date, :extension_request_reason)
35
+ when :cpd
36
+ params.require(:effective_cpd_audit).permit(:current_step)
35
37
  when :questionnaire
36
38
  params.require(:effective_cpd_audit).permit(:current_step)
37
39
  when :files
@@ -22,6 +22,10 @@ module EffectiveCpdUser
22
22
  nil
23
23
  end
24
24
 
25
+ def cpd_audit_cpd_required?
26
+ true
27
+ end
28
+
25
29
  module ClassMethods
26
30
  def effective_cpd_user?; true; end
27
31
  end
@@ -56,6 +56,7 @@ module Effective
56
56
  exemption: 'Request Exemption',
57
57
  extension: 'Request Extension',
58
58
  waiting: 'Waiting',
59
+ cpd: 'CPD',
59
60
 
60
61
  questionnaire: 'Questionnaire',
61
62
  # ... There will be one step per cpd_audit_level_sections here
@@ -129,6 +130,21 @@ module Effective
129
130
  validates :extension_request_date, presence: true, if: -> { extension_request? }
130
131
  validates :extension_request_reason, presence: true, if: -> { extension_request? }
131
132
 
133
+ validate(if: -> { current_step == :conflict && conflict_of_interest? }) do
134
+ deadline = deadline_to_conflict_of_interest()
135
+ self.errors.add(:base, 'deadline to declare conflict of interest has already passed') if deadline && deadline < Time.zone.now
136
+ end
137
+
138
+ validate(if: -> { current_step == :exemption && exemption_request? }) do
139
+ deadline = deadline_to_exemption()
140
+ self.errors.add(:base, 'deadline to request exemption has already passed') if deadline && deadline < Time.zone.now
141
+ end
142
+
143
+ validate(if: -> { current_step == :extension && extension_request? }) do
144
+ deadline = deadline_to_extension()
145
+ self.errors.add(:base, 'deadline to request extension has already passed') if deadline && deadline < Time.zone.now
146
+ end
147
+
132
148
  validate(if: -> { determination.present? }) do
133
149
  unless cpd_audit_level.determinations.include?(determination)
134
150
  self.errors.add(:determination, 'must exist in this audit level')
@@ -146,25 +162,6 @@ module Effective
146
162
  persisted? ? "#{cpd_audit_level} Audit of #{user}" : 'audit'
147
163
  end
148
164
 
149
- acts_as_wizard(
150
- start: 'Start',
151
- information: 'Information',
152
- instructions: 'Instructions',
153
-
154
- # These 4 steps are determined by audit_level settings
155
- conflict: 'Conflict of Interest',
156
- exemption: 'Request Exemption',
157
- extension: 'Request Extension',
158
- waiting: 'Waiting on Request',
159
-
160
- questionaire: 'Questionaire',
161
- # ... There will be one step per cpd_audit_level_sections here
162
- files: 'Upload Resume',
163
-
164
- submit: 'Confirm & Submit',
165
- complete: 'Complete'
166
- )
167
-
168
165
  def dynamic_wizard_steps
169
166
  cpd_audit_level.cpd_audit_level_sections.each_with_object({}) do |section, h|
170
167
  h["section#{section.position+1}".to_sym] = section.title
@@ -195,7 +192,7 @@ module Effective
195
192
  steps += [:waiting]
196
193
  end
197
194
 
198
- steps += [:questionnaire] + dynamic_wizard_steps.keys + [:files, :submit, :complete]
195
+ steps += [:cpd, :questionnaire] + dynamic_wizard_steps.keys + [:files, :submit, :complete]
199
196
 
200
197
  steps
201
198
  end
@@ -314,6 +311,24 @@ module Effective
314
311
  send_email(:cpd_audit_extension_denied)
315
312
  end
316
313
 
314
+ # Require CPD step
315
+ def user_cpd_required?
316
+ return false unless user.cpd_audit_cpd_required?
317
+ required_cpd_cycle.present?
318
+ end
319
+
320
+ def user_cpd_completed?
321
+ return true if required_cpd_cycle.blank?
322
+ user.cpd_statements.any? { |s| s.completed? && s.cpd_cycle_id == required_cpd_cycle.id }
323
+ end
324
+
325
+ def required_cpd_cycle
326
+ @required_cpd_cycle ||= begin
327
+ last_year = ((notification_date || created_at || Time.zone.now) - 1.year).all_year
328
+ Effective::CpdCycle.available.where(start_at: last_year).first
329
+ end
330
+ end
331
+
317
332
  # Auditee wizard action
318
333
  def submit!
319
334
  submitted!
@@ -7,7 +7,7 @@ module Effective
7
7
  belongs_to :cpd_audit_level
8
8
  belongs_to :user, polymorphic: true # Auditor
9
9
 
10
- has_many :cpd_audit_review_items, -> { CpdAuditReviewItem.sorted }, inverse_of: :cpd_audit_review
10
+ has_many :cpd_audit_review_items, -> { CpdAuditReviewItem.sorted }, inverse_of: :cpd_audit_review, dependent: :destroy
11
11
  accepts_nested_attributes_for :cpd_audit_review_items, reject_if: :all_blank, allow_destroy: true
12
12
 
13
13
  if respond_to?(:log_changes)
@@ -0,0 +1,13 @@
1
+ = card(cpd_audit.wizard_step_title(step)) do
2
+ - cpd_cycle = cpd_audit.required_cpd_cycle
3
+
4
+ %table.table
5
+ %tbody
6
+ %tr
7
+ %th CPD Requirements
8
+ %td
9
+ - if cpd_audit.user_cpd_required? == false
10
+ Not required
11
+
12
+ - if cpd_cycle.present?
13
+ = cpd_cycle
@@ -5,7 +5,8 @@
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
- %p The deadline to declare a conflict of interest is: #{resource.deadline_to_conflict_of_interest.strftime('%F')}.
8
+ - if resource.deadline_to_conflict_of_interest.present?
9
+ %p The deadline to declare a conflict of interest is: #{resource.deadline_to_conflict_of_interest.strftime('%F')}.
9
10
 
10
11
  = effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
11
12
  = f.hidden_field :current_step
@@ -0,0 +1,19 @@
1
+ = render('layout') do
2
+ - cpd_cycle = resource.required_cpd_cycle
3
+
4
+ - if resource.user_cpd_required? == false
5
+ %p You are not required to submit a CPD statement at this time.
6
+ - elsif resource.user_cpd_completed?
7
+ %p Thank you! You have submitted a CPD statement for the required #{cpd_cycle} year.
8
+ - elsif cpd_cycle.present?
9
+ %p You must submit a CPD statement for the #{cpd_cycle} year before you may continue.
10
+
11
+ - if cpd_cycle.present?
12
+ %p= link_to("#{cpd_cycle} Statement", effective_cpd.cpd_cycle_cpd_statement_build_path(cpd_cycle, :new, :start), class: 'btn btn-primary', target: '_blank')
13
+
14
+ - if (resource.user_cpd_required? == false || resource.user_cpd_completed?)
15
+
16
+ = effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
17
+ = f.hidden_field :current_step
18
+
19
+ = f.submit 'Save and Continue', center: true
@@ -2,7 +2,8 @@
2
2
  - if resource.was_exemption_requested?
3
3
  = render('effective/cpd_audits/exemption', cpd_audit: resource, step: :exemption)
4
4
 
5
- %p The deadline to request an exemption is: #{resource.deadline_to_exemption.strftime('%F')}.
5
+ - if resource.deadline_to_exemption.present?
6
+ %p The deadline to request an exemption is: #{resource.deadline_to_exemption.strftime('%F')}.
6
7
 
7
8
  = effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
8
9
  = f.hidden_field :current_step
@@ -2,7 +2,8 @@
2
2
  - if resource.was_extension_requested?
3
3
  = render('effective/cpd_audits/extension', cpd_audit: resource, step: :extension)
4
4
 
5
- %p The deadline to request an extension is: #{resource.deadline_to_extension.strftime('%F')}.
5
+ - if resource.deadline_to_extension.present?
6
+ %p The deadline to request an extension is: #{resource.deadline_to_extension.strftime('%F')}.
6
7
 
7
8
  = effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
8
9
  = f.hidden_field :current_step
data/config/routes.rb CHANGED
@@ -41,7 +41,7 @@ EffectiveCpd::Engine.routes.draw do
41
41
  resources :cpd_audit_levels, except: [:show]
42
42
  resources :cpd_audit_level_questions, except: [:show]
43
43
 
44
- resources :cpd_audits, except: [:show, :destroy]
44
+ resources :cpd_audits, except: [:show]
45
45
  resources :cpd_audit_reviews
46
46
  end
47
47
 
@@ -1,3 +1,3 @@
1
1
  module EffectiveCpd
2
- VERSION = '0.2.0'
2
+ VERSION = '0.2.1'
3
3
  end
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.2.0
4
+ version: 0.2.1
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-01-05 00:00:00.000000000 Z
11
+ date: 2022-02-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -311,6 +311,7 @@ files:
311
311
  - app/views/effective/cpd_audit_reviews/submit.html.haml
312
312
  - app/views/effective/cpd_audit_reviews/waiting.html.haml
313
313
  - app/views/effective/cpd_audits/_conflict.html.haml
314
+ - app/views/effective/cpd_audits/_cpd.html.haml
314
315
  - app/views/effective/cpd_audits/_cpd_audit.html.haml
315
316
  - app/views/effective/cpd_audits/_cpd_audit_level_section.html.haml
316
317
  - app/views/effective/cpd_audits/_exemption.html.haml
@@ -321,6 +322,7 @@ files:
321
322
  - app/views/effective/cpd_audits/_waiting.html.haml
322
323
  - app/views/effective/cpd_audits/complete.html.haml
323
324
  - app/views/effective/cpd_audits/conflict.html.haml
325
+ - app/views/effective/cpd_audits/cpd.html.haml
324
326
  - app/views/effective/cpd_audits/cpd_audit_level_section.html.haml
325
327
  - app/views/effective/cpd_audits/exemption.html.haml
326
328
  - app/views/effective/cpd_audits/extension.html.haml