Module: EmployeeTimeOffRollover

Extended by:
ActiveSupport::Concern
Included in:
EmployeeTimeOffAccruals
Defined in:
app/models/concerns/employee_time_off_rollover.rb

Overview

Year-end rollover, expiry, and policy-transition logic for time-off.

Instance Method Summary collapse

Instance Method Details

#process_policy_transitionsObject



19
20
21
22
23
24
25
26
27
28
29
30
# File 'app/models/concerns/employee_time_off_rollover.rb', line 19

def process_policy_transitions
  time_off_policy_assignments.includes(:time_off_policy).find_each do |assignment|
    current_policy = assignment.time_off_policy
    employee = assignment.employee
    next_policy = TimeOffPolicy.find_by(parent_policy_id: current_policy.id)

    next unless next_policy && current_policy.id != next_policy.id && eligible_for_next_policy?(employee, next_policy)
    next if time_off_policy_assignments.exists?(time_off_policy_id: next_policy.id)

    assign_next_policy(next_policy)
  end
end

#process_rollover_and_expiry(simulate_date: nil, send_email: true) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
# File 'app/models/concerns/employee_time_off_rollover.rb', line 7

def process_rollover_and_expiry(simulate_date: nil, send_email: true)
  time_off_policy_assignments.includes(:time_off_policy).find_each do |assignment|
    policy = assignment.time_off_policy
    time_off_type = policy.time_off_type

    add_end_of_year_partial_accrual(assignment:, policy:, time_off_type:, simulate_date:) if simulate_date && policy.accrual_frequency&.downcase == 'weekly'

    process_rollover(policy, time_off_type, simulate_date:, send_email: send_email && !simulate_date)
    process_expiry(policy, time_off_type)
  end
end