15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
# File 'app/services/report/presence_report/presence.rb', line 15
def self.report(options = {})
options[:tracked_presence] ||= 'available'
options[:track_mode] = :first if options[:track_mode].nil?
start_time = options[:period1_gteq].beginning_of_day
end_time = options[:period1_lteq].end_of_day
employee_ids = options[:employee_phone_ids].map { |e| "'" + e + "'"}.join(",")
if options[:employee_phone_ids] == [] or options[:employee_phone_ids] == [""]
change_events = RecordVersion.where(item_type: 'EmployeePhoneStatus')
.where(created_at: start_time..end_time)
.where("object_changes->'presence'->>1 = '#{options[:tracked_presence]}'")
else
change_events = RecordVersion.where(item_type: 'EmployeePhoneStatus')
.where(created_at: start_time..end_time)
.where("object_changes->'presence'->>1 = '#{options[:tracked_presence]}'")
.where("whodunnit in (#{employee_ids})")
end
employee_phone_statuses = EmployeePhoneStatus.includes(:employee).all
report_grouped = {}
change_events.each do |version|
report_date = version.created_at.to_date
employee = employee_phone_statuses.detect{|eps| eps.id == version.item_id }.employee
employee_key = [ employee.full_name,employee.id ]
report_grouped[ employee_key ] ||= {}
new_event_time = version.created_at
if current_event_time = report_grouped[ employee_key ][ report_date ]
if options[:track_mode] == :last
new_event_time = current_event_time unless new_event_time > current_event_time
else
new_event_time = current_event_time unless new_event_time < current_event_time
end
end
report_grouped[ employee_key ][ report_date ] = new_event_time
end
formatted_report_grouped = {}
report_grouped.sort.each do |employee_key, date_hsh|
date_hsh.sort.each do |report_date, event_time|
formatted_report_grouped[employee_key] ||= {}
formatted_report_grouped[employee_key][report_date] = event_time.strftime("%I:%M:%S %p")
end
end
formatted_report_grouped
end
|