Improvements for build output completion

- Check if the output is fully allocated (throw error if not)
- Reload tables after actions performed
This commit is contained in:
Oliver 2021-10-17 21:37:10 +11:00
parent bd7fef720d
commit 542b4113a1
4 changed files with 46 additions and 7 deletions

View File

@ -152,6 +152,10 @@ class BuildOutputSerializer(serializers.Serializer):
if not output.is_building:
raise ValidationError(_("This build output has already been completed"))
# The build output must have all tracked parts allocated
if not build.isFullyAllocated(output):
raise ValidationError(_("This build output is not fully allocated"))
return output
class Meta:

View File

@ -364,7 +364,11 @@ inventreeGet(
outputs,
{
success: function() {
// Reload the "in progress" table
$('#build-output-table').bootstrapTable('refresh');
// Reload the "completed" table
$('#build-stock-table').bootstrapTable('refresh');
}
}
);

View File

@ -220,12 +220,12 @@ function completeBuildOutputs(build_id, outputs, options={}) {
function renderBuildOutput(output, opts={}) {
var pk = output.pk;
var quantity = '';
var output_html = imageHoverIcon(output.part_detail.thumbnail);
if (output.quantity == 1 && output.serial) {
quantity = `{% trans "Serial Number" %}: ${output.serial}`;
output_html += `{% trans "Serial Number" %}: ${output.serial}`;
} else {
quantity = `{% trans "Quantity" %}: ${output.quantity}`;
output_html += `{% trans "Quantity" %}: ${output.quantity}`;
}
var buttons = `<div class='btn-group float-right' role='group'>`;
@ -234,9 +234,21 @@ function completeBuildOutputs(build_id, outputs, options={}) {
buttons += '</div>';
var field = constructField(
`outputs_output_${pk}`,
{
type: 'raw',
html: output_html,
},
{
hideLabels: true,
}
);
var html = `
<tr id='output_row_${pk}'>
<td>${quantity}</td>
<td>${field}</td>
<td>${output.part_detail.full_name}</td>
<td>${buttons}</td>
</tr>`;
@ -253,7 +265,7 @@ function completeBuildOutputs(build_id, outputs, options={}) {
var html = `
<table class='table table-striped table-condensed' id='build-complete-table'>
<thead>
<th>{% trans "Output" %}</th>
<th colspan='2'>{% trans "Output" %}</th>
<th><!-- Actions --></th>
</thead>
<tbody>
@ -481,6 +493,9 @@ function loadBuildOutputTable(build_info, options={}) {
rows,
{
output: pk,
success: function() {
$(table).bootstrapTable('refresh');
}
}
);
} else {
@ -1296,10 +1311,13 @@ function allocateStockToBuild(build_id, part_id, bom_items, options={}) {
remaining = 0;
}
table_entries += renderBomItemRow(bom_item, remaining);
// We only care about entries which are not yet fully allocated
if (remaining > 0) {
table_entries += renderBomItemRow(bom_item, remaining);
}
}
if (bom_items.length == 0) {
if (table_entries.length == 0) {
showAlertDialog(
'{% trans "Select Parts" %}',

View File

@ -1843,6 +1843,8 @@ function constructInput(name, parameters, options) {
case 'candy':
func = constructCandyInput;
break;
case 'raw':
func = constructRawInput;
default:
// Unsupported field type!
break;
@ -2086,6 +2088,17 @@ function constructCandyInput(name, parameters) {
}
/*
* Construct a "raw" field input
* No actual field data!
*/
function constructRawInput(name, parameters) {
return parameters.html;
}
/*
* Construct a 'help text' div based on the field parameters
*