mirror of
				https://gitlab.crans.org/bde/nk20
				synced 2025-11-03 17:08:47 +01:00 
			
		
		
		
	Use custom inputs for date picker and amounts
This commit is contained in:
		@@ -7,6 +7,7 @@ from crispy_forms.helper import FormHelper
 | 
			
		||||
from crispy_forms.layout import Submit
 | 
			
		||||
from django import forms
 | 
			
		||||
from django.utils.translation import gettext_lazy as _
 | 
			
		||||
from note_kfet.inputs import DatePickerInput, AmountInput
 | 
			
		||||
 | 
			
		||||
from .models import Invoice, Product, Remittance, SpecialTransactionProxy
 | 
			
		||||
 | 
			
		||||
@@ -19,7 +20,7 @@ class InvoiceForm(forms.ModelForm):
 | 
			
		||||
    # Django forms don't support date fields. We have to add it manually
 | 
			
		||||
    date = forms.DateField(
 | 
			
		||||
        initial=datetime.date.today,
 | 
			
		||||
        widget=forms.TextInput(attrs={'type': 'date'})
 | 
			
		||||
        widget=DatePickerInput()
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    def clean_date(self):
 | 
			
		||||
@@ -30,12 +31,21 @@ class InvoiceForm(forms.ModelForm):
 | 
			
		||||
        exclude = ('bde', )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ProductForm(forms.ModelForm):
 | 
			
		||||
    class Meta:
 | 
			
		||||
        model = Product
 | 
			
		||||
        fields = '__all__'
 | 
			
		||||
        widgets = {
 | 
			
		||||
            "amount": AmountInput()
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Add a subform per product in the invoice form, and manage correctly the link between the invoice and
 | 
			
		||||
# its products. The FormSet will search automatically the ForeignKey in the Product model.
 | 
			
		||||
ProductFormSet = forms.inlineformset_factory(
 | 
			
		||||
    Invoice,
 | 
			
		||||
    Product,
 | 
			
		||||
    fields='__all__',
 | 
			
		||||
    form=ProductForm,
 | 
			
		||||
    extra=1,
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -50,18 +50,8 @@ class InvoiceCreateView(LoginRequiredMixin, CreateView):
 | 
			
		||||
    def form_valid(self, form):
 | 
			
		||||
        ret = super().form_valid(form)
 | 
			
		||||
 | 
			
		||||
        kwargs = {}
 | 
			
		||||
 | 
			
		||||
        # The user type amounts in cents. We convert it in euros.
 | 
			
		||||
        for key in self.request.POST:
 | 
			
		||||
            value = self.request.POST[key]
 | 
			
		||||
            if key.endswith("amount") and value:
 | 
			
		||||
                kwargs[key] = str(int(100 * float(value)))
 | 
			
		||||
            elif value:
 | 
			
		||||
                kwargs[key] = value
 | 
			
		||||
 | 
			
		||||
        # For each product, we save it
 | 
			
		||||
        formset = ProductFormSet(kwargs, instance=form.instance)
 | 
			
		||||
        formset = ProductFormSet(self.request.POST, instance=form.instance)
 | 
			
		||||
        if formset.is_valid():
 | 
			
		||||
            for f in formset:
 | 
			
		||||
                # We don't save the product if the designation is not entered, ie. if the line is empty
 | 
			
		||||
@@ -112,16 +102,7 @@ class InvoiceUpdateView(LoginRequiredMixin, UpdateView):
 | 
			
		||||
    def form_valid(self, form):
 | 
			
		||||
        ret = super().form_valid(form)
 | 
			
		||||
 | 
			
		||||
        kwargs = {}
 | 
			
		||||
        # The user type amounts in cents. We convert it in euros.
 | 
			
		||||
        for key in self.request.POST:
 | 
			
		||||
            value = self.request.POST[key]
 | 
			
		||||
            if key.endswith("amount") and value:
 | 
			
		||||
                kwargs[key] = str(int(100 * float(value)))
 | 
			
		||||
            elif value:
 | 
			
		||||
                kwargs[key] = value
 | 
			
		||||
 | 
			
		||||
        formset = ProductFormSet(kwargs, instance=form.instance)
 | 
			
		||||
        formset = ProductFormSet(self.request.POST, instance=form.instance)
 | 
			
		||||
        saved = []
 | 
			
		||||
        # For each product, we save it
 | 
			
		||||
        if formset.is_valid():
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user