Several disparate changes needed for vendor catalog improvements
- invoke vendor handler where appropriate, e.g. for parsers - reverse "polarity" of dropdown chooser setting; rename it - tweak autocomplete behavior yet again, for dynamic values - auto-select vendor upon parser selection, when possible
This commit is contained in:
parent
ab61778d35
commit
88b3279e63
12 changed files with 164 additions and 93 deletions
|
@ -30,15 +30,13 @@ import logging
|
|||
|
||||
import six
|
||||
|
||||
from rattail.db import model, api
|
||||
from rattail.vendors.catalogs import iter_catalog_parsers
|
||||
from rattail.db import model
|
||||
|
||||
import colander
|
||||
from deform import widget as dfwidget
|
||||
from webhelpers2.html import tags
|
||||
|
||||
from tailbone import forms
|
||||
from tailbone.db import Session
|
||||
from tailbone.views.batch import FileBatchMasterView
|
||||
from tailbone.diffs import Diff
|
||||
|
||||
|
@ -139,13 +137,9 @@ class VendorCatalogView(FileBatchMasterView):
|
|||
|
||||
def get_parsers(self):
|
||||
if not hasattr(self, 'parsers'):
|
||||
parsers = sorted(iter_catalog_parsers(), key=lambda p: p.display)
|
||||
supported = self.rattail_config.getlist(
|
||||
'tailbone', 'batch.vendorcatalog.supported_parsers')
|
||||
if supported:
|
||||
parsers = [parser for parser in parsers
|
||||
if parser.key in supported]
|
||||
self.parsers = parsers
|
||||
app = self.get_rattail_app()
|
||||
vendor_handler = app.get_vendor_handler()
|
||||
self.parsers = vendor_handler.get_supported_catalog_parsers()
|
||||
return self.parsers
|
||||
|
||||
def configure_grid(self, g):
|
||||
|
@ -160,24 +154,8 @@ class VendorCatalogView(FileBatchMasterView):
|
|||
|
||||
def configure_form(self, f):
|
||||
super(VendorCatalogView, self).configure_form(f)
|
||||
|
||||
# vendor
|
||||
f.set_renderer('vendor', self.render_vendor)
|
||||
if self.creating and 'vendor' in f:
|
||||
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)
|
||||
vendors_url = self.request.route_url('vendors.autocomplete')
|
||||
f.set_widget('vendor_uuid', forms.widgets.JQueryAutocompleteWidget(
|
||||
field_display=vendor_display, service_url=vendors_url))
|
||||
f.set_label('vendor_uuid', "Vendor")
|
||||
else:
|
||||
f.set_readonly('vendor')
|
||||
app = self.get_rattail_app()
|
||||
vendor_handler = app.get_vendor_handler()
|
||||
|
||||
# filename
|
||||
f.set_label('filename', "Catalog File")
|
||||
|
@ -196,12 +174,75 @@ class VendorCatalogView(FileBatchMasterView):
|
|||
f.set_widget('parser_key', dfwidget.SelectWidget(values=values))
|
||||
f.set_label('parser_key', "File Type")
|
||||
|
||||
# vendor
|
||||
f.set_renderer('vendor', self.render_vendor)
|
||||
if self.creating and 'vendor' in f:
|
||||
f.replace('vendor', 'vendor_uuid')
|
||||
f.set_label('vendor_uuid', "Vendor")
|
||||
use_dropdown = vendor_handler.choice_uses_dropdown()
|
||||
if use_dropdown:
|
||||
vendors = self.Session.query(model.Vendor)\
|
||||
.order_by(model.Vendor.id)
|
||||
vendor_values = [(vendor.uuid, "({}) {}".format(vendor.id,
|
||||
vendor.name))
|
||||
for vendor in vendors]
|
||||
f.set_widget('vendor_uuid',
|
||||
dfwidget.SelectWidget(values=vendor_values))
|
||||
else:
|
||||
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)
|
||||
vendors_url = self.request.route_url('vendors.autocomplete')
|
||||
f.set_widget('vendor_uuid', forms.widgets.JQueryAutocompleteWidget(
|
||||
field_display=vendor_display, service_url=vendors_url,
|
||||
assigned_label='vendorName'))
|
||||
else:
|
||||
f.set_readonly('vendor')
|
||||
|
||||
# effective
|
||||
if self.creating:
|
||||
f.remove('effective')
|
||||
else:
|
||||
f.set_readonly('effective')
|
||||
|
||||
def template_kwargs_create(self, **kwargs):
|
||||
use_buefy = self.get_use_buefy()
|
||||
app = self.get_rattail_app()
|
||||
vendor_handler = app.get_vendor_handler()
|
||||
parsers = self.get_parsers()
|
||||
parsers_data = {}
|
||||
for parser in parsers:
|
||||
if use_buefy:
|
||||
pdata = {'key': parser.key,
|
||||
'vendor_key': parser.vendor_key}
|
||||
if parser.vendor_key:
|
||||
vendor = vendor_handler.get_vendor(self.Session(),
|
||||
parser.vendor_key)
|
||||
if vendor:
|
||||
pdata['vendor_uuid'] = vendor.uuid
|
||||
pdata['vendor_name'] = vendor.name
|
||||
parsers_data[parser.key] = pdata
|
||||
else:
|
||||
if parser.vendor_key:
|
||||
vendor = vendor_handler.get_vendor(self.Session(),
|
||||
parser.vendor_key)
|
||||
if vendor:
|
||||
parser.vendormap_value = "{{uuid: '{}', name: '{}'}}".format(
|
||||
vendor.uuid, vendor.name.replace("'", "\\'"))
|
||||
else:
|
||||
log.warning("vendor '{}' not found for parser: {}".format(
|
||||
parser.vendor_key, parser.key))
|
||||
parser.vendormap_value = 'null'
|
||||
else:
|
||||
parser.vendormap_value = 'null'
|
||||
kwargs['parsers'] = parsers
|
||||
kwargs['parsers_data'] = parsers_data
|
||||
return kwargs
|
||||
|
||||
def get_batch_kwargs(self, batch):
|
||||
kwargs = super(VendorCatalogView, self).get_batch_kwargs(batch)
|
||||
kwargs['parser_key'] = batch.parser_key
|
||||
|
@ -275,23 +316,6 @@ class VendorCatalogView(FileBatchMasterView):
|
|||
|
||||
return kwargs
|
||||
|
||||
def template_kwargs_create(self, **kwargs):
|
||||
parsers = self.get_parsers()
|
||||
for parser in parsers:
|
||||
if parser.vendor_key:
|
||||
vendor = api.get_vendor(Session(), parser.vendor_key)
|
||||
if vendor:
|
||||
parser.vendormap_value = "{{uuid: '{}', name: '{}'}}".format(
|
||||
vendor.uuid, vendor.name.replace("'", "\\'"))
|
||||
else:
|
||||
log.warning("vendor '{}' not found for parser: {}".format(
|
||||
parser.vendor_key, parser.key))
|
||||
parser.vendormap_value = 'null'
|
||||
else:
|
||||
parser.vendormap_value = 'null'
|
||||
kwargs['parsers'] = parsers
|
||||
return kwargs
|
||||
|
||||
# TODO: deprecate / remove this
|
||||
VendorCatalogsView = VendorCatalogView
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue