Add basic "pending product" support for new custorder batch
This commit is contained in:
parent
408bffb775
commit
c0db03bc28
13 changed files with 844 additions and 234 deletions
|
@ -1153,6 +1153,7 @@ class ProductView(MasterView):
|
|||
use_buefy = self.get_use_buefy()
|
||||
|
||||
kwargs['image_url'] = self.handler.get_image_url(product)
|
||||
kwargs['product_key_field'] = self.rattail_config.product_key()
|
||||
|
||||
# add price history, if user has access
|
||||
if self.rattail_config.versioning_enabled() and self.has_perm('versions'):
|
||||
|
@ -1910,7 +1911,6 @@ class ProductView(MasterView):
|
|||
return self.request.route_url('batch.delproduct.view', uuid=batch.uuid)
|
||||
|
||||
def configure_get_simple_settings(self):
|
||||
config = self.rattail_config
|
||||
return [
|
||||
|
||||
# key field
|
||||
|
@ -1987,6 +1987,7 @@ class PendingProductView(MasterView):
|
|||
model_class = model.PendingProduct
|
||||
route_prefix = 'pending_products'
|
||||
url_prefix = '/products/pending'
|
||||
bulk_deletable = True
|
||||
|
||||
labels = {
|
||||
'regular_price_amount': "Regular Price",
|
||||
|
@ -1996,10 +1997,10 @@ class PendingProductView(MasterView):
|
|||
|
||||
grid_columns = [
|
||||
'_product_key_',
|
||||
'department_name',
|
||||
'brand_name',
|
||||
'description',
|
||||
'size',
|
||||
'department_name',
|
||||
'created',
|
||||
'user',
|
||||
'status_code',
|
||||
|
@ -2007,12 +2008,15 @@ class PendingProductView(MasterView):
|
|||
|
||||
form_fields = [
|
||||
'_product_key_',
|
||||
'department_name',
|
||||
'department',
|
||||
'brand_name',
|
||||
'brand',
|
||||
'description',
|
||||
'size',
|
||||
'department_name',
|
||||
'department',
|
||||
'vendor_name',
|
||||
'vendor',
|
||||
'unit_cost',
|
||||
'case_size',
|
||||
'regular_price_amount',
|
||||
'special_order',
|
||||
|
@ -2025,13 +2029,6 @@ class PendingProductView(MasterView):
|
|||
def configure_grid(self, g):
|
||||
super(PendingProductView, self).configure_grid(g)
|
||||
|
||||
# product key
|
||||
if '_product_key_' in g.columns:
|
||||
key = self.rattail_config.product_key()
|
||||
g.replace('_product_key_', key)
|
||||
g.set_label(key, self.rattail_config.product_key_title(key))
|
||||
g.set_link(key)
|
||||
|
||||
g.set_enum('status_code', self.enum.PENDING_PRODUCT_STATUS)
|
||||
|
||||
g.set_sort_defaults('created', 'desc')
|
||||
|
@ -2043,13 +2040,6 @@ class PendingProductView(MasterView):
|
|||
model = self.model
|
||||
pending = f.model_instance
|
||||
|
||||
# product key
|
||||
if '_product_key_' in f:
|
||||
key = self.rattail_config.product_key()
|
||||
f.replace('_product_key_', key)
|
||||
f.set_label(key, self.rattail_config.product_key_title(key))
|
||||
f.set_renderer(key, self.render_product_key_value)
|
||||
|
||||
# department
|
||||
if self.creating or self.editing:
|
||||
if 'department' in f:
|
||||
|
@ -2084,10 +2074,35 @@ class PendingProductView(MasterView):
|
|||
f.set_renderer('brand', self.render_brand)
|
||||
if pending.brand:
|
||||
f.remove('brand_name')
|
||||
elif pending.brand_name:
|
||||
f.remove('brand')
|
||||
|
||||
# description
|
||||
f.set_required('description')
|
||||
|
||||
# vendor
|
||||
if self.creating or self.editing:
|
||||
if 'vendor' in f:
|
||||
f.remove('vendor_name')
|
||||
f.replace('vendor', 'vendor_uuid')
|
||||
f.set_node('vendor_uuid', colander.String())
|
||||
vendor_display = ""
|
||||
if self.request.method == 'POST':
|
||||
if self.request.POST.get('vendor_uuid'):
|
||||
vendor = self.Session.query(model.Vendor).get(self.request.POST['vendor_uuid'])
|
||||
if vendor:
|
||||
vendor_display = six.text_type(vendor)
|
||||
f.set_widget('vendor_uuid', forms.widgets.JQueryAutocompleteWidget(
|
||||
field_display=vendor_display,
|
||||
service_url=self.request.route_url('vendors.autocomplete')))
|
||||
f.set_label('vendor_uuid', "Vendor")
|
||||
else:
|
||||
f.set_renderer('vendor', self.render_vendor)
|
||||
if pending.vendor:
|
||||
f.remove('vendor_name')
|
||||
elif pending.vendor_name:
|
||||
f.remove('vendor')
|
||||
|
||||
# case_size
|
||||
f.set_type('case_size', 'quantity')
|
||||
|
||||
|
@ -2138,6 +2153,30 @@ class PendingProductView(MasterView):
|
|||
|
||||
return pending
|
||||
|
||||
def before_delete(self, pending):
|
||||
"""
|
||||
Event hook, called just before deletion is attempted.
|
||||
"""
|
||||
model = self.model
|
||||
model_title = self.get_model_title()
|
||||
count = self.Session.query(model.CustomerOrderItem)\
|
||||
.filter(model.CustomerOrderItem.pending_product == pending)\
|
||||
.count()
|
||||
if count:
|
||||
self.request.session.flash("Cannot delete this {} because it is still "
|
||||
"referenced by {} Customer Orders.".format(model_title, count),
|
||||
'error')
|
||||
return self.redirect(self.get_action_url('view', pending))
|
||||
|
||||
count = self.Session.query(model.CustomerOrderBatchRow)\
|
||||
.filter(model.CustomerOrderBatchRow.pending_product == pending)\
|
||||
.count()
|
||||
if count:
|
||||
self.request.session.flash("Cannot delete this {} because it is still "
|
||||
"referenced by {} \"new\" Customer Order Batches.".format(model_title, count),
|
||||
'error')
|
||||
return self.redirect(self.get_action_url('view', pending))
|
||||
|
||||
|
||||
def print_labels(request):
|
||||
profile = request.params.get('profile')
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue