Add basic "resolve" support for person, product from new custorder

This commit is contained in:
Lance Edgar 2021-12-23 20:24:43 -06:00
parent 1b0d6581db
commit 82dfce6f81
8 changed files with 474 additions and 32 deletions

View file

@ -2035,6 +2035,9 @@ class PendingProductView(MasterView):
super(PendingProductView, self).configure_grid(g)
g.set_enum('status_code', self.enum.PENDING_PRODUCT_STATUS)
g.filters['status_code'].default_active = True
g.filters['status_code'].default_verb = 'not_equal'
g.filters['status_code'].default_value = six.text_type(self.enum.PENDING_PRODUCT_STATUS_RESOLVED)
g.set_sort_defaults('created', 'desc')
@ -2137,6 +2140,11 @@ class PendingProductView(MasterView):
# f.set_readonly('status_code')
f.set_enum('status_code', self.enum.PENDING_PRODUCT_STATUS)
def editable_instance(self, pending):
if pending.status_code == self.enum.PENDING_PRODUCT_STATUS_RESOLVED:
return False
return True
def objectify(self, form, data=None):
if data is None:
data = form.validated
@ -2182,6 +2190,45 @@ class PendingProductView(MasterView):
'error')
return self.redirect(self.get_action_url('view', pending))
def resolve_product(self):
model = self.model
pending = self.get_instance()
redirect = self.redirect(self.get_action_url('view', pending))
uuid = self.request.POST['product_uuid']
product = self.Session.query(model.Product).get(uuid)
if not product:
self.request.session.flash("Product not found!", 'error')
return redirect
app = self.get_rattail_app()
products_handler = app.get_products_handler()
products_handler.resolve_product(pending, product, self.request.user)
return redirect
@classmethod
def defaults(cls, config):
cls._defaults(config)
cls._pending_product_defaults(config)
@classmethod
def _pending_product_defaults(cls, config):
route_prefix = cls.get_route_prefix()
instance_url_prefix = cls.get_instance_url_prefix()
permission_prefix = cls.get_permission_prefix()
model_title = cls.get_model_title()
# resolve product
config.add_tailbone_permission(permission_prefix,
'{}.resolve_product'.format(permission_prefix),
"Resolve a {} as a Product".format(model_title))
config.add_route('{}.resolve_product'.format(route_prefix),
'{}/resolve-product'.format(instance_url_prefix),
request_method='POST')
config.add_view(cls, attr='resolve_product',
route_name='{}.resolve_product'.format(route_prefix),
permission='{}.resolve_product'.format(permission_prefix))
def print_labels(request):
profile = request.params.get('profile')