예제 #1
0
def _format_row(split, style, prefix=None):
    row = {
        'posted_at': datetime_filter(split.transaction.posted_at),
        # 'posted_by': (split.transaction.author.id, split.transaction.author.name),
        'valid_on': date_filter(split.transaction.valid_on),
        'description': {
            'href':
            url_for("finance.transactions_show",
                    transaction_id=split.transaction_id),
            'title':
            localized(split.transaction.description)
            if split.transaction.description else 'Keine Beschreibung',
            **({
                'empty': True
            } if not split.transaction.description else {}),
        },
        'amount': {
            'value':
            money_filter(-split.amount) if
            (style == "inverted") else money_filter(split.amount),
            'is_positive': (split.amount > 0) ^ (style == "inverted"),
        },
        'row_positive': (split.amount > 0) ^ (style == "inverted"),
    }
    if prefix is None:
        return row
    return {'{}_{}'.format(prefix, key): val for key, val in row.items()}
예제 #2
0
def json_accounts_system():
    return jsonify(accounts=[{
        "account_id": account.id,
        "account_name": localized(account.name),
        "account_type": account.type
    } for account in Account.q.outerjoin(User).filter(
        and_(User.account == None, Account.type != "USER_ASSET")).all()])
예제 #3
0
파일: __init__.py 프로젝트: agdsn/pycroft
def _format_row(split, style, prefix=None):
    T = FinanceTable
    row = {
        'posted_at':
        datetime_filter(split.transaction.posted_at),
        # 'posted_by': (split.transaction.author.id, split.transaction.author.name),
        'valid_on':
        date_filter(split.transaction.valid_on),
        'description':
        T.description.value(
            href=url_for("finance.transactions_show",
                         transaction_id=split.transaction_id),
            title=localized(split.transaction.description)
            if split.transaction.description else 'Keine Beschreibung'),
        'amount':
        T.amount.value(
            value=money_filter(-split.amount) if
            (style == "inverted") else money_filter(split.amount),
            is_positive=(split.amount > 0) ^ (style == "inverted"),
        ),
        'row_positive': (split.amount > 0) ^ (style == "inverted"),
    }
    if prefix is None:
        return row
    return {f'{prefix}_{key}': val for key, val in row.items()}
예제 #4
0
def membership_fee_users_due_json(fee_id):
    fee = MembershipFee.q.get(fee_id)

    if fee is None:
        abort(404)

    affected_users = post_transactions_for_membership_fee(fee,
                                                          current_user,
                                                          simulate=True)

    fee_amount = {
        'value': str(fee.regular_fee) + '€',
        'is_positive': (fee.regular_fee < 0)
    }
    fee_description = localized(
        finance.membership_fee_description.format(fee_name=fee.name).to_json())

    return jsonify(items=[{
        'user_id': user['id'],
        'user': {
            'title': str(user['name']),
            'href': url_for("user.user_show", user_id=user['id'])
        },
        'amount': fee_amount,
        'description': fee_description,
        'valid_on': fee.ends_on
    } for user in affected_users])
예제 #5
0
파일: __init__.py 프로젝트: agdsn/pycroft
def membership_fees_json():
    return jsonify(items=[
        {
            'name': localized(membership_fee.name),
            'regular_fee': money_filter(
                membership_fee.regular_fee),
            'payment_deadline': membership_fee.payment_deadline.days,
            'payment_deadline_final': membership_fee.payment_deadline_final.days,
            'begins_on': date_filter(membership_fee.begins_on),
            'ends_on': date_filter(membership_fee.ends_on),
            'finance_link': {'href': url_for(".transactions_all",
                                        filter="all",
                                        after=membership_fee.begins_on,
                                        before=membership_fee.ends_on),
                            'title': 'Finanzübersicht',
                            'icon': 'glyphicon-euro'},
            'book_link': {'href': url_for(".membership_fee_book",
                                          fee_id=membership_fee.id),
                          'title': 'Buchen',
                          'icon': 'glyphicon-book'},
            'edit_link': {'href': url_for(".membership_fee_edit",
                                        fee_id=membership_fee.id),
                            'title': 'Bearbeiten',
                            'icon': 'glyphicon-edit'},
        } for membership_fee in MembershipFee.q.order_by(MembershipFee.begins_on.desc()).all()])
예제 #6
0
파일: __init__.py 프로젝트: agdsn/pycroft
def json_accounts_system():
    return jsonify(accounts=[
        {
            "account_id": account.id,
            "account_name": localized(account.name),
        } for account in session.query(Account).outerjoin(User).filter(
            User.account == None
        ).all()])
예제 #7
0
파일: __init__.py 프로젝트: agdsn/pycroft
def transactions_show_json(transaction_id):
    transaction = Transaction.q.get(transaction_id)
    return jsonify(
        description=transaction.description,
        items=[
        {
            'account': {
                'href': url_for(".accounts_show", account_id=split.account_id),
                'title': localized(split.account.name)
            },
            'amount': money_filter(split.amount),
            'row_positive': split.amount > 0
        } for split in transaction.splits])
예제 #8
0
def transactions_show_json(transaction_id):
    transaction = Transaction.q.get(transaction_id)
    return jsonify(description=transaction.description,
                   items=[{
                       'account': {
                           'href':
                           url_for(".accounts_show",
                                   account_id=split.account_id),
                           'title':
                           localized(split.account.name)
                       },
                       'amount': money_filter(split.amount),
                       'row_positive': split.amount > 0
                   } for split in transaction.splits])
예제 #9
0
def membership_fees_json():
    return jsonify(items=[{
        'name':
        localized(membership_fee.name),
        'regular_fee':
        money_filter(membership_fee.regular_fee),
        'payment_deadline':
        membership_fee.payment_deadline.days,
        'payment_deadline_final':
        membership_fee.payment_deadline_final.days,
        'begins_on':
        date_format(membership_fee.begins_on),
        'ends_on':
        date_format(membership_fee.ends_on),
        'actions': [{
            'href':
            url_for(".transactions_all",
                    filter="all",
                    after=membership_fee.begins_on,
                    before=membership_fee.ends_on),
            'title':
            'Finanzübersicht',
            'icon':
            'glyphicon-euro',
            'btn_class':
            'btn-success btn-sm'
        }, {
            'href':
            url_for(".membership_fee_book", fee_id=membership_fee.id),
            'title':
            'Buchen',
            'icon':
            'glyphicon-book',
            'btn_class':
            'btn-warning btn-sm'
        }, {
            'href':
            url_for(".membership_fee_edit", fee_id=membership_fee.id),
            'title':
            'Bearbeiten',
            'icon':
            'glyphicon-edit',
            'btn_class':
            'btn-primary btn-sm'
        }]
    } for membership_fee in MembershipFee.q.order_by(
        MembershipFee.begins_on.desc()).all()])
예제 #10
0
파일: __init__.py 프로젝트: agdsn/pycroft
def transactions_show_json(transaction_id):
    transaction = Transaction.get(transaction_id)
    return jsonify(description=transaction.description,
                   items=[{
                       'account':
                       TransactionTable.account.value(
                           href=url_for(".accounts_show",
                                        account_id=split.account_id),
                           title=localized(split.account.name,
                                           {int: {
                                               'insert_commas': False
                                           }})),
                       'amount':
                       money_filter(split.amount),
                       'row_positive':
                       split.amount > 0
                   } for split in transaction.splits])
예제 #11
0
파일: __init__.py 프로젝트: agdsn/pycroft
def membership_fee_users_due_json(fee_id):
    fee = MembershipFee.q.get(fee_id)

    if fee is None:
        abort(404)

    affected_users = post_transactions_for_membership_fee(
        fee, current_user)

    session.rollback()

    return jsonify(items=[{
        'user': {'title': str(user['name']),
                 'href': url_for("user.user_show", user_id=user['id'])},
        'amount': {'value': str(fee.regular_fee) + '€', 'is_positive': (fee.regular_fee < 0)},
        'description': localized(finance.membership_fee_description
                                 .format(fee_name=fee.name).to_json()),
        'valid_on': fee.ends_on
    } for user in affected_users])
예제 #12
0
def accounts_show(account_id):
    account = Account.q.get(account_id)

    if account is None:
        flash(u"Konto mit ID {} existiert nicht!".format(account_id), 'error')
        abort(404)

    try:
        user = User.q.filter_by(account_id=account.id).one()
    except NoResultFound:
        user = None
    except MultipleResultsFound:
        user = User.q.filter_by(account_id=account.id).first()
        flash(
            u"Es existieren mehrere Nutzer, die mit diesem Konto"
            u" verbunden sind!", "warning")

    inverted = account.type == "USER_ASSET"

    _table_kwargs = {
        'data_url': url_for("finance.accounts_show_json",
                            account_id=account_id),
        'saldo': account.balance,
        'inverted': inverted
    }

    balance = -account.balance if inverted else account.balance

    return render_template(
        'finance/accounts_show.html',
        account=account,
        user=user,
        balance=balance,
        balance_json_url=url_for('.balance_json',
                                 account_id=account_id,
                                 invert=inverted),
        finance_table_regular=FinanceTable(**_table_kwargs),
        finance_table_splitted=FinanceTableSplitted(**_table_kwargs),
        account_name=localized(account.name, {int: {
            'insert_commas': False
        }}))
예제 #13
0
파일: __init__.py 프로젝트: agdsn/pycroft
def _format_row(split, style, prefix=None):
    row = {
        'posted_at': datetime_filter(split.transaction.posted_at),
        #'posted_by': (split.transaction.author.id, split.transaction.author.name),
        'valid_on': date_filter(split.transaction.valid_on),
        'description': {
            'href': url_for(
                "finance.transactions_show",
                transaction_id=split.transaction_id
                ),
            'title': localized(split.transaction.description)
        },
        'amount': {
            'value': money_filter(-split.amount) if (style == "inverted") else money_filter(split.amount),
            'is_positive': (split.amount > 0) ^ (style == "inverted"),
        },
        'row_positive': (split.amount > 0) ^ (style == "inverted"),
    }
    if prefix is None:
        return row
    return {'{}_{}'.format(prefix, key): val for key, val in row.items()}
예제 #14
0
파일: __init__.py 프로젝트: agdsn/pycroft
def membership_fees_json():
    T = MembershipFeeTable
    return jsonify(items=[{
        'name':
        localized(membership_fee.name),
        'regular_fee':
        money_filter(membership_fee.regular_fee),
        'payment_deadline':
        membership_fee.payment_deadline.days,
        'payment_deadline_final':
        membership_fee.payment_deadline_final.days,
        'begins_on':
        date_format(membership_fee.begins_on, formatter=date_filter),
        'ends_on':
        date_format(membership_fee.ends_on, formatter=date_filter),
        'actions': [
            T.actions.single_value(href=url_for(".transactions_all",
                                                filter="all",
                                                after=membership_fee.begins_on,
                                                before=membership_fee.ends_on),
                                   title='Finanzübersicht',
                                   icon='fa-euro-sign',
                                   btn_class='btn-success btn-sm'),
            T.actions.single_value(href=url_for(".membership_fee_book",
                                                fee_id=membership_fee.id),
                                   title='Buchen',
                                   icon='fa-book',
                                   btn_class='btn-warning btn-sm'),
            T.actions.single_value(href=url_for(".membership_fee_edit",
                                                fee_id=membership_fee.id),
                                   title='Bearbeiten',
                                   icon='fa-edit',
                                   btn_class='btn-primary btn-sm')
        ]
    } for membership_fee in MembershipFee.q.order_by(
        MembershipFee.begins_on.desc()).all()])
예제 #15
0
def assert_account_name(account, expected_name):
    assert localized(account.name, {int: {
        'insert_commas': False
    }}) == expected_name
예제 #16
0
def assert_logmessage_startswith(logentry, expected_start: str):
    assert localized(logentry.message).startswith(expected_start)
예제 #17
0
 def assert_logmessage_startswith(self, logentry, expected_start: str):
     self.assertTrue(localized(logentry.message), expected_start)
예제 #18
0
 def assert_account_name(self, account, expected_name):
     self.assertEqual(localized(account.name, {int: {'insert_commas': False}}),
                      expected_name)
예제 #19
0
def json_accounts_system():
    return jsonify(accounts=[{
        "account_id": account.id,
        "account_name": localized(account.name),
    } for account in session.query(Account).outerjoin(User).filter(
        User.account == None).all()])