Fix bugs when making inventory batch on mobile
This commit is contained in:
parent
d35dc5582e
commit
c74bce2fdb
|
@ -271,6 +271,38 @@ class BatchMasterView(MasterView):
|
|||
# return this object to replace the original
|
||||
return batch
|
||||
|
||||
# TODO: this is a totaly copy of save_create_form()
|
||||
def save_mobile_create_form(self, form):
|
||||
self.before_create(form)
|
||||
|
||||
with Session.no_autoflush:
|
||||
|
||||
# transfer form data to batch instance
|
||||
form.fieldset.sync()
|
||||
batch = form.fieldset.model
|
||||
|
||||
# current user is batch creator
|
||||
batch.created_by = self.request.user or self.late_login_user()
|
||||
|
||||
# destroy initial batch and re-make using handler
|
||||
kwargs = self.get_batch_kwargs(batch)
|
||||
Session.expunge(batch)
|
||||
batch = self.handler.make_batch(Session(), **kwargs)
|
||||
|
||||
Session.flush()
|
||||
|
||||
# TODO: this needs work yet surely...
|
||||
# if batch has input data file, let handler properly establish that
|
||||
filename = getattr(batch, 'filename', None)
|
||||
if filename:
|
||||
path = os.path.join(self.upload_dir, filename)
|
||||
if os.path.exists(path):
|
||||
self.handler.set_input_file(batch, path)
|
||||
os.remove(path)
|
||||
|
||||
# return this object to replace the original
|
||||
return batch
|
||||
|
||||
def get_batch_kwargs(self, batch, mobile=False):
|
||||
"""
|
||||
Return a kwargs dict for use with ``self.handler.make_batch()``, using
|
||||
|
|
|
@ -221,6 +221,22 @@ class InventoryBatchView(BatchMasterView):
|
|||
return super(InventoryBatchView, self).delete_row()
|
||||
|
||||
def configure_mobile_fieldset(self, fs):
|
||||
permission_prefix = self.get_permission_prefix()
|
||||
|
||||
# TODO: this was copied from configure_form()
|
||||
modes = dict(self.enum.INVENTORY_MODE)
|
||||
if not self.request.has_perm('{}.create.replace'.format(permission_prefix)):
|
||||
if hasattr(self.enum, 'INVENTORY_MODE_REPLACE'):
|
||||
modes.pop(self.enum.INVENTORY_MODE_REPLACE, None)
|
||||
if hasattr(self.enum, 'INVENTORY_MODE_REPLACE_ADJUST'):
|
||||
modes.pop(self.enum.INVENTORY_MODE_REPLACE_ADJUST, None)
|
||||
if not self.request.has_perm('{}.create.zero'.format(permission_prefix)):
|
||||
if hasattr(self.enum, 'INVENTORY_MODE_ZERO_ALL'):
|
||||
modes.pop(self.enum.INVENTORY_MODE_ZERO_ALL, None)
|
||||
|
||||
fs.mode.set(renderer=forms.renderers.EnumFieldRenderer(modes),
|
||||
label="Count Mode", required=True, attrs={'auto-enhance': 'true'})
|
||||
|
||||
fs.configure(include=[
|
||||
fs.mode,
|
||||
fs.reason_code,
|
||||
|
|
|
@ -268,9 +268,9 @@ class MasterView(View):
|
|||
self.creating = True
|
||||
form = self.make_mobile_form(self.get_model_class())
|
||||
if self.request.method == 'POST':
|
||||
if form.validate():
|
||||
if self.validate_mobile_form(form):
|
||||
# let save_create_form() return alternate object if necessary
|
||||
obj = self.save_create_form(form) or form.fieldset.model
|
||||
obj = self.save_mobile_create_form(form) or form.fieldset.model
|
||||
self.after_create(obj)
|
||||
self.flash_after_create(obj)
|
||||
return self.redirect_after_create(obj, mobile=True)
|
||||
|
@ -284,6 +284,10 @@ class MasterView(View):
|
|||
self.before_create(form)
|
||||
form.save()
|
||||
|
||||
def save_mobile_create_form(self, form):
|
||||
self.before_create(form)
|
||||
form.save()
|
||||
|
||||
def redirect_after_create(self, instance, mobile=False):
|
||||
if self.populatable and self.should_populate(instance):
|
||||
return self.redirect(self.get_action_url('populate', instance, mobile=mobile))
|
||||
|
@ -817,6 +821,9 @@ class MasterView(View):
|
|||
def validate_form(self, form):
|
||||
return form.validate()
|
||||
|
||||
def validate_mobile_form(self, form):
|
||||
return form.validate()
|
||||
|
||||
def save_edit_form(self, form):
|
||||
self.save_form(form)
|
||||
self.after_edit(form.fieldset.model)
|
||||
|
|
Loading…
Reference in a new issue