65 lines
2 KiB
Python
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
|