13
14
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
|
# File 'app/my_lib/modules/owners/reports/service_type_report.rb', line 13
def service_type_report_by(time_type)
type = if time_type == 'day'
:date_format
else
:start_time_format
end
reservations = active_reservations_filter_by(time_type)
Rails.cache.fetch("#{self.class}:service_type_report_by:#{time_type}:#{restaurants_cache_key}:#{reservations.cache_key}:#{I18n.locale}") do
reservations_group = reservations.group_by(&type)
keys = reservations_group.keys
row_data = keys.map do |key|
time_format = if time_type == 'day'
key.to_date.strftime('%d-%b')
else
key
end
{
delivery: reservations_group[key].select { |h| h[:service_type] == 'delivery' }.count,
pickup: reservations_group[key].select { |h| h[:service_type] == 'pick_up' }.count,
dine_in: reservations_group[key].select { |h| h[:service_type] == 'dine_in' }.sum(&:party_size),
total: reservations_group[key].sum(&:party_size),
}.merge(Hash[time_type.to_sym, time_format])
end
total_data = {
delivery: reservations.select { |h| h[:service_type] == 'delivery' }.count,
pickup: reservations.select { |h| h[:service_type] == 'pick_up' }.count,
dine_in: reservations.select { |h| h[:service_type] == 'dine_in' }.sum(&:party_size),
total: reservations.sum(&:party_size),
}
[row_data, total_data]
end
end
|