Module: EmployeeActivityCapacity

Extended by:
ActiveSupport::Concern
Included in:
EmployeeWorkStatus
Defined in:
app/models/concerns/employee_activity_capacity.rb

Overview

Activity capacity calculations and daily limits for Employee.

Instance Method Summary collapse

Instance Method Details

#activity_load_on_day(date, priority = nil) ⇒ Object



37
38
39
40
41
42
43
44
# File 'app/models/concerns/employee_activity_capacity.rb', line 37

def activity_load_on_day(date, priority = nil)
  rel = activities.non_notes
                  .open_activities
                  .where(Activity[:target_datetime].gteq(date.beginning_of_day))
                  .where(Activity[:target_datetime].lteq(date.end_of_day))
  rel = rel.joins(:activity_type).where(activity_types: { priority: }) if priority.present?
  rel.count
end

#can_take_activities_on_day?(date, priority = nil) ⇒ Boolean

Returns:

  • (Boolean)


7
8
9
10
11
12
# File 'app/models/concerns/employee_activity_capacity.rb', line 7

def can_take_activities_on_day?(date, priority = nil)
  return false unless working_on_day?(date)
  return activity_load_on_day(date) < maximum_activities_per_day if priority.blank?

  check_activity_capacity_by_priority(date, priority)
end

#maximum_activities_per_day(date = nil) ⇒ Object



14
15
16
17
18
19
20
21
22
23
# File 'app/models/concerns/employee_activity_capacity.rb', line 14

def maximum_activities_per_day(date = nil)
  if date
    return 0 unless working_on_day?(date)

    ratio = capacity_ratio(date)
  end
  ratio ||= 1.0
  max = employee_record.try(:activities_per_day) || EmployeeRecord::DEFAULT_ACTIVITIES_PER_DAY
  (max * ratio).round
end

#maximum_priority_tier_activities_per_day(date = nil) ⇒ Object



29
30
31
# File 'app/models/concerns/employee_activity_capacity.rb', line 29

def maximum_priority_tier_activities_per_day(date = nil)
  ((maximum_activities_per_day(date) * priority_tier_activities_ratio) / 100).round
end

#maximum_standard_tier_activities_per_day(date = nil) ⇒ Object



33
34
35
# File 'app/models/concerns/employee_activity_capacity.rb', line 33

def maximum_standard_tier_activities_per_day(date = nil)
  maximum_activities_per_day(date) - maximum_priority_tier_activities_per_day(date)
end

#priority_tier_activities_ratioObject



25
26
27
# File 'app/models/concerns/employee_activity_capacity.rb', line 25

def priority_tier_activities_ratio
  employee_record.try(:activities_per_day_priority_tiers) || EmployeeRecord::DEFAULT_ACTIVITIES_PER_DAY_PRIORITY_TIERS
end