mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
Merge remote-tracking branch 'inventree/master'
This commit is contained in:
commit
6e54c49142
@ -125,6 +125,28 @@ function loadStockTable(table, options) {
|
||||
// A single location!
|
||||
return renderLink(row.location__path, '/stock/location/' + row.location + '/')
|
||||
}
|
||||
} else if (field == 'notes') {
|
||||
var notes = [];
|
||||
|
||||
data.forEach(function(item) {
|
||||
var note = item.notes;
|
||||
|
||||
if (!note || note == '') {
|
||||
note = '-';
|
||||
}
|
||||
|
||||
if (!notes.includes(note)) {
|
||||
notes.push(note);
|
||||
}
|
||||
});
|
||||
|
||||
if (notes.length > 1) {
|
||||
return '...';
|
||||
} else if (notes.length == 1) {
|
||||
return notes[0] || '-';
|
||||
} else {
|
||||
return '-';
|
||||
}
|
||||
}
|
||||
else {
|
||||
return '';
|
||||
@ -288,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');
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
@ -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 <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\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 ""
|
||||
|
@ -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 <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\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 ""
|
||||
|
@ -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 <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\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 ""
|
||||
|
@ -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)
|
||||
|
@ -1,10 +1,11 @@
|
||||
{% extends "stock/stock_app_base.html" %}
|
||||
{% load static %}
|
||||
{% load i18n %}
|
||||
{% block content %}
|
||||
|
||||
<div class='row'>
|
||||
<div class='col-sm-6'>
|
||||
<h3>Stock Item Details</h3>
|
||||
<h3>{% trans "Stock Item Details" %}</h3>
|
||||
{% if item.serialized %}
|
||||
<p><i>{{ item.part.full_name}} # {{ item.serial }}</i></p>
|
||||
{% else %}
|
||||
@ -47,11 +48,11 @@
|
||||
</p>
|
||||
{% if item.serialized %}
|
||||
<div class='alert alert-block alert-info'>
|
||||
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." %}
|
||||
</div>
|
||||
{% elif item.delete_on_deplete %}
|
||||
<div class='alert alert-block alert-warning'>
|
||||
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." %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
@ -68,85 +69,85 @@
|
||||
</tr>
|
||||
{% if item.belongs_to %}
|
||||
<tr>
|
||||
<td>Belongs To</td>
|
||||
<td>{% trans "Belongs To" %}</td>
|
||||
<td><a href="{% url 'stock-item-detail' item.belongs_to.id %}">{{ item.belongs_to }}</a></td>
|
||||
</tr>
|
||||
{% elif item.location %}
|
||||
<tr>
|
||||
<td>Location</td>
|
||||
<td>{% trans "Location" %}</td>
|
||||
<td><a href="{% url 'stock-location-detail' item.location.id %}">{{ item.location.name }}</a></td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% if item.serialized %}
|
||||
<tr>
|
||||
<td>Serial Number</td>
|
||||
<td>{% trans "Serial Number" %}</td>
|
||||
<td>{{ item.serial }}</td>
|
||||
</tr>
|
||||
{% else %}
|
||||
<tr>
|
||||
<td>Quantity</td>
|
||||
<td>{% trans "Quantity" %}</td>
|
||||
<td>{{ item.quantity }}</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% if item.batch %}
|
||||
<tr>
|
||||
<td>Batch</td>
|
||||
<td>{% trans "Batch" %}</td>
|
||||
<td>{{ item.batch }}</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% if item.build %}
|
||||
<tr>
|
||||
<td>Build</td>
|
||||
<td>{% trans "Build" %}</td>
|
||||
<td><a href="{% url 'build-detail' item.build.id %}">{{ item.build }}</a></td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% if item.purchase_order %}
|
||||
<tr>
|
||||
<td>Purchase Order</td>
|
||||
<td>{% trans "Purchase Order" %}</td>
|
||||
<td><a href="{% url 'purchase-order-detail' item.purchase_order.id %}">{{ item.purchase_order }}</a></td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% if item.customer %}
|
||||
<tr>
|
||||
<td>Customer</td>
|
||||
<td>{% trans "Customer" %}</td>
|
||||
<td>{{ item.customer.name }}</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% if item.URL %}
|
||||
<tr>
|
||||
<td>URL</td>
|
||||
<td>{% trans "URL" %}</td>
|
||||
<td><a href="{{ item.URL }}">{{ item.URL }}</a></td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% if item.supplier_part %}
|
||||
<tr>
|
||||
<td>Supplier</td>
|
||||
<td>{% trans "Supplier" %}</td>
|
||||
<td><a href="{% url 'company-detail' item.supplier_part.supplier.id %}">{{ item.supplier_part.supplier.name }}</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Supplier Part</td>
|
||||
<td>{% trans "Supplier Part" %}</td>
|
||||
<td><a href="{% url 'supplier-part-detail' item.supplier_part.id %}">{{ item.supplier_part.SKU }}</a></td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
<tr>
|
||||
<td>Last Updated</td>
|
||||
<td>{% trans "Last Updated" %}</td>
|
||||
<td>{{ item.updated }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Last Stocktake</td>
|
||||
<td>{% trans "Last Stocktake" %}</td>
|
||||
{% if item.stocktake_date %}
|
||||
<td>{{ item.stocktake_date }} <span class='badge'>{{ item.stocktake_user }}</span></td>
|
||||
{% else %}
|
||||
<td>No stocktake performed</td>
|
||||
<td>{% trans "No stocktake performed" %}</td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Status</td>
|
||||
<td>{% trans "Status" %}</td>
|
||||
<td>{{ item.get_status_display }}</td>
|
||||
</tr>
|
||||
{% if item.notes %}
|
||||
<tr>
|
||||
<td>Notes</td>
|
||||
<td>{% trans "Notes" %}</td>
|
||||
<td>{{ item.notes }}</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
@ -155,7 +156,7 @@
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
<h4>Stock Tracking Information</h4>
|
||||
<h4>{% trans "Stock Tracking Information" %}</h4>
|
||||
<div id='table-toolbar'>
|
||||
<div class='btn-group'>
|
||||
<button class='btn btn-success' type='button' title='New tracking entry' id='new-entry'>New Entry</button>
|
||||
|
@ -1,3 +1,5 @@
|
||||
{% load i18n %}
|
||||
|
||||
{% block pre_form_content %}
|
||||
|
||||
{% endblock %}
|
||||
@ -10,9 +12,13 @@
|
||||
|
||||
<table class='table table-condensed table-striped' id='stock-table'>
|
||||
<tr>
|
||||
<th>Stock Item</th>
|
||||
<th>Location</th>
|
||||
<th>{% trans "Stock Item" %}</th>
|
||||
<th>{% trans "Location" %}</th>
|
||||
{% if edit_quantity %}
|
||||
<th>{{ stock_action_title }}</th>
|
||||
{% else %}
|
||||
<th>{% trans "Quantity" %}</th>
|
||||
{% endif %}
|
||||
<th></th>
|
||||
</tr>
|
||||
{% for item in stock_items %}
|
||||
@ -21,6 +27,7 @@
|
||||
{{ item.part.full_name }} <small><i>{{ item.part.description }}</i></small></td>
|
||||
<td>{{ item.location.pathstring }}</td>
|
||||
<td>
|
||||
{% if edit_quantity %}
|
||||
<input class='numberinput'
|
||||
min='0'
|
||||
{% if stock_action == 'take' or stock_action == 'move' %} max='{{ item.quantity }}' {% endif %}
|
||||
@ -28,6 +35,10 @@
|
||||
{% if item.error %}
|
||||
<br><span class='help-inline'>{{ item.error }}</span>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{{ item.new_quantity }}
|
||||
<input type='hidden' name='stock-id-{{ item.id }}' value='{{ item.new_quantity }}'/>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td><button class='btn btn-default btn-remove' onclick='removeStockRow()' id='del-{{ item.id }}' title='Remove item' type='button'><span row='stock-row-{{ item.id }}' class='glyphicon glyphicon-small glyphicon-remove'></span></button></td>
|
||||
</tr>
|
||||
|
@ -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):
|
||||
"""
|
||||
|
@ -12,6 +12,7 @@
|
||||
<li><a href="#" id='multi-item-stocktake' title='Stocktake selected stock items'>Count stock</a></li>
|
||||
<li><a href='#' id='multi-item-move' title='Move selected stock items'>Move stock</a></li>
|
||||
<li><a href='#' id='multi-item-order' title='Order selected items'>Order stock</a></li>
|
||||
<li><a href='#' id='multi-item-delete' title='Delete selected items'>Delete Stock</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -13,7 +13,7 @@ django-import-export>=1.0.0 # Data import / export for admin interface
|
||||
django-cleanup>=2.1.0 # Manage deletion of old / unused uploaded files
|
||||
django-qr-code==1.0.0 # Generate QR codes
|
||||
flake8==3.3.0 # PEP checking
|
||||
coverage>=4.5.3 # Unit test coverage
|
||||
coverage==4.0.3 # Unit test coverage
|
||||
python-coveralls==2.9.1 # Coveralls linking (for Travis)
|
||||
fuzzywuzzy>=0.17.0 # Fuzzy string matching
|
||||
python-Levenshtein>=0.12.0 # Required for fuzzywuzzy
|
Loading…
Reference in New Issue
Block a user