class Talentio::Notifier::Slack::SelectionResult
Attributes
client[R]
Public Class Methods
new(client)
click to toggle source
# File lib/talentio/notifier/slack/selection_result.rb, line 6 def initialize(client) @client = client end
Public Instance Methods
notify(data)
click to toggle source
# File lib/talentio/notifier/slack/selection_result.rb, line 10 def notify(data) channel_message = [] param = selection_types[data[:type].to_sym] return unless param # 納期の計算対象となる日付が登録されていないものはスキップする return unless data[param[:limit_key]] # 登録当日はスキップする base_time = Time.parse(data[param[:limit_key]]) return if base_time >= Date.today.to_time slack_mentions = client.mention_id_from_evaluations(data[:evaluations]) slack_mentions.each do |m| limit_day = base_time + param[:limit_day] * (60*60*24) # 納期を設定する loop do break if ![0, 6].include?(limit_day.wday) && !HolidayJp.holiday?(limit_day) limit_day = limit_day + (60*60*24) end # 個別の通知はトークで実行するので、共有チャンネルに動いたことを通知する channel_message << { name: m[:name], limit:limit_day, url: data[:candidate_url] } client.chat_postMessage( channel: m[:id], as_user: false, text: "#{param[:label]}をお願いします。すぐに対応できないときはtalentioの「採用チーム内のコミュニケーション」にいつまでにやるかを書いてください。", attachments: [{ fields: [ { title: '区分', value: data[:requisition_name] }, { title: '登録日時', value: base_time.strftime("%Y/%m/%d %H:%M:%S") }, { title: '納期', value: limit_day.to_s }, { title: 'url', value: data[:candidate_url] } ], color: 'warning' }] ) channel_message.sort_by! { |a| a[:limit] }.each_with_object({}) do |m,r| r[m[:limit].strftime('%Y/%m/%d')] ||= [] r[m[:limit].strftime('%Y/%m/%d')] << { name: m[:name], url: m[:url] } end.map do |k,v| f = v.map do |vv| [ { title: vv[:name], value: vv[:url] }, ] end client.chat_postMessage( channel: ENV['TELENTIO_SLACK_CHANNEL'] || '#recruiting', as_user: false, text: "納期:#{k}の#{param[:label]}のお願いを通知しました", attachments: [{ fields: f.flatten, color: 'warning' }] ) end end end
Private Instance Methods
selection_types()
click to toggle source
# File lib/talentio/notifier/slack/selection_result.rb, line 95 def selection_types { resume: { label: "書類選考", limit_day: 4, limit_key: :time }, interview: { label: "面接評定", limit_day: 5, limit_key: :scheduled_at } } end