{% load i18n %} /* globals constructForm, imageHoverIcon, inventreeGet, inventreePut, launchModalForm, loadTableFilters, makePartIcons, renderLink, setupFilterList, yesNoLabel, */ /* exported newPartFromBomWizard, loadBomTable, loadUsedInTable, removeRowFromBomWizard, removeColFromBomWizard, */ /* BOM management functions. * Requires follwing files to be loaded first: * - api.js * - part.js * - modals.js */ function bomItemFields() { return { part: { hidden: true, }, sub_part: { secondary: { title: '{% trans "New Part" %}', fields: function() { var fields = partFields(); // Set to a "component" part fields.component.value = true; return fields; }, groups: partGroups(), } }, quantity: {}, reference: {}, overage: {}, note: {}, allow_variants: {}, inherited: {}, optional: {}, }; } function reloadBomTable(table) { table.bootstrapTable('refresh'); } function removeRowFromBomWizard(e) { /* Remove a row from BOM upload wizard */ e = e || window.event; var src = e.target || e.srcElement; var table = $(src).closest('table'); // Which column was clicked? var row = $(src).closest('tr'); row.remove(); var rowNum = 1; var colNum = 0; table.find('tr').each(function() { colNum++; if (colNum >= 3) { var cell = $(this).find('td:eq(1)'); cell.text(rowNum++); } }); } function removeColFromBomWizard(e) { /* Remove a column from BOM upload wizard */ e = e || window.event; var src = e.target || e.srcElement; // Which column was clicked? var col = $(src).closest('th').index(); var table = $(src).closest('table'); table.find('tr').each(function() { this.removeChild(this.cells[col]); }); } function newPartFromBomWizard(e) { /* Create a new part directly from the BOM wizard. */ e = e || window.event; var src = e.target || e.srcElement; var row = $(src).closest('tr'); launchModalForm('/part/new/', { data: { 'description': row.attr('part-description'), 'name': row.attr('part-name'), }, success: function(response) { /* A new part has been created! Push it as an option. */ var select = row.attr('part-select'); var option = new Option(response.text, response.pk, true, true); $(select).append(option).trigger('change'); } }); } /* * Launch a modal dialog displaying the "substitute parts" for a particular BomItem * * If editable, allows substitutes to be added and deleted */ function bomSubstitutesDialog(bom_item_id, substitutes, options={}) { // Reload data for the parent table function reloadParentTable() { if (options.table) { options.table.bootstrapTable('refresh'); } } // Extract a list of all existing "substitute" id values function getSubstituteIdValues(modal) { var id_values = []; $(modal).find('.substitute-row').each(function(el) { var part = $(this).attr('part'); id_values.push(part); }); return id_values; } function renderSubstituteRow(substitute) { var pk = substitute.pk; var part = substitute.part_detail; var thumb = thumbnailImage(part.thumbnail || part.image); var buttons = ''; buttons += makeIconButton('fa-times icon-red', 'button-row-remove', pk, '{% trans "Remove substitute part" %}'); // Render a single row var html = `
{% trans "Part" %} | {% trans "Description" %} |
---|