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()
def _assign_balance_delta_to_debit_or_credit_field(self): """ If the form's :class:`~.models.Transaction` instance has a `balance_delta` set either the `credit` or `debit` field to it's absolute value, depending on if the balance_delta is positive or negative, respectively. """ balance_delta = self.instance.balance_delta if balance_delta is not None: if balance_delta < 0: self.initial['debit'] = remove_trailing_zeroes( abs(balance_delta)) else: self.initial['credit'] = remove_trailing_zeroes(balance_delta)
def _assign_balance_delta_to_debit_or_credit_field(self): """ If the form's :class:`~.models.Transaction` instance has a `balance_delta` set either the `credit` or `debit` field to it's absolute value, depending on if the balance_delta is positive or negative, respectively. """ balance_delta = self.instance.balance_delta if balance_delta is not None: if balance_delta < 0: self.initial['debit'] = remove_trailing_zeroes( abs(balance_delta) ) else: self.initial['credit'] = remove_trailing_zeroes(balance_delta)
def _initialize_account_and_amount_from_main_transaction(self): """Use the main_transaction's account and amount.""" if hasattr(self.instance, 'main_transaction'): main_transaction = self.instance.main_transaction if main_transaction is not None: self.initial['account'] = main_transaction.account self.initial['amount'] = remove_trailing_zeroes( abs(main_transaction.balance_delta))
def _initialize_account_and_amount_from_main_transaction(self): """Use the main_transaction's account and amount.""" if hasattr(self.instance, 'main_transaction'): main_transaction = self.instance.main_transaction if main_transaction is not None: self.initial['account'] = main_transaction.account self.initial['amount'] = remove_trailing_zeroes( abs(main_transaction.balance_delta) )
def _assign_balance_delta_to_amount_field(self): """ If the instance has a balance_delta, set the amount field to it's absolute value. """ balance_delta = self.instance.balance_delta if balance_delta is not None: self.initial['amount'] = remove_trailing_zeroes(abs(balance_delta))
def _assign_balance_delta_to_amount_field(self): """ If the instance has a balance_delta, set the amount field to it's absolute value. """ balance_delta = self.instance.balance_delta if balance_delta is not None: self.initial['amount'] = remove_trailing_zeroes( abs(balance_delta) )
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()
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()
def __init__(self, *args, **kwargs): super(CreditCardTransactionForm, self).__init__(*args, **kwargs) _set_minimal_queryset_for_account(self, 'account') amount = self.instance.amount if amount is not None: self.initial['amount'] = remove_trailing_zeroes(amount)
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())
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())
def __init__(self, *args, **kwargs): super(BaseTripTransactionForm, self).__init__(*args, **kwargs) _set_minimal_queryset_for_account(self, 'account') amount = self.instance.amount if amount is not None: self.initial['amount'] = remove_trailing_zeroes(amount)