Exemple #1
0
def add_transaction(payee_id, payer_ids, total_amount, split_type, split_amount_list=None):
    actual_amount_list = []
    if split_type == "Equal":
        actual_amount_list = [total_amount / (len(payer_ids))] * len(payer_ids)

    elif split_type == "Absolute":
        actual_amount_list = split_amount_list[:]

    elif split_type == "Percentage":
        for i in range(len(payer_ids)):
            actual_amount_list.append(split_amount_list[i] * total_amount / 100)

    session = session_factory()
    payee_amount = 0

    for index, payer_id in enumerate(payer_ids):
        if payer_id != payee_id:
            payee_amount += actual_amount_list[index]
            session.add(Transaction(payer_id, payee_id, actual_amount_list[index]))
            payer = session.query(User).filter(User.phone == payer_id).first()
            payer.balance -= actual_amount_list[index]

            balance_row = session.query(Balance).filter(
                and_(Balance.payer_id == payer_id, Balance.payee_id == payee_id)).first()
            if balance_row is None:
                new_row = Balance(payer_id, payee_id, actual_amount_list[index])
                session.add(new_row)
            else:
                balance_row.amount += actual_amount_list[index]

    payer = session.query(User).filter(User.phone == payee_id).first()
    payer.balance += payee_amount
    session.commit()
def settle_balance(payer_id, payee_id):
    session = session_factory()
    balance = session.query(Balance).filter(
        and_(Balance.payer_id == payee_id,
             Balance.payee_id == payer_id)).first()

    payee = session.query(User).filter(User.phone == payee_id).first()
    payee.balance += balance.amount
    payer = session.query(User).filter(User.phone == payer_id).first()
    payer.balance -= balance.amount

    new_transaction = Transaction(payer_id, payee_id, balance.amount)
    session.add(new_transaction)
    balance.amount = 0
    session.commit()
def get_balance_list():
    session = session_factory()
    balance_list = session.query(Balance).all()
    return balance_list
Exemple #4
0
def get_user_transaction(user_id):
    session = session_factory()
    transactions = session.query(Transaction).filter(
        or_(Transaction.payer_id == user_id, Transaction.payee_id == user_id)).all()

    return transactions
Exemple #5
0
def get_all_transactions():
    session = session_factory()
    transactions = session.query(Transaction).all()
    return transactions
Exemple #6
0
def get_users_list():
    session = session_factory()
    users = session.query(User).all()
    return users
Exemple #7
0
def add_user(name, phone):
    session = session_factory()
    new_user = User(name, phone)
    session.add(new_user)
    session.commit()