Validate and save the new serailizer

This commit is contained in:
Oliver Walters 2022-01-07 11:33:27 +11:00
parent 960784644f
commit 12b3a5c9cc
5 changed files with 84 additions and 2 deletions

View File

@ -275,6 +275,7 @@ class BuildFinish(generics.CreateAPIView):
return ctx
class BuildAllocate(generics.CreateAPIView):
"""
API endpoint to allocate stock items to a build order

View File

@ -555,7 +555,7 @@ class Build(MPTTModel, ReferenceIndexingMixin):
if self.incomplete_count > 0:
return False
if self.completed < self.quantity:
if self.remaining > 0:
return False
if not self.areUntrackedPartsFullyAllocated():

View File

@ -250,13 +250,35 @@ class BuildCompleteSerializer(serializers.Serializer):
help_text=_('Accept that stock items have not been fully allocated to this build order'),
)
def validate_accept_unallocated(self, value):
build = self.context['build']
if not build.areUntrackedPartsFullyAllocated() and not value:
raise ValidationError(_('Required stock has not been fully allocated'))
return value
accept_incomplete = serializers.BooleanField(
label=_('Accept Incomplete'),
help_text=_('Accept that the required number of build outputs have not been completed'),
)
def validate_accept_incomplete(self, value):
build = self.context['build']
if build.remaining > 0 and not value:
raise ValidationError(_('Required build quantity has not been completed'))
return value
def save(self):
pass
request = self.context['request']
build = self.context['build']
build.complete_build(request.user)
class BuildUnallocationSerializer(serializers.Serializer):

View File

@ -224,6 +224,13 @@ src="{% static 'img/blank_image.png' %}"
'{% trans "Build Order cannot be completed as incomplete build outputs remain" %}'
);
{% else %}
completeBuildOrder({{ build.pk }}, {
allocated: {% if build.areUntrackedPartsFullyAllocated %}true{% else %}false{% endif %},
completed: {% if build.remaining == 0 %}true{% else %}false{% endif %},
});
return;
launchModalForm(
"{% url 'build-complete' build.id %}",
{

View File

@ -20,6 +20,7 @@
/* exported
allocateStockToBuild,
completeBuildOrder,
editBuildOrder,
loadAllocationTable,
loadBuildOrderAllocationTable,
@ -120,6 +121,57 @@ function newBuildOrder(options={}) {
}
/* Construct a form to "complete" (finish) a build order */
function completeBuildOrder(build_id, options={}) {
var url = `/api/build/${build_id}/finish/`;
var fields = {
accept_unallocated: {},
accept_incomplete: {},
};
var html = '';
if (options.can_complete) {
} else {
html += `
<div class='alert alert-block alert-danger'>
<strong>{% trans "Build Order is incomplete" %}</strong>
</div>
`;
if (!options.allocated) {
html += `<div class='alert alert-block alert-warning'>{% trans "Required stock has not been fully allocated" %}</div>`;
}
if (!options.completed) {
html += `<div class='alert alert-block alert-warning'>{% trans "Required build quantity has not been completed" %}</div>`;
}
}
// Hide particular fields if they are not required
if (options.allocated) {
delete fields.accept_unallocated;
}
if (options.completed) {
delete fields.accept_incomplete;
}
constructForm(url, {
fields: fields,
reload: true,
confirm: true,
method: 'POST',
title: '{% trans "Complete Build Order" %}',
preFormContent: html,
});
}
/*
* Construct a set of output buttons for a particular build output
*/