Improve vendor validation for new receiving batch
This commit is contained in:
parent
777a7afd46
commit
ae1e9dba0f
|
@ -405,6 +405,12 @@ class PurchasingBatchView(BatchMasterView):
|
||||||
'vendor_contact',
|
'vendor_contact',
|
||||||
'status_code')
|
'status_code')
|
||||||
|
|
||||||
|
def valid_vendor_uuid(self, node, value):
|
||||||
|
model = self.model
|
||||||
|
vendor = self.Session.query(model.Vendor).get(value)
|
||||||
|
if not vendor:
|
||||||
|
raise colander.Invalid(node, "Invalid vendor selection")
|
||||||
|
|
||||||
def render_store(self, batch, field):
|
def render_store(self, batch, field):
|
||||||
store = batch.store
|
store = batch.store
|
||||||
if not store:
|
if not store:
|
||||||
|
|
|
@ -266,6 +266,8 @@ class ReceivingBatchView(PurchasingBatchView):
|
||||||
# least will not need customization for that.
|
# least will not need customization for that.
|
||||||
if self.request.matched_route.name.endswith('create_workflow'):
|
if self.request.matched_route.name.endswith('create_workflow'):
|
||||||
|
|
||||||
|
redirect = self.redirect(self.request.route_url('{}.create'.format(route_prefix)))
|
||||||
|
|
||||||
# however we do have one more thing to check - the workflow
|
# however we do have one more thing to check - the workflow
|
||||||
# requested must of course be valid!
|
# requested must of course be valid!
|
||||||
workflow_key = self.request.matchdict['workflow_key']
|
workflow_key = self.request.matchdict['workflow_key']
|
||||||
|
@ -273,7 +275,18 @@ class ReceivingBatchView(PurchasingBatchView):
|
||||||
self.request.session.flash(
|
self.request.session.flash(
|
||||||
"Not a supported workflow: {}".format(workflow_key),
|
"Not a supported workflow: {}".format(workflow_key),
|
||||||
'error')
|
'error')
|
||||||
raise self.redirect(self.request.route_url('{}.create'.format(route_prefix)))
|
raise redirect
|
||||||
|
|
||||||
|
# also, we require vendor to be correctly identified. if
|
||||||
|
# someone e.g. navigates to a URL by accident etc. we want
|
||||||
|
# to gracefully handle and redirect
|
||||||
|
uuid = self.request.matchdict['vendor_uuid']
|
||||||
|
vendor = self.Session.query(model.Vendor).get(uuid)
|
||||||
|
if not vendor:
|
||||||
|
self.request.session.flash("Invalid vendor selection. "
|
||||||
|
"Please choose an existing vendor.",
|
||||||
|
'warning')
|
||||||
|
raise redirect
|
||||||
|
|
||||||
# okay now do the normal thing, per workflow
|
# okay now do the normal thing, per workflow
|
||||||
return super(ReceivingBatchView, self).create(**kwargs)
|
return super(ReceivingBatchView, self).create(**kwargs)
|
||||||
|
@ -318,6 +331,7 @@ class ReceivingBatchView(PurchasingBatchView):
|
||||||
vendors_url = self.request.route_url('vendors.autocomplete')
|
vendors_url = self.request.route_url('vendors.autocomplete')
|
||||||
form.set_widget('vendor', forms.widgets.JQueryAutocompleteWidget(
|
form.set_widget('vendor', forms.widgets.JQueryAutocompleteWidget(
|
||||||
field_display=vendor_display, service_url=vendors_url))
|
field_display=vendor_display, service_url=vendors_url))
|
||||||
|
form.set_validator('vendor', self.valid_vendor_uuid)
|
||||||
|
|
||||||
# configure workflow field
|
# configure workflow field
|
||||||
values = [(workflow['workflow_key'], workflow['display'])
|
values = [(workflow['workflow_key'], workflow['display'])
|
||||||
|
|
Loading…
Reference in a new issue