From 86e675dbbdeb62be086705c4db9fea1ce9818360 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Fri, 28 Aug 2020 10:49:49 +1000 Subject: [PATCH 1/5] Make checkbox field non-switchable for stock table --- InvenTree/templates/js/stock.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/InvenTree/templates/js/stock.html b/InvenTree/templates/js/stock.html index 9393b29739..f142f3f59f 100644 --- a/InvenTree/templates/js/stock.html +++ b/InvenTree/templates/js/stock.html @@ -264,6 +264,7 @@ function loadStockTable(table, options) { queryParams: filters, customSort: customGroupSorter, groupBy: true, + name: 'stock', original: original, showColumns: true, groupByField: options.groupByField || 'part', @@ -405,6 +406,7 @@ function loadStockTable(table, options) { checkbox: true, title: '{% trans "Select" %}', searchable: false, + switchable: false, }, { field: 'pk', From 9c2e959ab0d9b02b44c925c9547070a47a501861 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Fri, 28 Aug 2020 10:50:43 +1000 Subject: [PATCH 2/5] Add function to turn a set of visible columns into a settings string for saving to session --- .../InvenTree/static/script/inventree/tables.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/InvenTree/InvenTree/static/script/inventree/tables.js b/InvenTree/InvenTree/static/script/inventree/tables.js index e319aa8440..079eee3724 100644 --- a/InvenTree/InvenTree/static/script/inventree/tables.js +++ b/InvenTree/InvenTree/static/script/inventree/tables.js @@ -80,6 +80,21 @@ function reloadTable(table, filters) { } +function visibleColumnString(columns) { + /* Generate a list of "visible" columns to save to file. */ + + var fields = []; + + columns.forEach(function(column) { + if (column.switchable && column.visible) { + fields.push(column.field); + } + }); + + return fields.join(','); +} + + /* Wrapper function for bootstrapTable. * Sets some useful defaults, and manage persistent settings. */ From 7829e3654ce5187362f5cec5a453ba1be7e876c0 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Fri, 28 Aug 2020 10:51:55 +1000 Subject: [PATCH 3/5] Add callback when a column is shown / hidden --- .../static/script/inventree/tables.js | 41 ++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/InvenTree/InvenTree/static/script/inventree/tables.js b/InvenTree/InvenTree/static/script/inventree/tables.js index 079eee3724..34f8824412 100644 --- a/InvenTree/InvenTree/static/script/inventree/tables.js +++ b/InvenTree/InvenTree/static/script/inventree/tables.js @@ -100,6 +100,8 @@ function visibleColumnString(columns) { */ $.fn.inventreeTable = function(options) { + var table = this; + var tableName = options.name || 'table'; var varName = tableName + '-pagesize'; @@ -110,14 +112,51 @@ $.fn.inventreeTable = function(options) { options.rememberOrder = true; options.sortable = true; options.search = true; + options.showColumns = true; // Callback to save pagination data options.onPageChange = function(number, size) { inventreeSave(varName, size); }; + // Add a callback when the table is loaded + table.on('load-success.bs.table', function() { + + // Load visible column list + var visibleColumns = inventreeLoad(`table_columns_${tableName}`, null); + + // If a set of visible columns has been saved, load! + if (visibleColumns) { + var columns = visibleColumns.split(","); + + // Which columns are currently visible? + var visible = table.bootstrapTable('getVisibleColumns'); + + visible.forEach(function(column) { + // Visible field should *not* be visible! (hide it!) + if (!columns.includes(visible.field)) { + table.bootstrapTable('hideColumn', visible.field); + } + }); + } + }); + + // Callback when a column is changed + options.onColumnSwitch = function(field, checked) { + console.log(`${field} -> ${checked}`); + + var columns = table.bootstrapTable('getVisibleColumns'); + + var text = visibleColumnString(columns); + + // Save visible columns + inventreeSave(`table_columns_${tableName}`, text); + + console.log('saving: ' + text); + }; + // Standard options for all tables - this.bootstrapTable(options); + table.bootstrapTable(options); } function customGroupSorter(sortName, sortOrder, sortData) { From 97ed70502c98bb0ed853dd4deeaa70b3a670cb1a Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Mon, 31 Aug 2020 20:42:11 +1000 Subject: [PATCH 4/5] Fix function which hides table columns based on saved selections --- .../static/script/inventree/tables.js | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/InvenTree/InvenTree/static/script/inventree/tables.js b/InvenTree/InvenTree/static/script/inventree/tables.js index 34f8824412..be0e1e6325 100644 --- a/InvenTree/InvenTree/static/script/inventree/tables.js +++ b/InvenTree/InvenTree/static/script/inventree/tables.js @@ -119,28 +119,6 @@ $.fn.inventreeTable = function(options) { inventreeSave(varName, size); }; - // Add a callback when the table is loaded - table.on('load-success.bs.table', function() { - - // Load visible column list - var visibleColumns = inventreeLoad(`table_columns_${tableName}`, null); - - // If a set of visible columns has been saved, load! - if (visibleColumns) { - var columns = visibleColumns.split(","); - - // Which columns are currently visible? - var visible = table.bootstrapTable('getVisibleColumns'); - - visible.forEach(function(column) { - // Visible field should *not* be visible! (hide it!) - if (!columns.includes(visible.field)) { - table.bootstrapTable('hideColumn', visible.field); - } - }); - } - }); - // Callback when a column is changed options.onColumnSwitch = function(field, checked) { console.log(`${field} -> ${checked}`); @@ -151,12 +129,34 @@ $.fn.inventreeTable = function(options) { // Save visible columns inventreeSave(`table_columns_${tableName}`, text); - - console.log('saving: ' + text); }; // Standard options for all tables table.bootstrapTable(options); + + // Load visible column list from memory + // Load visible column list + var visibleColumns = inventreeLoad(`table_columns_${tableName}`, null); + + // If a set of visible columns has been saved, load! + if (visibleColumns) { + var columns = visibleColumns.split(","); + + // Which columns are currently visible? + var visible = table.bootstrapTable('getVisibleColumns'); + + if (visible) { + visible.forEach(function(column) { + + // Visible field should *not* be visible! (hide it!) + if (column.switchable && !columns.includes(column.field)) { + table.bootstrapTable('hideColumn', column.field); + } + }); + } else { + console.log('Could not get list of visible columns!'); + } + } } function customGroupSorter(sortName, sortOrder, sortData) { From 672936e2d484c814d4e9031a947d7f4a39eeffe1 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Mon, 31 Aug 2020 21:55:01 +1000 Subject: [PATCH 5/5] Update many tables --- InvenTree/order/templates/order/purchase_order_detail.html | 2 ++ InvenTree/order/templates/order/sales_order_detail.html | 1 + InvenTree/part/templates/part/used_in.html | 1 + InvenTree/templates/InvenTree/settings/currency.html | 1 + InvenTree/templates/InvenTree/settings/part.html | 1 + InvenTree/templates/js/bom.html | 2 ++ InvenTree/templates/js/build.html | 2 ++ InvenTree/templates/js/company.html | 6 ++++++ InvenTree/templates/js/order.html | 4 ++++ InvenTree/templates/js/part.html | 2 ++ InvenTree/templates/js/stock.html | 2 ++ 11 files changed, 24 insertions(+) diff --git a/InvenTree/order/templates/order/purchase_order_detail.html b/InvenTree/order/templates/order/purchase_order_detail.html index de066500b2..9b9eddb887 100644 --- a/InvenTree/order/templates/order/purchase_order_detail.html +++ b/InvenTree/order/templates/order/purchase_order_detail.html @@ -127,6 +127,7 @@ function setupCallbacks() { $("#po-table").inventreeTable({ onPostBody: setupCallbacks, + name: 'purchaseorder', formatNoMatches: function() { return "{% trans 'No line items found' %}"; }, queryParams: { order: {{ order.id }}, @@ -138,6 +139,7 @@ $("#po-table").inventreeTable({ field: 'pk', title: 'ID', visible: false, + switchable: false, }, { field: 'part', diff --git a/InvenTree/order/templates/order/sales_order_detail.html b/InvenTree/order/templates/order/sales_order_detail.html index 75c5fc3d7b..b6cc761cc7 100644 --- a/InvenTree/order/templates/order/sales_order_detail.html +++ b/InvenTree/order/templates/order/sales_order_detail.html @@ -190,6 +190,7 @@ $("#so-lines-table").inventreeTable({ field: 'pk', title: 'ID', visible: false, + switchable: false, }, { sortable: true, diff --git a/InvenTree/part/templates/part/used_in.html b/InvenTree/part/templates/part/used_in.html index ce0491a165..3a6605847e 100644 --- a/InvenTree/part/templates/part/used_in.html +++ b/InvenTree/part/templates/part/used_in.html @@ -29,6 +29,7 @@ field: 'pk', title: 'ID', visible: false, + switchable: false, }, { field: 'part_detail', diff --git a/InvenTree/templates/InvenTree/settings/currency.html b/InvenTree/templates/InvenTree/settings/currency.html index 9c602a67fc..c585011ecd 100644 --- a/InvenTree/templates/InvenTree/settings/currency.html +++ b/InvenTree/templates/InvenTree/settings/currency.html @@ -37,6 +37,7 @@ field: 'pk', title: 'ID', visible: false, + switchable: false, }, { field: 'symbol', diff --git a/InvenTree/templates/InvenTree/settings/part.html b/InvenTree/templates/InvenTree/settings/part.html index 49631cd67d..5eba81a72a 100644 --- a/InvenTree/templates/InvenTree/settings/part.html +++ b/InvenTree/templates/InvenTree/settings/part.html @@ -31,6 +31,7 @@ field: 'pk', title: 'ID', visible: false, + switchable: false, }, { field: 'name', diff --git a/InvenTree/templates/js/bom.html b/InvenTree/templates/js/bom.html index 122b1b7ba8..cab2a08b13 100644 --- a/InvenTree/templates/js/bom.html +++ b/InvenTree/templates/js/bom.html @@ -111,6 +111,7 @@ function loadBomTable(table, options) { field: 'pk', title: 'ID', visible: false, + switchable: false, }, ]; @@ -320,6 +321,7 @@ function loadBomTable(table, options) { parentIdField: 'parentId', treeShowField: 'sub_part', showColumns: true, + name: 'bom', sortable: true, search: true, rowStyle: function(row, index) { diff --git a/InvenTree/templates/js/build.html b/InvenTree/templates/js/build.html index b48e6a2a09..8682e9bd81 100644 --- a/InvenTree/templates/js/build.html +++ b/InvenTree/templates/js/build.html @@ -21,12 +21,14 @@ function loadBuildTable(table, options) { url: options.url, queryParams: filters, groupBy: false, + name: 'builds', original: params, columns: [ { field: 'pk', title: 'ID', visible: false, + switchable: false, }, { field: 'title', diff --git a/InvenTree/templates/js/company.html b/InvenTree/templates/js/company.html index 8b278e2a21..ef80070d99 100644 --- a/InvenTree/templates/js/company.html +++ b/InvenTree/templates/js/company.html @@ -27,16 +27,20 @@ function loadCompanyTable(table, url, options={}) { queryParams: filters, groupBy: false, formatNoMatches: function() { return "{% trans "No company information found" %}"; }, + showColumns: true, + name: 'company', columns: [ { field: 'pk', title: 'ID', visible: false, + switchable: false, }, { field: 'name', title: '{% trans "Company" %}', sortable: true, + switchable: false, formatter: function(value, row, index, field) { var html = imageHoverIcon(row.image) + renderLink(value, row.url); @@ -97,11 +101,13 @@ function loadSupplierPartTable(table, url, options) { url: url, method: 'get', queryParams: filters, + name: 'supplierparts', groupBy: false, formatNoMatches: function() { return "{% trans "No supplier parts found" %}"; }, columns: [ { checkbox: true, + switchable: false, }, { sortable: true, diff --git a/InvenTree/templates/js/order.html b/InvenTree/templates/js/order.html index 17bd67cabb..c16b40583c 100644 --- a/InvenTree/templates/js/order.html +++ b/InvenTree/templates/js/order.html @@ -121,6 +121,7 @@ function loadPurchaseOrderTable(table, options) { $(table).inventreeTable({ url: options.url, queryParams: filters, + name: 'purchaseorder', groupBy: false, original: options.params, formatNoMatches: function() { return "{% trans "No purchase orders found" %}"; }, @@ -129,6 +130,7 @@ function loadPurchaseOrderTable(table, options) { field: 'pk', title: 'ID', visible: false, + switchable: false, }, { sortable: true, @@ -194,6 +196,7 @@ function loadSalesOrderTable(table, options) { $(table).inventreeTable({ url: options.url, queryParams: filters, + name: 'salesorder', groupBy: false, original: options.params, formatNoMatches: function() { return "{% trans "No sales orders found" %}"; }, @@ -202,6 +205,7 @@ function loadSalesOrderTable(table, options) { field: 'pk', title: 'ID', visible: false, + switchable: false, }, { sortable: true, diff --git a/InvenTree/templates/js/part.html b/InvenTree/templates/js/part.html index c9901cdb68..a1c3283c1c 100644 --- a/InvenTree/templates/js/part.html +++ b/InvenTree/templates/js/part.html @@ -237,6 +237,7 @@ function loadPartTable(table, url, options={}) { method: 'get', queryParams: filters, groupBy: false, + name: 'part', original: params, formatNoMatches: function() { return "{% trans "No parts found" %}"; }, columns: columns, @@ -338,6 +339,7 @@ function loadPartTestTemplateTable(table, options) { }, url: "{% url 'api-part-test-template-list' %}", queryParams: filters, + name: 'testtemplate', original: original, columns: [ { diff --git a/InvenTree/templates/js/stock.html b/InvenTree/templates/js/stock.html index f142f3f59f..bb0673c16d 100644 --- a/InvenTree/templates/js/stock.html +++ b/InvenTree/templates/js/stock.html @@ -73,6 +73,7 @@ function loadStockTestResultsTable(table, options) { table.inventreeTable({ url: "{% url 'api-part-test-template-list' %}", method: 'get', + name: 'testresult', formatNoMatches: function() { return "{% trans 'No test results found' %}"; }, @@ -84,6 +85,7 @@ function loadStockTestResultsTable(table, options) { field: 'pk', title: 'ID', visible: false, + switchable: false, }, { field: 'test_name',