Fixes for new "allocation" tab

- Fix broken link
- Add "description" column
- Add thumbnail images
This commit is contained in:
Oliver 2022-01-27 16:25:26 +11:00
parent 0ea0edf1bb
commit f6ffef66e0
4 changed files with 48 additions and 7 deletions

View File

@ -822,6 +822,7 @@ class SOAllocationList(generics.ListAPIView):
kwargs['item_detail'] = str2bool(params.get('item_detail', False)) kwargs['item_detail'] = str2bool(params.get('item_detail', False))
kwargs['order_detail'] = str2bool(params.get('order_detail', False)) kwargs['order_detail'] = str2bool(params.get('order_detail', False))
kwargs['location_detail'] = str2bool(params.get('location_detail', False)) kwargs['location_detail'] = str2bool(params.get('location_detail', False))
kwargs['customer_detail'] = str2bool(params.get('customer_detail', False))
except AttributeError: except AttributeError:
pass pass

View File

@ -495,6 +495,7 @@ class SalesOrderAllocationSerializer(InvenTreeModelSerializer):
part_detail = PartBriefSerializer(source='item.part', many=False, read_only=True) part_detail = PartBriefSerializer(source='item.part', many=False, read_only=True)
item_detail = stock.serializers.StockItemSerializer(source='item', many=False, read_only=True) item_detail = stock.serializers.StockItemSerializer(source='item', many=False, read_only=True)
location_detail = stock.serializers.LocationSerializer(source='item.location', many=False, read_only=True) location_detail = stock.serializers.LocationSerializer(source='item.location', many=False, read_only=True)
customer_detail = CompanyBriefSerializer(source='line.order.customer', many=False, read_only=True)
shipment_date = serializers.DateField(source='shipment.shipment_date', read_only=True) shipment_date = serializers.DateField(source='shipment.shipment_date', read_only=True)
@ -504,6 +505,7 @@ class SalesOrderAllocationSerializer(InvenTreeModelSerializer):
part_detail = kwargs.pop('part_detail', True) part_detail = kwargs.pop('part_detail', True)
item_detail = kwargs.pop('item_detail', False) item_detail = kwargs.pop('item_detail', False)
location_detail = kwargs.pop('location_detail', False) location_detail = kwargs.pop('location_detail', False)
customer_detail = kwargs.pop('customer_detail', False)
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
@ -519,12 +521,16 @@ class SalesOrderAllocationSerializer(InvenTreeModelSerializer):
if not location_detail: if not location_detail:
self.fields.pop('location_detail') self.fields.pop('location_detail')
if not customer_detail:
self.fields.pop('customer_detail')
class Meta: class Meta:
model = order.models.SalesOrderAllocation model = order.models.SalesOrderAllocation
fields = [ fields = [
'pk', 'pk',
'line', 'line',
'customer_detail',
'serial', 'serial',
'quantity', 'quantity',
'location', 'location',

View File

@ -62,15 +62,16 @@ function imageHoverIcon(url) {
* @param {String} url is the image URL * @param {String} url is the image URL
* @returns html <img> tag * @returns html <img> tag
*/ */
function thumbnailImage(url) { function thumbnailImage(url, options={}) {
if (!url) { if (!url) {
url = blankImage(); url = blankImage();
} }
// TODO: Support insertion of custom classes // TODO: Support insertion of custom classes
var title = options.title || '';
var html = `<img class='hover-img-thumb' src='${url}'>`; var html = `<img class='hover-img-thumb' src='${url}' title='${title}'>`;
return html; return html;

View File

@ -2251,8 +2251,12 @@ function loadStockAllocationTable(table, options={}) {
onLoadSuccess: function(tableData) { onLoadSuccess: function(tableData) {
var query_params = params; var query_params = params;
query_params.customer_detail = true;
query_params.order_detail = true; query_params.order_detail = true;
delete query_params.build_detail;
// Load sales order allocation data // Load sales order allocation data
inventreeGet('{% url "api-so-allocation-list" %}', query_params, { inventreeGet('{% url "api-so-allocation-list" %}', query_params, {
success: function(data) { success: function(data) {
@ -2270,18 +2274,34 @@ function loadStockAllocationTable(table, options={}) {
var html = ''; var html = '';
if (row.build) { if (row.build) {
html = renderLink(
// Add an icon for the part being built
html += thumbnailImage(row.build_detail.part_detail.thumbnail, {
title: row.build_detail.part_detail.full_name
});
html += ' ';
html += renderLink(
global_settings.BUILDORDER_REFERENCE_PREFIX + row.build_detail.reference, global_settings.BUILDORDER_REFERENCE_PREFIX + row.build_detail.reference,
`/build/${row.build}/` `/build/${row.build}/`
); );
html += makeIconBadge('fa-tools', '{% trans "Build Order" %}'); html += makeIconBadge('fa-tools', '{% trans "Build Order" %}');
} else if (row.order) { } else if (row.order) {
html += renderLink(
global_settings.SALESORDER_REFERENCE_PREFIX + row.order,
`/order/so/${row.order}/`
);
// Add an icon for the customer
html += thumbnailImage(
row.customer_detail.thumbnail || row.customer_detail.image, {
title: row.customer_detail.name,
});
html += ' ';
html += renderLink(
global_settings.SALESORDER_REFERENCE_PREFIX + row.order_detail.reference,
`/order/sales-order/${row.order}/`
);
html += makeIconBadge('fa-truck', '{% trans "Sales Order" %}'); html += makeIconBadge('fa-truck', '{% trans "Sales Order" %}');
} else { } else {
return '-'; return '-';
@ -2290,6 +2310,19 @@ function loadStockAllocationTable(table, options={}) {
return html; return html;
} }
}, },
{
field: 'description',
title: '{% trans "Description" %}',
formatter: function(value, row) {
if (row.order_detail) {
return row.order_detail.description;
} else if (row.build_detail) {
return row.build_detail.title;
} else {
return '-';
}
}
},
{ {
field: 'status', field: 'status',
title: '{% trans "Order Status" %}', title: '{% trans "Order Status" %}',