January 2000
Intermediate to advanced
672 pages
21h 46m
English
Now
we can write a new View, a simple one that keeps
track of the month-end balances of an account. The array has two
columns; the first entry to show year and month, and the second the
month-end balance. For a two-year data file, you thus get back about
24 rows:
class MonthlyAccountActivity(View): """Keeps track of activity in an account. Does smart recalculations.""" def __init__(self, anAccount): self.account = anAccount self.balances = doubletalk.datastruct.NumDict() def getDescription(self): return 'Month end balances for ' + self.account def didAdd(self, tran): effect = tran.effectOn(self.account) if effect == 0: return else: #year and month as the key yymm = time.gmtime(tran.date)[0:2] self.balances.inc(yymm, effect) print 'added %s, %0.2f' % (yymm, effect) def didRemove(self, index): tran = self.BookSet[index] self.didAdd(-tran) #invert and add def didEdit(self, index, newTran): oldTran = self.BookSet[index] self.didAdd(-oldTran) self.didAdd(newTran) def didChangeDrastically(self): self.recalc() def recalc(self): "Do it all quickly in one pass" self.balances.clear() for tran in self.BookSet: yymm = time.gmtime(tran.date)[0:2] for (acct, amount, etc) in tran.lines: if acct == self.account: self.balances.inc(yymm, amount) def getData(self): # numdict returns it all sorted; just need to format # the date column formatted = [] for (period, balance) in self.balances.items(): (year, month) = period #unpack tuple... monthname = doubletalk.dates.SHORT_MONTHS[month-1] ...
Read now
Unlock full access