コード例 #1
0
ファイル: __init__.py プロジェクト: agdsn/pycroft
def transactions_create():
    form = TransactionCreateForm()
    if form.validate_on_submit():
        splits = []
        for split_form in form.splits:
            splits.append((
                Account.q.get(split_form.account_id.data),
                split_form.amount.data
            ))
        transaction = finance.complex_transaction(
            description=form.description.data,
            author=current_user,
            splits=splits,
            valid_on=form.valid_on.data,
        )

        end_payment_in_default_memberships()

        session.commit()

        return redirect(url_for('.transactions_show',
                                transaction_id=transaction.id))
    return render_template(
        'finance/transactions_create.html',
        form=form
    )
コード例 #2
0
ファイル: __init__.py プロジェクト: agdsn/pycroft
def bank_account_activities_edit(activity_id):
    activity = BankAccountActivity.q.get(activity_id)

    if activity is None:
        flash(u"Bankbewegung mit ID {} existiert nicht!".format(activity_id), 'error')
        abort(404)

    form = BankAccountActivityEditForm(
        obj=activity, bank_account_name=activity.bank_account.name)

    if form.validate():
        debit_account = Account.q.filter(
            Account.id == form.account_id.data
        ).one()
        credit_account = activity.bank_account.account

        transaction = finance.simple_transaction(
            description=form.description.data, debit_account=debit_account,
            credit_account=credit_account, amount=activity.amount,
            author=current_user, valid_on=activity.valid_on)
        activity.split = next(split for split in transaction.splits
                              if split.account_id == credit_account.id)
        session.add(activity)
        session.commit()

        end_payment_in_default_memberships()

        return redirect(url_for('.bank_accounts_list'))

    return render_template('finance/bank_account_activities_edit.html',
                           form=form)
コード例 #3
0
def bank_account_activities_edit(activity_id):
    activity = BankAccountActivity.q.get(activity_id)

    if activity is None:
        flash(u"Bankbewegung mit ID {} existiert nicht!".format(activity_id),
              'error')
        abort(404)

    form = BankAccountActivityEditForm(
        obj=activity, bank_account_name=activity.bank_account.name)

    if form.validate():
        debit_account = Account.q.filter(
            Account.id == form.account_id.data).one()
        credit_account = activity.bank_account.account

        transaction = finance.simple_transaction(
            description=form.description.data,
            debit_account=debit_account,
            credit_account=credit_account,
            amount=activity.amount,
            author=current_user,
            valid_on=activity.valid_on)
        activity.split = next(split for split in transaction.splits
                              if split.account_id == credit_account.id)
        session.add(activity)
        session.commit()

        end_payment_in_default_memberships()

        return redirect(url_for('.bank_accounts_list'))

    return render_template('finance/bank_account_activities_edit.html',
                           form=form)
コード例 #4
0
    def handle_payment_in_default_users(self):
        end_payment_in_default_memberships(self.processor)
        users_pid_membership, users_membership_terminated = get_users_with_payment_in_default(
            self.session)
        take_actions_for_payment_in_default_users(users_pid_membership,
                                                  users_membership_terminated,
                                                  self.processor)

        return users_pid_membership, users_membership_terminated
コード例 #5
0
ファイル: __init__.py プロジェクト: FriwiDev/pycroft
def bank_account_activities_do_match():

    # Generate form again
    matching = match_activities()

    matched = []
    FieldList = []
    for activity, user in matching.items():
        FieldList.append((str(activity.id),
                          BooleanField('{} ({}€) -> {} ({}, {})'.format(
                              activity.reference, activity.amount, user.name,
                              user.id, user.login))))

    class F(forms.ActivityMatchForm):
        pass

    for (name, field) in FieldList:
        setattr(F, name, field)
    form = F()

    # parse data
    if form.validate_on_submit():
        # look for all matches which were checked
        for activity, user in matching.items():
            if form._fields[str(
                    activity.id
            )].data is True and activity.transaction_id is None:
                debit_account = user.account
                credit_account = activity.bank_account.account
                transaction = finance.simple_transaction(
                    description=activity.reference,
                    debit_account=debit_account,
                    credit_account=credit_account,
                    amount=activity.amount,
                    author=current_user,
                    valid_on=activity.valid_on)
                activity.split = next(split for split in transaction.splits
                                      if split.account_id == credit_account.id)

                session.add(activity)

                matched.append((activity, user))

        end_payment_in_default_memberships()

        session.flush()
        session.commit()

    return render_template('finance/bank_accounts_matched.html',
                           matched=matched)
コード例 #6
0
ファイル: __init__.py プロジェクト: FriwiDev/pycroft
def transactions_create():
    form = TransactionCreateForm()
    if form.validate_on_submit():
        splits = []
        for split_form in form.splits:
            splits.append((Account.q.get(split_form.account_id.data),
                           split_form.amount.data))
        transaction = finance.complex_transaction(
            description=form.description.data,
            author=current_user,
            splits=splits,
            valid_on=form.valid_on.data,
        )

        end_payment_in_default_memberships()

        session.commit()

        return redirect(
            url_for('.transactions_show', transaction_id=transaction.id))
    return render_template('finance/transactions_create.html', form=form)
コード例 #7
0
ファイル: __init__.py プロジェクト: FriwiDev/pycroft
def handle_payments_in_default():
    finance.end_payment_in_default_memberships()

    users_pid_membership_all, users_membership_terminated_all = finance.get_users_with_payment_in_default(
    )

    form = HandlePaymentsInDefaultForm()

    # Using `query_factory` instead of `query`, because wtforms would not process an empty list as `query`
    form.new_pid_memberships.query_factory = lambda: users_pid_membership_all
    form.terminated_member_memberships.query_factory = lambda: users_membership_terminated_all

    if not form.is_submitted():
        form.new_pid_memberships.process_data(users_pid_membership_all)
        form.terminated_member_memberships.process_data(
            users_membership_terminated_all)

    if form.validate_on_submit():
        users_pid_membership = form.new_pid_memberships.data
        users_membership_terminated = form.terminated_member_memberships.data

        take_actions_for_payment_in_default_users(
            users_pid_membership=users_pid_membership,
            users_membership_terminated=users_membership_terminated,
            processor=current_user)
        session.commit()
        flash("Zahlungsrückstände behandelt.", "success")
        return redirect(url_for(".membership_fees"))

    form_args = {
        'form': form,
        'cancel_to': url_for('.membership_fees'),
        'submit_text': 'Anwenden',
        'actions_offset': 0
    }

    return render_template('generic_form.html',
                           page_title="Zahlungsrückstände behandeln",
                           form_args=form_args,
                           form=form)
コード例 #8
0
ファイル: __init__.py プロジェクト: agdsn/pycroft
def bank_account_activities_do_match():
    # Generate form again
    matching_user, matching_team = match_activities()

    field_list_user = _create_field_list(matching_user)
    field_list_team = _create_field_list(matching_team)
    form = _create_combined_form(field_list_user, field_list_team)

    matched_user = []
    matched_team = []
    if form.user.validate_on_submit() or form.team.validate_on_submit():
        # parse data
        matched_user = _apply_checked_matches(matching_user, form.user)
        matched_team = _apply_checked_matches(matching_team, form.team)
        end_payment_in_default_memberships(current_user)

        session.flush()
        session.commit()

    return render_template('finance/bank_accounts_matched.html',
                           matched_user=matched_user,
                           matched_team=matched_team)
コード例 #9
0
ファイル: __init__.py プロジェクト: agdsn/pycroft
def handle_payments_in_default():
    users_pid_membership, users_membership_terminated = finance.handle_payments_in_default()
    users_no_more_pid = finance.end_payment_in_default_memberships()

    changes = [('Neue Zugehörigkeiten in Zahlungsrückstands-Gruppe',
                users_pid_membership),
               ('Beendete Mitgliedschaften', users_membership_terminated),
               ('Beendete Zugehörigkeiten in Zahlungsrückstands-Gruppe',
                users_no_more_pid)]

    form = HandlePaymentsInDefaultForm()

    if form.is_submitted():
        session.commit()
        flash("Zahlungsrückstände behandelt.", "success")
        return redirect(url_for(".membership_fees"))
    else:
        session.rollback()

    return render_template('finance/handle_payments_in_default.html',
                           changes=changes,
                           page_title="Zahlungsrückstände behandeln",
                           form=form)
コード例 #10
0
def handle_payments_in_default():
    users_pid_membership, users_membership_terminated = finance.handle_payments_in_default(
    )
    users_no_more_pid = finance.end_payment_in_default_memberships()

    changes = [('Neue Zugehörigkeiten in Zahlungsrückstands-Gruppe',
                users_pid_membership),
               ('Beendete Mitgliedschaften', users_membership_terminated),
               ('Beendete Zugehörigkeiten in Zahlungsrückstands-Gruppe',
                users_no_more_pid)]

    form = HandlePaymentsInDefaultForm()

    if form.is_submitted():
        session.commit()
        flash("Zahlungsrückstände behandelt.", "success")
        return redirect(url_for(".membership_fees"))
    else:
        session.rollback()

    return render_template('finance/handle_payments_in_default.html',
                           changes=changes,
                           page_title="Zahlungsrückstände behandeln",
                           form=form)
コード例 #11
0
ファイル: __init__.py プロジェクト: FriwiDev/pycroft
def bank_account_activities_edit(activity_id):
    activity = BankAccountActivity.q.get(activity_id)

    if activity is None:
        flash(u"Bankbewegung mit ID {} existiert nicht!".format(activity_id),
              'error')
        abort(404)

    if activity.transaction_id is not None:
        form = BankAccountActivityReadForm(
            obj=activity, bank_account_name=activity.bank_account.name)

        if activity.transaction_id:
            flash(u"Bankbewegung ist bereits zugewiesen!".format(activity_id),
                  'warning')

        form_args = {
            'form': form,
            'show_submit': False,
            'show_cancel': False,
        }

        return render_template('generic_form.html',
                               page_title="Bankbewegung",
                               form_args=form_args,
                               form=form)

    else:
        form = BankAccountActivityEditForm(
            obj=activity,
            bank_account_name=activity.bank_account.name,
            description=activity.reference)

        if form.validate_on_submit():
            debit_account = Account.q.filter(
                Account.id == form.account_id.data).one()
            credit_account = activity.bank_account.account

            transaction = finance.simple_transaction(
                description=form.description.data,
                debit_account=debit_account,
                credit_account=credit_account,
                amount=activity.amount,
                author=current_user,
                valid_on=activity.valid_on,
                confirmed=current_user.member_of(config.treasurer_group))
            activity.split = next(split for split in transaction.splits
                                  if split.account_id == credit_account.id)
            session.add(activity)

            end_payment_in_default_memberships()

            session.commit()

            flash(u"Transaktion erfolgreich erstellt.", 'success')

            return redirect(url_for('.bank_accounts_list'))

        form_args = {
            'form': form,
            'cancel_to': url_for('.bank_accounts_list'),
            'submit_text': 'Zuweisen',
        }

        return render_template('generic_form.html',
                               page_title="Bankbewegung zuweisen",
                               form_args=form_args,
                               form=form)