manager notifications
This commit is contained in:
@ -5,6 +5,8 @@ class ReviewerVote < ApplicationRecord
|
||||
|
||||
validates :user_id, uniqueness: { scope: :candidate_id }
|
||||
|
||||
after_save :notify_manager
|
||||
|
||||
enum vote: {
|
||||
undecided: 0,
|
||||
yea: 1,
|
||||
@ -15,4 +17,38 @@ class ReviewerVote < ApplicationRecord
|
||||
approved: 1,
|
||||
rejected: 2
|
||||
}
|
||||
|
||||
private
|
||||
|
||||
def notify_manager
|
||||
ReviewerMailer.notify_manager(candidate_id).deliver_now if all_reviewers_voted?
|
||||
end
|
||||
|
||||
def all_reviewers_voted? # rubocop:disable Metrics/MethodLength
|
||||
sql = " select distinct rev.candidate_id
|
||||
, full_votes.voters, full_votes.vote_count
|
||||
, c.test_hash
|
||||
from reviewer_votes rev
|
||||
inner join users u on u.id = rev.user_id
|
||||
inner join candidates c on c.id = rev.candidate_id
|
||||
left join (
|
||||
select candidate_id
|
||||
from reviewer_votes
|
||||
where veto > 0 or veto is null
|
||||
) as vetos on vetos.candidate_id = rev.candidate_id
|
||||
left join (
|
||||
select candidate_id
|
||||
, count(vote) voters
|
||||
, sum(case when vote != 0 then 1 else 0 end) vote_count
|
||||
from reviewer_votes
|
||||
left join users on users.id = reviewer_votes.user_id
|
||||
where users.role != 'manager'
|
||||
group by candidate_id
|
||||
) as full_votes on full_votes.candidate_id = rev.candidate_id
|
||||
where vetos.candidate_id is null
|
||||
and full_votes.voters = full_votes.vote_count
|
||||
and rev.candidate_id = #{candidate_id};"
|
||||
result = ActiveRecord::Base.connection.exec_query(sql)
|
||||
result.count == 1
|
||||
end # rubocop:enable Metrics/MethodLength
|
||||
end
|
||||
|
@ -19,6 +19,8 @@ class User < ApplicationRecord
|
||||
end
|
||||
|
||||
# Voting
|
||||
# TODO: Refactor this out of User, belongs on ReviewerVote
|
||||
# ie: cast_yea(candidate, user)
|
||||
def cast_yea_on candidate
|
||||
vote = votes.find_by(candidate_id: candidate.to_i)
|
||||
vote.vote = :yea
|
||||
|
10
app/views/reviewer_mailer/notify_manager.html.inky
Normal file
10
app/views/reviewer_mailer/notify_manager.html.inky
Normal file
@ -0,0 +1,10 @@
|
||||
<row>
|
||||
<columns class="email-body">
|
||||
<p>Hello <%= @manager.name %>,</p>
|
||||
<p>
|
||||
Everyone has voted and you need to request or decline an interview for
|
||||
<%= link_to nil, admin_result_url(@candidate.test_hash) %>
|
||||
</p>
|
||||
</columns>
|
||||
</row>
|
||||
|
6
app/views/reviewer_mailer/notify_manager.text.erb
Normal file
6
app/views/reviewer_mailer/notify_manager.text.erb
Normal file
@ -0,0 +1,6 @@
|
||||
PERFICIENT/digital SKILLS ASSESSMENT RESULTS
|
||||
|
||||
Hello <%= @manager.name %>,
|
||||
|
||||
Everyone has voted and you need to request or decline an interview for
|
||||
<%= admin_result_url(@candidate.test_hash) %>
|
Reference in New Issue
Block a user