Exemplo n.º 1
0
    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}