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
- #activity_load_on_day(date, priority = nil) ⇒ Object
- #can_take_activities_on_day?(date, priority = nil) ⇒ Boolean
- #maximum_activities_per_day(date = nil) ⇒ Object
- #maximum_priority_tier_activities_per_day(date = nil) ⇒ Object
- #maximum_standard_tier_activities_per_day(date = nil) ⇒ Object
- #priority_tier_activities_ratio ⇒ Object
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
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_ratio ⇒ Object
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 |