from ...utils.calculate.constants import * import datetime def is_summer(month: str): return month in ['June', 'July', 'August', 'September'] def calculate_water(current_ccf, is_summer): if is_summer: if current_ccf > 15: summer_demand_initial_usage = 5 summer_demand_secondary_usage = 10 summer_demand_extended_usage = current_ccf - 15 elif current_ccf <= 15 and current_ccf >= 10: summer_demand_initial_usage = 5 summer_demand_secondary_usage = current_ccf - 5 summer_demand_extended_usage = 0 else: summer_demand_initial_usage = current_ccf summer_demand_secondary_usage = 0 summer_demand_extended_usage = 0 summer_demand_initial_charge = summer_demand_initial_usage * summer_demand_initial_per_ccf summer_demand_secondary_charge = summer_demand_secondary_usage * summer_demand_secondary_per_ccf summer_demand_extended_charge = summer_demand_extended_usage * summer_demand_extended_per_ccf return round(water_residential_base + summer_demand_initial_charge + summer_demand_secondary_charge + summer_demand_extended_charge, 2) def calculate_eletric(current_kwh, is_summer): kwh_base_charge = current_kwh * electric_residential_per_kwh fuel_adjusted_factor = -0.0055 # hardcoded, need to pull from page :/ fuel_adjusted_usage = fuel_adjusted_factor * current_kwh if is_summer: if current_kwh >= 500: summer_demand_usage = 500 summer_demand_extended_usage = current_kwh - 500 else: summer_demand_usage = current_kwh summer_demand_extended_usage = 0 summer_demand_charge = summer_demand_per_kwh * summer_demand_usage summer_demand_extended_charge = summer_demand_extended_usage * summer_demand_extended_per_kwh return round(electric_residential_base + kwh_base_charge + fuel_adjusted_usage + summer_demand_charge + summer_demand_extended_charge, 2) else: if current_kwh >= 900: winter_demand_usage = 900 winter_demand_extended_usage = current_kwh - 900 else: winter_demand_usage = current_kwh winter_demand_extended_usage = 0 winter_demand_charge = winter_demand_per_kwh * winter_demand_usage winter_demand_extended_charge = winter_demand_extended_per_kwh * winter_demand_extended_usage return round(electric_residential_base + kwh_base_charge + fuel_adjusted_usage + winter_demand_charge + winter_demand_extended_charge, 2) def calculate_electric_charges(usage): electric_month = datetime.datetime.strptime(usage['electric']['month']['tentativeData'][0]['UsageDate'], "%m/%d/%y").strftime("%B") kwh_so_far = usage['electric']['month']['tentativeData'][0]['SoFar'] kwh_expected = usage['electric']['month']['tentativeData'][0]['ExpectedUsage'] return { "current": calculate_eletric(kwh_so_far, is_summer(electric_month)), "expected": calculate_eletric(kwh_expected, is_summer(electric_month)) } def calculate_water_charges(usage): water_month = datetime.datetime.strptime(usage['water']['month']['tentativeData'][0]['UsageDate'], "%m/%d/%y").strftime("%B") ccf_so_far = usage['water']['month']['tentativeData'][0]['SoFar'] ccf_expected = usage['water']['month']['tentativeData'][0]['ExpectedUsage'] return { "current": calculate_water(ccf_so_far, is_summer(water_month)), "expected": calculate_water(ccf_expected, is_summer(water_month)) } def calculate_total_charges(electric, water): return { "current": electric['current'] + water['current'], "expected": electric['expected'] + water['expected'] } def calculate_running_bill(usage): electric = calculate_electric_charges(usage) water = calculate_water_charges(usage) total = calculate_total_charges(electric, water) return { "electric": electric, "water": water, "total": total }