Merge pull request #1782 from SchrodingersGat/company-rendering

Improve rendering of "Company" in API form
This commit is contained in:
Oliver 2021-07-09 12:31:31 +10:00 committed by GitHub
commit c45e2d682e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 60 additions and 30 deletions

View File

@ -747,8 +747,15 @@ class PurchaseOrderLineItem(OrderLineItem):
) )
def get_base_part(self): def get_base_part(self):
""" Return the base-part for the line item """ """
return self.part.part Return the base part.Part object for the line item
Note: Returns None if the SupplierPart is not set!
"""
if self.part is None:
return None
else:
return self.part.part
# TODO - Function callback for when the SupplierPart is deleted? # TODO - Function callback for when the SupplierPart is deleted?

View File

@ -179,7 +179,11 @@ $("#po-table").inventreeTable({
field: 'supplier_part_detail.SKU', field: 'supplier_part_detail.SKU',
title: '{% trans "SKU" %}', title: '{% trans "SKU" %}',
formatter: function(value, row, index, field) { formatter: function(value, row, index, field) {
return renderLink(value, `/supplier-part/${row.part}/`); if (value) {
return renderLink(value, `/supplier-part/${row.part}/`);
} else {
return '-';
}
}, },
}, },
{ {
@ -188,7 +192,7 @@ $("#po-table").inventreeTable({
field: 'supplier_part_detail.MPN', field: 'supplier_part_detail.MPN',
title: '{% trans "MPN" %}', title: '{% trans "MPN" %}',
formatter: function(value, row, index, field) { formatter: function(value, row, index, field) {
if (row.supplier_part_detail.manufacturer_part) { if (row.supplier_part_detail && row.supplier_part_detail.manufacturer_part) {
return renderLink(value, `/manufacturer-part/${row.supplier_part_detail.manufacturer_part.pk}/`); return renderLink(value, `/manufacturer-part/${row.supplier_part_detail.manufacturer_part.pk}/`);
} else { } else {
return ""; return "";

View File

@ -1,5 +1,20 @@
{% load i18n %} {% load i18n %}
function blankImage() {
return `/static/img/blank_image.png`;
}
// Render a select2 thumbnail image
function select2Thumbnail(image) {
if (!image) {
image = blankImage();
}
return `<img src='${image}' class='select2-thumbnail'>`;
}
/* /*
* This file contains functions for rendering various InvenTree database models, * This file contains functions for rendering various InvenTree database models,
* in particular for displaying them in modal forms in a 'select2' context. * in particular for displaying them in modal forms in a 'select2' context.
@ -15,8 +30,10 @@
// Renderer for "Company" model // Renderer for "Company" model
function renderCompany(name, data, parameters, options) { function renderCompany(name, data, parameters, options) {
var html = select2Thumbnail(data.image);
var html = `<span>${data.name}</span> - <i>${data.description}</i>`; html += `<span><b>${data.name}</b></span> - <i>${data.description}</i>`;
html += `<span class='float-right'>{% trans "Company ID" %}: ${data.pk}</span>`; html += `<span class='float-right'>{% trans "Company ID" %}: ${data.pk}</span>`;
@ -27,11 +44,7 @@ function renderCompany(name, data, parameters, options) {
// Renderer for "StockItem" model // Renderer for "StockItem" model
function renderStockItem(name, data, parameters, options) { function renderStockItem(name, data, parameters, options) {
var image = data.part_detail.thumbnail || data.part_detail.image; var image = data.part_detail.thumbnail || data.part_detail.image || blankImage();
if (!image) {
image = `/static/img/blank_image.png`;
}
var html = `<img src='${image}' class='select2-thumbnail'>`; var html = `<img src='${image}' class='select2-thumbnail'>`;
@ -72,15 +85,13 @@ function renderStockLocation(name, data, parameters, options) {
function renderBuild(name, data, parameters, options) { function renderBuild(name, data, parameters, options) {
var image = ''; var image = null;
if (data.part_detail && data.part_detail.thumbnail) { if (data.part_detail && data.part_detail.thumbnail) {
image = data.part_detail.thumbnail; image = data.part_detail.thumbnail;
} else { }
image = `/static/img/blank_image.png`;
}
var html = `<img src='${image}' class='select2-thumbnail'>`; var html = select2Thumbnail(image);
html += `<span><b>${data.reference}</b></span> - ${data.quantity} x ${data.part_detail.full_name}`; html += `<span><b>${data.reference}</b></span> - ${data.quantity} x ${data.part_detail.full_name}`;
html += `<span class='float-right'>{% trans "Build ID" %}: ${data.pk}</span>`; html += `<span class='float-right'>{% trans "Build ID" %}: ${data.pk}</span>`;
@ -94,13 +105,7 @@ function renderBuild(name, data, parameters, options) {
// Renderer for "Part" model // Renderer for "Part" model
function renderPart(name, data, parameters, options) { function renderPart(name, data, parameters, options) {
var image = data.image; var html = select2Thumbnail(data.image);
if (!image) {
image = `/static/img/blank_image.png`;
}
var html = `<img src='${image}' class='select2-thumbnail'>`;
html += ` <span>${data.full_name || data.name}</span>`; html += ` <span>${data.full_name || data.name}</span>`;
@ -131,7 +136,6 @@ function renderOwner(name, data, parameters, options) {
var html = `<span>${data.name}</span>`; var html = `<span>${data.name}</span>`;
switch (data.label) { switch (data.label) {
case 'user': case 'user':
html += `<span class='float-right fas fa-user'></span>`; html += `<span class='float-right fas fa-user'></span>`;
@ -177,13 +181,21 @@ function renderPartParameterTemplate(name, data, parameters, options) {
// Rendered for "SupplierPart" model // Rendered for "SupplierPart" model
function renderSupplierPart(name, data, parameters, options) { function renderSupplierPart(name, data, parameters, options) {
var image = data.supplier_detail.image; var supplier_image = null;
var part_image = null;
if (!image) {
image = `/static/img/blank_image.png`; if (data.supplier_detail) {
supplier_image = data.supplier_detail.image;
} }
var html = `<img src='${image}' class='select2-thumbnail'>`; if (data.part_detail) {
part_image = data.part_detail.thumbnail || data.part_detail.image;
}
var html = '';
html += select2Thumbnail(supplier_image);
html += select2Thumbnail(part_image);
html += ` <span><b>${data.supplier_detail.name}</b> - ${data.SKU}</span>`; html += ` <span><b>${data.supplier_detail.name}</b> - ${data.SKU}</span>`;
html += ` - <i>${data.part_detail.full_name}</i>`; html += ` - <i>${data.part_detail.full_name}</i>`;
@ -193,4 +205,4 @@ function renderSupplierPart(name, data, parameters, options) {
return html; return html;
} }

View File

@ -696,7 +696,14 @@ function loadStockTable(table, options) {
} }
var link = `/supplier-part/${row.supplier_part}/stock/`; var link = `/supplier-part/${row.supplier_part}/stock/`;
var text = `${row.supplier_part_detail.SKU}`;
var text = '';
if (row.supplier_part_detail) {
text = `${row.supplier_part_detail.SKU}`;
} else {
text = `<i>{% trans "Supplier part not specified" %}</i>`;
}
return renderLink(text, link); return renderLink(text, link);
} }