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()}
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()])
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()}
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])
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()])
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()])
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])
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])
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()])
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])
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])
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 }}))
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()}
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()])
def assert_account_name(account, expected_name): assert localized(account.name, {int: { 'insert_commas': False }}) == expected_name
def assert_logmessage_startswith(logentry, expected_start: str): assert localized(logentry.message).startswith(expected_start)
def assert_logmessage_startswith(self, logentry, expected_start: str): self.assertTrue(localized(logentry.message), expected_start)
def assert_account_name(self, account, expected_name): self.assertEqual(localized(account.name, {int: {'insert_commas': False}}), expected_name)
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()])