def calc_real_equity_increment(self, equity_increment, equity_held, equity_target, date_joined): quarter_joined = round_to_quarter(date_joined) current_quarter = round_to_quarter(datetime.datetime.today()) quarters = quarter_diff(current_quarter, quarter_joined) on_track_equity = min(equity_increment * quarters, equity_target) if (equity_held >= on_track_equity): return Decimal(0) elif (on_track_equity - equity_held) < equity_increment: return on_track_equity - equity_held else: return equity_increment
def test_round_to_quarter(self): self.assertEqual(round_to_quarter(datetime(2012,1,1)), datetime(2012,1,1)) self.assertEqual(round_to_quarter(datetime(2012,2,1)), datetime(2012,1,1)) self.assertEqual(round_to_quarter(datetime(2012,3,1)), datetime(2012,4,1)) self.assertEqual(round_to_quarter(datetime(2012,4,1)), datetime(2012,4,1)) self.assertEqual(round_to_quarter(datetime(2012,5,1)), datetime(2012,4,1)) self.assertEqual(round_to_quarter(datetime(2012,6,1)), datetime(2012,7,1)) self.assertEqual(round_to_quarter(datetime(2012,7,1)), datetime(2012,7,1)) self.assertEqual(round_to_quarter(datetime(2012,8,1)), datetime(2012,7,1)) self.assertEqual(round_to_quarter(datetime(2012,9,1)), datetime(2012,10,1)) self.assertEqual(round_to_quarter(datetime(2012,10,1)), datetime(2012,10,1)) self.assertEqual(round_to_quarter(datetime(2012,11,1)), datetime(2012,10,1)) self.assertEqual(round_to_quarter(datetime(2012,12,1)), datetime(2013,1,1)) self.assertRaises(ValueError, round_to_quarter, False)