Class: Report::PresenceReport::PresenceCommand

Inherits:
BaseCommand
  • Object
show all
Defined in:
app/services/report/presence_report/presence_command.rb

Overview

Command pattern to encapsulate parameters necessary to run a presence report

Instance Method Summary collapse

Instance Method Details

#date_rangeObject

Date range.

Returns:

  • (Object)


37
38
39
# File 'app/services/report/presence_report/presence_command.rb', line 37

def date_range
  period1_gteq..period1_lteq
end

#date_ranges_per_weekObject

Date ranges per week.

Returns:

  • (Object)


43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'app/services/report/presence_report/presence_command.rb', line 43

def date_ranges_per_week
  date_ranges = []
  num_rows = (date_range.count / 7).to_i
  (0..num_rows).each do |i|
    start_date = if i == 0
                   period1_gteq.to_date + (i * 7)
                 else
                   (period1_gteq.to_date + (i * 7)).beginning_of_week
                 end

    end_date = start_date.to_date.end_of_week

    end_date = period1_lteq if end_date >= period1_lteq
    date_ranges[i] = [start_date, end_date]
  end
  date_ranges
end

#executeObject

Run the report with the given filters and store the result.

Returns:

  • (Object)


63
64
65
66
67
# File 'app/services/report/presence_report/presence_command.rb', line 63

def execute
  return unless valid?

  @results = Report::PresenceReport::Presence.report(attributes)
end

#track_mode_collection_for_selectObject

Track mode collection for select.

Returns:

  • (Object)


31
32
33
# File 'app/services/report/presence_report/presence_command.rb', line 31

def track_mode_collection_for_select
  [['First Time', 'first'], ['Last Time', 'last']]
end

#tracked_presence_collection_for_selectObject

Tracked presence collection for select.

Returns:

  • (Object)


25
26
27
# File 'app/services/report/presence_report/presence_command.rb', line 25

def tracked_presence_collection_for_select
  %i[available away dnd].map { |s| [s.to_s.humanize, s] }
end

#week_collection_for_select(start_range = nil, end_range = nil) ⇒ Object

Week collection for select.

Parameters:

  • start_range (Object, nil) (defaults to: nil)
  • end_range (Object, nil) (defaults to: nil)

Returns:

  • (Object)


17
18
19
20
21
# File 'app/services/report/presence_report/presence_command.rb', line 17

def week_collection_for_select(start_range = nil, end_range = nil)
  start_range ||= 3.months.ago.to_date
  end_range ||= Date.current
  (start_range..end_range).map(&:beginning_of_week).uniq.reverse
end