Module: Models::EmployeeTimeOffRollover
- Extended by:
- ActiveSupport::Concern
- Included in:
- EmployeeTimeOffAccruals
- Defined in:
- app/concerns/models/employee_time_off_rollover.rb
Overview
Year-end rollover, expiry, and policy-transition logic for time-off.
Instance Method Summary collapse
-
#process_policy_transitions ⇒ void
Transitions employees to the next time-off policy in a policy chain when they meet the tenure eligibility rules.
-
#process_rollover_and_expiry(simulate_date: nil, send_email: true) ⇒ void
Runs rollover and expiry processing for every assigned time-off policy.
Instance Method Details
#process_policy_transitions ⇒ void
This method returns an undefined value.
Transitions employees to the next time-off policy in a policy chain
when they meet the tenure eligibility rules.
27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'app/concerns/models/employee_time_off_rollover.rb', line 27 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) ⇒ void
This method returns an undefined value.
Runs rollover and expiry processing for every assigned time-off policy.
12 13 14 15 16 17 18 19 20 21 22 |
# File 'app/concerns/models/employee_time_off_rollover.rb', line 12 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 |