Add desktop support for creating inventory batches

with a workflow form of sorts
This commit is contained in:
Lance Edgar 2018-02-28 21:53:39 -06:00
parent 52e9717288
commit 91bb38573b
4 changed files with 433 additions and 11 deletions

View file

@ -585,11 +585,14 @@ class Form(object):
else:
raise ValueError("unknown type for '{}' field: {}".format(key, type_))
def set_enum(self, key, enum):
def set_enum(self, key, enum, empty=None):
if enum:
self.enums[key] = enum
self.set_type(key, 'enum')
self.set_widget(key, dfwidget.SelectWidget(values=list(enum.items())))
values = list(enum.items())
if empty:
values.insert(0, empty)
self.set_widget(key, dfwidget.SelectWidget(values=values))
else:
self.enums.pop(key, None)

View file

@ -26,9 +26,12 @@ Form Schema Types
from __future__ import unicode_literals, absolute_import
import re
import six
from rattail.db import model
from rattail.gpc import GPC
import colander
@ -60,6 +63,28 @@ class JQueryTime(colander.Time):
return colander.timeparse(cstruct, formats[0])
class GPCType(colander.SchemaType):
"""
Schema type for product GPC data.
"""
def serialize(self, node, appstruct):
if appstruct is colander.null:
return colander.null
return six.text_type(appstruct)
def deserialize(self, node, cstruct):
if not cstruct:
return None
digits = re.sub(r'\D', '', cstruct)
if not digits:
return None
try:
return GPC(digits)
except Exception as err:
raise colander.Invalid(node, six.text_type(err))
class ModelType(colander.SchemaType):
"""
Custom schema type for scalar ORM relationship fields.