Various changes to support current receiving workflows

i.e. for sake of truck dump, adding child from invoice etc.
This commit is contained in:
Lance Edgar 2018-05-22 13:54:50 -05:00
parent 210508480e
commit b0e8f7d985
7 changed files with 153 additions and 44 deletions

View file

@ -72,6 +72,7 @@ class MasterView(View):
results_downloadable_csv = False
results_downloadable_xlsx = False
creatable = True
show_create_link = True
viewable = True
editable = True
deletable = True
@ -601,12 +602,13 @@ class MasterView(View):
def render_mobile_row_listitem(self, obj, i):
return obj
def create(self):
def create(self, form=None):
"""
View for creating a new model record.
"""
self.creating = True
form = self.make_form(self.get_model_class())
if form is None:
form = self.make_form(self.get_model_class())
if self.request.method == 'POST':
if self.validate_form(form):
# let save_create_form() return alternate object if necessary
@ -2200,7 +2202,7 @@ class MasterView(View):
except os.error:
return 0
def make_form(self, instance=None, factory=None, fields=None, schema=None, **kwargs):
def make_form(self, instance=None, factory=None, fields=None, schema=None, make_kwargs=None, configure=None, **kwargs):
"""
Creates a new form for the given model class/instance
"""
@ -2210,15 +2212,19 @@ class MasterView(View):
fields = self.get_form_fields()
if schema is None:
schema = self.make_form_schema()
if make_kwargs is None:
make_kwargs = self.make_form_kwargs
if configure is None:
configure = self.configure_form
# TODO: SQLAlchemy class instance is assumed *unless* we get a dict
# (seems like we should be smarter about this somehow)
# if not self.creating and not isinstance(instance, dict):
if not self.creating:
kwargs['model_instance'] = instance
kwargs = self.make_form_kwargs(**kwargs)
kwargs = make_kwargs(**kwargs)
form = factory(fields, schema, **kwargs)
self.configure_form(form)
configure(form)
return form
def get_form_fields(self):
@ -2271,12 +2277,10 @@ class MasterView(View):
self.set_labels(form)
def validate_form(self, form):
controls = self.request.POST.items()
try:
self.form_deserialized = form.validate(controls)
except deform.ValidationFailure:
return False
return True
if form.validate(newstyle=True):
self.form_deserialized = form.validated
return True
return False
def objectify(self, form, data):
obj = form.schema.objectify(data, context=form.model_instance)