mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
Extract stock items from POST and return to form
This commit is contained in:
parent
e278bdbb90
commit
c228a4998c
@ -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>
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user