Class: DailyFocus::ReviewDataBuilder
- Inherits:
-
Object
- Object
- DailyFocus::ReviewDataBuilder
- Defined in:
- app/services/daily_focus/review_data_builder.rb
Overview
Builds the per-rep rows and summary counters for the Daily Focus review page.
Defined Under Namespace
Classes: Result
Constant Summary collapse
- BRIEFING_ACTIVE_STATUSES =
Statuses that mean this rep has (or shares) a Daily Focus artifact for the day.
%i[processing pending approved failed covered].freeze
Class Method Summary collapse
Instance Method Summary collapse
- #call ⇒ Object
-
#initialize(date:, audience:) ⇒ ReviewDataBuilder
constructor
A new instance of ReviewDataBuilder.
Constructor Details
#initialize(date:, audience:) ⇒ ReviewDataBuilder
Returns a new instance of ReviewDataBuilder.
37 38 39 40 |
# File 'app/services/daily_focus/review_data_builder.rb', line 37 def initialize(date:, audience:) @date = date @audience = audience end |
Class Method Details
.call(date:, audience:) ⇒ Result
33 34 35 |
# File 'app/services/daily_focus/review_data_builder.rb', line 33 def self.call(date:, audience:) new(date: date, audience: audience).call end |
Instance Method Details
#call ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'app/services/daily_focus/review_data_builder.rb', line 42 def call reps = DailyFocus.rep_scope(@audience).order(:full_name).includes(:daily_focus_coaching_note).to_a DailyFocus::ReviewWorkDayPreloader.call(reps, @date) indexes = conversation_indexes covering_by_rep = DailyFocus::RunPolicy.covering_rows_for_review( date: @date, rep_ids: reps.map(&:id), audience: @audience ) rep_rows = reps.map { |rep| row_for(rep, indexes, covering_by_rep) } Result.new( rep_rows: rep_rows, processing_count: rep_rows.count { |r| r[:status] == :processing }, pending_count: rep_rows.count { |r| r[:status] == :pending }, approved_count: rep_rows.count { |r| r[:status] == :approved }, missing_count: rep_rows.count { |r| %i[missing failed].include?(r[:status]) }, briefings_recorded_count: rep_rows.count { |r| BRIEFING_ACTIVE_STATUSES.include?(r[:status]) }, total_reps_count: rep_rows.size ) end |