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 | 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 ManualPaymentForm(forms.ModelForm): | ||||||
| 
 | 
 | ||||||
|     class Meta: |     class Meta: | ||||||
|  |  | ||||||
|  | @ -561,8 +561,39 @@ def credit_note(request, note_id, access_code=None): | ||||||
| 
 | 
 | ||||||
|     current_note = CreditNoteController(note) |     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 = { |     data = { | ||||||
|         "credit_note": current_note.credit_note, |         "credit_note": current_note.credit_note, | ||||||
|  |         "apply_form": apply_form, | ||||||
|  |         "refund_form": refund_form, | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     return render(request, "registrasion/credit_note.html", data) |     return render(request, "registrasion/credit_note.html", data) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Christopher Neugebauer
						Christopher Neugebauer