2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-06-16 20:15:44 +00:00

Extract supplier purchase order selection information

This commit is contained in:
Oliver Walters
2019-06-13 20:17:36 +10:00
parent 3f809a9001
commit 3bb76060d9
4 changed files with 101 additions and 39 deletions

View File

@ -174,6 +174,10 @@ class OrderParts(AjaxView):
suppliers = {}
for supplier in self.suppliers:
supplier.order_items = []
suppliers[supplier.name] = supplier
for part in self.parts:
supplier_part_id = part.order_supplier
@ -184,11 +188,8 @@ class OrderParts(AjaxView):
if not supplier.name in suppliers:
supplier.order_items = []
supplier.selected_purchase_order = None
suppliers[supplier.name] = supplier
print("Supplier:", supplier.name)
for order in supplier.outstanding_purchase_orders():
print("order:", order.reference)
suppliers[supplier.name].order_items.append(part)
@ -281,22 +282,6 @@ class OrderParts(AjaxView):
return self.renderJsonResponse(request)
def post(self, request, *args, **kwargs):
self.request = request
form_step = request.POST.get('form_step')
if form_step == 'select_parts':
return self.handlePartSelection()
elif form_step == 'assign_orders':
return self.handleOrderAssignment()
data = {
'form_valid': False,
}
return self.renderJsonResponse(request, data=data)
def handlePartSelection(self):
""" Handle the POST action for part selection.
- Validates each part / quantity / supplier / etc
@ -307,16 +292,21 @@ class OrderParts(AjaxView):
- quantity-<pk> : The quantity to add to the order
"""
self.request = request
self.parts = []
self.suppliers = []
# Any errors for the part selection form?
errors = False
part_errors = False
supplier_errors = False
# Extract part information from the form
for item in self.request.POST:
if item.startswith('supplier-'):
if item.startswith('part-supplier-'):
pk = item.replace('supplier-', '')
pk = item.replace('part-supplier-', '')
# Check that the part actually exists
try:
@ -326,7 +316,7 @@ class OrderParts(AjaxView):
supplier_part_id = self.request.POST[item]
quantity = self.request.POST.get('quantity-' + str(pk), 0)
quantity = self.request.POST.get('part-quantity-' + str(pk), 0)
# Ensure a valid supplier has been passed
try:
@ -337,9 +327,10 @@ class OrderParts(AjaxView):
# Ensure a valid quantity is passed
try:
q = int(quantity)
# Ignore any parts for which the selected quantity is zero
if q <= 0:
quantity = int(quantity)
# Eliminate lines where the quantity is zero
if quantity == 0:
continue
except ValueError:
quantity = part.quantity_to_order
@ -350,17 +341,61 @@ class OrderParts(AjaxView):
self.parts.append(part)
if supplier_part is None:
errors = True
part_errors = True
elif quantity < 0:
part_errors = True
elif item.startswith('purchase-order-'):
# Which purchase order is selected for a given supplier?
pk = item.replace('purchase-order-', '')
print(item)
# Check that the Supplier actually exists
try:
supplier = Company.objects.get(id=pk)
except Company.DoesNotExist:
# Skip this item
continue
purchase_order_id = self.request.POST[item]
# Ensure that a valid purchase order has been passed
try:
purchase_order = PurchaseOrder.objects.get(pk=purchase_order_id)
except (PurchaseOrder.DoesNotExist, ValueError):
purchase_order = None
supplier.selected_purchase_order = purchase_order.id if purchase_order else None
self.suppliers.append(supplier)
if supplier.selected_purchase_order is None:
supplier_errors = True
form_step = request.POST.get('form_step')
# Map parts to suppliers
self.get_suppliers()
if form_step == 'select_parts':
# No errors? Proceed to PO selection form
if part_errors == False:
self.ajax_template_name = 'order/order_wizard/select_pos.html'
else:
self.ajax_template_name = 'order/order_wizard/select_parts.html'
elif form_step == 'select_purchase_orders':
self.ajax_template_name = 'order/order_wizard/select_pos.html'
data = {
'form_valid': False,
}
# No errors? Proceed to PO selection form
if errors == False:
self.ajax_template_name = 'order/order_wizard/select_pos.html'
self.get_suppliers()
return self.renderJsonResponse(self.request, data=data)