From 3bb76060d95b385a29ebc71b6cb405c2d51e3ec7 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Thu, 13 Jun 2019 20:17:36 +1000 Subject: [PATCH] Extract supplier purchase order selection information --- .../order/order_wizard/select_parts.html | 6 +- .../order/order_wizard/select_pos.html | 26 ++++- InvenTree/order/views.py | 101 ++++++++++++------ InvenTree/static/css/inventree.css | 7 ++ 4 files changed, 101 insertions(+), 39 deletions(-) diff --git a/InvenTree/order/templates/order/order_wizard/select_parts.html b/InvenTree/order/templates/order/order_wizard/select_parts.html index fc4c5c3801..602b88bfe7 100644 --- a/InvenTree/order/templates/order/order_wizard/select_parts.html +++ b/InvenTree/order/templates/order/order_wizard/select_parts.html @@ -38,7 +38,7 @@
- {% for supplier in part.supplier_parts.all %} @@ -46,14 +46,14 @@
{% if not part.order_supplier %} -
Select a supplier for {{ part.name }} + Select a supplier for {{ part.name }} {% endif %}
- +
diff --git a/InvenTree/order/templates/order/order_wizard/select_pos.html b/InvenTree/order/templates/order/order_wizard/select_pos.html index 03094ecdda..fdd6ff3e0b 100644 --- a/InvenTree/order/templates/order/order_wizard/select_pos.html +++ b/InvenTree/order/templates/order/order_wizard/select_pos.html @@ -16,11 +16,19 @@ + {% for supplier in suppliers %} + {% for item in supplier.order_items %} + + + {% endfor %} + {% endfor %} + + {% for supplier in suppliers %} @@ -34,18 +42,30 @@
+ {% if not supplier.selected_purchase_order %} + Select a purchase order for {{ supplier.name }} + {% endif %} + {% endfor %} diff --git a/InvenTree/order/views.py b/InvenTree/order/views.py index 303e713a2d..53e8355d79 100644 --- a/InvenTree/order/views.py +++ b/InvenTree/order/views.py @@ -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- : 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) diff --git a/InvenTree/static/css/inventree.css b/InvenTree/static/css/inventree.css index 2a98814dda..3371b8d399 100644 --- a/InvenTree/static/css/inventree.css +++ b/InvenTree/static/css/inventree.css @@ -292,6 +292,13 @@ color: #A11; } +.btn-create { + padding: 3px; + padding-left: 5px; + padding-right: 5px; + color: #1A1; +} + .button-toolbar { padding-left: 0px; }
Supplier Items Purchase Order
+ +