Extract stock items from POST and return to form

This commit is contained in:
Oliver Walters 2019-06-02 10:25:19 +10:00
parent e278bdbb90
commit c228a4998c
2 changed files with 62 additions and 7 deletions

View File

@ -19,7 +19,7 @@
{{ item.part.full_name }} <small><i>{{ item.part.description }}</i></small></td> {{ item.part.full_name }} <small><i>{{ item.part.description }}</i></small></td>
<td>{{ item.location.pathstring }}</td> <td>{{ item.location.pathstring }}</td>
<td> <td>
<input class='numberinput' min='0' max='{{ item.quantity }}' value='{{ item.quantity }}' type='number' name='stock-id-{{ item.id }}' id='stock-id-{{ item.id }}'/> <input class='numberinput' min='0' max='{{ item.quantity }}' value='{{ item.new_quantity }}' type='number' name='stock-id-{{ item.id }}' id='stock-id-{{ item.id }}'/>
</td> </td>
<td><button class='btn btn-default btn-remove' id='del-{{ item.id }}' title='Remove item' type='button'><span row='stock-row-{{ item.id }}' onclick='removeStockRow()' class='glyphicon glyphicon-small glyphicon-remove'></span></button></td> <td><button class='btn btn-default btn-remove' id='del-{{ item.id }}' title='Remove item' type='button'><span row='stock-row-{{ item.id }}' onclick='removeStockRow()' class='glyphicon glyphicon-small glyphicon-remove'></span></button></td>
</tr> </tr>

View File

@ -14,6 +14,8 @@ from InvenTree.views import AjaxView
from InvenTree.views import AjaxUpdateView, AjaxDeleteView, AjaxCreateView from InvenTree.views import AjaxUpdateView, AjaxDeleteView, AjaxCreateView
from InvenTree.views import QRCodeView from InvenTree.views import QRCodeView
from InvenTree.helpers import str2bool
from part.models import Part from part.models import Part
from .models import StockItem, StockLocation, StockItemTracking from .models import StockItem, StockLocation, StockItemTracking
@ -134,7 +136,7 @@ class StockItemMoveMultiple(AjaxView, FormMixin):
form_class = MoveMultipleStockItemsForm form_class = MoveMultipleStockItemsForm
stock_items = [] stock_items = []
def get_items(self, item_list): def get_GET_items(self):
""" Return list of stock items initally requested using GET """ """ Return list of stock items initally requested using GET """
# Start with all 'in stock' items # Start with all 'in stock' items
@ -144,8 +146,48 @@ class StockItemMoveMultiple(AjaxView, FormMixin):
if 'stock[]' in self.request.GET: if 'stock[]' in self.request.GET:
items = items.filter(id__in=self.request.GET.getlist('stock[]')) 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 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): def _get_form_kwargs(self):
args = super().get_form_kwargs() args = super().get_form_kwargs()
@ -168,7 +210,7 @@ class StockItemMoveMultiple(AjaxView, FormMixin):
self.request = request self.request = request
# Save list of items! # 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()) return self.renderJsonResponse(request, self.get_form())
@ -176,18 +218,31 @@ class StockItemMoveMultiple(AjaxView, FormMixin):
form = self.get_form() 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() 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 = { data = {
'form_valid': False, 'form_valid': False,
} }
#form.errors['note'] = ['hello world']
return self.renderJsonResponse(request, form, data=data) return self.renderJsonResponse(request, form, data=data)