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.

See Also:

Instance Method Summary collapse

Instance Method Details

#assigned_or_requested_employee_topicsObject



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_onlineObject



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_ptoObject



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_phoneObject



86
87
88
# File 'app/models/concerns/employee_display.rb', line 86

def company_phone
  PhoneNumber.parse_and_format('+18008755285', display_format: :crm)
end

#countryObject



134
135
136
137
138
# File 'app/models/concerns/employee_display.rb', line 134

def country
  store.country
rescue StandardError
  'USA'
end

#days_until_birthdayObject



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_phoneObject



124
125
126
# File 'app/models/concerns/employee_display.rb', line 124

def direct_phone
  phone
end

#employee_work_scheduleObject



178
179
180
# File 'app/models/concerns/employee_display.rb', line 178

def employee_work_schedule
  employee_work_schedules.last
end

#localeObject



110
111
112
# File 'app/models/concerns/employee_display.rb', line 110

def locale
  company.try(:locale) || super
end

#name_and_emailObject



46
47
48
# File 'app/models/concerns/employee_display.rb', line 46

def name_and_email
  "#{name} - #{email}"
end

#name_and_extensionObject



54
55
56
# File 'app/models/concerns/employee_display.rb', line 54

def name_and_extension
  "#{name} x#{pbx_extension}"
end

#name_and_faxObject



42
43
44
# File 'app/models/concerns/employee_display.rb', line 42

def name_and_fax
  "#{name} - #{fax}"
end

#name_and_phoneObject



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_pairedObject



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?

Returns:

  • (Boolean)


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_goalsObject



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_reviewsObject



144
145
146
# File 'app/models/concerns/employee_display.rb', line 144

def open_employee_reviews
  employee_reviews.where(state: 'in_progress')
end

#reference_numberObject



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?

Returns:

  • (Boolean)


114
115
116
# File 'app/models/concerns/employee_display.rb', line 114

def sales_rep?
  self.class.sales_reps.exists?(id:)
end

#short_nameObject



36
37
38
39
40
# File 'app/models/concerns/employee_display.rb', line 36

def short_name
  (.email || .).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

Returns:

  • (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_warmlyyoursObject



16
17
18
# File 'app/models/concerns/employee_display.rb', line 16

def start_year_at_warmlyyours
  employee_record.hire_date&.year
end

#state_codeObject



152
153
154
# File 'app/models/concerns/employee_display.rb', line 152

def state_code
  first_address.try(:state_code)
end

#storeObject



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?

Returns:

  • (Boolean)


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?

Returns:

  • (Boolean)


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_budgetObject



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_liquidObject



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

Returns:

  • (Boolean)


170
171
172
173
174
175
# File 'app/models/concerns/employee_display.rb', line 170

def unescheduled_on_day?(date, events_in = nil)
  timestamp = uneschedule_timestamp(date, events_in)
  return false if timestamp.nil?

  (date.to_date - timestamp.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?

Returns:

  • (Boolean)


160
161
162
# File 'app/models/concerns/employee_display.rb', line 160

def work_schedule?
  EmployeeWorkSchedule.exists?(employee_id: id)
end

#work_timezoneObject



182
183
184
# File 'app/models/concerns/employee_display.rb', line 182

def work_timezone
  employee_work_schedule.try(:work_timezone)
end

#years_at_warmlyyoursObject



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