diff --git a/bpfin/financials/liability.py b/bpfin/financials/liability.py index c35ab6ba2ea8b6b2e12a510717db77bb01263b14..d0aaa2032a6a676930551d4452f23dd1d281167a 100644 --- a/bpfin/financials/liability.py +++ b/bpfin/financials/liability.py @@ -1,5 +1,5 @@ import calendar -from datetime import datetime, date +from datetime import datetime def define_date_start(liability_dictionary): @@ -35,7 +35,7 @@ def add_months(sourcedate, months): else: month = month + months day = min(sourcedate.day, calendar.monthrange(year, month)[1]) - return date(year, month, day) + return datetime(year, month, day) def liability_calendar(date, months): @@ -81,19 +81,30 @@ def final_liability_dict(start_date, liability_dictionary, months): final_dict = {} pro_forma_calendar = liability_calendar(start_date, months) debt_list = create_liability_dict(liability_dictionary) - for date in pro_forma_calendar: + for pro_date in pro_forma_calendar: for debt_date_dict in debt_list: for debt_date in debt_date_dict: - if date.year == debt_date.year and date.month == debt_date.month: - if (date.year, date.month) not in final_dict: - final_dict[(date.year, date.month)] = [] - final_dict[(date.year, - date.month)].append(debt_date_dict[debt_date]) - for date in pro_forma_calendar: - if (date.year, date.month) not in final_dict: - final_dict[(date.year, date.month)] = [0] + if pro_date.year == debt_date.year and pro_date.month == debt_date.month: + if (pro_date.year, pro_date.month, calendar.monthrange( + pro_date.year, + pro_date.month)[1]) not in final_dict: + final_dict[( + pro_date.year, pro_date.month, calendar.monthrange( + pro_date.year, pro_date.month)[1])] = [] + final_dict[(pro_date.year, + pro_date.month, calendar.monthrange( + pro_date.year, pro_date.month)[1])].append(debt_date_dict[debt_date]) + for pro_date in pro_forma_calendar: + if (pro_date.year, pro_date.month, calendar.monthrange( + pro_date.year, pro_date.month)[1]) not in final_dict: + final_dict[(pro_date.year, pro_date.month, calendar.monthrange( + pro_date.year, pro_date.month)[1])] = [0] for key, value in final_dict.items(): final_dict[key] = sum(value) - return final_dict + real_dict = {} + for key, value in final_dict.items(): + real_dict[datetime(key[0], key[1], key[2])] = value + + return real_dict diff --git a/bpfin/tests/test_financials/test_liability.py b/bpfin/tests/test_financials/test_liability.py index ea26cf9aaaabd993fc15082d7a6a7f82e438f082..9d8f26c12d2ea9beeceb74ca6b0fa7b7cc3df072 100644 --- a/bpfin/tests/test_financials/test_liability.py +++ b/bpfin/tests/test_financials/test_liability.py @@ -1,27 +1,41 @@ -from bpfin.financials.liability import liability_calendar, create_liability_dict, final_liability_dict -from datetime import date, datetime +from datetime import datetime +from bpfin.financials.liability import final_liability_dict +from bpfin.tests.testdata import sample_data as db def test_final_liability_dict(): - input_start_date = date(2012, 10, 1) - input_dict = { - 'debt1': (150, 'NYSERDA', 10, date(2012, 12, 31)), - 'debt2': (100, 'NYCEEC', 20, date(2012, 8, 31)) - } - input_duration = 10 + input_start_date = db.analysis_date['proforma_start'] + input_dict = db.liability_dictionary + input_duration = db.analysis_date['proforma_duration'] output = { - (2012, 10): 100, - (2012, 11): 100, - (2012, 12): 250, - (2013, 1): 250, - (2013, 2): 250, - (2013, 3): 250, - (2013, 4): 250, - (2013, 5): 250, - (2013, 6): 250, - (2013, 7): 250 + datetime(2012, 1, 31): 0, + datetime(2012, 2, 29): 0, + datetime(2012, 3, 31): 0, + datetime(2012, 4, 30): 0, + datetime(2012, 5, 31): 0, + datetime(2012, 6, 30): 0, + datetime(2012, 7, 31): 0, + datetime(2012, 8, 31): 100, + datetime(2012, 9, 30): 100, + datetime(2012, 10, 31): 100, + datetime(2012, 11, 30): 100, + datetime(2012, 12, 31): 250, + datetime(2013, 1, 31): 250, + datetime(2013, 2, 28): 250, + datetime(2013, 3, 31): 250, + datetime(2013, 4, 30): 250, + datetime(2013, 5, 31): 250, + datetime(2013, 6, 30): 250, + datetime(2013, 7, 31): 250, + datetime(2013, 8, 31): 250, + datetime(2013, 9, 30): 250, + datetime(2013, 10, 31): 100, + datetime(2013, 11, 30): 100, + datetime(2013, 12, 31): 100, + datetime(2014, 1, 31): 100 } result = final_liability_dict(input_start_date, input_dict, input_duration) + print(result) assert output == result diff --git a/bpfin/tests/test_utilbills/test_bill_lib.py b/bpfin/tests/test_utilbills/test_bill_lib.py index 321befb3e68814d0fabc9d4241059b49d2194718..13c927bfcd65e5420defe1741d63f8da2cbdade8 100644 --- a/bpfin/tests/test_utilbills/test_bill_lib.py +++ b/bpfin/tests/test_utilbills/test_bill_lib.py @@ -1,5 +1,5 @@ from bpfin.utilbills.bill_lib import add_list, annualizing_projection -from datetime import date, datetime +from datetime import date, datetime.date def test_add_list(): diff --git a/bpfin/tests/testdata/__inti__.py b/bpfin/tests/testdata/__init__.py similarity index 100% rename from bpfin/tests/testdata/__inti__.py rename to bpfin/tests/testdata/__init__.py diff --git a/bpfin/tests/testdata/sample_data.py b/bpfin/tests/testdata/sample_data.py index 92f60816db9e745b5ace2e448f73e6818fcd1803..a99a49cf438fd0aa81d6ddb6e6f886a00063dd55 100644 --- a/bpfin/tests/testdata/sample_data.py +++ b/bpfin/tests/testdata/sample_data.py @@ -60,6 +60,11 @@ analysis_date = { 'proforma_start': datetime.date(2012, 1, 15), 'proforma_duration': 25} +liability_dictionary = { + 'debt1': (150, 'NYSERDA', 10, datetime.date(2012, 12, 31)), + 'debt2': (100, 'NYCEEC', 20, datetime.date(2012, 8, 31)) + } + proforma_date_from = [ datetime.date(2012, 1, 1), datetime.date(2012, 2, 1), diff --git a/bpfin/utilbills/old_calcbill.py b/bpfin/utilbills/old_calcbill.py index c25e7231813969025121a47e085a0688077b6778..2cae291fe5a9a99af7573136449dab10cb977239 100644 --- a/bpfin/utilbills/old_calcbill.py +++ b/bpfin/utilbills/old_calcbill.py @@ -1,4 +1,4 @@ -from datetime import timedelta, datetime +from datetime import timedelta, datetime.date # from buildingdata.models import Building, UtilityBill, RatePlan, RatePlanMonth # from reference_data.models import Inflation, HddWeather, CddWeather from .billprojections import * @@ -51,11 +51,11 @@ def calculate_utility_bill(inflation_rate_info, inflation_year_info, current_dat hist_monthly_gas_price = monthly_price(monthly_charge_gas, monthly_use_gas) - starting_d0 = datetime.date(2012, 12, 1) - starting_d1 = datetime.date(2031, 1, 31) + starting_d0 = datetime.date.date(2012, 12, 1) + starting_d1 = datetime.date.date(2031, 1, 31) - ending_d0 = datetime.date(2012, 12, 31) - ending_d1 = datetime.date(2031, 2, 1) + ending_d0 = datetime.date.date(2012, 12, 31) + ending_d1 = datetime.date.date(2031, 2, 1) occupancy_date = [] starting_months = []