2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-06-16 12:05:53 +00:00

First pass at 'order parts' fom

- Select parts in modal form window
This commit is contained in:
Oliver Walters
2019-06-11 23:37:32 +10:00
parent 8e82488f70
commit bc05146e72
8 changed files with 171 additions and 4 deletions

View File

@ -7,14 +7,17 @@ from __future__ import unicode_literals
from django.utils.translation import ugettext as _
from django.views.generic import DetailView, ListView
from django.views.generic.edit import FormMixin
from django.forms import HiddenInput
from .models import PurchaseOrder, PurchaseOrderLineItem
from company.models import Company, SupplierPart
from stock.models import StockItem
from part.models import Part
from . import forms as order_forms
from InvenTree.views import AjaxCreateView, AjaxUpdateView
from InvenTree.views import AjaxView, AjaxCreateView, AjaxUpdateView
from InvenTree.helpers import str2bool
from InvenTree.status_codes import OrderStatus
@ -135,6 +138,96 @@ class PurchaseOrderIssue(AjaxUpdateView):
return self.renderJsonResponse(request, form, data)
class OrderParts(AjaxView):
""" View for adding various SupplierPart items to a Purchase Order.
SupplierParts can be selected from a variety of 'sources':
- ?supplier_parts[]= -> Direct list of SupplierPart objects
- ?parts[]= -> List of base Part objects (user must then select supplier parts)
- ?stock[]= -> List of StockItem objects (user must select supplier parts)
- ?build= -> A Build object (user must select parts, then supplier parts)
"""
ajax_form_title = "Order Parts"
ajax_template_name = 'order/order_select_parts.html'
# List of Parts we wish to order
parts = []
def get_context_data(self):
ctx = {}
print("Getting context data")
ctx['parts'] = self.get_parts()
return ctx
def get_parts(self):
""" Determine which parts the user wishes to order.
This is performed on the initial GET request.
"""
self.parts = []
part_ids = set()
# User has passed a list of stock items
if 'stock[]' in self.request.GET:
stock_id_list = self.request.GET.getlist('stock[]')
print("Looking up parts from stock items:")
print(stock_id_list)
""" Get a list of all the parts associated with the stock items.
- Base part must be purchaseable.
- Return a set of corresponding Part IDs
"""
stock_items = StockItem.objects.filter(
part__purchaseable=True,
id__in=stock_id_list)
for item in stock_items:
part_ids.add(item.part.id)
print("Parts:", part_ids)
# Create the list of parts
for id in part_ids:
try:
part = Part.objects.get(id=id)
except Part.DoesNotExist:
continue
self.parts.append(part)
return self.parts
def get(self, request, *args, **kwargs):
self.request = request
print("GET HERE")
print(request.GET)
self.get_parts()
return self.renderJsonResponse(request)
def post(self, request, *args, **kwargs):
self.request = request
print("POST here")
return self.renderJsonResponse(request)
class POLineItemCreate(AjaxCreateView):
""" AJAX view for creating a new PurchaseOrderLineItem object
"""