Add basic "pending product" support for new custorder batch

This commit is contained in:
Lance Edgar 2021-12-22 12:06:00 -06:00
parent 408bffb775
commit c0db03bc28
13 changed files with 844 additions and 234 deletions

View file

@ -157,6 +157,8 @@ class MasterView(View):
labels = {'uuid': "UUID"}
product_key_fields = {}
# ROW-RELATED ATTRS FOLLOW:
has_rows = False
@ -449,6 +451,8 @@ class MasterView(View):
grid.hide_column('local_only')
grid.remove_filter('local_only')
self.configure_column_product_key(grid)
def grid_extra_class(self, obj, i):
"""
Returns string of extra class(es) for the table row corresponding to
@ -541,6 +545,8 @@ class MasterView(View):
# super(MasterView, self).configure_row_grid(grid)
self.set_row_labels(grid)
self.configure_column_product_key(grid)
def row_grid_extra_class(self, obj, i):
"""
Returns string of extra class(es) for the table row corresponding to
@ -753,6 +759,7 @@ class MasterView(View):
if obj.emails:
return obj.emails[0].address
# TODO: deprecate / remove this
def render_product_key_value(self, obj, field=None):
"""
Render the "canonical" product key value for the given object.
@ -764,6 +771,15 @@ class MasterView(View):
return obj.upc.pretty() if obj.upc else ''
return getattr(obj, product_key)
def render_upc(self, obj, field):
"""
Render a :class:`~rattail:rattail.gpc.GPC` field.
"""
value = getattr(obj, field)
if value:
app = self.rattail_config.get_app()
return app.render_gpc(value)
def render_store(self, obj, field):
store = getattr(obj, field)
if store:
@ -779,6 +795,14 @@ class MasterView(View):
url = self.request.route_url('products.view', uuid=product.uuid)
return tags.link_to(text, url)
def render_pending_product(self, obj, field):
pending = getattr(obj, field)
if not pending:
return
text = six.text_type(pending)
url = self.request.route_url('pending_products.view', uuid=pending.uuid)
return tags.link_to(text, url)
def render_vendor(self, obj, field):
vendor = getattr(obj, field)
if not vendor:
@ -1567,6 +1591,8 @@ class MasterView(View):
return self.render_to_response('delete', {
'instance': instance,
'instance_title': instance_title,
'instance_editable': self.editable_instance(instance),
'instance_deletable': self.deletable_instance(instance),
'form': form})
def bulk_delete(self):
@ -3676,6 +3702,8 @@ class MasterView(View):
"""
self.configure_common_form(form)
self.configure_field_product_key(form)
def validate_form(self, form):
if form.validate(newstyle=True):
self.form_deserialized = form.validated
@ -4107,12 +4135,33 @@ class MasterView(View):
self.set_row_labels(form)
self.configure_field_product_key(form)
def validate_row_form(self, form):
if form.validate(newstyle=True):
self.form_deserialized = form.validated
return True
return False
def configure_column_product_key(self, g):
if '_product_key_' in g.columns:
key = self.rattail_config.product_key()
field = self.product_key_fields.get(key, key)
g.replace('_product_key_', field)
g.set_label(field, self.rattail_config.product_key_title(key))
g.set_link(field)
if key == 'upc':
g.set_renderer(field, self.render_upc)
def configure_field_product_key(self, f):
if '_product_key_' in f:
key = self.rattail_config.product_key()
field = self.product_key_fields.get(key, key)
f.replace('_product_key_', field)
f.set_label(field, self.rattail_config.product_key_title(key))
if key == 'upc':
f.set_renderer(field, self.render_upc)
def get_row_action_url(self, action, row, **kwargs):
"""
Generate a URL for the given action on the given row.