def compute_balance(cls, users_expenses, month, year): if len(users_expenses) == 0: # nothing to do return user_a = users_expenses[0] if len(users_expenses) == 2: user_b = users_expenses[1] else: user_b = UserExpenses(users_helper.get_other_nickname()) debt = (user_a.totalcommon - user_b.totalcommon) / 2 + user_a.totaladvance - user_b.totaladvance if user_a.totaltax != 0.0 or user_b.totaltax != 0.0: debt += cls.compute_tax_balance(user_a, user_b, year) if debt > 0: min_user = user_b max_user = user_a else: debt = -debt min_user = user_a max_user = user_b # update the balance in DataStore query = Balance.query(Balance.month == month, Balance.year == year) balance = query.get() if balance is None: balance = Balance() balance.year = year balance.month = month balance.debtor = min_user.user balance.incredit = max_user.user balance.amount = debt balance.put() return {'year': year, 'month': month, 'maxuser': max_user.user, 'minuser': min_user.user, 'debt': debt}
def getAllBalances(self): query = Balance.query().order(Balance.year, Balance.month) balances = query.fetch(120) if not len(balances): self.debtor = '' self.incredit = '' self.balance = 0 else: self.debtor = balances[0].debtor self.incredit = balances[0].incredit self.balance = 0 for b in balances: if self.debtor == b.debtor: self.balance += b.amount else: self.balance -= b.amount if self.balance < 0: self.balance = -self.balance tmp = self.debtor self.debtor = self.incredit self.incredit = tmp return balances