effective_cpd 0.2.0 → 0.3.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: 86cc744bca079efc7c8980e61f35d8200c4b01efbc309481ad50bf9ffa8d885c
4
+ data.tar.gz: bd79c194bc5b49fa01777fd43e7cd6a9efd029b17ca70793ce54059a26656ac1
5
5
  SHA512:
6
- metadata.gz: b3b459b4701245f5953e2ce0d01135dbc19e8d5587ba0a7e1b2e9de94897ae7c59e940b7bd8b3ad364e2bd1c8b78c617f83da2ffa075cb8e4fc19670d6b94f18
7
- data.tar.gz: 238cc81c30a48006ca4e4886cdd654add4b322dd3bd612e5186e0b6fb15bb50a24639fa434639ca32d86506ef165a369ab22435f60d17c7a2e255f643975e42e
6
+ metadata.gz: b014a09d8642a8e61c82887ffd511883203b2c5bc06db5eaefd60765c17b2275b944e1d591dce8d0db2197c568f7f9ee4f276bcc7f175c99a0ced075542b07d7
7
+ data.tar.gz: bfd0c5a9a54df1b62de4c9345da508a9126ca2271480677bb8304b32b5d79085eca22a0c0502d8d56e496b7c88b845c00b59f287a378a2940c1208a1cc6cdc05
@@ -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
@@ -1,122 +1,194 @@
1
1
  module Effective
2
2
  class CpdMailer < EffectiveCpd.parent_mailer_class
3
- default from: -> { EffectiveCpd.mailer_sender }
4
- layout -> { EffectiveCpd.mailer_layout || 'effective_cpd_mailer_layout' }
3
+
4
+ include EffectiveMailer
5
+ include EffectiveEmailTemplatesMailer if EffectiveCpd.use_effective_email_templates
5
6
 
6
7
  # CPD Audit
7
- def cpd_audit_opened(cpd_audit, opts = {})
8
- @assigns = effective_cpd_email_assigns(cpd_audit)
9
- @assigns.merge!(url: effective_cpd.cpd_audit_url(cpd_audit))
8
+ def cpd_audit_opened(resource, opts = {})
9
+ raise('expected an Effective::CpdAudit') unless resource.kind_of?(Effective::CpdAudit)
10
+
11
+ @assigns = assigns_for(resource).merge(url: effective_cpd.cpd_audit_url(resource))
12
+ @cpd_audit = resource
13
+
14
+ subject = subject_for(__method__, 'CPD Audit Opened', resource, opts)
15
+ headers = headers_for(resource, opts)
10
16
 
11
- mail(to: cpd_audit.user.email, **headers_for(cpd_audit, opts))
17
+ mail(to: resource.user.email, subject: subject, **headers)
12
18
  end
13
19
 
14
- def cpd_audit_conflicted(cpd_audit, opts = {})
15
- @assigns = effective_cpd_email_assigns(cpd_audit)
16
- @assigns.merge!(url: effective_cpd.edit_admin_cpd_audit_url(cpd_audit))
20
+ def cpd_audit_conflicted(resource, opts = {})
21
+ raise('expected an Effective::CpdAudit') unless resource.kind_of?(Effective::CpdAudit)
22
+
23
+ @assigns = assigns_for(resource).merge(url: effective_cpd.edit_admin_cpd_audit_url(resource))
24
+ @cpd_audit = resource
25
+
26
+ subject = subject_for(__method__, 'CPD Audit Conflicted', resource, opts)
27
+ headers = headers_for(resource, opts)
17
28
 
18
- mail(to: EffectiveCpd.mailer_admin, **headers_for(cpd_audit, opts))
29
+ mail(to: mailer_admin, subject: subject, **headers)
19
30
  end
20
31
 
21
- def cpd_audit_conflict_resolved(cpd_audit, opts = {})
22
- @assigns = effective_cpd_email_assigns(cpd_audit)
23
- @assigns.merge!(url: effective_cpd.cpd_audit_url(cpd_audit))
32
+ def cpd_audit_conflict_resolved(resource, opts = {})
33
+ raise('expected an Effective::CpdAudit') unless resource.kind_of?(Effective::CpdAudit)
24
34
 
25
- mail(to: cpd_audit.user.email, **headers_for(cpd_audit, opts))
35
+ @assigns = assigns_for(resource).merge(url: effective_cpd.cpd_audit_url(resource))
36
+ @cpd_audit = resource
37
+
38
+ subject = subject_for(__method__, 'CPD Audit Conflict Resolved', resource, opts)
39
+ headers = headers_for(resource, opts)
40
+
41
+ mail(to: resource.user.email, subject: subject, **headers)
26
42
  end
27
43
 
28
- def cpd_audit_exemption_request(cpd_audit, opts = {})
29
- @assigns = effective_cpd_email_assigns(cpd_audit)
30
- @assigns.merge!(url: effective_cpd.edit_admin_cpd_audit_url(cpd_audit))
44
+ def cpd_audit_exemption_request(resource, opts = {})
45
+ raise('expected an Effective::CpdAudit') unless resource.kind_of?(Effective::CpdAudit)
46
+
47
+ @assigns = assigns_for(resource).merge(url: effective_cpd.edit_admin_cpd_audit_url(resource))
48
+ @cpd_audit = resource
49
+
50
+ subject = subject_for(__method__, 'CPD Audit Exemption Request', resource, opts)
51
+ headers = headers_for(resource, opts)
31
52
 
32
- mail(to: EffectiveCpd.mailer_admin, **headers_for(cpd_audit, opts))
53
+ mail(to: mailer_admin, subject: subject, **headers)
33
54
  end
34
55
 
35
- def cpd_audit_exemption_denied(cpd_audit, opts = {})
36
- @assigns = effective_cpd_email_assigns(cpd_audit)
37
- @assigns.merge!(url: effective_cpd.cpd_audit_url(cpd_audit))
56
+ def cpd_audit_exemption_denied(resource, opts = {})
57
+ raise('expected an Effective::CpdAudit') unless resource.kind_of?(Effective::CpdAudit)
38
58
 
39
- mail(to: cpd_audit.user.email, **headers_for(cpd_audit, opts))
59
+ @assigns = assigns_for(resource).merge(url: effective_cpd.cpd_audit_url(resource))
60
+ @cpd_audit = resource
61
+
62
+ subject = subject_for(__method__, 'CPD Audit Exemption Denied', resource, opts)
63
+ headers = headers_for(resource, opts)
64
+
65
+ mail(to: resource.user.email, subject: subject, **headers)
40
66
  end
41
67
 
42
- def cpd_audit_exemption_granted(cpd_audit, opts = {})
43
- @assigns = effective_cpd_email_assigns(cpd_audit)
44
- @assigns.merge!(url: effective_cpd.cpd_audit_url(cpd_audit))
68
+ def cpd_audit_exemption_granted(resource, opts = {})
69
+ raise('expected an Effective::CpdAudit') unless resource.kind_of?(Effective::CpdAudit)
70
+
71
+ @assigns = assigns_for(resource).merge(url: effective_cpd.cpd_audit_url(resource))
72
+ @cpd_audit = resource
73
+
74
+ subject = subject_for(__method__, 'CPD Audit Exemption Granted', resource, opts)
75
+ headers = headers_for(resource, opts)
45
76
 
46
- mail(to: cpd_audit.user.email, **headers_for(cpd_audit, opts))
77
+ mail(to: resource.user.email, subject: subject, **headers)
47
78
  end
48
79
 
49
- def cpd_audit_extension_request(cpd_audit, opts = {})
50
- @assigns = effective_cpd_email_assigns(cpd_audit)
51
- @assigns.merge!(url: effective_cpd.edit_admin_cpd_audit_url(cpd_audit))
80
+ def cpd_audit_extension_request(resource, opts = {})
81
+ raise('expected an Effective::CpdAudit') unless resource.kind_of?(Effective::CpdAudit)
52
82
 
53
- mail(to: EffectiveCpd.mailer_admin, **headers_for(cpd_audit, opts))
83
+ @assigns = assigns_for(resource).merge(url: effective_cpd.edit_admin_cpd_audit_url(resource))
84
+ @cpd_audit = resource
85
+
86
+ subject = subject_for(__method__, 'CPD Audit Extension Request', resource, opts)
87
+ headers = headers_for(resource, opts)
88
+
89
+ mail(to: mailer_admin, subject: subject, **headers)
54
90
  end
55
91
 
56
- def cpd_audit_extension_denied(cpd_audit, opts = {})
57
- @assigns = effective_cpd_email_assigns(cpd_audit)
58
- @assigns.merge!(url: effective_cpd.cpd_audit_url(cpd_audit))
92
+ def cpd_audit_extension_denied(resource, opts = {})
93
+ raise('expected an Effective::CpdAudit') unless resource.kind_of?(Effective::CpdAudit)
94
+
95
+ @assigns = assigns_for(resource).merge(url: effective_cpd.cpd_audit_url(resource))
96
+ @cpd_audit = resource
97
+
98
+ subject = subject_for(__method__, 'CPD Audit Extension Denied', resource, opts)
99
+ headers = headers_for(resource, opts)
59
100
 
60
- mail(to: cpd_audit.user.email, **headers_for(cpd_audit, opts))
101
+ mail(to: resource.user.email, subject: subject, **headers)
61
102
  end
62
103
 
63
- def cpd_audit_extension_granted(cpd_audit, opts = {})
64
- @assigns = effective_cpd_email_assigns(cpd_audit)
65
- @assigns.merge!(url: effective_cpd.cpd_audit_url(cpd_audit))
104
+ def cpd_audit_extension_granted(resource, opts = {})
105
+ raise('expected an Effective::CpdAudit') unless resource.kind_of?(Effective::CpdAudit)
66
106
 
67
- mail(to: cpd_audit.user.email, **headers_for(cpd_audit, opts))
107
+ @assigns = assigns_for(resource).merge(url: effective_cpd.cpd_audit_url(resource))
108
+ @cpd_audit = resource
109
+
110
+ subject = subject_for(__method__, 'CPD Audit Extension Granted', resource, opts)
111
+ headers = headers_for(resource, opts)
112
+
113
+ mail(to: resource.user.email, subject: subject, **headers)
68
114
  end
69
115
 
70
- def cpd_audit_submitted(cpd_audit, opts = {})
71
- @assigns = effective_cpd_email_assigns(cpd_audit)
72
- @assigns.merge!(url: effective_cpd.edit_admin_cpd_audit_url(cpd_audit))
116
+ def cpd_audit_submitted(resource, opts = {})
117
+ raise('expected an Effective::CpdAudit') unless resource.kind_of?(Effective::CpdAudit)
118
+
119
+ @assigns = assigns_for(resource).merge(url: effective_cpd.edit_admin_cpd_audit_url(resource))
120
+ @cpd_audit = resource
121
+
122
+ subject = subject_for(__method__, 'CPD Audit Submitted', resource, opts)
123
+ headers = headers_for(resource, opts)
73
124
 
74
- mail(to: EffectiveCpd.mailer_admin, **headers_for(cpd_audit, opts))
125
+ mail(to: mailer_admin, subject: subject, **headers)
75
126
  end
76
127
 
77
- def cpd_audit_reviewed(cpd_audit, opts = {})
78
- @assigns = effective_cpd_email_assigns(cpd_audit)
79
- @assigns.merge!(url: effective_cpd.edit_admin_cpd_audit_url(cpd_audit))
128
+ def cpd_audit_reviewed(resource, opts = {})
129
+ raise('expected an Effective::CpdAudit') unless resource.kind_of?(Effective::CpdAudit)
80
130
 
81
- mail(to: EffectiveCpd.mailer_admin, **headers_for(cpd_audit, opts))
131
+ @assigns = assigns_for(resource).merge(url: effective_cpd.edit_admin_cpd_audit_url(resource))
132
+ @cpd_audit = resource
133
+
134
+ subject = subject_for(__method__, 'CPD Audit Reviewed', resource, opts)
135
+ headers = headers_for(resource, opts)
136
+
137
+ mail(to: mailer_admin, subject: subject, **headers)
82
138
  end
83
139
 
84
- def cpd_audit_closed(cpd_audit, opts = {})
85
- @assigns = effective_cpd_email_assigns(cpd_audit)
86
- @assigns.merge!(url: effective_cpd.cpd_audit_url(cpd_audit))
140
+ def cpd_audit_closed(resource, opts = {})
141
+ raise('expected an Effective::CpdAudit') unless resource.kind_of?(Effective::CpdAudit)
142
+
143
+ @assigns = assigns_for(resource).merge(url: effective_cpd.cpd_audit_url(resource))
144
+ @cpd_audit = resource
145
+
146
+ subject = subject_for(__method__, 'CPD Audit Closed', resource, opts)
147
+ headers = headers_for(resource, opts)
87
148
 
88
- mail(to: cpd_audit.user.email, **headers_for(cpd_audit, opts))
149
+ mail(to: resource.user.email, subject: subject, **headers)
89
150
  end
90
151
 
91
152
  # CPD Audit Review
92
- def cpd_audit_review_opened(cpd_audit_review, opts = {})
93
- @assigns = effective_cpd_email_assigns(cpd_audit_review)
94
- @assigns.merge!(url: effective_cpd.cpd_audit_review_url(cpd_audit_review))
153
+ def cpd_audit_review_opened(resource, opts = {})
154
+ raise('expected an Effective::CpdAuditReview') unless resource.kind_of?(Effective::CpdAuditReview)
95
155
 
96
- mail(to: cpd_audit_review.user.email, **headers_for(cpd_audit_review, opts))
97
- end
156
+ @assigns = assigns_for(resource).merge(url: effective_cpd.cpd_audit_review_url(resource))
157
+ @cpd_audit_review = resource
98
158
 
99
- def cpd_audit_review_ready(cpd_audit_review, opts = {})
100
- @assigns = effective_cpd_email_assigns(cpd_audit_review)
101
- @assigns.merge!(url: effective_cpd.cpd_audit_review_url(cpd_audit_review))
159
+ subject = subject_for(__method__, 'CPD Audit Review Opened', resource, opts)
160
+ headers = headers_for(resource, opts)
102
161
 
103
- mail(to: cpd_audit_review.user.email, **headers_for(cpd_audit_review, opts))
162
+ mail(to: resource.user.email, subject: subject, **headers)
104
163
  end
105
164
 
106
- def cpd_audit_review_submitted(cpd_audit_review, opts = {})
107
- @assigns = effective_cpd_email_assigns(cpd_audit_review)
108
- @assigns.merge!(url: effective_cpd.edit_admin_cpd_audit_url(cpd_audit_review.cpd_audit))
165
+ def cpd_audit_review_ready(resource, opts = {})
166
+ raise('expected an Effective::CpdAuditReview') unless resource.kind_of?(Effective::CpdAuditReview)
167
+
168
+ @assigns = assigns_for(resource).merge(url: effective_cpd.cpd_audit_review_url(resource))
169
+ @cpd_audit_review = resource
109
170
 
110
- mail(to: EffectiveCpd.mailer_admin, **headers_for(cpd_audit_review, opts))
171
+ subject = subject_for(__method__, 'CPD Audit Review Ready', resource, opts)
172
+ headers = headers_for(resource, opts)
173
+
174
+ mail(to: resource.user.email, subject: subject, **headers)
111
175
  end
112
176
 
113
- protected
177
+ def cpd_audit_review_submitted(resource, opts = {})
178
+ raise('expected an Effective::CpdAuditReview') unless resource.kind_of?(Effective::CpdAuditReview)
114
179
 
115
- def headers_for(resource, opts = {})
116
- resource.respond_to?(:log_changes_datatable) ? opts.merge(log: resource) : opts
180
+ @assigns = assigns_for(resource).merge(url: effective_cpd.edit_admin_cpd_audit_url(resource.cpd_audit))
181
+ @cpd_audit_review = resource
182
+
183
+ subject = subject_for(__method__, 'CPD Audit Review Submitted', resource, opts)
184
+ headers = headers_for(resource, opts)
185
+
186
+ mail(to: mailer_admin, subject: subject, **headers)
117
187
  end
118
188
 
119
- def effective_cpd_email_assigns(resource)
189
+ protected
190
+
191
+ def assigns_for(resource)
120
192
  unless resource.kind_of?(Effective::CpdAudit) || resource.kind_of?(Effective::CpdAuditReview)
121
193
  raise('expected an Effective::CpdAudit or Effective::CpdAuditReview')
122
194
  end
@@ -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
@@ -1,22 +1,23 @@
1
1
  = render('layout') do
2
- - raise('expected a submitted cpd_audit') unless resource.was_submitted?
2
+ - raise('expected a submitted cpd_audit') unless resource.was_submitted? || resource.closed?
3
3
 
4
- .text-center
5
- .row
6
- .col-2
7
- .col-8
8
- .alert.alert-success Audit Submitted!
4
+ - if resource.was_submitted?
5
+ .text-center
6
+ .row
7
+ .col-2
8
+ .col-8
9
+ .alert.alert-success Audit Submitted!
9
10
 
10
- %p
11
- The following audit was successfully submitted at
12
- = succeed('.') do
13
- = resource.submitted_at.strftime('%F')
11
+ %p
12
+ The following audit was successfully submitted at
13
+ = succeed('.') do
14
+ = resource.submitted_at.strftime('%F')
14
15
 
15
- - unless resource.determination.present?
16
- Your audit must be reviewed and a final determination made.
17
- We will send
18
- %strong= resource.user.email
19
- an email notifying you of the determination.
16
+ - unless resource.determination.present?
17
+ Your audit must be reviewed and a final determination made.
18
+ We will send
19
+ %strong= resource.user.email
20
+ an email notifying you of the determination.
20
21
 
21
22
  .mb-4= render(resource)
22
23
 
@@ -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
@@ -42,27 +42,21 @@ EffectiveCpd.setup do |config|
42
42
  # Audit Reviewer Scope Collection
43
43
  config.audit_reviewer_user_scope = :all
44
44
 
45
- # Mailer Configuration
45
+ # Mailer Settings
46
+ # Please see config/initializers/effective_resources.rb for default effective_* gem mailer settings
47
+ #
46
48
  # Configure the class responsible to send e-mails.
47
- # config.mailer = 'Effective::CpdMailer'
48
-
49
- # Configure the parent class responsible to send e-mails.
50
- # config.parent_mailer = 'ActionMailer::Base'
51
-
52
- # Default deliver method
53
- # config.deliver_method = :deliver_later
54
-
55
- # Default layout
56
- config.mailer_layout = 'effective_cpd_mailer_layout'
57
-
58
- # Default From
59
- config.mailer_sender = "no-reply@example.com"
60
-
61
- # Send Admin correspondence To
62
- config.mailer_admin = "admin@example.com"
63
-
64
- # Will work with effective_email_templates gem:
65
- # - The audit and audit review email content will be preopulated based off the template
66
- # - Uses an EmailTemplatesMailer mailer instead of ActionMailer::Base for default parent_mailer
67
- config.use_effective_email_templates = false
49
+ # config.mailer = 'Effective::EventsMailer'
50
+ #
51
+ # Override effective_resource mailer defaults
52
+ #
53
+ # config.parent_mailer = nil # The parent class responsible for sending emails
54
+ # config.deliver_method = nil # The deliver method, deliver_later or deliver_now
55
+ # config.mailer_layout = nil # Default mailer layout
56
+ # config.mailer_sender = nil # Default From value
57
+ # config.mailer_admin = nil # Default To value for Admin correspondence
58
+ # config.mailer_subject = nil # Proc.new method used to customize Subject
59
+
60
+ # Use effective email templates for event notifications
61
+ config.use_effective_email_templates = true
68
62
  end
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.3.1'
3
3
  end
data/lib/effective_cpd.rb CHANGED
@@ -15,43 +15,14 @@ module EffectiveCpd
15
15
  :cpd_audits_table_name, :cpd_audit_responses_table_name, :cpd_audit_response_options_table_name,
16
16
  :cpd_audit_reviews_table_name, :cpd_audit_review_items_table_name,
17
17
  :cycle_label, :credit_label, :layout, :auditee_user_scope, :audit_reviewer_user_scope,
18
- :mailer, :parent_mailer, :deliver_method, :mailer_layout, :mailer_sender, :mailer_admin, :use_effective_email_templates
18
+ :mailer, :parent_mailer, :deliver_method, :mailer_layout, :mailer_sender, :mailer_admin, :mailer_subject, :use_effective_email_templates
19
19
  ]
20
20
  end
21
21
 
22
22
  include EffectiveGem
23
23
 
24
24
  def self.mailer_class
25
- return mailer.constantize if mailer.present?
26
- Effective::CpdMailer
27
- end
28
-
29
- def self.parent_mailer_class
30
- return parent_mailer.constantize if parent_mailer.present?
31
-
32
- if use_effective_email_templates
33
- require 'effective_email_templates'
34
- Effective::EmailTemplatesMailer
35
- else
36
- ActionMailer::Base
37
- end
38
- end
39
-
40
- def self.send_email(email, *args)
41
- raise('expected args to be an Array') unless args.kind_of?(Array)
42
-
43
- if defined?(Tenant)
44
- tenant = Tenant.current || raise('expected a current tenant')
45
- args << { tenant: tenant }
46
- end
47
-
48
- deliver_method = EffectiveCpd.deliver_method || EffectiveResources.deliver_method
49
-
50
- begin
51
- EffectiveCpd.mailer_class.send(email, *args).send(deliver_method)
52
- rescue => e
53
- raise if Rails.env.development? || Rails.env.test?
54
- end
25
+ mailer&.constantize || Effective::CpdMailer
55
26
  end
56
27
 
57
28
  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.3.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-03-07 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
@@ -362,7 +364,6 @@ files:
362
364
  - app/views/effective/cpd_statements/complete.html.haml
363
365
  - app/views/effective/cpd_statements/start.html.haml
364
366
  - app/views/effective/cpd_statements/submit.html.haml
365
- - app/views/layouts/effective_cpd_mailer_layout.html.haml
366
367
  - config/effective_cpd.rb
367
368
  - config/routes.rb
368
369
  - db/migrate/01_create_effective_cpd.rb.erb
@@ -1,7 +0,0 @@
1
- !!!
2
- %html{style: 'background: #fff;'}
3
- %head
4
- %meta{:content => 'text/html; charset=UTF-8', 'http-equiv' => 'Content-Type'}
5
-
6
- %body{style: 'background: #fff;'}
7
- = yield