diff --git a/InvenTree/InvenTree/static/script/inventree/stock.js b/InvenTree/InvenTree/static/script/inventree/stock.js index 44a5aeaff4..4fffc961c7 100644 --- a/InvenTree/InvenTree/static/script/inventree/stock.js +++ b/InvenTree/InvenTree/static/script/inventree/stock.js @@ -310,6 +310,18 @@ function loadStockTable(table, options) { }, }); }); + + $("#multi-item-delete").click(function() { + var selections = $("#stock-table").bootstrapTable("getSelections"); + + var stock = []; + + selections.forEach(function(item) { + stock.push(item.pk); + }); + + stockAdjustment('delete'); + }); } diff --git a/InvenTree/locale/de/LC_MESSAGES/django.po b/InvenTree/locale/de/LC_MESSAGES/django.po index de659e0f1f..5d59143a69 100644 --- a/InvenTree/locale/de/LC_MESSAGES/django.po +++ b/InvenTree/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-27 00:12+0000\n" +"POT-Creation-Date: 2019-11-16 09:28+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -149,7 +149,7 @@ msgstr "" msgid "Allocated quantity ({n}) must not exceed available quantity ({q})" msgstr "" -#: build/views.py:289 stock/views.py:834 +#: build/views.py:289 stock/views.py:859 #, python-brace-format msgid "The following serial numbers already exist: ({sn})" msgstr "" @@ -190,6 +190,10 @@ msgstr "" msgid "Use this currency as the base currency" msgstr "" +#: company/templates/company/partdelete.html:5 +msgid "Are you sure you want to delete the following Supplier Parts?" +msgstr "" + #: order/forms.py:21 msgid "Place order" msgstr "" @@ -247,7 +251,7 @@ msgstr "" msgid "Line item notes" msgstr "" -#: order/models.py:275 +#: order/models.py:275 stock/templates/stock/item.html:106 msgid "Purchase Order" msgstr "" @@ -409,7 +413,7 @@ msgstr "" msgid "Variant Of" msgstr "" -#: part/templates/part/detail.html:49 +#: part/templates/part/detail.html:49 stock/templates/stock/item.html:118 msgid "URL" msgstr "" @@ -497,7 +501,7 @@ msgstr "" msgid "Part cannot be sold to customers" msgstr "" -#: part/templates/part/detail.html:151 +#: part/templates/part/detail.html:151 stock/templates/stock/item.html:150 msgid "Notes" msgstr "" @@ -585,6 +589,10 @@ msgstr "" msgid "Item cannot belong to itself" msgstr "" +#: stock/models.py:360 +msgid "Stock Item Notes" +msgstr "" + #: stock/models.py:434 msgid "Quantity must be integer" msgstr "" @@ -615,6 +623,79 @@ msgstr "" msgid "Serialized {n} items" msgstr "" +#: stock/templates/stock/item.html:8 +msgid "Stock Item Details" +msgstr "" + +#: stock/templates/stock/item.html:51 +msgid "" +"This stock item is serialized - it has a unique serial number and the " +"quantity cannot be adjusted." +msgstr "" + +#: stock/templates/stock/item.html:55 +msgid "" +"This stock item will be automatically deleted when all stock is depleted." +msgstr "" + +#: stock/templates/stock/item.html:72 +msgid "Belongs To" +msgstr "" + +#: stock/templates/stock/item.html:77 +#: stock/templates/stock/stock_adjust.html:16 +msgid "Location" +msgstr "" + +#: stock/templates/stock/item.html:83 +msgid "Serial Number" +msgstr "" + +#: stock/templates/stock/item.html:88 +#: stock/templates/stock/stock_adjust.html:20 +msgid "Quantity" +msgstr "" + +#: stock/templates/stock/item.html:94 +msgid "Batch" +msgstr "" + +#: stock/templates/stock/item.html:100 +msgid "Build" +msgstr "" + +#: stock/templates/stock/item.html:112 +msgid "Customer" +msgstr "" + +#: stock/templates/stock/item.html:124 +msgid "Supplier" +msgstr "" + +#: stock/templates/stock/item.html:128 +msgid "Supplier Part" +msgstr "" + +#: stock/templates/stock/item.html:133 +msgid "Last Updated" +msgstr "" + +#: stock/templates/stock/item.html:137 +msgid "Last Stocktake" +msgstr "" + +#: stock/templates/stock/item.html:141 +msgid "No stocktake performed" +msgstr "" + +#: stock/templates/stock/item.html:145 +msgid "Status" +msgstr "" + +#: stock/templates/stock/item.html:159 +msgid "Stock Tracking Information" +msgstr "" + #: stock/templates/stock/location.html:37 msgid "Location Details" msgstr "" @@ -644,51 +725,80 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/views.py:399 -msgid "Must enter integer value" +#: stock/templates/stock/stock_adjust.html:15 +msgid "Stock Item" +msgstr "" + +#: stock/views.py:373 +msgid "Move Stock Items" +msgstr "" + +#: stock/views.py:374 +msgid "Count Stock Items" +msgstr "" + +#: stock/views.py:375 +msgid "Remove From Stock" +msgstr "" + +#: stock/views.py:376 +msgid "Add Stock Items" +msgstr "" + +#: stock/views.py:377 +msgid "Delete Stock Items" msgstr "" #: stock/views.py:404 +msgid "Must enter integer value" +msgstr "" + +#: stock/views.py:409 msgid "Quantity must be positive" msgstr "" -#: stock/views.py:411 +#: stock/views.py:416 #, python-brace-format msgid "Quantity must not exceed {x}" msgstr "" -#: stock/views.py:419 +#: stock/views.py:424 msgid "Confirm stock adjustment" msgstr "" -#: stock/views.py:487 +#: stock/views.py:495 #, python-brace-format msgid "Added stock to {n} items" msgstr "" -#: stock/views.py:502 +#: stock/views.py:510 #, python-brace-format msgid "Removed stock from {n} items" msgstr "" -#: stock/views.py:515 +#: stock/views.py:523 #, python-brace-format msgid "Counted stock for {n} items" msgstr "" -#: stock/views.py:543 +#: stock/views.py:551 msgid "No items were moved" msgstr "" -#: stock/views.py:546 +#: stock/views.py:554 #, python-brace-format msgid "Moved {n} items to {dest}" msgstr "" -#: stock/views.py:813 +#: stock/views.py:573 +#, python-brace-format +msgid "Deleted {n} stock items" +msgstr "" + +#: stock/views.py:838 msgid "Invalid part selection" msgstr "" -#: stock/views.py:875 +#: stock/views.py:900 msgid "Created new stock item" msgstr "" diff --git a/InvenTree/locale/en/LC_MESSAGES/django.po b/InvenTree/locale/en/LC_MESSAGES/django.po index de659e0f1f..5d59143a69 100644 --- a/InvenTree/locale/en/LC_MESSAGES/django.po +++ b/InvenTree/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-27 00:12+0000\n" +"POT-Creation-Date: 2019-11-16 09:28+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -149,7 +149,7 @@ msgstr "" msgid "Allocated quantity ({n}) must not exceed available quantity ({q})" msgstr "" -#: build/views.py:289 stock/views.py:834 +#: build/views.py:289 stock/views.py:859 #, python-brace-format msgid "The following serial numbers already exist: ({sn})" msgstr "" @@ -190,6 +190,10 @@ msgstr "" msgid "Use this currency as the base currency" msgstr "" +#: company/templates/company/partdelete.html:5 +msgid "Are you sure you want to delete the following Supplier Parts?" +msgstr "" + #: order/forms.py:21 msgid "Place order" msgstr "" @@ -247,7 +251,7 @@ msgstr "" msgid "Line item notes" msgstr "" -#: order/models.py:275 +#: order/models.py:275 stock/templates/stock/item.html:106 msgid "Purchase Order" msgstr "" @@ -409,7 +413,7 @@ msgstr "" msgid "Variant Of" msgstr "" -#: part/templates/part/detail.html:49 +#: part/templates/part/detail.html:49 stock/templates/stock/item.html:118 msgid "URL" msgstr "" @@ -497,7 +501,7 @@ msgstr "" msgid "Part cannot be sold to customers" msgstr "" -#: part/templates/part/detail.html:151 +#: part/templates/part/detail.html:151 stock/templates/stock/item.html:150 msgid "Notes" msgstr "" @@ -585,6 +589,10 @@ msgstr "" msgid "Item cannot belong to itself" msgstr "" +#: stock/models.py:360 +msgid "Stock Item Notes" +msgstr "" + #: stock/models.py:434 msgid "Quantity must be integer" msgstr "" @@ -615,6 +623,79 @@ msgstr "" msgid "Serialized {n} items" msgstr "" +#: stock/templates/stock/item.html:8 +msgid "Stock Item Details" +msgstr "" + +#: stock/templates/stock/item.html:51 +msgid "" +"This stock item is serialized - it has a unique serial number and the " +"quantity cannot be adjusted." +msgstr "" + +#: stock/templates/stock/item.html:55 +msgid "" +"This stock item will be automatically deleted when all stock is depleted." +msgstr "" + +#: stock/templates/stock/item.html:72 +msgid "Belongs To" +msgstr "" + +#: stock/templates/stock/item.html:77 +#: stock/templates/stock/stock_adjust.html:16 +msgid "Location" +msgstr "" + +#: stock/templates/stock/item.html:83 +msgid "Serial Number" +msgstr "" + +#: stock/templates/stock/item.html:88 +#: stock/templates/stock/stock_adjust.html:20 +msgid "Quantity" +msgstr "" + +#: stock/templates/stock/item.html:94 +msgid "Batch" +msgstr "" + +#: stock/templates/stock/item.html:100 +msgid "Build" +msgstr "" + +#: stock/templates/stock/item.html:112 +msgid "Customer" +msgstr "" + +#: stock/templates/stock/item.html:124 +msgid "Supplier" +msgstr "" + +#: stock/templates/stock/item.html:128 +msgid "Supplier Part" +msgstr "" + +#: stock/templates/stock/item.html:133 +msgid "Last Updated" +msgstr "" + +#: stock/templates/stock/item.html:137 +msgid "Last Stocktake" +msgstr "" + +#: stock/templates/stock/item.html:141 +msgid "No stocktake performed" +msgstr "" + +#: stock/templates/stock/item.html:145 +msgid "Status" +msgstr "" + +#: stock/templates/stock/item.html:159 +msgid "Stock Tracking Information" +msgstr "" + #: stock/templates/stock/location.html:37 msgid "Location Details" msgstr "" @@ -644,51 +725,80 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/views.py:399 -msgid "Must enter integer value" +#: stock/templates/stock/stock_adjust.html:15 +msgid "Stock Item" +msgstr "" + +#: stock/views.py:373 +msgid "Move Stock Items" +msgstr "" + +#: stock/views.py:374 +msgid "Count Stock Items" +msgstr "" + +#: stock/views.py:375 +msgid "Remove From Stock" +msgstr "" + +#: stock/views.py:376 +msgid "Add Stock Items" +msgstr "" + +#: stock/views.py:377 +msgid "Delete Stock Items" msgstr "" #: stock/views.py:404 +msgid "Must enter integer value" +msgstr "" + +#: stock/views.py:409 msgid "Quantity must be positive" msgstr "" -#: stock/views.py:411 +#: stock/views.py:416 #, python-brace-format msgid "Quantity must not exceed {x}" msgstr "" -#: stock/views.py:419 +#: stock/views.py:424 msgid "Confirm stock adjustment" msgstr "" -#: stock/views.py:487 +#: stock/views.py:495 #, python-brace-format msgid "Added stock to {n} items" msgstr "" -#: stock/views.py:502 +#: stock/views.py:510 #, python-brace-format msgid "Removed stock from {n} items" msgstr "" -#: stock/views.py:515 +#: stock/views.py:523 #, python-brace-format msgid "Counted stock for {n} items" msgstr "" -#: stock/views.py:543 +#: stock/views.py:551 msgid "No items were moved" msgstr "" -#: stock/views.py:546 +#: stock/views.py:554 #, python-brace-format msgid "Moved {n} items to {dest}" msgstr "" -#: stock/views.py:813 +#: stock/views.py:573 +#, python-brace-format +msgid "Deleted {n} stock items" +msgstr "" + +#: stock/views.py:838 msgid "Invalid part selection" msgstr "" -#: stock/views.py:875 +#: stock/views.py:900 msgid "Created new stock item" msgstr "" diff --git a/InvenTree/locale/es/LC_MESSAGES/django.po b/InvenTree/locale/es/LC_MESSAGES/django.po index de659e0f1f..5d59143a69 100644 --- a/InvenTree/locale/es/LC_MESSAGES/django.po +++ b/InvenTree/locale/es/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-27 00:12+0000\n" +"POT-Creation-Date: 2019-11-16 09:28+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -149,7 +149,7 @@ msgstr "" msgid "Allocated quantity ({n}) must not exceed available quantity ({q})" msgstr "" -#: build/views.py:289 stock/views.py:834 +#: build/views.py:289 stock/views.py:859 #, python-brace-format msgid "The following serial numbers already exist: ({sn})" msgstr "" @@ -190,6 +190,10 @@ msgstr "" msgid "Use this currency as the base currency" msgstr "" +#: company/templates/company/partdelete.html:5 +msgid "Are you sure you want to delete the following Supplier Parts?" +msgstr "" + #: order/forms.py:21 msgid "Place order" msgstr "" @@ -247,7 +251,7 @@ msgstr "" msgid "Line item notes" msgstr "" -#: order/models.py:275 +#: order/models.py:275 stock/templates/stock/item.html:106 msgid "Purchase Order" msgstr "" @@ -409,7 +413,7 @@ msgstr "" msgid "Variant Of" msgstr "" -#: part/templates/part/detail.html:49 +#: part/templates/part/detail.html:49 stock/templates/stock/item.html:118 msgid "URL" msgstr "" @@ -497,7 +501,7 @@ msgstr "" msgid "Part cannot be sold to customers" msgstr "" -#: part/templates/part/detail.html:151 +#: part/templates/part/detail.html:151 stock/templates/stock/item.html:150 msgid "Notes" msgstr "" @@ -585,6 +589,10 @@ msgstr "" msgid "Item cannot belong to itself" msgstr "" +#: stock/models.py:360 +msgid "Stock Item Notes" +msgstr "" + #: stock/models.py:434 msgid "Quantity must be integer" msgstr "" @@ -615,6 +623,79 @@ msgstr "" msgid "Serialized {n} items" msgstr "" +#: stock/templates/stock/item.html:8 +msgid "Stock Item Details" +msgstr "" + +#: stock/templates/stock/item.html:51 +msgid "" +"This stock item is serialized - it has a unique serial number and the " +"quantity cannot be adjusted." +msgstr "" + +#: stock/templates/stock/item.html:55 +msgid "" +"This stock item will be automatically deleted when all stock is depleted." +msgstr "" + +#: stock/templates/stock/item.html:72 +msgid "Belongs To" +msgstr "" + +#: stock/templates/stock/item.html:77 +#: stock/templates/stock/stock_adjust.html:16 +msgid "Location" +msgstr "" + +#: stock/templates/stock/item.html:83 +msgid "Serial Number" +msgstr "" + +#: stock/templates/stock/item.html:88 +#: stock/templates/stock/stock_adjust.html:20 +msgid "Quantity" +msgstr "" + +#: stock/templates/stock/item.html:94 +msgid "Batch" +msgstr "" + +#: stock/templates/stock/item.html:100 +msgid "Build" +msgstr "" + +#: stock/templates/stock/item.html:112 +msgid "Customer" +msgstr "" + +#: stock/templates/stock/item.html:124 +msgid "Supplier" +msgstr "" + +#: stock/templates/stock/item.html:128 +msgid "Supplier Part" +msgstr "" + +#: stock/templates/stock/item.html:133 +msgid "Last Updated" +msgstr "" + +#: stock/templates/stock/item.html:137 +msgid "Last Stocktake" +msgstr "" + +#: stock/templates/stock/item.html:141 +msgid "No stocktake performed" +msgstr "" + +#: stock/templates/stock/item.html:145 +msgid "Status" +msgstr "" + +#: stock/templates/stock/item.html:159 +msgid "Stock Tracking Information" +msgstr "" + #: stock/templates/stock/location.html:37 msgid "Location Details" msgstr "" @@ -644,51 +725,80 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/views.py:399 -msgid "Must enter integer value" +#: stock/templates/stock/stock_adjust.html:15 +msgid "Stock Item" +msgstr "" + +#: stock/views.py:373 +msgid "Move Stock Items" +msgstr "" + +#: stock/views.py:374 +msgid "Count Stock Items" +msgstr "" + +#: stock/views.py:375 +msgid "Remove From Stock" +msgstr "" + +#: stock/views.py:376 +msgid "Add Stock Items" +msgstr "" + +#: stock/views.py:377 +msgid "Delete Stock Items" msgstr "" #: stock/views.py:404 +msgid "Must enter integer value" +msgstr "" + +#: stock/views.py:409 msgid "Quantity must be positive" msgstr "" -#: stock/views.py:411 +#: stock/views.py:416 #, python-brace-format msgid "Quantity must not exceed {x}" msgstr "" -#: stock/views.py:419 +#: stock/views.py:424 msgid "Confirm stock adjustment" msgstr "" -#: stock/views.py:487 +#: stock/views.py:495 #, python-brace-format msgid "Added stock to {n} items" msgstr "" -#: stock/views.py:502 +#: stock/views.py:510 #, python-brace-format msgid "Removed stock from {n} items" msgstr "" -#: stock/views.py:515 +#: stock/views.py:523 #, python-brace-format msgid "Counted stock for {n} items" msgstr "" -#: stock/views.py:543 +#: stock/views.py:551 msgid "No items were moved" msgstr "" -#: stock/views.py:546 +#: stock/views.py:554 #, python-brace-format msgid "Moved {n} items to {dest}" msgstr "" -#: stock/views.py:813 +#: stock/views.py:573 +#, python-brace-format +msgid "Deleted {n} stock items" +msgstr "" + +#: stock/views.py:838 msgid "Invalid part selection" msgstr "" -#: stock/views.py:875 +#: stock/views.py:900 msgid "Created new stock item" msgstr "" diff --git a/InvenTree/stock/models.py b/InvenTree/stock/models.py index 1cf1a870b8..3f56b2e885 100644 --- a/InvenTree/stock/models.py +++ b/InvenTree/stock/models.py @@ -357,7 +357,7 @@ class StockItem(models.Model): choices=StockStatus.items(), validators=[MinValueValidator(0)]) - notes = models.CharField(max_length=250, blank=True, help_text='Stock Item Notes') + notes = models.CharField(max_length=250, blank=True, help_text=_('Stock Item Notes')) # If stock item is incoming, an (optional) ETA field # expected_arrival = models.DateField(null=True, blank=True) diff --git a/InvenTree/stock/templates/stock/item.html b/InvenTree/stock/templates/stock/item.html index 7bf6ff4e29..94bf0fd7fb 100644 --- a/InvenTree/stock/templates/stock/item.html +++ b/InvenTree/stock/templates/stock/item.html @@ -1,10 +1,11 @@ {% extends "stock/stock_app_base.html" %} {% load static %} +{% load i18n %} {% block content %}
-

Stock Item Details

+

{% trans "Stock Item Details" %}

{% if item.serialized %}

{{ item.part.full_name}} # {{ item.serial }}

{% else %} @@ -47,11 +48,11 @@

{% if item.serialized %}
- This stock item is serialized - it has a unique serial number and the quantity cannot be adjusted. + {% trans "This stock item is serialized - it has a unique serial number and the quantity cannot be adjusted." %}
{% elif item.delete_on_deplete %}
- This stock item will be automatically deleted when all stock is depleted. + {% trans "This stock item will be automatically deleted when all stock is depleted." %}
{% endif %}
@@ -68,85 +69,85 @@ {% if item.belongs_to %} - Belongs To + {% trans "Belongs To" %} {{ item.belongs_to }} {% elif item.location %} - Location + {% trans "Location" %} {{ item.location.name }} {% endif %} {% if item.serialized %} - Serial Number + {% trans "Serial Number" %} {{ item.serial }} {% else %} - Quantity + {% trans "Quantity" %} {{ item.quantity }} {% endif %} {% if item.batch %} - Batch + {% trans "Batch" %} {{ item.batch }} {% endif %} {% if item.build %} - Build + {% trans "Build" %} {{ item.build }} {% endif %} {% if item.purchase_order %} - Purchase Order + {% trans "Purchase Order" %} {{ item.purchase_order }} {% endif %} {% if item.customer %} - Customer + {% trans "Customer" %} {{ item.customer.name }} {% endif %} {% if item.URL %} - URL + {% trans "URL" %} {{ item.URL }} {% endif %} {% if item.supplier_part %} - Supplier + {% trans "Supplier" %} {{ item.supplier_part.supplier.name }} - Supplier Part + {% trans "Supplier Part" %} {{ item.supplier_part.SKU }} {% endif %} - Last Updated + {% trans "Last Updated" %} {{ item.updated }} - Last Stocktake + {% trans "Last Stocktake" %} {% if item.stocktake_date %} {{ item.stocktake_date }} {{ item.stocktake_user }} {% else %} - No stocktake performed + {% trans "No stocktake performed" %} {% endif %} - Status + {% trans "Status" %} {{ item.get_status_display }} {% if item.notes %} - Notes + {% trans "Notes" %} {{ item.notes }} {% endif %} @@ -155,7 +156,7 @@

-

Stock Tracking Information

+

{% trans "Stock Tracking Information" %}

diff --git a/InvenTree/stock/templates/stock/stock_adjust.html b/InvenTree/stock/templates/stock/stock_adjust.html index ab7bf4005e..70463d14c1 100644 --- a/InvenTree/stock/templates/stock/stock_adjust.html +++ b/InvenTree/stock/templates/stock/stock_adjust.html @@ -1,3 +1,5 @@ +{% load i18n %} + {% block pre_form_content %} {% endblock %} @@ -10,9 +12,13 @@ - - + + + {% if edit_quantity %} + {% else %} + + {% endif %} {% for item in stock_items %} @@ -21,6 +27,7 @@ {{ item.part.full_name }} {{ item.part.description }} diff --git a/InvenTree/stock/views.py b/InvenTree/stock/views.py index f7bbe9ad21..a503efaba4 100644 --- a/InvenTree/stock/views.py +++ b/InvenTree/stock/views.py @@ -256,6 +256,7 @@ class StockAdjust(AjaxView, FormMixin): - Add items to stock - Count items - Move stock + - Delete stock items """ @@ -337,10 +338,13 @@ class StockAdjust(AjaxView, FormMixin): context['stock_items'] = self.stock_items - context['stock_action'] = self.stock_action + context['stock_action'] = self.stock_action.strip().lower() context['stock_action_title'] = self.stock_action.capitalize() + # Quantity column will be read-only in some circumstances + context['edit_quantity'] = not self.stock_action == 'delete' + return context def get_form(self): @@ -361,15 +365,16 @@ class StockAdjust(AjaxView, FormMixin): self.stock_action = request.GET.get('action', '').lower() # Pick a default action... - if self.stock_action not in ['move', 'count', 'take', 'add']: + if self.stock_action not in ['move', 'count', 'take', 'add', 'delete']: self.stock_action = 'count' # Choose the form title based on the action titles = { - 'move': 'Move Stock', - 'count': 'Count Stock', - 'take': 'Remove Stock', - 'add': 'Add Stock' + 'move': _('Move Stock Items'), + 'count': _('Count Stock Items'), + 'take': _('Remove From Stock'), + 'add': _('Add Stock Items'), + 'delete': _('Delete Stock Items') } self.ajax_form_title = titles[self.stock_action] @@ -383,7 +388,7 @@ class StockAdjust(AjaxView, FormMixin): self.request = request - self.stock_action = request.POST.get('stock_action', 'invalid').lower() + self.stock_action = request.POST.get('stock_action', 'invalid').strip().lower() # Update list of stock items self.stock_items = self.get_POST_items() @@ -468,6 +473,9 @@ class StockAdjust(AjaxView, FormMixin): elif self.stock_action == 'count': return self.do_count() + elif self.stock_action == 'delete': + return self.do_delete() + else: return 'No action performed' @@ -547,6 +555,23 @@ class StockAdjust(AjaxView, FormMixin): n=count, dest=destination.pathstring)) + def do_delete(self): + """ Delete multiple stock items """ + + count = 0 + # note = self.request.POST['note'] + + for item in self.stock_items: + + # TODO - In the future, StockItems should not be 'deleted' + # TODO - Instead, they should be marked as "inactive" + + item.delete() + + count += 1 + + return _("Deleted {n} stock items".format(n=count)) + class StockItemEdit(AjaxUpdateView): """ diff --git a/InvenTree/templates/stock_table.html b/InvenTree/templates/stock_table.html index c5d16b8ed6..b3b214c031 100644 --- a/InvenTree/templates/stock_table.html +++ b/InvenTree/templates/stock_table.html @@ -12,6 +12,7 @@
  • Count stock
  • Move stock
  • Order stock
  • +
  • Delete Stock
  • Stock ItemLocation{% trans "Stock Item" %}{% trans "Location" %}{{ stock_action_title }}{% trans "Quantity" %}
    {{ item.location.pathstring }} + {% if edit_quantity %} {{ item.error }} {% endif %} + {% else %} + {{ item.new_quantity }} + + {% endif %}