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

61 lines
1.9 KiB
Python
Raw Normal View History

2024-08-16 22:12:49 +02:00
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