Exemple #1
0
def simple_transaction(description, debit_account, credit_account, amount,
                       author, valid_on=None, confirmed=True):
    """
    Posts a simple transaction.
    A simple transaction is a transaction that consists of exactly two splits,
    where one account is debited and another different account is credited with
    the same amount.
    The current system date will be used as transaction date, an optional valid
    date may be specified.
    :param unicode description: Description
    :param Account debit_account: Debit (germ. Soll) account.
    :param Account credit_account: Credit (germ. Haben) account
    :param Decimal amount: Amount in Eurocents
    :param User author: User who created the transaction
    :param date valid_on: Date, when the transaction should be valid. Current
    database date, if omitted.
    :type valid_on: date or None
    :param confirmed: If transaction should be created as confirmed
    :rtype: Transaction
    """
    if valid_on is None:
        valid_on = session.utcnow().date()
    new_transaction = Transaction(
        description=description,
        author=author,
        valid_on=valid_on,
        confirmed=confirmed)
    new_debit_split = Split(
        amount=-amount,
        account=debit_account,
        transaction=new_transaction)
    new_credit_split = Split(
        amount=amount,
        account=credit_account,
        transaction=new_transaction)
    session.session.add_all(
        [new_transaction, new_debit_split, new_credit_split]
    )
    return new_transaction
Exemple #2
0
def complex_transaction(description, author, splits, valid_on=None):
    if valid_on is None:
        valid_on = session.utcnow().date()
    objects = []
    new_transaction = Transaction(description=description,
                                  author=author,
                                  valid_on=valid_on)
    objects.append(new_transaction)
    objects.extend(
        Split(amount=amount, account=account, transaction=new_transaction)
        for (account, amount) in splits)
    session.session.add_all(objects)
    return new_transaction
Exemple #3
0
def build_split(t, account, amount):
    return Split(amount=amount, account=account, transaction=t)