Adds the ability to apply or refund a credit note.
This commit is contained in:
parent
680ce689f6
commit
7e8d044a9f
2 changed files with 65 additions and 0 deletions
|
@ -3,6 +3,40 @@ import models as rego
|
|||
from django import forms
|
||||
|
||||
|
||||
class ApplyCreditNoteForm(forms.Form):
|
||||
|
||||
def __init__(self, user, *a, **k):
|
||||
''' User: The user whose invoices should be made available as
|
||||
choices. '''
|
||||
self.user = user
|
||||
super(ApplyCreditNoteForm, self).__init__(*a, **k)
|
||||
|
||||
self.fields["invoice"].choices = self._unpaid_invoices_for_user
|
||||
|
||||
def _unpaid_invoices_for_user(self):
|
||||
invoices = rego.Invoice.objects.filter(
|
||||
status=rego.Invoice.STATUS_UNPAID,
|
||||
user=self.user,
|
||||
)
|
||||
|
||||
return [
|
||||
(invoice.id, "Invoice %(id)d - $%(value)d" % invoice.__dict__)
|
||||
for invoice in invoices
|
||||
]
|
||||
|
||||
invoice = forms.ChoiceField(
|
||||
#choices=_unpaid_invoices_for_user,
|
||||
required=True,
|
||||
)
|
||||
|
||||
|
||||
class ManualCreditNoteRefundForm(forms.ModelForm):
|
||||
|
||||
class Meta:
|
||||
model = rego.ManualCreditNoteRefund
|
||||
fields = ["reference"]
|
||||
|
||||
|
||||
class ManualPaymentForm(forms.ModelForm):
|
||||
|
||||
class Meta:
|
||||
|
|
|
@ -561,8 +561,39 @@ def credit_note(request, note_id, access_code=None):
|
|||
|
||||
current_note = CreditNoteController(note)
|
||||
|
||||
apply_form = forms.ApplyCreditNoteForm(
|
||||
note.invoice.user,
|
||||
request.POST or None,
|
||||
prefix="apply_note"
|
||||
)
|
||||
|
||||
refund_form = forms.ManualCreditNoteRefundForm(
|
||||
request.POST or None,
|
||||
prefix="refund_note"
|
||||
)
|
||||
|
||||
if request.POST and apply_form.is_valid():
|
||||
inv_id = apply_form.cleaned_data["invoice"]
|
||||
invoice = rego.Invoice.objects.get(pk=inv_id)
|
||||
current_note.apply_to_invoice(invoice)
|
||||
messages.success(request,
|
||||
"Applied credit note %d to invoice." % note_id
|
||||
)
|
||||
return redirect("invoice", invoice.id)
|
||||
|
||||
elif request.POST and refund_form.is_valid():
|
||||
refund_form.instance.entered_by = request.user
|
||||
refund_form.instance.parent = note
|
||||
refund_form.save()
|
||||
messages.success(request,
|
||||
"Applied manual refund to credit note."
|
||||
)
|
||||
return redirect("invoice", invoice.id)
|
||||
|
||||
data = {
|
||||
"credit_note": current_note.credit_note,
|
||||
"apply_form": apply_form,
|
||||
"refund_form": refund_form,
|
||||
}
|
||||
|
||||
return render(request, "registrasion/credit_note.html", data)
|
||||
|
|
Loading…
Reference in a new issue