diff --git a/InvenTree/order/forms.py b/InvenTree/order/forms.py index 0a015e2b66..8a1b8ce8ba 100644 --- a/InvenTree/order/forms.py +++ b/InvenTree/order/forms.py @@ -213,7 +213,7 @@ class EditSalesOrderLineItemForm(HelperForm): ] -class AllocateSerialsToSalesOrderForm(HelperForm): +class AllocateSerialsToSalesOrderForm(forms.Form): """ Form for assigning stock to a sales order, by serial number lookup @@ -234,7 +234,6 @@ class AllocateSerialsToSalesOrderForm(HelperForm): ) class Meta: - model = SalesOrderAllocation fields = [ 'line', diff --git a/InvenTree/order/views.py b/InvenTree/order/views.py index eed4868557..53e7e34d80 100644 --- a/InvenTree/order/views.py +++ b/InvenTree/order/views.py @@ -10,6 +10,7 @@ from django.shortcuts import get_object_or_404 from django.urls import reverse from django.utils.translation import ugettext as _ from django.views.generic import DetailView, ListView, UpdateView +from django.views.generic.edit import FormMixin from django.forms import HiddenInput import logging @@ -1291,7 +1292,7 @@ class SOLineItemDelete(AjaxDeleteView): } -class SalesOrderAssignSerials(AjaxCreateView): +class SalesOrderAssignSerials(AjaxView, FormMixin): """ View for assigning stock items to a sales order, by serial number lookup. @@ -1327,6 +1328,40 @@ class SalesOrderAssignSerials(AjaxCreateView): return initials + def post(self, request, *args, **kwargs): + + self.form = self.get_form() + + # Validate the form + self.form.is_valid() + self.validate() + + valid = self.form.is_valid() + + data = { + 'form_valid': valid, + 'form_errors': self.form.errors.as_json(), + 'non_field_errors': self.form.non_field_errors().as_json(), + } + + return self.renderJsonResponse(request, self.get_form(), data) + + def validate(self): + + data = self.form.cleaned_data + + # Extract hidden fields from posted data + self.line = data.get('line', None) + self.part = data.get('part', None) + + if not self.line: + self.form.add_error('line', _('Select line item')) + + if not self.part: + self.form.add_error('part', _('Select part')) + + self.form.add_error(None, 'abcde') + def get_form(self): form = super().get_form() @@ -1334,13 +1369,6 @@ class SalesOrderAssignSerials(AjaxCreateView): if self.line is not None: form.fields['line'].widget = HiddenInput() - # Hide the 'part' field if value provided - try: - print(form['part']) - # self.part = Part.objects.get(form['part'].value()) - except (ValueError, Part.DoesNotExist): - self.part = None - if self.part is not None: form.fields['part'].widget = HiddenInput()