def _initialize_date(self):
     """Default to today, formatted as MM/DD/YYYY."""
     if hasattr(self, 'instance') and self.instance.pk:
         formatted_date = self.instance.date.strftime('%m/%d/%Y')
         self.initial['date'] = formatted_date
     else:
         self.initial['date'] = today_in_american_format()
Exemple #2
0
 def __init__(self, *args, **kwargs):
     """Set the initial date to today & change the name label."""
     super(CreditCardEntryForm, self).__init__(*args, **kwargs)
     self.fields['name'].label = "Your Name"
     if hasattr(self, 'instance') and self.instance.pk:
         formatted_date = self.instance.date.strftime('%m/%d/%Y')
         self.initial['date'] = formatted_date
         amount = self.instance.amount
         self.initial['amount'] = remove_trailing_zeroes(amount)
     else:
         self.initial['date'] = today_in_american_format()
Exemple #3
0
 def __init__(self, *args, **kwargs):
     """Set the initial date to today & change the name label."""
     super(CreditCardEntryForm, self).__init__(*args, **kwargs)
     self.fields['date'].label = "Purchase Date"
     self.fields['name'].label = "Your Name"
     if hasattr(self, 'instance') and self.instance.pk:
         formatted_date = self.instance.date.strftime('%m/%d/%Y')
         self.initial['date'] = formatted_date
         amount = self.instance.amount
         self.initial['amount'] = remove_trailing_zeroes(amount)
     else:
         self.initial['date'] = today_in_american_format()
Exemple #4
0
 def __init__(self, *args, **kwargs):
     """Set the initial date to today, remove trailing zeros."""
     super(TripEntryForm, self).__init__(*args, **kwargs)
     if hasattr(self, 'instance') and self.instance.pk:
         formatted_date = self.instance.date.strftime('%m/%d/%Y')
         self.initial['date'] = formatted_date
         trip_advance = self.instance.total_trip_advance
         self.initial['total_trip_advance'] = remove_trailing_zeroes(
             trip_advance)
         amount = self.instance.amount
         self.initial['amount'] = remove_trailing_zeroes(amount)
     else:
         self.initial['date'] = today_in_american_format()
 def __init__(self, *args, **kwargs):
     """Set the initial date to today, remove trailing zeros."""
     super(TripEntryForm, self).__init__(*args, **kwargs)
     self.fields['date'].label = "Trip Date"
     if hasattr(self, 'instance') and self.instance.pk:
         formatted_date = self.instance.date.strftime('%m/%d/%Y')
         self.initial['date'] = formatted_date
         trip_advance = self.instance.total_trip_advance
         self.initial['total_trip_advance'] = remove_trailing_zeroes(
             trip_advance)
         amount = self.instance.amount
         self.initial['amount'] = remove_trailing_zeroes(amount)
     else:
         self.initial['date'] = today_in_american_format()
Exemple #6
0
def reconcile_account(request, account_slug,
                      template_name="accounts/account_reconcile.html"):
    """Reconcile an Account against a Statement.

    This view presents a form to the user, allowing them to enter a ``Statement
    Balance`` and ``Statement Date``. Upon a ``GET`` request with valid data,
    the view will display all unreconciled :class:`Transactions<Transaction>`
    from before the entered ``Statement Date``.

    The user will then select which :class:`Transactions<Transaction>` to
    reconcile. If a balanced form is submit, the view will mark each
    marked :class:`Transaction` as reconciled. The user will then be redirected
    to the :class:`Account's<Account>` :func:`show_account_detail` view.

    :param account_slug: The slug of the :class:`Account` to reconcile.
    :type account_slug: str
    :param template_name: The template to use.
    :type template_name: str
    :returns: HTTP response containing :class:`AccountReconcileForm`,   \
            :class:`~accounts.forms.ReconcileTransactionFormSet`, the   \
            :class:`Account`, and the Reconciled Balance and Last       \
            Reconciled Date as context. Redirects if successful POST is sent.
    :rtype: HttpResponse or HttpResponseRedirect
    """
    account = get_object_or_404(Account, slug=account_slug)
    last_reconciled = account.last_reconciled
    reconciled_balance = account.reconciled_balance
    if request.method == 'POST':
        if request.POST.get('submit') == 'Get Transactions':
            account_form = AccountReconcileForm(request.POST,
                                                prefix='account',
                                                instance=account)
            if account_form.is_valid():
                stop_date = account_form.cleaned_data.get('statement_date')
                pre_statement_transactions = account.transaction_set.filter(
                    reconciled=False).filter(date__lte=stop_date)
                transaction_formset = ReconcileTransactionFormSet(
                    queryset=pre_statement_transactions)
                reconciled_balance *= (-1 if account.flip_balance() else 1)
                return render(request, template_name,
                              {'account': account,
                               'reconciled_balance': reconciled_balance,
                               'last_reconciled': last_reconciled,
                               'account_form': account_form,
                               'transaction_formset': transaction_formset})
        elif request.POST.get('submit') == 'Reconcile Transactions':
            account_form = AccountReconcileForm(request.POST,
                                                prefix='account',
                                                instance=account)
            transaction_formset = ReconcileTransactionFormSet(request.POST)
            if account_form.is_valid():
                transaction_formset.reconciled_balance = reconciled_balance
                transaction_formset.account_form = account_form
                # Flip the reconciled balance for display in case of formset
                # error
                reconciled_balance *= (-1 if account.flip_balance() else 1)
                if transaction_formset.is_valid():
                    transaction_formset.save()
                    account.last_reconciled = account_form.cleaned_data.get(
                        'statement_date')
                    account.reconciled_balance = account_form.cleaned_data.get(
                        'statement_balance')
                    account.save()
                    messages.success(request, "The account was reconciled.")
                    return HttpResponseRedirect(
                        reverse('accounts.views.show_account_detail',
                                kwargs={'account_slug': account.slug}))
                else:
                    stop_date = account_form.cleaned_data.get('statement_date')
                    pre_statement_transactions = (
                        account.transaction_set.filter(
                            reconciled=False).filter(date__lte=stop_date))
                    form_instances = set(form.instance for form in
                                         transaction_formset.forms)
                    missing_transactions = (set(pre_statement_transactions) -
                                            form_instances)
                    _ = [transaction_formset.add_form(instance) for instance in
                         missing_transactions]
        else:
            raise Http404
    else:
        reconciled_balance *= (-1 if account.flip_balance() else 1)
        if reconciled_balance == 0 and '-' in str(reconciled_balance):
            reconciled_balance *= -1
        account_form = AccountReconcileForm(
            prefix='account', instance=account,
            initial={
                'statement_date': today_in_american_format(),
                'statement_balance': remove_trailing_zeroes(reconciled_balance)
            })
    return render(request, template_name, locals())
Exemple #7
0
def reconcile_account(request,
                      account_slug,
                      template_name="accounts/account_reconcile.html"):
    """Reconcile an Account against a Statement.

    This view presents a form to the user, allowing them to enter a ``Statement
    Balance`` and ``Statement Date``. Upon a ``GET`` request with valid data,
    the view will display all unreconciled :class:`Transactions<Transaction>`
    from before the entered ``Statement Date``.

    The user will then select which :class:`Transactions<Transaction>` to
    reconcile. If a balanced form is submit, the view will mark each
    marked :class:`Transaction` as reconciled. The user will then be redirected
    to the :class:`Account's<Account>` :func:`show_account_detail` view.

    :param account_slug: The slug of the :class:`Account` to reconcile.
    :type account_slug: str
    :param template_name: The template to use.
    :type template_name: str
    :returns: HTTP response containing :class:`AccountReconcileForm`,   \
            :class:`~accounts.forms.ReconcileTransactionFormSet`, the   \
            :class:`Account`, and the Reconciled Balance and Last       \
            Reconciled Date as context. Redirects if successful POST is sent.
    :rtype: HttpResponse or HttpResponseRedirect
    """
    account = get_object_or_404(Account, slug=account_slug)
    last_reconciled = account.last_reconciled
    reconciled_balance = account.reconciled_balance
    if request.method == 'POST':
        if request.POST.get('submit') == 'Get Transactions':
            account_form = AccountReconcileForm(request.POST,
                                                prefix='account',
                                                instance=account)
            if account_form.is_valid():
                stop_date = account_form.cleaned_data.get('statement_date')
                pre_statement_transactions = account.transaction_set.filter(
                    reconciled=False).filter(date__lte=stop_date)
                transaction_formset = ReconcileTransactionFormSet(
                    queryset=pre_statement_transactions)
                reconciled_balance *= (-1 if account.flip_balance() else 1)
                return render(
                    request, template_name, {
                        'account': account,
                        'reconciled_balance': reconciled_balance,
                        'last_reconciled': last_reconciled,
                        'account_form': account_form,
                        'transaction_formset': transaction_formset
                    })
        elif request.POST.get('submit') == 'Reconcile Transactions':
            account_form = AccountReconcileForm(request.POST,
                                                prefix='account',
                                                instance=account)
            transaction_formset = ReconcileTransactionFormSet(request.POST)
            if account_form.is_valid():
                transaction_formset.reconciled_balance = reconciled_balance
                transaction_formset.account_form = account_form
                # Flip the reconciled balance for display in case of formset
                # error
                reconciled_balance *= (-1 if account.flip_balance() else 1)
                if transaction_formset.is_valid():
                    transaction_formset.save()
                    account.last_reconciled = account_form.cleaned_data.get(
                        'statement_date')
                    account.reconciled_balance = account_form.cleaned_data.get(
                        'statement_balance')
                    account.save()
                    messages.success(request, "The account was reconciled.")
                    return HttpResponseRedirect(
                        reverse('accounts.views.show_account_detail',
                                kwargs={'account_slug': account.slug}))
                else:
                    stop_date = account_form.cleaned_data.get('statement_date')
                    pre_statement_transactions = (
                        account.transaction_set.filter(
                            reconciled=False).filter(date__lte=stop_date))
                    form_instances = set(form.instance
                                         for form in transaction_formset.forms)
                    missing_transactions = (set(pre_statement_transactions) -
                                            form_instances)
                    _ = [
                        transaction_formset.add_form(instance)
                        for instance in missing_transactions
                    ]
        else:
            raise Http404
    else:
        reconciled_balance *= (-1 if account.flip_balance() else 1)
        if reconciled_balance == 0 and '-' in str(reconciled_balance):
            reconciled_balance *= -1
        account_form = AccountReconcileForm(
            prefix='account',
            instance=account,
            initial={
                'statement_date': today_in_american_format(),
                'statement_balance': remove_trailing_zeroes(reconciled_balance)
            })
    return render(request, template_name, locals())