diff --git a/InvenTree/stock/templates/stock/stock_move.html b/InvenTree/stock/templates/stock/stock_move.html index 0aa2ddb9bb..427ff2f058 100644 --- a/InvenTree/stock/templates/stock/stock_move.html +++ b/InvenTree/stock/templates/stock/stock_move.html @@ -19,7 +19,7 @@ {{ item.part.full_name }} {{ item.part.description }} {{ item.location.pathstring }} - + diff --git a/InvenTree/stock/views.py b/InvenTree/stock/views.py index fdecc6c563..60b0f3ab47 100644 --- a/InvenTree/stock/views.py +++ b/InvenTree/stock/views.py @@ -14,6 +14,8 @@ from InvenTree.views import AjaxView from InvenTree.views import AjaxUpdateView, AjaxDeleteView, AjaxCreateView from InvenTree.views import QRCodeView +from InvenTree.helpers import str2bool + from part.models import Part from .models import StockItem, StockLocation, StockItemTracking @@ -134,7 +136,7 @@ class StockItemMoveMultiple(AjaxView, FormMixin): form_class = MoveMultipleStockItemsForm stock_items = [] - def get_items(self, item_list): + def get_GET_items(self): """ Return list of stock items initally requested using GET """ # Start with all 'in stock' items @@ -144,8 +146,48 @@ class StockItemMoveMultiple(AjaxView, FormMixin): if 'stock[]' in self.request.GET: items = items.filter(id__in=self.request.GET.getlist('stock[]')) + # Client provides a PART reference + elif 'part' in self.request.GET: + items = items.filter(part=self.request.GET.get('part')) + + # Client provides a LOCATION reference + elif 'location' in self.request.GET: + items = items.filter(location=self.request.GET.get('location')) + + # Client provides a single StockItem lookup + elif 'item' in self.request.GET: + items = [StockItem.objects.get(id=self.request.GET.get('item'))] + + # Unsupported query + else: + items = None + + for item in items: + item.new_quantity = item.quantity + return items + def get_POST_items(self): + """ Return list of stock items sent back by client on a POST request """ + + items = [] + + for item in self.request.POST: + if item.startswith('stock-id-'): + + pk = item.replace('stock-id-', '') + q = self.request.POST[item] + + try: + stock_item = StockItem.objects.get(pk=pk) + except StockItem.DoesNotExist: + continue + + stock_item.new_quantity = q + + items.append(stock_item) + + return items def _get_form_kwargs(self): args = super().get_form_kwargs() @@ -168,7 +210,7 @@ class StockItemMoveMultiple(AjaxView, FormMixin): self.request = request # Save list of items! - self.stock_items = self.get_items(request.GET.getlist('stock[]')) + self.stock_items = self.get_GET_items() return self.renderJsonResponse(request, self.get_form()) @@ -176,18 +218,31 @@ class StockItemMoveMultiple(AjaxView, FormMixin): form = self.get_form() - print(request.POST) + self.request = request + + # Update list of stock items + self.stock_items = self.get_POST_items() valid = form.is_valid() + + for item in self.stock_items: + try: + q = int(item.new_quantity) + except ValueError: + item.error = 'Must enter integer value' + valid = False + continue - print("Valid:", valid) + confirmed = str2bool(request.POST.get('confirm')) + + if not confirmed: + valid = False + form.errors['confirm'] = ['Confirm stock adjustment'] data = { 'form_valid': False, } - #form.errors['note'] = ['hello world'] - return self.renderJsonResponse(request, form, data=data)