def test_get_billing_calendar_january_returns_correct_calendar(self): date = '2020-01-31' calendar = bc.get_billing_calendar(date) self.assertEqual(dt(2020, 1, 1), calendar.current_month_first_day) self.assertEqual(dt(2020, 1, 31), calendar.current_month_last_day) self.assertEqual(dt(2019, 12, 1), calendar.previous_month_first_day) self.assertEqual(dt(2019, 12, 31), calendar.previous_month_last_day) self.assertEqual(31, calendar.days_in_current_month)
def test_get_billing_calendar_november_returns_correct_calendar(self): date = '2020-11-30' calendar = bc.get_billing_calendar(date) self.assertEqual(dt(2020, 11, 1), calendar.current_month_first_day) self.assertEqual(dt(2020, 11, 30), calendar.current_month_last_day) self.assertEqual(dt(2020, 10, 1), calendar.previous_month_first_day) self.assertEqual(dt(2020, 10, 31), calendar.previous_month_last_day) self.assertEqual(30, calendar.days_in_current_month)
def test_get_billing_calendar_leap_year_feb_returns_correct_calendar(self): date = '2020-02-29' calendar = bc.get_billing_calendar(date) self.assertEqual(dt(2020, 2, 1), calendar.current_month_first_day) self.assertEqual(dt(2020, 2, 29), calendar.current_month_last_day) self.assertEqual(dt(2020, 1, 1), calendar.previous_month_first_day) self.assertEqual(dt(2020, 1, 31), calendar.previous_month_last_day) self.assertEqual(29, calendar.days_in_current_month)
def test_get_billing_calendar_not_leap_year_march_returns_correct_calendar( self): date = '2019-03-31' calendar = bc.get_billing_calendar(date) self.assertEqual(dt(2019, 3, 1), calendar.current_month_first_day) self.assertEqual(dt(2019, 3, 31), calendar.current_month_last_day) self.assertEqual(dt(2019, 2, 1), calendar.previous_month_first_day) self.assertEqual(dt(2019, 2, 28), calendar.previous_month_last_day) self.assertEqual(31, calendar.days_in_current_month)
def calculate_bill(member_id=None, account_id=None, bill_date=None): """ calculates the bill for the given bill_date """ billing_calendar = bc.get_billing_calendar(bill_date) data = get_readings() bills = [] readings = list(get_readings_by_account_id(account_id, data[member_id])) for reading in readings: for energy_type in reading: bill = get_bill_by_energy_type(energy_type, billing_calendar, reading[energy_type]) bills.append(bill) return (0, 0) if len(bills) == 0 else [sum(x) for x in zip(*bills)]