Expose config for identifying supported vendors

unfortunately must identify vendors at each app node separately, but
this is definitely still an improvement..
This commit is contained in:
Lance Edgar 2022-05-15 16:04:22 -05:00
parent 983a06abe3
commit e3b1be5835
3 changed files with 107 additions and 0 deletions

View file

@ -33,6 +33,7 @@ from rattail.db import model
from webhelpers2.html import tags
from tailbone.views import MasterView
from tailbone.db import Session
class VendorView(MasterView):
@ -179,6 +180,62 @@ class VendorView(MasterView):
'type': bool},
]
def configure_get_context(self, **kwargs):
context = super(VendorView, self).configure_get_context(**kwargs)
context['supported_vendor_settings'] = self.configure_get_supported_vendor_settings()
return context
def configure_gather_settings(self, data, **kwargs):
settings = super(VendorView, self).configure_gather_settings(
data, **kwargs)
supported_vendor_settings = self.configure_get_supported_vendor_settings()
for setting in six.itervalues(supported_vendor_settings):
name = 'rattail.vendor.{}'.format(setting['key'])
settings.append({'name': name,
'value': data[name]})
return settings
def configure_remove_settings(self, **kwargs):
super(VendorView, self).configure_remove_settings(**kwargs)
model = self.model
names = []
supported_vendor_settings = self.configure_get_supported_vendor_settings()
for setting in six.itervalues(supported_vendor_settings):
names.append('rattail.vendor.{}'.format(setting['key']))
if names:
# nb. we do not use self.Session b/c that may not point to
# the Rattail DB for the subclass
Session().query(model.Setting)\
.filter(model.Setting.name.in_(names))\
.delete(synchronize_session=False)
def configure_get_supported_vendor_settings(self):
app = self.get_rattail_app()
vendor_handler = app.get_vendor_handler()
batch_handler = app.get_batch_handler('purchase')
settings = {}
for parser in batch_handler.get_supported_invoice_parsers():
key = parser.vendor_key
if not key:
continue
vendor = vendor_handler.get_vendor(self.Session(), key)
settings[key] = {
'key': key,
'value': vendor.uuid if vendor else None,
'label': six.text_type(vendor) if vendor else None,
}
return settings
def defaults(config, **kwargs):
base = globals()