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}
示例#2
0
 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