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
149 150 151 |
# File 'app/models/concerns/employee_display.rb', line 149 def assigned_or_requested_employee_topics employee_topics.where(state: %w[assigned requested]) end |
#check_online ⇒ Object
103 104 105 |
# File 'app/models/concerns/employee_display.rb', line 103 def check_online OnlineOfflineUser.where(user_id: id, status: 'Online').last.created_at end |
#check_pto ⇒ Object
107 108 109 |
# File 'app/models/concerns/employee_display.rb', line 107 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
135 136 137 138 139 |
# File 'app/models/concerns/employee_display.rb', line 135 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
187 188 189 |
# File 'app/models/concerns/employee_display.rb', line 187 def default_printer_profile(scope_name) store.printer_profile_for_scope(scope_name, employee_record&.id) end |
#direct_phone ⇒ Object
125 126 127 |
# File 'app/models/concerns/employee_display.rb', line 125 def direct_phone phone end |
#employee_work_schedule ⇒ Object
179 180 181 |
# File 'app/models/concerns/employee_display.rb', line 179 def employee_work_schedule employee_work_schedules.last end |
#locale ⇒ Object
111 112 113 |
# File 'app/models/concerns/employee_display.rb', line 111 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?
98 99 100 |
# File 'app/models/concerns/employee_display.rb', line 98 def online? OnlineOfflineUser.where(user_id: id).last.status == 'Online' end |
#open_employee_goals ⇒ Object
141 142 143 |
# File 'app/models/concerns/employee_display.rb', line 141 def open_employee_goals employee_goals.where(state: 'defined').order(:due_date) end |
#open_employee_reviews ⇒ Object
145 146 147 |
# File 'app/models/concerns/employee_display.rb', line 145 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?
115 116 117 |
# File 'app/models/concerns/employee_display.rb', line 115 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
153 154 155 |
# File 'app/models/concerns/employee_display.rb', line 153 def state_code first_address.try(:state_code) end |
#store ⇒ Object
129 130 131 132 133 |
# File 'app/models/concerns/employee_display.rb', line 129 def store catalog.store rescue StandardError Store.first end |
#tech_rep? ⇒ Boolean Also known as: is_tech_rep?
120 121 122 |
# File 'app/models/concerns/employee_display.rb', line 120 def tech_rep? self.class.technical_support_reps.exists?(id:) end |
#time_off? ⇒ Boolean Also known as: has_time_off?
166 167 168 |
# File 'app/models/concerns/employee_display.rb', line 166 def time_off? EmployeeTimeOff.where(employee_id: id).exists?(created_at: Time.current.beginning_of_year..) end |
#time_off_budget ⇒ Object
157 158 159 |
# File 'app/models/concerns/employee_display.rb', line 157 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
171 172 173 174 175 176 |
# File 'app/models/concerns/employee_display.rb', line 171 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 96 |
# 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_json)}, id:, party_id_json: { party_id: id }.to_json ) end |
#work_schedule? ⇒ Boolean Also known as: has_work_schedule?
161 162 163 |
# File 'app/models/concerns/employee_display.rb', line 161 def work_schedule? EmployeeWorkSchedule.exists?(employee_id: id) end |
#work_timezone ⇒ Object
183 184 185 |
# File 'app/models/concerns/employee_display.rb', line 183 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 |