-
- {% if part.is_template and part.active %}
-
{% trans "New Variant" %}
- {% endif %}
+
diff --git a/InvenTree/part/views.py b/InvenTree/part/views.py
index 12e22f6b5c..bf6a4688ff 100644
--- a/InvenTree/part/views.py
+++ b/InvenTree/part/views.py
@@ -2098,7 +2098,7 @@ class BomItemCreate(AjaxCreateView):
model = BomItem
form_class = part_forms.EditBomItemForm
ajax_template_name = 'modal_form.html'
- ajax_form_title = _('Create BOM item')
+ ajax_form_title = _('Create BOM Item')
role_required = 'part.add'
diff --git a/InvenTree/templates/js/company.js b/InvenTree/templates/js/company.js
index e000b9e491..164329aee4 100644
--- a/InvenTree/templates/js/company.js
+++ b/InvenTree/templates/js/company.js
@@ -110,7 +110,7 @@ function loadSupplierPartTable(table, url, options) {
// Query parameters
var params = options.params || {};
- // Load 'user' filters
+ // Load filters
var filters = loadTableFilters("supplier-part");
for (var key in params) {
diff --git a/InvenTree/templates/js/part.js b/InvenTree/templates/js/part.js
index e5fafef070..37744d0456 100644
--- a/InvenTree/templates/js/part.js
+++ b/InvenTree/templates/js/part.js
@@ -61,13 +61,22 @@ function toggleStar(options) {
}
-function loadPartVariantTable(table, partId, options) {
+function loadPartVariantTable(table, partId, options={}) {
/* Load part variant table
*/
- var params = {
- ancestor: partId,
- };
+ var params = options.params || {};
+
+ params.ancestor = partId;
+
+ // Load filters
+ var filters = loadTableFilters("variants");
+
+ for (var key in params) {
+ filters[key] = params[key];
+ }
+
+ setupFilterList("variants", $(table));
var cols = [
{
@@ -104,16 +113,36 @@ function loadPartVariantTable(table, partId, options) {
html += imageHoverIcon(row.thumbnail);
html += renderLink(name, `/part/${row.pk}/`);
+ if (row.trackable) {
+ html += makeIconBadge('fa-directions', '{% trans "Trackable part" %}');
+ }
+
+ if (row.virtual) {
+ html += makeIconBadge('fa-ghost', '{% trans "Virtual part" %}');
+ }
+
+ if (row.is_template) {
+ html += makeIconBadge('fa-clone', '{% trans "Template part" %}');
+ }
+
+ if (row.assembly) {
+ html += makeIconBadge('fa-tools', '{% trans "Assembled part" %}');
+ }
+
+ if (!row.active) {
+ html += `
{% trans "Inactive" %} `;
+ }
+
return html;
},
},
{
field: 'IPN',
- title: '{% trans 'IPN' %}',
+ title: '{% trans "IPN" %}',
},
{
field: 'revision',
- title: '{% trans 'Revision' %}',
+ title: '{% trans "Revision" %}',
},
{
field: 'description',
@@ -133,7 +162,7 @@ function loadPartVariantTable(table, partId, options) {
name: 'partvariants',
showColumns: true,
original: params,
- queryParams: params,
+ queryParams: filters,
formatNoMatches: function() { return "{% trans "No variants found" %}"; },
columns: cols,
treeEnable: true,
@@ -310,20 +339,29 @@ function loadPartTable(table, url, options={}) {
var display = imageHoverIcon(row.thumbnail) + renderLink(name, '/part/' + row.pk + '/');
+ if (row.trackable) {
+ display += makeIconBadge('fa-directions', '{% trans "Trackable part" %}');
+ }
+
+ if (row.virtual) {
+ display += makeIconBadge('fa-ghost', '{% trans "Virtual part" %}');
+ }
+
+
if (row.is_template) {
- display += `
`;
+ display += makeIconBadge('fa-clone', '{% trans "Template part" %}');
}
if (row.assembly) {
- display += `
`;
+ display += makeIconBadge('fa-tools', '{% trans "Assembled part" %}');
}
if (row.starred) {
- display += `
`;
+ display += makeIconBadge('fa-star', '{% trans "Starred part" %}');
}
if (row.salable) {
- display += `
`;
+ display += makeIconBadge('fa-dollar-sign', title='{% trans "Salable part" %}');
}
/*
diff --git a/InvenTree/templates/js/table_filters.js b/InvenTree/templates/js/table_filters.js
index 2c83006f76..639e31a542 100644
--- a/InvenTree/templates/js/table_filters.js
+++ b/InvenTree/templates/js/table_filters.js
@@ -11,6 +11,28 @@ function getAvailableTableFilters(tableKey) {
tableKey = tableKey.toLowerCase();
+ // Filters for "variant" table
+ if (tableKey == "variants") {
+ return {
+ active: {
+ type: 'bool',
+ title: '{% trans "Active" %}',
+ },
+ template: {
+ type: 'bool',
+ title: '{% trans "Template" %}',
+ },
+ virtual: {
+ type: 'bool',
+ title: '{% trans "Virtual" %}',
+ },
+ trackable: {
+ type: 'bool',
+ title: '{% trans "Trackable" %}',
+ },
+ };
+ }
+
// Filters for Bill of Materials table
if (tableKey == "bom") {
return {