Ejemplo n.º 1
0
    def test_payment_in_default_recover(self):
        user = self.create_user_from1y()

        assert user.account.balance == 0.00, "Initial user account balance not zero"
        assert user.account.in_default_days == 0
        assert user.has_property("member"), "User is not a member"

        # Test fee with payment_in_default group action
        post_transactions_for_membership_fee(self.membership_fee_pid_state,
                                             self.processor)
        session.session.refresh(user.account)

        assert user.account.balance == self.membership_fee_pid_state.regular_fee, "User balance incorrect"

        self.handle_payment_in_default_users()

        self.session.refresh(user)
        assert user.has_property("member"), "User is not a member"
        assert user.has_property(
            "payment_in_default"), "User has no payment_in_default property"

        # this transaction…
        simple_transaction(description="deposit",
                           debit_account=user.account,
                           credit_account=AccountFactory(),
                           amount=self.membership_fee_pid_state.regular_fee,
                           author=self.processor)
        # …should unblock the user now
        self.handle_payment_in_default_users()

        self.session.refresh(user)
        assert user.has_property("member"), "User is not a member"
        assert not user.has_property(
            "payment_in_default"), "User has payment_in_default property"
Ejemplo n.º 2
0
 def test_0030_simple_transaction(self):
     try:
         simple_transaction(u"transaction", self.fee_account,
                            self.user_account, Decimal(90), self.author)
     except Exception:
         self.fail()
     Transaction.q.delete()
     session.session.commit()
Ejemplo n.º 3
0
 def test_0030_simple_transaction(self):
     try:
         simple_transaction(
             u"transaction", self.asset_account, self.liability_account,
             9000, self.author
         )
     except Exception:
         self.fail()
     Transaction.q.delete()
Ejemplo n.º 4
0
 def test_0030_simple_transaction(self):
     try:
         simple_transaction(
             u"transaction", self.fee_account, self.user_account,
             Decimal(90), self.author
         )
     except Exception:
         self.fail()
     Transaction.q.delete()
     session.session.commit()
Ejemplo n.º 5
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)
Ejemplo n.º 6
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)
Ejemplo n.º 7
0
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)
Ejemplo n.º 8
0
    def test_payment_in_default_recover(self):
        user = self.create_user_from1y()

        self.assertEqual(user.account.balance, 0.00,
                         "Initial user account balance not zero")

        self.assertEqual(user.account.in_default_days, 0)

        self.assertTrue(user.has_property("member"), "User is not a member")

        # Test fee with payment_in_default group action
        post_transactions_for_membership_fee(self.membership_fee_pid_state,
                                             self.processor)

        session.session.refresh(user.account)

        self.assertEqual(user.account.balance,
                         self.membership_fee_pid_state.regular_fee,
                         "User balance incorrect")

        self.handle_payment_in_default_users()

        self.assertTrue(user.has_property("member"), "User is not a member")
        self.assertTrue(user.has_property("payment_in_default"),
                        "User has no payment_in_default property")

        simple_transaction(description="deposit",
                           debit_account=user.account,
                           credit_account=AccountFactory(),
                           amount=self.membership_fee_pid_state.regular_fee,
                           author=self.processor)

        self.handle_payment_in_default_users()

        self.assertTrue(user.has_property("member"), "User is not a member")
        self.assertFalse(user.has_property("payment_in_default"),
                         "User has payment_in_default property")
Ejemplo n.º 9
0
def _apply_checked_matches(matching, subform):
    # look for all matches which were checked
    matched = []
    for activity, entity in matching.items():
        if subform[str(activity.id)].data and activity.transaction_id is None:
            debit_account = entity if type(
                entity) is Account else entity.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, entity))

    return matched
Ejemplo n.º 10
0
def journals_entries_edit(journal_id, entry_id):
    entry = JournalEntry.q.get(entry_id)
    form = JournalEntryEditForm(obj=entry, journal_name=entry.journal.name)

    if form.validate():
        debit_account = entry.journal.finance_account
        credit_account = FinanceAccount.q.filter(
            FinanceAccount.id == form.finance_account_id.data
        ).one()
        entry.transaction = finance.simple_transaction(
            description=entry.description, debit_account=debit_account,
            credit_account=credit_account, amount=entry.amount,
            author=current_user, valid_date=entry.valid_date)
        entry.description = form.description.data
        session.add(entry)
        session.commit()

        return redirect(url_for('.journals'))

    return render_template(
        'finance/journals_entries_edit.html',
        entry=entry, form=form
    )
Ejemplo n.º 11
0
def journals_entries_edit(journal_id, entry_id):
    entry = JournalEntry.q.get(entry_id)
    form = JournalEntryEditForm(obj=entry, journal_name=entry.journal.name)

    if form.validate():
        debit_account = entry.journal.finance_account
        credit_account = FinanceAccount.q.filter(
            FinanceAccount.id == form.finance_account_id.data).one()
        entry.transaction = finance.simple_transaction(
            description=entry.description,
            debit_account=debit_account,
            credit_account=credit_account,
            amount=entry.amount,
            author=current_user,
            valid_date=entry.valid_date)
        entry.description = form.description.data
        session.add(entry)
        session.commit()

        return redirect(url_for('.journals'))

    return render_template('finance/journals_entries_edit.html',
                           entry=entry,
                           form=form)
Ejemplo n.º 12
0
 def test_0030_transferred_value(self):
     amount = Decimal(90)
     today = session.utcnow().date()
     simple_transaction("transaction", self.fee_account, self.user_account,
                        amount, self.author, today - timedelta(1))
     simple_transaction("transaction", self.fee_account, self.user_account,
                        amount, self.author, today)
     simple_transaction("transaction", self.fee_account, self.user_account,
                        amount, self.author, today + timedelta(1))
     assert (transferred_amount(self.fee_account, self.user_account,
                                single(today)) == amount)
     assert (transferred_amount(self.fee_account, self.user_account,
                                closedopen(today, None)) == 2 * amount)
     assert (transferred_amount(self.fee_account, self.user_account,
                                openclosed(None, today)) == 2 * amount)
     assert (transferred_amount(self.fee_account,
                                self.user_account) == 3 * amount)
     Transaction.q.delete()
     session.session.commit()
Ejemplo n.º 13
0
 def test_0030_transferred_value(self):
     amount = Decimal(90)
     today = session.utcnow().date()
     simple_transaction(
         u"transaction", self.fee_account, self.user_account,
         amount, self.author, today - timedelta(1)
     )
     simple_transaction(
         u"transaction", self.fee_account, self.user_account,
         amount, self.author, today
     )
     simple_transaction(
         u"transaction", self.fee_account, self.user_account,
         amount, self.author, today + timedelta(1)
     )
     self.assertEqual(
         transferred_amount(
             self.fee_account, self.user_account, single(today)
         ),
         amount
     )
     self.assertEqual(
         transferred_amount(
             self.fee_account, self.user_account, closedopen(today, None)
         ),
         2*amount
     )
     self.assertEqual(
         transferred_amount(
             self.fee_account, self.user_account, openclosed(None, today)
         ),
         2*amount
     )
     self.assertEqual(
         transferred_amount(
             self.fee_account, self.user_account
         ),
         3*amount
     )
     Transaction.q.delete()
     session.session.commit()
Ejemplo n.º 14
0
 def test_0030_transferred_value(self):
     amount = 9000
     today = date.today()
     simple_transaction(
         u"transaction", self.asset_account, self.liability_account,
         amount, self.author, today - timedelta(1)
     )
     simple_transaction(
         u"transaction", self.asset_account, self.liability_account,
         amount, self.author, today
     )
     simple_transaction(
         u"transaction", self.asset_account, self.liability_account,
         amount, self.author, today + timedelta(1)
     )
     self.assertEqual(
         transferred_amount(
             self.asset_account, self.liability_account, today, today
         ),
         amount
     )
     self.assertEqual(
         transferred_amount(
             self.asset_account, self.liability_account, today, None
         ),
         2*amount
     )
     self.assertEqual(
         transferred_amount(
             self.asset_account, self.liability_account, None, today
         ),
         2*amount
     )
     self.assertEqual(
         transferred_amount(
             self.asset_account, self.liability_account, None, None
         ),
         3*amount
     )
     Transaction.q.delete()
Ejemplo n.º 15
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)

    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)