#!/usr/bin/env python3 from datetime import datetime, timedelta def calculate_reach_date(current_hours, max_hours, hours_added_bi_weekly): """ Calculates the estimated date when the maximum Paid Time Off (PTO) hours will be reached. Parameters: - current_hours (float): The current total of PTO hours accumulated by the user. - max_hours (float): The maximum PTO hours that can be accumulated. - hours_added_bi_weekly (float): The number of PTO hours added every two weeks. Returns: - datetime.date: The estimated date when the maximum PTO balance is reached. """ # Calculate the additional hours needed to reach the maximum hours_needed = max_hours - current_hours # Determine the number of bi-weekly periods needed to accumulate the necessary hours bi_weekly_periods_needed = hours_needed / hours_added_bi_weekly # Convert the period into days days_needed = bi_weekly_periods_needed * 14 # Two weeks per bi-weekly period # Calculate the future date when the maximum will be reached reach_date = datetime.now() + timedelta(days=days_needed) return reach_date # Constants for the program MAX_HOURS = 240 # The maximum PTO balance allowed # The standard rate of PTO accrual every two weeks HOURS_ADDED_BI_WEEKLY = 6.15384615 # An alternative accrual rate for different scenarios (commented out by default) # HOURS_ADDED_BI_WEEKLY = 7.69230769 LAST_KNOWN_PTO_BALANCE = 220.08 # An example of a last known PTO balance # Introduction and instructions for the user print("PTO Balance Calculator") print("----------------------") print("Determine when you will reach your maximum PTO balance based on your current accrual.") # Display the last known PTO balance to assist with user input print(f"\nLast known PTO balance: {LAST_KNOWN_PTO_BALANCE}\n") # Handling user input try: # Prompting the user to enter their current PTO balance current_hours_input = input("Enter your current PTO hours: ") current_hours = float(current_hours_input.strip()) # Convert input to a floating-point number # Calculation based on user input reach_date = calculate_reach_date(current_hours, MAX_HOURS, HOURS_ADDED_BI_WEEKLY) # Displaying the calculation results print("\nCalculation Results") print("-------------------") print(f"Today's Date: {datetime.now().strftime('%A, %B %d, %Y')}") print(f"Maximum PTO balance of {MAX_HOURS} hours will be reached on: {reach_date.strftime('%A, %B %d, %Y')}.") except ValueError: # Error handling for non-numeric inputs print("Error: Please enter a valid number for your current PTO hours.")