This repository has been archived on 2025-03-03. You can view files and clone it, but cannot push or open issues or pull requests.
facturio/invoices/forms.py

65 lines
2 KiB
Python

from crispy_forms import helper
from crispy_forms import layout
from django import forms
from django.utils.translation import gettext_lazy as _
from . import models
from subjects import models as subject_models
class InvoiceItemForm(forms.ModelForm):
class Meta:
model = models.InvoiceItem
fields = ['amount', 'amount_unit', 'description', 'price_for_amount']
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.helper = helper.FormHelper()
self.helper.form_show_labels = False
InvoiceItemFormSet = forms.inlineformset_factory(
models.Invoice,
models.InvoiceItem,
form=InvoiceItemForm,
fields=['description', 'amount', 'amount_unit', 'price_for_amount'],
extra=3,
can_delete=False,
validate_min=True,
min_num=1,
)
class CreateInvoiceForm(forms.ModelForm):
class Meta:
model = models.Invoice
fields = ['customer', 'supplier', 'due_date']
widgets = {
'due_date': forms.DateInput(attrs={'type': 'date'}),
}
def __init__(self, *args, **kwargs):
self._user = kwargs.pop('current_user', None)
super().__init__(*args, **kwargs)
if self._user.supplier:
self.fields['supplier'].queryset = subject_models.Subject.objects.filter(
id=self._user.supplier.id,
)
else:
self.fields['supplier'].queryset = subject_models.Subject.objects.none()
self.fields['customer'].queryset = self._user.customers
self.helper = helper.FormHelper()
self.helper.form_method = 'post'
self.helper.add_input(layout.Submit('submit', _('Save')))
def save(self, commit=True):
invoice = super().save(commit=False)
invoice.user = self._user
invoice.customer_data = invoice.customer.get_latest_data()
invoice.supplier_data = invoice.supplier.get_latest_data()
if commit:
invoice.save()
return invoice