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