From 3cccc12e8f164cdd8aa68f108d1d5897cac588ce Mon Sep 17 00:00:00 2001 From: Sarey Hamarneh Date: Mon, 8 May 2017 13:38:17 -0400 Subject: [PATCH 01/10] Solve cash balance problem with test. --- bpfin/financials/cash_balance.py | 35 ++++++++++++++----- .../test_financials/test_cash_balance.py | 14 ++++++-- 2 files changed, 38 insertions(+), 11 deletions(-) diff --git a/bpfin/financials/cash_balance.py b/bpfin/financials/cash_balance.py index 55cd11c..f9195f3 100644 --- a/bpfin/financials/cash_balance.py +++ b/bpfin/financials/cash_balance.py @@ -1,25 +1,42 @@ -def cash_balance(cash_dictionary): +def cash_balance(start_date, cash_dictionary, months): """Returns current cash balance Args: + start_date (datetime) = start date of analysis cash_dictionary (dictionary): {datetime:(cash value,year)} + months (int): length of time Returns: dictionary: {datetime, cash value} """ - cash_balance_dictionary = {} + analysis_years = {} + + start_year = start_date.year + for i in range(months): + analysis_years[start_year + i] = [] + cash_balance_dictionary = {} bank_statement = {} - for my_date, value_tuple in cash_dictionary.items(): + for date, value_tuple in cash_dictionary.items(): if value_tuple[1] is True: - cash_balance_dictionary[my_date.year] = value_tuple[0] + cash_balance_dictionary[date.year] = value_tuple[0] else: - # check if year (key) not is present in bank_statement - if my_date.year not in bank_statement: - bank_statement[my_date.year] = [] - bank_statement[my_date.year].append(value_tuple[0]) + if date.year not in bank_statement: + bank_statement[date.year] = [] + bank_statement[date.year].append(value_tuple[0]) for year, value in bank_statement.items(): if year not in cash_balance_dictionary: cash_balance_dictionary[year] = sum(value) / len(value) - return cash_balance_dictionary + + for year in analysis_years: + if year in cash_balance_dictionary: + analysis_years[year] = cash_balance_dictionary[year] + if year > max(cash_balance_dictionary): + max_value = max(cash_balance_dictionary) + analysis_years[year] = cash_balance_dictionary[max_value] + if year < min(cash_balance_dictionary): + min_value = min(cash_balance_dictionary) + analysis_years[year] = cash_balance_dictionary[min_value] + + return analysis_years diff --git a/bpfin/tests/test_financials/test_cash_balance.py b/bpfin/tests/test_financials/test_cash_balance.py index 9a33d9a..80c79af 100644 --- a/bpfin/tests/test_financials/test_cash_balance.py +++ b/bpfin/tests/test_financials/test_cash_balance.py @@ -9,7 +9,17 @@ def test_cash_balance(): date(2016, 11, 11): (500, False), date(2016, 10, 10): (400, False) } - output_cash_balance = {2014: 500.0, 2015: 600, 2016: 450.0} - result = cash_balance(input_dictionary) + input_date = date(2012, 5, 3) + input_years = 7 + output_cash_balance = { + 2012: 500, + 2013: 500, + 2014: 500.0, + 2015: 600, + 2016: 450.0, + 2017: 450.0, + 2018: 450.0 + } + result = cash_balance(input_date, input_dictionary, input_years) assert result == output_cash_balance -- GitLab From 96627bb19d6938f50d819582fd3225cd232ef95e Mon Sep 17 00:00:00 2001 From: Sarey Hamarneh Date: Mon, 8 May 2017 13:55:37 -0400 Subject: [PATCH 02/10] Change analysis date --- bpfin/financials/cash_balance.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/bpfin/financials/cash_balance.py b/bpfin/financials/cash_balance.py index f9195f3..afb3c2d 100644 --- a/bpfin/financials/cash_balance.py +++ b/bpfin/financials/cash_balance.py @@ -1,17 +1,16 @@ -def cash_balance(start_date, cash_dictionary, months): +def cash_balance(analysis_date, cash_dictionary): """Returns current cash balance Args: - start_date (datetime) = start date of analysis + analysis_date (dictionary) = {starting_date: months} cash_dictionary (dictionary): {datetime:(cash value,year)} - months (int): length of time Returns: dictionary: {datetime, cash value} """ analysis_years = {} - start_year = start_date.year - for i in range(months): + start_year = analysis_date['proforma_start'].year + for i in range(analysis_date['proforma_duration']): analysis_years[start_year + i] = [] cash_balance_dictionary = {} -- GitLab From 863b786c374367d9ebd46c3d7596cefa932b3dca Mon Sep 17 00:00:00 2001 From: Sarey Hamarneh Date: Mon, 8 May 2017 14:39:16 -0400 Subject: [PATCH 03/10] Push --- bpfin/tests/test_financials/test_cash_balance.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/bpfin/tests/test_financials/test_cash_balance.py b/bpfin/tests/test_financials/test_cash_balance.py index 80c79af..65a2870 100644 --- a/bpfin/tests/test_financials/test_cash_balance.py +++ b/bpfin/tests/test_financials/test_cash_balance.py @@ -9,8 +9,10 @@ def test_cash_balance(): date(2016, 11, 11): (500, False), date(2016, 10, 10): (400, False) } - input_date = date(2012, 5, 3) - input_years = 7 + input_analysis_date = { + 'proforma_start': date(2012, 5, 3), + 'proforma_duration': 7 + } output_cash_balance = { 2012: 500, 2013: 500, @@ -19,7 +21,7 @@ def test_cash_balance(): 2016: 450.0, 2017: 450.0, 2018: 450.0 - } - result = cash_balance(input_date, input_dictionary, input_years) + } + result = cash_balance(input_analysis_date, input_dictionary) assert result == output_cash_balance -- GitLab From 5ff35bd84da337445e8ba707f3bc8ce4b7ffd459 Mon Sep 17 00:00:00 2001 From: Sarey Hamarneh Date: Mon, 8 May 2017 16:23:22 -0400 Subject: [PATCH 04/10] push --- bpfin/financials/cash_balance.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/bpfin/financials/cash_balance.py b/bpfin/financials/cash_balance.py index afb3c2d..59a0748 100644 --- a/bpfin/financials/cash_balance.py +++ b/bpfin/financials/cash_balance.py @@ -37,5 +37,8 @@ def cash_balance(analysis_date, cash_dictionary): if year < min(cash_balance_dictionary): min_value = min(cash_balance_dictionary) analysis_years[year] = cash_balance_dictionary[min_value] - + if year > min(cash_balance_dictionary) and year < max(cash_balance_dictionary): + if year not in cash_balance_dictionary: + max_value = max(cash_balance_dictionary) + analysis_years[year] = cash_balance_dictionary[max_value] return analysis_years -- GitLab From 8430c2744a5fe5a6754bbbd5041f77802687aa58 Mon Sep 17 00:00:00 2001 From: Sarey Hamarneh Date: Mon, 8 May 2017 16:30:38 -0400 Subject: [PATCH 05/10] sum_cash --- bpfin/financials/cash_balance.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/bpfin/financials/cash_balance.py b/bpfin/financials/cash_balance.py index 59a0748..84cbf51 100644 --- a/bpfin/financials/cash_balance.py +++ b/bpfin/financials/cash_balance.py @@ -28,6 +28,12 @@ def cash_balance(analysis_date, cash_dictionary): if year not in cash_balance_dictionary: cash_balance_dictionary[year] = sum(value) / len(value) + sum_cash = [] + for year in cash_balance_dictionary: + sum_cash.append(cash_balance_dictionary[year]) + average = sum(sum_cash)/len(sum_cash) + + for year in analysis_years: if year in cash_balance_dictionary: analysis_years[year] = cash_balance_dictionary[year] @@ -39,6 +45,5 @@ def cash_balance(analysis_date, cash_dictionary): analysis_years[year] = cash_balance_dictionary[min_value] if year > min(cash_balance_dictionary) and year < max(cash_balance_dictionary): if year not in cash_balance_dictionary: - max_value = max(cash_balance_dictionary) - analysis_years[year] = cash_balance_dictionary[max_value] + analysis_years[year] = sum_cash return analysis_years -- GitLab From e37fcc70303e57b681d2ef1d40cd87a4edc93d80 Mon Sep 17 00:00:00 2001 From: Sarey Hamarneh Date: Mon, 8 May 2017 16:30:49 -0400 Subject: [PATCH 06/10] save error --- bpfin/financials/cash_balance.py | 1 - 1 file changed, 1 deletion(-) diff --git a/bpfin/financials/cash_balance.py b/bpfin/financials/cash_balance.py index 84cbf51..376d2e2 100644 --- a/bpfin/financials/cash_balance.py +++ b/bpfin/financials/cash_balance.py @@ -33,7 +33,6 @@ def cash_balance(analysis_date, cash_dictionary): sum_cash.append(cash_balance_dictionary[year]) average = sum(sum_cash)/len(sum_cash) - for year in analysis_years: if year in cash_balance_dictionary: analysis_years[year] = cash_balance_dictionary[year] -- GitLab From 70fbde80b29000abb44ea6bea77b1058c70235ca Mon Sep 17 00:00:00 2001 From: Sarey Hamarneh Date: Mon, 8 May 2017 16:31:51 -0400 Subject: [PATCH 07/10] push --- bpfin/financials/cash_balance.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bpfin/financials/cash_balance.py b/bpfin/financials/cash_balance.py index 376d2e2..ba7f2c3 100644 --- a/bpfin/financials/cash_balance.py +++ b/bpfin/financials/cash_balance.py @@ -31,7 +31,7 @@ def cash_balance(analysis_date, cash_dictionary): sum_cash = [] for year in cash_balance_dictionary: sum_cash.append(cash_balance_dictionary[year]) - average = sum(sum_cash)/len(sum_cash) + cash_average = sum(sum_cash)/len(sum_cash) for year in analysis_years: if year in cash_balance_dictionary: @@ -44,5 +44,5 @@ def cash_balance(analysis_date, cash_dictionary): analysis_years[year] = cash_balance_dictionary[min_value] if year > min(cash_balance_dictionary) and year < max(cash_balance_dictionary): if year not in cash_balance_dictionary: - analysis_years[year] = sum_cash + analysis_years[year] = cash_average return analysis_years -- GitLab From ed13fe95245724a3bb0467e4ba47d12d91fee818 Mon Sep 17 00:00:00 2001 From: Sarey Hamarneh Date: Mon, 8 May 2017 17:01:48 -0400 Subject: [PATCH 08/10] Done --- bpfin/financials/cash_balance.py | 13 ++++++------- bpfin/financials/liability.py | 3 +++ bpfin/tests/test_financials/test_cash_balance.py | 14 +++++++++----- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/bpfin/financials/cash_balance.py b/bpfin/financials/cash_balance.py index ba7f2c3..b73e8fc 100644 --- a/bpfin/financials/cash_balance.py +++ b/bpfin/financials/cash_balance.py @@ -33,16 +33,15 @@ def cash_balance(analysis_date, cash_dictionary): sum_cash.append(cash_balance_dictionary[year]) cash_average = sum(sum_cash)/len(sum_cash) + final_dict = {} for year in analysis_years: if year in cash_balance_dictionary: - analysis_years[year] = cash_balance_dictionary[year] - if year > max(cash_balance_dictionary): - max_value = max(cash_balance_dictionary) - analysis_years[year] = cash_balance_dictionary[max_value] + final_dict[year] = cash_balance_dictionary[year] if year < min(cash_balance_dictionary): min_value = min(cash_balance_dictionary) - analysis_years[year] = cash_balance_dictionary[min_value] + final_dict[year] = cash_balance_dictionary[min_value] if year > min(cash_balance_dictionary) and year < max(cash_balance_dictionary): if year not in cash_balance_dictionary: - analysis_years[year] = cash_average - return analysis_years + final_dict[year] = cash_average + + return final_dict diff --git a/bpfin/financials/liability.py b/bpfin/financials/liability.py index a946ba0..08c1366 100644 --- a/bpfin/financials/liability.py +++ b/bpfin/financials/liability.py @@ -78,6 +78,9 @@ 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) diff --git a/bpfin/tests/test_financials/test_cash_balance.py b/bpfin/tests/test_financials/test_cash_balance.py index 65a2870..fa1a08d 100644 --- a/bpfin/tests/test_financials/test_cash_balance.py +++ b/bpfin/tests/test_financials/test_cash_balance.py @@ -10,17 +10,21 @@ def test_cash_balance(): date(2016, 10, 10): (400, False) } input_analysis_date = { - 'proforma_start': date(2012, 5, 3), - 'proforma_duration': 7 + 'proforma_start': date(2006, 5, 3), + 'proforma_duration': 12 } output_cash_balance = { + 2006: 500, + 2007: 500, + 2008: 500, + 2009: 500, + 2010: 500, + 2011: 500, 2012: 500, 2013: 500, 2014: 500.0, 2015: 600, - 2016: 450.0, - 2017: 450.0, - 2018: 450.0 + 2016: 450.0 } result = cash_balance(input_analysis_date, input_dictionary) -- GitLab From efdf805f37fffa21ff7dcb10309067878f43cd7b Mon Sep 17 00:00:00 2001 From: Sarey Hamarneh Date: Mon, 8 May 2017 17:18:32 -0400 Subject: [PATCH 09/10] push --- bpfin/financials/cash_balance.py | 1 + 1 file changed, 1 insertion(+) diff --git a/bpfin/financials/cash_balance.py b/bpfin/financials/cash_balance.py index b73e8fc..6b43215 100644 --- a/bpfin/financials/cash_balance.py +++ b/bpfin/financials/cash_balance.py @@ -45,3 +45,4 @@ def cash_balance(analysis_date, cash_dictionary): final_dict[year] = cash_average return final_dict + -- GitLab From 0e1e51d028de0915b798066087ea214c5cd3c37f Mon Sep 17 00:00:00 2001 From: chenzheng06 Date: Tue, 9 May 2017 11:14:15 -0400 Subject: [PATCH 10/10] Fix blank lines --- bpfin/financials/liability.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/bpfin/financials/liability.py b/bpfin/financials/liability.py index 08c1366..436893a 100644 --- a/bpfin/financials/liability.py +++ b/bpfin/financials/liability.py @@ -78,9 +78,6 @@ 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) @@ -95,8 +92,10 @@ def final_liability_dict(start_date, liability_dictionary, months): 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] + 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( -- GitLab