Module: EmployeeDisplay
- Extended by:
- ActiveSupport::Concern
- Included in:
- Employee
- Defined in:
- app/models/concerns/employee_display.rb
Overview
Display helpers, formatting, and CRM utilities for Employee (party subtype).
Most instance methods return [String], numeric counts, or ActiveRecord relations for CRM UI.
Instance Method Summary collapse
- #assigned_or_requested_employee_topics ⇒ Object
- #check_online ⇒ Object
- #check_pto ⇒ Object
- #company_phone ⇒ Object
- #country ⇒ Object
- #days_until_birthday ⇒ Object
- #default_printer_profile(scope_name) ⇒ Object
- #direct_phone ⇒ Object
- #employee_work_schedule ⇒ Object
- #locale ⇒ Object
- #name_and_email ⇒ Object
- #name_and_extension ⇒ Object
- #name_and_fax ⇒ Object
- #name_and_phone ⇒ Object
- #name_with_paired ⇒ Object
- #online? ⇒ Boolean (also: #is_online?)
- #open_employee_goals ⇒ Object
- #open_employee_reviews ⇒ Object
- #reference_number ⇒ Object
- #sales_rep? ⇒ Boolean (also: #is_sales_rep?)
- #short_name ⇒ Object
- #signature(html: true) ⇒ Object
- #sms_enabled? ⇒ Boolean
- #sms_enabled_numbers(format_for_select: false) ⇒ Object
- #start_year_at_warmlyyours ⇒ Object
- #state_code ⇒ Object
- #store ⇒ Object
- #tech_rep? ⇒ Boolean (also: #is_tech_rep?)
- #time_off? ⇒ Boolean (also: #has_time_off?)
- #time_off_budget ⇒ Object
- #to_liquid ⇒ Object
- #unescheduled_on_day?(date, events_in = nil) ⇒ Boolean (also: #uneschedule_on_day)
- #versions_for_audit_trail(_params = {}) ⇒ Object
- #work_schedule? ⇒ Boolean (also: #has_work_schedule?)
- #work_timezone ⇒ Object
- #years_at_warmlyyours ⇒ Object
Instance Method Details
#assigned_or_requested_employee_topics ⇒ Object
148 149 150 |
# File 'app/models/concerns/employee_display.rb', line 148 def assigned_or_requested_employee_topics employee_topics.where(state: %w[assigned requested]) end |
#check_online ⇒ Object
102 103 104 |
# File 'app/models/concerns/employee_display.rb', line 102 def check_online OnlineOfflineUser.where(user_id: id, status: 'Online').last.created_at end |
#check_pto ⇒ Object
106 107 108 |
# File 'app/models/concerns/employee_display.rb', line 106 def check_pto EmployeeEvent.where(date: Date.current).eager_load(:employee).where(employee_id: id) end |
#company_phone ⇒ Object
86 87 88 |
# File 'app/models/concerns/employee_display.rb', line 86 def company_phone PhoneNumber.parse_and_format('+18008755285', display_format: :crm) end |
#country ⇒ Object
134 135 136 137 138 |
# File 'app/models/concerns/employee_display.rb', line 134 def country store.country rescue StandardError 'USA' end |
#days_until_birthday ⇒ Object
27 28 29 30 31 32 33 34 |
# File 'app/models/concerns/employee_display.rb', line 27 def days_until_birthday return nil if dob.blank? today = Date.current next_bday = safe_birthday_date(today.year) next_bday = safe_birthday_date(today.year + 1) if next_bday < today (next_bday - today).to_i end |
#default_printer_profile(scope_name) ⇒ Object
186 187 188 |
# File 'app/models/concerns/employee_display.rb', line 186 def default_printer_profile(scope_name) store.printer_profile_for_scope(scope_name, employee_record&.id) end |
#direct_phone ⇒ Object
124 125 126 |
# File 'app/models/concerns/employee_display.rb', line 124 def direct_phone phone end |
#employee_work_schedule ⇒ Object
178 179 180 |
# File 'app/models/concerns/employee_display.rb', line 178 def employee_work_schedule employee_work_schedules.last end |
#locale ⇒ Object
110 111 112 |
# File 'app/models/concerns/employee_display.rb', line 110 def locale company.try(:locale) || super end |
#name_and_email ⇒ Object
46 47 48 |
# File 'app/models/concerns/employee_display.rb', line 46 def name_and_email "#{name} - #{email}" end |
#name_and_extension ⇒ Object
54 55 56 |
# File 'app/models/concerns/employee_display.rb', line 54 def name_and_extension "#{name} x#{pbx_extension}" end |
#name_and_fax ⇒ Object
42 43 44 |
# File 'app/models/concerns/employee_display.rb', line 42 def name_and_fax "#{name} - #{fax}" end |
#name_and_phone ⇒ Object
50 51 52 |
# File 'app/models/concerns/employee_display.rb', line 50 def name_and_phone "#{name} #{PhoneNumber.parse_and_format(direct_phone)}" end |
#name_with_paired ⇒ Object
58 59 60 61 62 |
# File 'app/models/concerns/employee_display.rb', line 58 def name_with_paired str = name.to_s str += " (/#{employee_record.backup_rep.name})" if employee_record&.backup_rep str end |
#online? ⇒ Boolean Also known as: is_online?
97 98 99 |
# File 'app/models/concerns/employee_display.rb', line 97 def online? OnlineOfflineUser.where(user_id: id).last.status == 'Online' end |
#open_employee_goals ⇒ Object
140 141 142 |
# File 'app/models/concerns/employee_display.rb', line 140 def open_employee_goals employee_goals.where(state: 'defined').order(:due_date) end |
#open_employee_reviews ⇒ Object
144 145 146 |
# File 'app/models/concerns/employee_display.rb', line 144 def open_employee_reviews employee_reviews.where(state: 'in_progress') end |
#reference_number ⇒ Object
64 65 66 |
# File 'app/models/concerns/employee_display.rb', line 64 def reference_number "EM#{id}" end |
#sales_rep? ⇒ Boolean Also known as: is_sales_rep?
114 115 116 |
# File 'app/models/concerns/employee_display.rb', line 114 def sales_rep? self.class.sales_reps.exists?(id:) end |
#short_name ⇒ Object
36 37 38 39 40 |
# File 'app/models/concerns/employee_display.rb', line 36 def short_name (account.email || account.login).first(2).upcase rescue StandardError '-' end |
#signature(html: true) ⇒ Object
68 69 70 71 |
# File 'app/models/concerns/employee_display.rb', line 68 def signature(html: true, **) txt = employee_record.signature.presence || Communication.default_signature(self) html ? Communication.text_to_html(txt) : txt end |
#sms_enabled? ⇒ Boolean
73 74 75 |
# File 'app/models/concerns/employee_display.rb', line 73 def sms_enabled? sms_enabled_numbers.present? end |
#sms_enabled_numbers(format_for_select: false) ⇒ Object
77 78 79 80 81 82 83 84 |
# File 'app/models/concerns/employee_display.rb', line 77 def sms_enabled_numbers(format_for_select: false) numbers = contact_points.company_sms_numbers if format_for_select numbers.map { |n| ["#{n.formatted_for_sms} - #{full_name}", n.formatted_for_sms] }.uniq else numbers.map(&:formatted_for_sms).uniq end end |
#start_year_at_warmlyyours ⇒ Object
16 17 18 |
# File 'app/models/concerns/employee_display.rb', line 16 def start_year_at_warmlyyours employee_record.hire_date&.year end |
#state_code ⇒ Object
152 153 154 |
# File 'app/models/concerns/employee_display.rb', line 152 def state_code first_address.try(:state_code) end |
#store ⇒ Object
128 129 130 131 132 |
# File 'app/models/concerns/employee_display.rb', line 128 def store catalog.store rescue StandardError Store.first end |
#tech_rep? ⇒ Boolean Also known as: is_tech_rep?
119 120 121 |
# File 'app/models/concerns/employee_display.rb', line 119 def tech_rep? self.class.technical_support_reps.exists?(id:) end |
#time_off? ⇒ Boolean Also known as: has_time_off?
165 166 167 |
# File 'app/models/concerns/employee_display.rb', line 165 def time_off? EmployeeTimeOff.where(employee_id: id).exists?(created_at: Time.current.beginning_of_year..) end |
#time_off_budget ⇒ Object
156 157 158 |
# File 'app/models/concerns/employee_display.rb', line 156 def time_off_budget employee_time_offs.where(year: Time.current.year).last end |
#to_liquid ⇒ Object
12 13 14 |
# File 'app/models/concerns/employee_display.rb', line 12 def to_liquid Liquid::EmployeeDrop.new(self) end |
#unescheduled_on_day?(date, events_in = nil) ⇒ Boolean Also known as: uneschedule_on_day
170 171 172 173 174 175 |
# File 'app/models/concerns/employee_display.rb', line 170 def unescheduled_on_day?(date, events_in = nil) = (date, events_in) return false if .nil? (date.to_date - .to_date).to_i <= 2 end |
#versions_for_audit_trail(_params = {}) ⇒ Object
90 91 92 93 94 95 |
# File 'app/models/concerns/employee_display.rb', line 90 def versions_for_audit_trail(_params = {}) RecordVersion.where( %q{(item_type = 'Party' AND item_id = :id) OR (item_type = 'EmployeeRecord' AND reference_data @> '{"party_id": :id}')}, id: ) end |
#work_schedule? ⇒ Boolean Also known as: has_work_schedule?
160 161 162 |
# File 'app/models/concerns/employee_display.rb', line 160 def work_schedule? EmployeeWorkSchedule.exists?(employee_id: id) end |
#work_timezone ⇒ Object
182 183 184 |
# File 'app/models/concerns/employee_display.rb', line 182 def work_timezone employee_work_schedule.try(:work_timezone) end |
#years_at_warmlyyours ⇒ Object
20 21 22 23 24 25 |
# File 'app/models/concerns/employee_display.rb', line 20 def years_at_warmlyyours return nil if employee_record.hire_date.nil? years = ((Date.current - employee_record.hire_date) / 365).to_i [years, 1].max end |