{% load i18n %} {% load static %} {% load inventree_extras %} // Javascript for Pricing panel onPanelLoad('pricing', function() { $('#btn-update-rates').click(function() { inventreePut( '{% url "api-currency-refresh" %}', {}, { method: 'POST', success: function(data) { location.reload(); } } ); }); $('#exchange-rate-table').inventreeTable({ url: '{% url "api-currency-exchange" %}', search: false, showColumns: false, sortable: true, sidePagination: 'client', onLoadSuccess: function(response) { var data = response.exchange_rates || {}; var rows = []; for (var currency in data) { rows.push({ 'currency': currency, 'rate': data[currency], }); } $('#exchange-rate-table').bootstrapTable('load', rows); }, columns: [ { field: 'currency', sortable: true, title: '{% trans "Currency" escape %}', }, { field: 'rate', sortable: true, title: '{% trans "Rate" escape %}', } ] }); }); // Javascript for units panel onPanelLoad('units', function() { console.log("units panel"); // Construct the "units" table $('#physical-units-table').bootstrapTable({ url: '{% url "api-custom-unit-list" %}', search: true, columns: [ { field: 'name', title: '{% trans "Name" escape %}', }, { field: 'definition', title: '{% trans "Definition" escape %}', }, { field: 'symbol', title: '{% trans "Symbol" escape %}', formatter: function(value, row) { let html = value; let buttons = ''; buttons += makeEditButton('button-units-edit', row.pk, '{% trans "Edit" escape %}'); buttons += makeDeleteButton('button-units-delete', row.pk, '{% trans "Delete" escape %}'); html += wrapButtons(buttons); return html; } }, ] }); // Callback to edit a custom unit $('#physical-units-table').on('click', '.button-units-edit', function() { let pk = $(this).attr('pk'); constructForm(`{% url "api-custom-unit-list" %}${pk}/`, { title: '{% trans "Edit Custom Unit" escape %}', fields: { name: {}, definition: {}, symbol: {}, }, refreshTable: '#physical-units-table', }); }); // Callback to delete a custom unit $('#physical-units-table').on('click', '.button-units-delete', function() { let pk = $(this).attr('pk'); constructForm(`{% url "api-custom-unit-list" %}${pk}/`, { title: '{% trans "Delete Custom Unit" escape %}', method: 'DELETE', refreshTable: '#physical-units-table', }); }); // Callback to create a new custom unit $('#custom-unit-create').click(function() { constructForm('{% url "api-custom-unit-list" %}', { fields: { name: {}, definition: {}, symbol: {}, }, title: '{% trans "New Custom Unit" escape %}', method: 'POST', refreshTable: '#physical-units-table', }); }); }); // Javascript for project codes panel onPanelLoad('project-codes', function() { // Construct the project code table $('#project-code-table').bootstrapTable({ url: '{% url "api-project-code-list" %}', search: true, sortable: true, formatNoMatches: function() { return '{% trans "No project codes found" escape %}'; }, columns: [ { field: 'code', sortable: true, title: '{% trans "Project Code" escape %}', }, { field: 'responsible', title: '{% trans "Responsible" escape %}', formatter: function(value, row) { if (!row.responsible_detail) { return '-'; } var html = row.responsible_detail.name; if (row.responsible_detail.label == '{% trans "group" escape %}') { html += ``; } else { html += ``; } return html; } }, { field: 'description', sortable: false, title: '{% trans "Description" escape %}', formatter: function(value, row) { let html = value; let buttons = ''; buttons += makeEditButton('button-project-code-edit', row.pk, '{% trans "Edit Project Code" escape %}'); buttons += makeDeleteButton('button-project-code-delete', row.pk, '{% trans "Delete Project Code" escape %}'); html += wrapButtons(buttons); return html; } } ] }); $('#project-code-table').on('click', '.button-project-code-edit', function() { let pk = $(this).attr('pk'); constructForm(`{% url "api-project-code-list" %}${pk}/`, { title: '{% trans "Edit Project Code" escape %}', fields: { code: {}, description: {}, responsible: {}, }, refreshTable: '#project-code-table', }); }); $('#project-code-table').on('click', '.button-project-code-delete', function() { let pk = $(this).attr('pk'); constructForm(`{% url "api-project-code-list" %}${pk}/`, { title: '{% trans "Delete Project Code" escape %}', method: 'DELETE', refreshTable: '#project-code-table', }); }); $('#new-project-code').click(function() { // Construct a new project code constructForm('{% url "api-project-code-list" %}', { fields: { code: {}, description: {}, }, title: '{% trans "New Project Code" escape %}', method: 'POST', refreshTable: '#project-code-table', }); }) }); // Javascript for Part Category panel onPanelLoad('category', function() { $('#category-select').select2({ placeholder: '', width: '100%', ajax: { url: '{% url "api-part-category-list" %}', dataType: 'json', delay: 250, cache: false, data: function(params) { if (!params.page) { offset = 0; } else { offset = (params.page - 1) * 25; } return { search: params.term, offset: offset, limit: 25, }; }, processResults: function(response) { var data = []; var more = false; if ('count' in response && 'results' in response) { // Response is paginated data = response.results; // Any more data available? if (response.next) { more = true; } } else { // Non-paginated response data = response; } // Each 'row' must have the 'id' attribute for (var idx = 0; idx < data.length; idx++) { data[idx].id = data[idx].pk; data[idx].text = data[idx].pathstring; } // Ref: https://select2.org/data-sources/formats var results = { results: data, pagination: { more: more, } }; return results; } }, }); $('#cat-param-table').inventreeTable({ formatNoMatches: function() { return '{% trans "No category parameter templates found" escape %}'; }, columns: [ { field: 'pk', title: 'ID', visible: false, switchable: false, }, { field: 'parameter_template_detail.name', title: '{% trans "Parameter Template" escape %}', sortable: 'true', }, { field: 'category_detail.pathstring', title: '{% trans "Category" escape %}', }, { field: 'default_value', title: '{% trans "Default Value" escape %}', sortable: 'true', formatter: function(value, row, index, field) { let buttons = ''; buttons += makeEditButton('template-edit', row.pk, '{% trans "Edit Template" escape %}'); buttons += makeDeleteButton('template-delete', row.pk, '{% trans "Delete Template" escape %}'); let html = value html += wrapButtons(buttons); return html; } } ] }); $("#cat-param-table").on('click', '.template-edit', function() { var category = $('#category-select').val(); var pk = $(this).attr('pk'); constructForm(`/api/part/category/parameters/${pk}/`, { title: '{% trans "Edit Category Parameter Template" escape %}', fields: { parameter_template: {}, category: { icon: 'fa-sitemap', tree_picker: { url: '{% url "api-part-category-tree" %}', }, }, default_value: {}, }, onSuccess: function() { loadTemplateTable(pk); } }); }); $("#cat-param-table").on('click', '.template-delete', function() { var category = $('#category-select').val(); var pk = $(this).attr('pk'); var url = `/part/category/${category}/parameters/${pk}/delete/`; constructForm(`/api/part/category/parameters/${pk}/`, { method: 'DELETE', title: '{% trans "Delete Category Parameter Template" escape %}', onSuccess: function() { loadTemplateTable(pk); } }); }); function loadTemplateTable(pk) { var query = {}; if (pk) { query['category'] = pk; } // Load the parameter table $("#cat-param-table").bootstrapTable('refresh', { query: query, url: '{% url "api-part-category-parameter-list" %}', }); } // Initially load table with *all* categories loadTemplateTable(); $('body').on('change', '#category-select', function() { var pk = $(this).val(); loadTemplateTable(pk); }); $("#new-cat-param").click(function() { var pk = $('#category-select').val(); constructForm('{% url "api-part-category-parameter-list" %}', { title: '{% trans "Create Category Parameter Template" escape %}', method: 'POST', fields: { parameter_template: {}, category: { icon: 'fa-sitemap', value: pk, tree_picker: { url: '{% url "api-part-category-tree" %}', }, }, default_value: {}, }, onSuccess: function() { loadTemplateTable(pk); } }); }); }); // Javascript for the Part parameters settings panel onPanelLoad('part-parameters', function() { loadPartParameterTemplateTable("#param-table", {}); $("#new-param").click(function() { constructForm('{% url "api-part-parameter-template-list" %}', { fields: partParameterTemplateFields(), method: 'POST', title: '{% trans "Create Part Parameter Template" escape %}', refreshTable: '#param-table', }); }); }); // Javascript for the Part settings panel onPanelLoad('parts', function() { $("#import-part").click(function() { launchModalForm("{% url 'api-part-import' %}?reset", {}); }); }); // Javascript for the Stock settings panel onPanelLoad("stock", async function() { await loadApiIconPacks(); // Construct the stock location type table $('#location-type-table').bootstrapTable({ url: '{% url "api-location-type-list" %}', search: true, sortable: true, formatNoMatches: function() { return '{% trans "No stock location types found" escape %}'; }, columns: [ { field: 'icon', sortable: true, title: '{% trans "Icon" escape %}', width: "50px", formatter: function(value, row) { return `` } }, { field: 'name', sortable: true, title: '{% trans "Name" escape %}', }, { field: 'description', sortable: false, title: '{% trans "Description" escape %}', }, { field: 'location_count', sortable: true, title: '{% trans "Location count" escape %}', formatter: function(value, row) { let html = value; let buttons = ''; buttons += makeEditButton('button-location-type-edit', row.pk, '{% trans "Edit Location Type" escape %}'); buttons += makeDeleteButton('button-location-type-delete', row.pk, '{% trans "Delete Location type" escape %}'); html += wrapButtons(buttons); return html; } } ] }); $('#location-type-table').on('click', '.button-location-type-edit', function() { let pk = $(this).attr('pk'); constructForm(`{% url "api-location-type-list" %}${pk}/`, { title: '{% trans "Edit Location Type" escape %}', fields: stockLocationTypeFields(), refreshTable: '#location-type-table', }); }); $('#location-type-table').on('click', '.button-location-type-delete', function() { let pk = $(this).attr('pk'); constructForm(`{% url "api-location-type-list" %}${pk}/`, { title: '{% trans "Delete Location Type" escape %}', method: 'DELETE', refreshTable: '#location-type-table', }); }); $('#new-location-type').click(function() { // Construct a new location type constructForm('{% url "api-location-type-list" %}', { fields: stockLocationTypeFields(), title: '{% trans "New Location Type" escape %}', method: 'POST', refreshTable: '#location-type-table', }); }); }); // Javascript for the Stocktake settings panel onPanelLoad('stocktake', function() { {% if roles.stocktake.view %} var table = '#stocktake-report-table'; var filters = loadTableFilters('stocktakereport'); setupFilterList('stocktakereport', $(table), '#filter-list-stocktakereport'); $(table).inventreeTable({ url: '{% url "api-part-stocktake-report-list" %}', search: false, queryParams: filters, name: 'stocktakereport', showColumns: false, sidePagination: 'server', sortable: true, sortName: 'date', sortOrder: 'desc', columns: [ { field: 'report', title: '{% trans "Report" escape %}', formatter: function(value, row) { return attachmentLink(value); } }, { field: 'part_count', title: '{% trans "Part Count" escape %}', }, { field: 'date', title: '{% trans "Date" escape %}', sortable: true, formatter: function(value, row) { let html = renderDate(value); if (row.user_detail) { html += `${row.user_detail.username}`; } return html; } }, ] }); {% endif %} {% if roles.stocktake.add %} $('#btn-generate-stocktake').click(function() { generateStocktakeReport({ part: {}, category: { tree_picker: { url: '{% url "api-part-category-tree" %}', }, }, location: { tree_picker: { url: '{% url "api-location-tree" %}', }, }, generate_report: {}, update_parts: {}, }); }); {% endif %} }); // Javascript for plugins panel onPanelLoad('plugin', function() { {% plugins_enabled as plug %} loadPluginTable('#plugin-table', { custom: {% js_bool plug %}, }); {% if plug %} // Callback to install new plugin $("#install-plugin").click(function() { installPlugin(); }); // Callback to reload plugins $('#reload-plugins').click(function() { reloadPlugins(); }); {% endif %} });