+
+ {% block heading %}
+
{% trans "Upload Bill of Materials" %}
+ {{ wizard.form.media }}
+ {% endblock %}
+
+
+ {% block details %}
-{% block form_alert %}
-
-
{% trans "Requirements for BOM upload" %}:
-
- - {% trans "The BOM file must contain the required named columns as provided in the " %} {% trans "BOM Upload Template" %}
- - {% trans "Each part must already exist in the database" %}
-
-
-{% endblock %}
+
{% blocktrans with step=wizard.steps.step1 count=wizard.steps.count %}Step {{step}} of {{count}}{% endblocktrans %}
+ {% if description %}- {{ description }}{% endif %}
-
{% blocktrans with step=wizard.steps.step1 count=wizard.steps.count %}Step {{step}} of {{count}}{% endblocktrans %}
-{% if description %}- {{ description }}{% endif %}
+
-{% endblock form_buttons_bottom %}
+ {% block form_buttons_bottom %}
+ {% if wizard.steps.prev %}
+
+ {% endif %}
+
+
+ {% endblock form_buttons_bottom %}
-{% endblock %}
\ No newline at end of file
+ {% endblock details %}
+
+
+{% endblock page_content %}
+
+{% block js_ready %}
+{{ block.super }}
+{% endblock js_ready %}
diff --git a/InvenTree/part/templates/part/detail.html b/InvenTree/part/templates/part/detail.html
index 165ea37e66..846320b8e1 100644
--- a/InvenTree/part/templates/part/detail.html
+++ b/InvenTree/part/templates/part/detail.html
@@ -333,43 +333,302 @@
{% block js_ready %}
{{ block.super }}
- enableNavbar({
- label: 'part',
- toggleId: '#part-menu-toggle',
- });
-
-
- loadBuildOrderAllocationTable("#build-order-allocation-table", {
- params: {
- part: {{ part.id }},
+ // Load the "suppliers" tab
+ onPanelLoad('suppliers', function() {
+ function reloadSupplierPartTable() {
+ $('#supplier-part-table').bootstrapTable('refresh');
}
+
+ $('#supplier-create').click(function () {
+
+ createSupplierPart({
+ part: {{ part.pk }},
+ onSuccess: reloadSupplierPartTable,
+ });
+ });
+
+ $("#supplier-part-delete").click(function() {
+
+ var selections = $("#supplier-part-table").bootstrapTable("getSelections");
+
+ var requests = [];
+
+ showQuestionDialog(
+ '{% trans "Delete Supplier Parts?" %}',
+ '{% trans "All selected supplier parts will be deleted" %}',
+ {
+ accept: function() {
+ selections.forEach(function(part) {
+ var url = `/api/company/part/${part.pk}/`;
+
+ requests.push(inventreeDelete(url));
+ });
+
+ $.when.apply($, requests).done(function() {
+ reloadSupplierPartTable();
+ });
+ }
+ }
+ );
+ });
+
+ loadSupplierPartTable(
+ "#supplier-part-table",
+ "{% url 'api-supplier-part-list' %}",
+ {
+ params: {
+ part: {{ part.id }},
+ part_detail: false,
+ supplier_detail: true,
+ manufacturer_detail: true,
+ },
+ }
+ );
+
+ linkButtonsToSelection($("#supplier-part-table"), ['#supplier-part-options']);
+
+ loadManufacturerPartTable(
+ '#manufacturer-part-table',
+ "{% url 'api-manufacturer-part-list' %}",
+ {
+ params: {
+ part: {{ part.id }},
+ part_detail: true,
+ manufacturer_detail: true,
+ },
+ }
+ );
+
+ linkButtonsToSelection($("#manufacturer-part-table"), ['#manufacturer-part-options']);
+
+ $("#manufacturer-part-delete").click(function() {
+
+ var selections = $("#manufacturer-part-table").bootstrapTable("getSelections");
+
+ deleteManufacturerParts(selections, {
+ onSuccess: function() {
+ $("#manufacturer-part-table").bootstrapTable("refresh");
+ }
+ });
+ });
+
+ $('#manufacturer-create').click(function () {
+
+ createManufacturerPart({
+ part: {{ part.pk }},
+ onSuccess: function() {
+ $("#manufacturer-part-table").bootstrapTable("refresh");
+ }
+ });
+ });
});
- loadSalesOrderAllocationTable("#sales-order-allocation-table", {
- params: {
- part: {{ part.id }},
- }
- });
+ // Load the "builds" tab
+ onPanelLoad("build-orders", function() {
- loadPartTable('#used-table',
- '{% url "api-part-list" %}',
- {
+ $("#start-build").click(function() {
+ newBuildOrder({
+ part: {{ part.pk }},
+ });
+ });
+
+ loadBuildTable($("#build-table"), {
+ url: "{% url 'api-build-list' %}",
params: {
- uses: {{ part.pk }},
- },
- filterTarget: '#filter-list-usedin',
- }
- );
+ part: {{ part.id }},
+ }
+ });
- // Load the BOM table data
- loadBomTable($("#bom-table"), {
- editable: {{ editing_enabled }},
- bom_url: "{% url 'api-bom-list' %}",
- part_url: "{% url 'api-part-list' %}",
- parent_id: {{ part.id }} ,
- sub_part_detail: true,
+ loadBuildOrderAllocationTable("#build-order-allocation-table", {
+ params: {
+ part: {{ part.id }},
+ }
+ });
+
});
+ // Load the "sales orders" tab
+ onPanelLoad("sales-orders", function() {
+ loadSalesOrderAllocationTable("#sales-order-allocation-table", {
+ params: {
+ part: {{ part.id }},
+ }
+ });
+ });
+
+ // Load the "used in" tab
+ onPanelLoad("used-in", function() {
+ loadPartTable('#used-table',
+ '{% url "api-part-list" %}',
+ {
+ params: {
+ uses: {{ part.pk }},
+ },
+ filterTarget: '#filter-list-usedin',
+ }
+ );
+ });
+
+ // Load the "BOM" tab
+ onPanelLoad("bom", function() {
+ // Load the BOM table data
+ loadBomTable($("#bom-table"), {
+ editable: {{ editing_enabled }},
+ bom_url: "{% url 'api-bom-list' %}",
+ part_url: "{% url 'api-part-list' %}",
+ parent_id: {{ part.id }} ,
+ sub_part_detail: true,
+ });
+
+ linkButtonsToSelection($("#bom-table"),
+ [
+ "#bom-item-delete",
+ ]
+ );
+
+ {% if editing_enabled %}
+ $("#editing-finished").click(function() {
+ location.href = "{% url 'part-detail' part.id %}?display=bom";
+ });
+
+ $('#bom-item-delete').click(function() {
+
+ // Get a list of the selected BOM items
+ var rows = $("#bom-table").bootstrapTable('getSelections');
+
+ // TODO - In the future, display (in the dialog) which items are going to be deleted
+
+ showQuestionDialog(
+ '{% trans "Delete selected BOM items?" %}',
+ '{% trans "All selected BOM items will be deleted" %}',
+ {
+ accept: function() {
+
+ // Keep track of each DELETE request
+ var requests = [];
+
+ rows.forEach(function(row) {
+ requests.push(
+ inventreeDelete(
+ `/api/bom/${row.pk}/`,
+ )
+ );
+ });
+
+ // Wait for *all* the requests to complete
+ $.when.apply($, requests).done(function() {
+ location.reload();
+ });
+ }
+ }
+ );
+ });
+
+ $('#bom-upload').click(function() {
+ location.href = "{% url 'upload-bom' part.id %}";
+ });
+
+ $('#bom-duplicate').click(function() {
+ launchModalForm(
+ "{% url 'duplicate-bom' part.id %}",
+ {
+ success: function() {
+ $('#bom-table').bootstrapTable('refresh');
+ }
+ }
+ );
+ });
+
+ $("#bom-item-new").click(function () {
+
+ var fields = bomItemFields();
+
+ fields.part.value = {{ part.pk }};
+ fields.sub_part.filters = {
+ active: true,
+ };
+
+ constructForm('{% url "api-bom-list" %}', {
+ fields: fields,
+ method: 'POST',
+ title: '{% trans "Create BOM Item" %}',
+ onSuccess: function() {
+ $('#bom-table').bootstrapTable('refresh');
+ }
+ });
+ });
+
+ {% else %}
+
+ $("#validate-bom").click(function() {
+ launchModalForm(
+ "{% url 'bom-validate' part.id %}",
+ {
+ reload: true,
+ }
+ );
+ });
+
+ $("#edit-bom").click(function () {
+ location.href = "{% url 'part-detail' part.id %}?display=bom&edit=1";
+ });
+
+ $("#download-bom").click(function () {
+ launchModalForm("{% url 'bom-export' part.id %}",
+ {
+ success: function(response) {
+ location.href = response.url;
+ },
+ }
+ );
+ });
+
+ {% endif %}
+
+ $("#print-bom-report").click(function() {
+ printBomReports([{{ part.pk }}]);
+ });
+ });
+
+ // Load the "related parts" tab
+ onPanelLoad("related-parts", function() {
+ $('#table-related-part').inventreeTable({
+ });
+
+ $("#add-related-part").click(function() {
+ launchModalForm("{% url 'part-related-create' %}", {
+ data: {
+ part: {{ part.id }},
+ },
+ reload: true,
+ });
+ });
+
+ $('.delete-related-part').click(function() {
+ var button = $(this);
+
+ launchModalForm(button.attr('url'), {
+ reload: true,
+ });
+ });
+ });
+
+ // Load the "variants" tab
+ onPanelLoad("variants", function() {
+ loadPartVariantTable($('#variants-table'), {{ part.pk }});
+
+ $('#new-variant').click(function() {
+
+ duplicatePart(
+ {{ part.pk}},
+ {
+ variant: true,
+ }
+ );
+ });
+ });
+
+
// Load the BOM table data in the pricing view
loadBomTable($("#bom-pricing-table"), {
editable: {{ editing_enabled }},
@@ -379,168 +638,25 @@
sub_part_detail: true,
});
-
- linkButtonsToSelection($("#bom-table"),
- [
- "#bom-item-delete",
- ]
- );
-
- {% if editing_enabled %}
- $("#editing-finished").click(function() {
- location.href = "{% url 'part-detail' part.id %}?display=bom";
- });
-
- $('#bom-item-delete').click(function() {
-
- // Get a list of the selected BOM items
- var rows = $("#bom-table").bootstrapTable('getSelections');
-
- // TODO - In the future, display (in the dialog) which items are going to be deleted
-
- showQuestionDialog(
- '{% trans "Delete selected BOM items?" %}',
- '{% trans "All selected BOM items will be deleted" %}',
- {
- accept: function() {
-
- // Keep track of each DELETE request
- var requests = [];
-
- rows.forEach(function(row) {
- requests.push(
- inventreeDelete(
- `/api/bom/${row.pk}/`,
- )
- );
- });
-
- // Wait for *all* the requests to complete
- $.when.apply($, requests).done(function() {
- location.reload();
- });
- }
- }
- );
- });
-
- $('#bom-upload').click(function() {
- location.href = "{% url 'upload-bom' part.id %}";
- });
-
- $('#bom-duplicate').click(function() {
- launchModalForm(
- "{% url 'duplicate-bom' part.id %}",
- {
- success: function() {
- $('#bom-table').bootstrapTable('refresh');
- }
- }
- );
- });
-
- $("#bom-item-new").click(function () {
-
- var fields = bomItemFields();
-
- fields.part.value = {{ part.pk }};
- fields.sub_part.filters = {
- active: true,
- };
-
- constructForm('{% url "api-bom-list" %}', {
- fields: fields,
- method: 'POST',
- title: '{% trans "Create BOM Item" %}',
- onSuccess: function() {
- $('#bom-table').bootstrapTable('refresh');
- }
- });
- });
-
- {% else %}
-
- $("#validate-bom").click(function() {
- launchModalForm(
- "{% url 'bom-validate' part.id %}",
- {
- reload: true,
- }
- );
- });
-
- $("#edit-bom").click(function () {
- location.href = "{% url 'part-detail' part.id %}?display=bom&edit=1";
- });
-
- $("#download-bom").click(function () {
- launchModalForm("{% url 'bom-export' part.id %}",
- {
- success: function(response) {
- location.href = response.url;
- },
- }
- );
- });
-
- {% endif %}
-
- $("#print-bom-report").click(function() {
- printBomReports([{{ part.pk }}]);
- });
-
- $("#start-build").click(function() {
- newBuildOrder({
- part: {{ part.pk }},
- });
- });
-
- loadBuildTable($("#build-table"), {
- url: "{% url 'api-build-list' %}",
- params: {
- part: {{ part.id }},
- }
- });
-
- $('#table-related-part').inventreeTable({
- });
-
- $("#add-related-part").click(function() {
- launchModalForm("{% url 'part-related-create' %}", {
- data: {
+ onPanelLoad("purchase-orders", function() {
+ loadPurchaseOrderTable($("#purchase-order-table"), {
+ url: "{% url 'api-po-list' %}",
+ params: {
part: {{ part.id }},
},
- reload: true,
});
});
- $('.delete-related-part').click(function() {
- var button = $(this);
-
- launchModalForm(button.attr('url'), {
- reload: true,
- });
+ onPanelLoad("sales-orders", function() {
+ loadSalesOrderTable($("#sales-order-table"), {
+ url: "{% url 'api-so-list' %}",
+ params: {
+ part: {{ part.id }},
+ },
+ });
});
- loadPartVariantTable($('#variants-table'), {{ part.pk }});
- $('#new-variant').click(function() {
-
- duplicatePart(
- {{ part.pk}},
- {
- variant: true,
- }
- );
- });
-
- loadPurchaseOrderTable($("#purchase-order-table"), {
- url: "{% url 'api-po-list' %}",
- params: {
- part: {{ part.id }},
- },
- });
-
$("#part-order2").click(function() {
launchModalForm("{% url 'order-parts' %}", {
data: {
@@ -550,113 +666,111 @@
});
});
- loadSalesOrderTable($("#sales-order-table"), {
- url: "{% url 'api-so-list' %}",
- params: {
- part: {{ part.id }},
- },
- });
-
- loadPartTestTemplateTable(
- $("#test-template-table"),
- {
- part: {{ part.pk }},
- params: {
+ onPanelLoad("test-templates", function() {
+ loadPartTestTemplateTable(
+ $("#test-template-table"),
+ {
part: {{ part.pk }},
- }
- }
- );
-
- function reloadTable() {
- $("#test-template-table").bootstrapTable("refresh");
- }
-
- $("#add-test-template").click(function() {
-
- constructForm('{% url "api-part-test-template-list" %}', {
- method: 'POST',
- fields: {
- test_name: {},
- description: {},
- required: {},
- requires_value: {},
- requires_attachment: {},
- part: {
- value: {{ part.pk }},
- hidden: true,
+ params: {
+ part: {{ part.pk }},
}
- },
- title: '{% trans "Add Test Result Template" %}',
- onSuccess: reloadTable
- });
- });
-
- $("#test-template-table").on('click', '.button-test-edit', function() {
- var pk = $(this).attr('pk');
-
- var url = `/api/part/test-template/${pk}/`;
-
- constructForm(url, {
- fields: {
- test_name: {},
- description: {},
- required: {},
- requires_value: {},
- requires_attachment: {},
- },
- title: '{% trans "Edit Test Result Template" %}',
- onSuccess: reloadTable,
- });
- });
-
- $("#test-template-table").on('click', '.button-test-delete', function() {
- var pk = $(this).attr('pk');
-
- var url = `/api/part/test-template/${pk}/`;
-
- constructForm(url, {
- method: 'DELETE',
- title: '{% trans "Delete Test Result Template" %}',
- onSuccess: reloadTable,
- });
- });
-
- $('#add-stock-item').click(function () {
- createNewStockItem({
- reload: true,
- data: {
- part: {{ part.id }},
}
- });
- });
+ );
- loadStockTable($("#stock-table"), {
- params: {
- part: {{ part.id }},
- location_detail: true,
- part_detail: true,
- supplier_part_detail: true,
- },
- groupByField: 'location',
- buttons: [
- '#stock-options',
- ],
- url: "{% url 'api-stock-list' %}",
- });
-
- $("#stock-export").click(function() {
-
- exportStock({
- part: {{ part.pk }}
- });
- });
-
- $('#item-create').click(function () {
- createNewStockItem({
- reload: true,
- data: {
- part: {{ part.id }},
+ $("#add-test-template").click(function() {
+
+ function reloadTestTemplateTable() {
+ $("#test-template-table").bootstrapTable("refresh");
}
+
+ constructForm('{% url "api-part-test-template-list" %}', {
+ method: 'POST',
+ fields: {
+ test_name: {},
+ description: {},
+ required: {},
+ requires_value: {},
+ requires_attachment: {},
+ part: {
+ value: {{ part.pk }},
+ hidden: true,
+ }
+ },
+ title: '{% trans "Add Test Result Template" %}',
+ onSuccess: reloadTestTemplateTable
+ });
+
+ $("#test-template-table").on('click', '.button-test-edit', function() {
+ var pk = $(this).attr('pk');
+
+ var url = `/api/part/test-template/${pk}/`;
+
+ constructForm(url, {
+ fields: {
+ test_name: {},
+ description: {},
+ required: {},
+ requires_value: {},
+ requires_attachment: {},
+ },
+ title: '{% trans "Edit Test Result Template" %}',
+ onSuccess: reloadTestTemplateTable,
+ });
+ });
+
+ $("#test-template-table").on('click', '.button-test-delete', function() {
+ var pk = $(this).attr('pk');
+
+ var url = `/api/part/test-template/${pk}/`;
+
+ constructForm(url, {
+ method: 'DELETE',
+ title: '{% trans "Delete Test Result Template" %}',
+ onSuccess: reloadTestTemplateTable,
+ });
+ });
+
+ });
+ });
+
+ onPanelLoad("part-stock", function() {
+ $('#add-stock-item').click(function () {
+ createNewStockItem({
+ reload: true,
+ data: {
+ part: {{ part.id }},
+ }
+ });
+ });
+
+ loadStockTable($("#stock-table"), {
+ params: {
+ part: {{ part.id }},
+ location_detail: true,
+ part_detail: true,
+ supplier_part_detail: true,
+ },
+ groupByField: 'location',
+ buttons: [
+ '#stock-options',
+ ],
+ url: "{% url 'api-stock-list' %}",
+ });
+
+ $("#stock-export").click(function() {
+
+ exportStock({
+ part: {{ part.pk }}
+ });
+ });
+
+ $('#item-create').click(function () {
+ createNewStockItem({
+ reload: true,
+ data: {
+ part: {{ part.id }},
+ }
+ });
});
});
@@ -690,206 +804,124 @@
);
});
- loadPartParameterTable(
- '#parameter-table',
- '{% url "api-part-parameter-list" %}',
- {
- params: {
- part: {{ part.pk }},
- }
- }
- );
-
- $('#param-table').inventreeTable({
- });
-
- {% if roles.part.add %}
- $('#param-create').click(function() {
-
- constructForm('{% url "api-part-parameter-list" %}', {
- method: 'POST',
- fields: {
- part: {
- value: {{ part.pk }},
- hidden: true,
- },
- template: {},
- data: {},
- },
- title: '{% trans "Add Parameter" %}',
- onSuccess: function() {
- $('#parameter-table').bootstrapTable('refresh');
- }
- });
- });
- {% endif %}
-
- $('.param-edit').click(function() {
- var button = $(this);
-
- launchModalForm(button.attr('url'), {
- reload: true,
- });
- });
-
- $('.param-delete').click(function() {
- var button = $(this);
-
- launchModalForm(button.attr('url'), {
- reload: true,
- });
- });
-
- loadAttachmentTable(
- '{% url "api-part-attachment-list" %}',
- {
- filters: {
- part: {{ part.pk }},
- },
- onEdit: function(pk) {
- var url = `/api/part/attachment/${pk}/`;
-
- constructForm(url, {
- fields: {
- comment: {},
- },
- title: '{% trans "Edit Attachment" %}',
- onSuccess: reloadAttachmentTable,
- });
- },
- onDelete: function(pk) {
- var url = `/api/part/attachment/${pk}/`;
-
- constructForm(url, {
- method: 'DELETE',
- confirmMessage: '{% trans "Confirm Delete Operation" %}',
- title: '{% trans "Delete Attachment" %}',
- onSuccess: reloadAttachmentTable,
- });
- }
- }
- );
-
- enableDragAndDrop(
- '#attachment-dropzone',
- '{% url "api-part-attachment-list" %}',
- {
- data: {
- part: {{ part.id }},
- },
- label: 'attachment',
- success: function(data, status, xhr) {
- reloadAttachmentTable();
- }
- }
- );
-
- $("#new-attachment").click(function() {
-
- constructForm(
- '{% url "api-part-attachment-list" %}',
+ onPanelLoad("part-parameters", function() {
+ loadPartParameterTable(
+ '#parameter-table',
+ '{% url "api-part-parameter-list" %}',
{
+ params: {
+ part: {{ part.pk }},
+ }
+ }
+ );
+
+ $('#param-table').inventreeTable({
+ });
+
+ {% if roles.part.add %}
+ $('#param-create').click(function() {
+
+ constructForm('{% url "api-part-parameter-list" %}', {
method: 'POST',
fields: {
- attachment: {},
- comment: {},
part: {
value: {{ part.pk }},
hidden: true,
- }
+ },
+ template: {},
+ data: {},
},
- onSuccess: reloadAttachmentTable,
- title: '{% trans "Add Attachment" %}',
- }
- )
- });
-
- function reloadSupplierPartTable() {
- $('#supplier-part-table').bootstrapTable('refresh');
- }
-
- $('#supplier-create').click(function () {
-
- createSupplierPart({
- part: {{ part.pk }},
- onSuccess: reloadSupplierPartTable,
+ title: '{% trans "Add Parameter" %}',
+ onSuccess: function() {
+ $('#parameter-table').bootstrapTable('refresh');
+ }
+ });
+ });
+ {% endif %}
+
+ $('.param-edit').click(function() {
+ var button = $(this);
+
+ launchModalForm(button.attr('url'), {
+ reload: true,
+ });
+ });
+
+ $('.param-delete').click(function() {
+ var button = $(this);
+
+ launchModalForm(button.attr('url'), {
+ reload: true,
+ });
});
});
- $("#supplier-part-delete").click(function() {
-
- var selections = $("#supplier-part-table").bootstrapTable("getSelections");
-
- var requests = [];
-
- showQuestionDialog(
- '{% trans "Delete Supplier Parts?" %}',
- '{% trans "All selected supplier parts will be deleted" %}',
+ onPanelLoad("part-attachments", function() {
+ loadAttachmentTable(
+ '{% url "api-part-attachment-list" %}',
{
- accept: function() {
- selections.forEach(function(part) {
- var url = `/api/company/part/${part.pk}/`;
-
- requests.push(inventreeDelete(url));
+ filters: {
+ part: {{ part.pk }},
+ },
+ onEdit: function(pk) {
+ var url = `/api/part/attachment/${pk}/`;
+
+ constructForm(url, {
+ fields: {
+ comment: {},
+ },
+ title: '{% trans "Edit Attachment" %}',
+ onSuccess: reloadAttachmentTable,
});
-
- $.when.apply($, requests).done(function() {
- reloadSupplierPartTable();
+ },
+ onDelete: function(pk) {
+ var url = `/api/part/attachment/${pk}/`;
+
+ constructForm(url, {
+ method: 'DELETE',
+ confirmMessage: '{% trans "Confirm Delete Operation" %}',
+ title: '{% trans "Delete Attachment" %}',
+ onSuccess: reloadAttachmentTable,
});
}
}
);
- });
-
- loadSupplierPartTable(
- "#supplier-part-table",
- "{% url 'api-supplier-part-list' %}",
- {
- params: {
- part: {{ part.id }},
- part_detail: false,
- supplier_detail: true,
- manufacturer_detail: true,
- },
- }
- );
-
- linkButtonsToSelection($("#supplier-part-table"), ['#supplier-part-options']);
-
- loadManufacturerPartTable(
- '#manufacturer-part-table',
- "{% url 'api-manufacturer-part-list' %}",
- {
- params: {
- part: {{ part.id }},
- part_detail: true,
- manufacturer_detail: true,
- },
- }
- );
-
- linkButtonsToSelection($("#manufacturer-part-table"), ['#manufacturer-part-options']);
-
- $("#manufacturer-part-delete").click(function() {
-
- var selections = $("#manufacturer-part-table").bootstrapTable("getSelections");
-
- deleteManufacturerParts(selections, {
- onSuccess: function() {
- $("#manufacturer-part-table").bootstrapTable("refresh");
+
+ enableDragAndDrop(
+ '#attachment-dropzone',
+ '{% url "api-part-attachment-list" %}',
+ {
+ data: {
+ part: {{ part.id }},
+ },
+ label: 'attachment',
+ success: function(data, status, xhr) {
+ reloadAttachmentTable();
+ }
}
+ );
+
+ $("#new-attachment").click(function() {
+
+ constructForm(
+ '{% url "api-part-attachment-list" %}',
+ {
+ method: 'POST',
+ fields: {
+ attachment: {},
+ comment: {},
+ part: {
+ value: {{ part.pk }},
+ hidden: true,
+ }
+ },
+ onSuccess: reloadAttachmentTable,
+ title: '{% trans "Add Attachment" %}',
+ }
+ )
});
});
- $('#manufacturer-create').click(function () {
-
- createManufacturerPart({
- part: {{ part.pk }},
- onSuccess: function() {
- $("#manufacturer-part-table").bootstrapTable("refresh");
- }
- });
- });
{% default_currency as currency %}
diff --git a/InvenTree/part/templates/part/part_base.html b/InvenTree/part/templates/part/part_base.html
index 0c29f1c26b..0d9cbd9907 100644
--- a/InvenTree/part/templates/part/part_base.html
+++ b/InvenTree/part/templates/part/part_base.html
@@ -213,6 +213,7 @@
@@ -305,6 +306,11 @@
{% block js_ready %}
{{ block.super }}
+ enableNavbar({
+ label: 'part',
+ toggleId: '#part-menu-toggle',
+ });
+
{% if part.image %}
$('#part-thumb').click(function() {
showModalImage('{{ part.image.url }}');
diff --git a/InvenTree/part/templatetags/inventree_extras.py b/InvenTree/part/templatetags/inventree_extras.py
index dce3d248e5..b12a59f136 100644
--- a/InvenTree/part/templatetags/inventree_extras.py
+++ b/InvenTree/part/templatetags/inventree_extras.py
@@ -204,6 +204,7 @@ def settings_value(key, *args, **kwargs):
if 'user' in kwargs:
return InvenTreeUserSetting.get_setting(key, user=kwargs['user'])
+
return InvenTreeSetting.get_setting(key)
diff --git a/InvenTree/report/api.py b/InvenTree/report/api.py
index f09a52f272..2129b31627 100644
--- a/InvenTree/report/api.py
+++ b/InvenTree/report/api.py
@@ -254,10 +254,13 @@ class ReportPrintMixin:
else:
pdf = outputs[0].get_document().write_pdf()
+ inline = common.models.InvenTreeUserSetting.get_setting('REPORT_INLINE', user=request.user)
+
return InvenTree.helpers.DownloadFile(
pdf,
report_name,
- content_type='application/pdf'
+ content_type='application/pdf',
+ inline=inline,
)
diff --git a/InvenTree/stock/templates/stock/item.html b/InvenTree/stock/templates/stock/item.html
index d380ea3369..19295d1198 100644
--- a/InvenTree/stock/templates/stock/item.html
+++ b/InvenTree/stock/templates/stock/item.html
@@ -3,6 +3,7 @@
{% load static %}
{% load inventree_extras %}
{% load i18n %}
+{% load l10n %}
{% load markdownify %}
{% block menubar %}
@@ -152,7 +153,7 @@
{
stock_item: {{ item.pk }},
part: {{ item.part.pk }},
- quantity: {{ item.quantity }},
+ quantity: {{ item.quantity|unlocalize }},
}
);
@@ -395,4 +396,4 @@
url: "{% url 'api-stock-tracking-list' %}",
});
-{% endblock %}
\ No newline at end of file
+{% endblock %}
diff --git a/InvenTree/templates/InvenTree/settings/navbar.html b/InvenTree/templates/InvenTree/settings/navbar.html
index 83bbc10fe9..e7ea17f91f 100644
--- a/InvenTree/templates/InvenTree/settings/navbar.html
+++ b/InvenTree/templates/InvenTree/settings/navbar.html
@@ -30,6 +30,18 @@
+
+
+ {% trans "Labels" %}
+
+
+
+
+
+ {% trans "Reports" %}
+
+
+