diff --git a/InvenTree/stock/forms.py b/InvenTree/stock/forms.py index 8e998460ca..dcbf722997 100644 --- a/InvenTree/stock/forms.py +++ b/InvenTree/stock/forms.py @@ -21,20 +21,6 @@ from part.models import Part from .models import StockLocation, StockItem, StockItemTracking -class AssignStockItemToCustomerForm(HelperForm): - """ - Form for manually assigning a StockItem to a Customer - - TODO: This could be a simple API driven form! - """ - - class Meta: - model = StockItem - fields = [ - 'customer', - ] - - class ReturnStockItemForm(HelperForm): """ Form for manually returning a StockItem into stock diff --git a/InvenTree/stock/templates/stock/item_base.html b/InvenTree/stock/templates/stock/item_base.html index 949c172e9e..64b45ed0c8 100644 --- a/InvenTree/stock/templates/stock/item_base.html +++ b/InvenTree/stock/templates/stock/item_base.html @@ -568,11 +568,19 @@ $("#stock-convert").click(function() { {% if item.in_stock %} $("#stock-assign-to-customer").click(function() { - launchModalForm("{% url 'stock-item-assign' item.id %}", - { - reload: true, + + inventreeGet('{% url "api-stock-detail" item.pk %}', {}, { + success: function(response) { + assignStockToCustomer( + [response], + { + success: function() { + location.reload(); + }, + } + ); } - ); + }); }); $("#stock-move").click(function() { diff --git a/InvenTree/stock/urls.py b/InvenTree/stock/urls.py index eb4aa2e65c..7f35904b51 100644 --- a/InvenTree/stock/urls.py +++ b/InvenTree/stock/urls.py @@ -23,7 +23,6 @@ stock_item_detail_urls = [ url(r'^delete/', views.StockItemDelete.as_view(), name='stock-item-delete'), url(r'^qr_code/', views.StockItemQRCode.as_view(), name='stock-item-qr'), url(r'^delete_test_data/', views.StockItemDeleteTestData.as_view(), name='stock-item-delete-test-data'), - url(r'^assign/', views.StockItemAssignToCustomer.as_view(), name='stock-item-assign'), url(r'^return/', views.StockItemReturnToStock.as_view(), name='stock-item-return'), url(r'^install/', views.StockItemInstall.as_view(), name='stock-item-install'), diff --git a/InvenTree/stock/views.py b/InvenTree/stock/views.py index 6d93ae47e0..27801f0ed6 100644 --- a/InvenTree/stock/views.py +++ b/InvenTree/stock/views.py @@ -294,39 +294,6 @@ class StockLocationQRCode(QRCodeView): return None -class StockItemAssignToCustomer(AjaxUpdateView): - """ - View for manually assigning a StockItem to a Customer - """ - - model = StockItem - ajax_form_title = _("Assign to Customer") - context_object_name = "item" - form_class = StockForms.AssignStockItemToCustomerForm - - def validate(self, item, form, **kwargs): - - customer = form.cleaned_data.get('customer', None) - - if not customer: - form.add_error('customer', _('Customer must be specified')) - - def save(self, item, form, **kwargs): - """ - Assign the stock item to the customer. - """ - - customer = form.cleaned_data.get('customer', None) - - if customer: - item = item.allocateToCustomer( - customer, - user=self.request.user - ) - - item.clearAllocations() - - class StockItemReturnToStock(AjaxUpdateView): """ View for returning a stock item (which is assigned to a customer) to stock. diff --git a/InvenTree/templates/js/translated/stock.js b/InvenTree/templates/js/translated/stock.js index d6de4fdd45..e9e97e3b87 100644 --- a/InvenTree/templates/js/translated/stock.js +++ b/InvenTree/templates/js/translated/stock.js @@ -38,6 +38,7 @@ */ /* exported + assignStockToCustomer, createNewStockItem, createStockLocation, duplicateStockItem, @@ -533,13 +534,166 @@ function exportStock(params={}) { url += `&${key}=${params[key]}`; } - console.log(url); location.href = url; } }); } +/** + * Assign multiple stock items to a customer + */ +function assignStockToCustomer(items, options={}) { + + // Generate HTML content for the form + var html = ` +
{% trans "Part" %} | +{% trans "Stock Item" %} | +{% trans "Location" %} | ++ |
---|---|---|---|
${thumbnail} ${part.full_name} | +
+
+ ${quantity}
+
+
+ |
+ ${location} | +${buttons} | +