Refactor mobile receiving to use colander/deform
This commit is contained in:
parent
ec275b2fe0
commit
a65235c0fd
|
@ -36,8 +36,7 @@ from deform import widget as dfwidget
|
||||||
from pyramid import httpexceptions
|
from pyramid import httpexceptions
|
||||||
from webhelpers2.html import tags
|
from webhelpers2.html import tags
|
||||||
|
|
||||||
# from tailbone import forms
|
from tailbone import forms2 as forms
|
||||||
from tailbone import forms2
|
|
||||||
from tailbone.views.batch import BatchMasterView
|
from tailbone.views.batch import BatchMasterView
|
||||||
|
|
||||||
|
|
||||||
|
@ -251,7 +250,7 @@ class PurchasingBatchView(BatchMasterView):
|
||||||
if vendor:
|
if vendor:
|
||||||
vendor_display = six.text_type(vendor)
|
vendor_display = six.text_type(vendor)
|
||||||
vendors_url = self.request.route_url('vendors.autocomplete')
|
vendors_url = self.request.route_url('vendors.autocomplete')
|
||||||
f.set_widget('vendor_uuid', forms2.widgets.JQueryAutocompleteWidget(
|
f.set_widget('vendor_uuid', forms.widgets.JQueryAutocompleteWidget(
|
||||||
field_display=vendor_display, service_url=vendors_url))
|
field_display=vendor_display, service_url=vendors_url))
|
||||||
f.set_label('vendor_uuid', "Vendor")
|
f.set_label('vendor_uuid', "Vendor")
|
||||||
elif self.editing:
|
elif self.editing:
|
||||||
|
@ -288,7 +287,7 @@ class PurchasingBatchView(BatchMasterView):
|
||||||
elif self.editing:
|
elif self.editing:
|
||||||
buyer_display = six.text_type(batch.buyer or '')
|
buyer_display = six.text_type(batch.buyer or '')
|
||||||
buyers_url = self.request.route_url('employees.autocomplete')
|
buyers_url = self.request.route_url('employees.autocomplete')
|
||||||
f.set_widget('buyer_uuid', forms2.widgets.JQueryAutocompleteWidget(
|
f.set_widget('buyer_uuid', forms.widgets.JQueryAutocompleteWidget(
|
||||||
field_display=buyer_display, service_url=buyers_url))
|
field_display=buyer_display, service_url=buyers_url))
|
||||||
f.set_label('buyer_uuid', "Buyer")
|
f.set_label('buyer_uuid', "Buyer")
|
||||||
|
|
||||||
|
|
|
@ -35,10 +35,11 @@ from rattail.db import model, api
|
||||||
from rattail.gpc import GPC
|
from rattail.gpc import GPC
|
||||||
from rattail.util import pretty_quantity, prettify
|
from rattail.util import pretty_quantity, prettify
|
||||||
|
|
||||||
|
import colander
|
||||||
import formencode as fe
|
import formencode as fe
|
||||||
from webhelpers2.html import tags
|
from webhelpers2.html import tags
|
||||||
|
|
||||||
from tailbone import forms, grids
|
from tailbone import forms2 as forms, grids
|
||||||
from tailbone.views.purchasing import PurchasingBatchView
|
from tailbone.views.purchasing import PurchasingBatchView
|
||||||
|
|
||||||
|
|
||||||
|
@ -289,12 +290,12 @@ class ReceivingBatchView(PurchasingBatchView):
|
||||||
}
|
}
|
||||||
|
|
||||||
if self.request.has_perm('{}.create_row'.format(self.get_permission_prefix())):
|
if self.request.has_perm('{}.create_row'.format(self.get_permission_prefix())):
|
||||||
update_form = forms.SimpleForm(self.request, schema=ReceivingForm)
|
update_form = forms.Form(schema=ReceivingForm(), request=self.request)
|
||||||
if update_form.validate():
|
if update_form.validate(newstyle=True):
|
||||||
row = update_form.data['row']
|
row = update_form.validated['row']
|
||||||
mode = update_form.data['mode']
|
mode = update_form.validated['mode']
|
||||||
cases = update_form.data['cases']
|
cases = update_form.validated['cases']
|
||||||
units = update_form.data['units']
|
units = update_form.validated['units']
|
||||||
if cases:
|
if cases:
|
||||||
setattr(row, 'cases_{}'.format(mode),
|
setattr(row, 'cases_{}'.format(mode),
|
||||||
(getattr(row, 'cases_{}'.format(mode)) or 0) + cases)
|
(getattr(row, 'cases_{}'.format(mode)) or 0) + cases)
|
||||||
|
@ -305,7 +306,7 @@ class ReceivingBatchView(PurchasingBatchView):
|
||||||
# if mode in ('damaged', 'expired', 'mispick'):
|
# if mode in ('damaged', 'expired', 'mispick'):
|
||||||
if mode in ('damaged', 'expired'):
|
if mode in ('damaged', 'expired'):
|
||||||
self.attach_credit(row, mode, cases, units,
|
self.attach_credit(row, mode, cases, units,
|
||||||
expiration_date=update_form.data['expiration_date'],
|
expiration_date=update_form.validated['expiration_date'],
|
||||||
# discarded=update_form.data['trash'],
|
# discarded=update_form.data['trash'],
|
||||||
# mispick_product=shipped_product)
|
# mispick_product=shipped_product)
|
||||||
)
|
)
|
||||||
|
@ -376,32 +377,40 @@ class ReceivingBatchView(PurchasingBatchView):
|
||||||
cls._defaults(config)
|
cls._defaults(config)
|
||||||
|
|
||||||
|
|
||||||
class ValidBatchRow(forms.validators.ModelValidator):
|
class PurchaseBatchRowType(forms.types.ObjectType):
|
||||||
model_class = model.PurchaseBatchRow
|
model_class = model.PurchaseBatchRow
|
||||||
|
|
||||||
def _to_python(self, value, state):
|
def deserialize(self, node, cstruct):
|
||||||
row = super(ValidBatchRow, self)._to_python(value, state)
|
row = super(PurchaseBatchRowType, self).deserialize(node, cstruct)
|
||||||
if row.batch.executed:
|
if row and row.batch.executed:
|
||||||
raise fe.Invalid("Batch has already been executed", value, state)
|
raise colander.Invalid(node, "Batch has already been executed")
|
||||||
return row
|
return row
|
||||||
|
|
||||||
|
|
||||||
class ReceivingForm(forms.Schema):
|
class ReceivingForm(colander.MappingSchema):
|
||||||
allow_extra_fields = True
|
|
||||||
filter_extra_fields = True
|
row = colander.SchemaNode(PurchaseBatchRowType())
|
||||||
row = ValidBatchRow()
|
|
||||||
mode = fe.validators.OneOf(['received', 'damaged', 'expired',
|
mode = colander.SchemaNode(colander.String(),
|
||||||
|
validator=colander.OneOf(['received',
|
||||||
|
'damaged',
|
||||||
|
'expired',
|
||||||
# 'mispick',
|
# 'mispick',
|
||||||
])
|
]))
|
||||||
|
|
||||||
# product = forms.validators.ValidProduct()
|
# product = forms.validators.ValidProduct()
|
||||||
# upc = forms.validators.ValidGPC()
|
# upc = forms.validators.ValidGPC()
|
||||||
# brand_name = fe.validators.String()
|
# brand_name = fe.validators.String()
|
||||||
# description = fe.validators.String()
|
# description = fe.validators.String()
|
||||||
# size = fe.validators.String()
|
# size = fe.validators.String()
|
||||||
# case_quantity = fe.validators.Number()
|
# case_quantity = fe.validators.Number()
|
||||||
cases = fe.validators.Number()
|
|
||||||
units = fe.validators.Number()
|
cases = colander.SchemaNode(colander.Decimal(), missing=colander.null)
|
||||||
expiration_date = fe.validators.DateValidator()
|
|
||||||
|
units = colander.SchemaNode(colander.Decimal(), missing=colander.null)
|
||||||
|
|
||||||
|
expiration_date = colander.SchemaNode(colander.Date(), missing=colander.null)
|
||||||
|
|
||||||
# trash = fe.validators.Bool()
|
# trash = fe.validators.Bool()
|
||||||
# ordered_product = forms.validators.ValidProduct()
|
# ordered_product = forms.validators.ValidProduct()
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue