diff --git a/bpfin/financials/liability.py b/bpfin/financials/liability.py index 436893a6a3e541c93b1af99e8265f2f67edeb966..70cf1c665c54bb01d12b33eabce4429a5df8fe57 100644 --- a/bpfin/financials/liability.py +++ b/bpfin/financials/liability.py @@ -78,45 +78,46 @@ def final_liability_dict(start_date, liability_dictionary, months): Return: dictionary: {(year,month):debt value} """ - final_dict = {} - pro_forma_calendar = liability_calendar(start_date, months) - debt_list = create_liability_dict(liability_dictionary) - for pro_date in pro_forma_calendar: - for debt_date_dict in debt_list: - for debt_date in debt_date_dict: - 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] + if liability_dictionary: + final_dict = {} + pro_forma_calendar = liability_calendar(start_date, months) + debt_list = create_liability_dict(liability_dictionary) + for pro_date in pro_forma_calendar: + for debt_date_dict in debt_list: + for debt_date in debt_date_dict: + 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) + for key, value in final_dict.items(): + final_dict[key] = sum(value) - real_dict = {} - for key, value in final_dict.items(): - real_dict[datetime(key[0], key[1], key[2])] = value + real_dict = {} + for key, value in final_dict.items(): + real_dict[datetime(key[0], key[1], key[2])] = value - annual_liability_dict = {} - for full_date, liability in real_dict.items(): - if full_date.year not in annual_liability_dict: - annual_liability_dict[full_date.year] = [] - annual_liability_dict[full_date.year].append(liability) - sum_dict = {} - for year, value in annual_liability_dict.items(): - sum_dict[year] = sum(value) + annual_liability_dict = {} + for full_date, liability in real_dict.items(): + if full_date.year not in annual_liability_dict: + annual_liability_dict[full_date.year] = [] + annual_liability_dict[full_date.year].append(liability) + sum_dict = {} + for year, value in annual_liability_dict.items(): + sum_dict[year] = sum(value) - return sum_dict + return sum_dict diff --git a/bpfin/tests/test_financials/test_cash_balance.py b/bpfin/tests/test_financials/test_cash_balance.py index fa1a08d15285c56f9d971680500c90b3a0b5c45d..2f27f7b9b79f91608b4fac9a9c6f5070e433c78c 100644 --- a/bpfin/tests/test_financials/test_cash_balance.py +++ b/bpfin/tests/test_financials/test_cash_balance.py @@ -2,6 +2,29 @@ from bpfin.financials.cash_balance import cash_balance from datetime import date +def test_cash_balance_year_gap(): + input_dictionary = { + date(2014, 11, 1): (500, False), + date(2014, 12, 1): (400, False), + date(2014, 3, 13): (600, False), + date(2016, 11, 11): (500, False), + date(2016, 12, 31): (400, True) + } + input_analysis_date = { + 'proforma_start': date(2012, 5, 3), + 'proforma_duration': 12 + } + output_cash_balance = { + 2012: 450, + 2013: 450, + 2014: 500, + 2015: 450, + 2016: 400 + } + result = cash_balance(input_analysis_date, input_dictionary) + assert result == output_cash_balance + + def test_cash_balance(): input_dictionary = { date(2014, 11, 1): (500, False),