Add basic "receive" handler logic for receiving API

This commit is contained in:
Lance Edgar 2019-11-15 14:50:03 -06:00
parent 337422a619
commit 0715bd6321
4 changed files with 150 additions and 44 deletions

View file

@ -47,6 +47,7 @@ from webhelpers2.html import tags, HTML
from tailbone import forms, grids
from tailbone.views.purchasing import PurchasingBatchView
from tailbone.forms.receiving import ReceiveRow as MobileReceivingForm
log = logging.getLogger(__name__)
@ -1455,6 +1456,8 @@ class ReceivingBatchView(PurchasingBatchView):
if self.request.has_perm('{}.create_row'.format(permission_prefix)):
schema = MobileReceivingForm().bind(session=self.Session())
update_form = forms.Form(schema=schema, request=self.request)
# TODO: this seems hacky, but avoids "complex" date value parsing
update_form.set_widget('expiration_date', dfwidget.TextInputWidget())
if update_form.validate(newstyle=True):
row = self.Session.query(model.PurchaseBatchRow).get(update_form.validated['row'])
mode = update_form.validated['mode']
@ -1569,6 +1572,8 @@ class ReceivingBatchView(PurchasingBatchView):
if self.request.has_perm('{}.create_row'.format(permission_prefix)):
schema = MobileReceivingForm().bind(session=self.Session())
update_form = forms.Form(schema=schema, request=self.request)
# TODO: this seems hacky, but avoids "complex" date value parsing
update_form.set_widget('expiration_date', dfwidget.TextInputWidget())
if update_form.validate(newstyle=True):
row = self.Session.query(model.PurchaseBatchRow).get(update_form.validated['row'])
mode = update_form.validated['mode']
@ -1794,22 +1799,6 @@ class MobileNewReceivingFromPO(colander.MappingSchema):
purchase = colander.SchemaNode(colander.String())
# TODO: this is a stopgap measure to fix an obvious bug, which exists when the
# session is not provided by the view at runtime (i.e. when it was instead
# being provided by the type instance, which was created upon app startup).
@colander.deferred
def valid_purchase_batch_row(node, kw):
session = kw['session']
def validate(node, value):
row = session.query(model.PurchaseBatchRow).get(value)
if not row:
raise colander.Invalid(node, "Batch row not found")
if row.batch.executed:
raise colander.Invalid(node, "Batch has already been executed")
return row.uuid
return validate
class ReceiveRowForm(colander.MappingSchema):
mode = colander.SchemaNode(colander.String(),
@ -1845,29 +1834,5 @@ class DeclareCreditForm(colander.MappingSchema):
missing=colander.null)
class MobileReceivingForm(colander.MappingSchema):
row = colander.SchemaNode(colander.String(),
validator=valid_purchase_batch_row)
mode = colander.SchemaNode(colander.String(),
validator=colander.OneOf([
'received',
'damaged',
'expired',
# 'mispick',
]))
cases = colander.SchemaNode(colander.Decimal(), missing=None)
units = colander.SchemaNode(colander.Decimal(), missing=None)
expiration_date = colander.SchemaNode(colander.Date(),
widget=dfwidget.TextInputWidget(),
missing=colander.null)
quick_receive = colander.SchemaNode(colander.Boolean())
def includeme(config):
ReceivingBatchView.defaults(config)