1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
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
}
|