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:
		
							parent
							
								
									983a06abe3
								
							
						
					
					
						commit
						e3b1be5835
					
				
					 3 changed files with 107 additions and 0 deletions
				
			
		
							
								
								
									
										35
									
								
								tailbone/templates/vendors/configure.mako
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										35
									
								
								tailbone/templates/vendors/configure.mako
									
										
									
									
										vendored
									
									
								
							| 
						 | 
					@ -16,6 +16,41 @@
 | 
				
			||||||
    </b-field>
 | 
					    </b-field>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  </div>
 | 
					  </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <h3 class="block is-size-3">Supported Vendors</h3>
 | 
				
			||||||
 | 
					  <div class="block" style="padding-left: 2rem;">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <p class="block">
 | 
				
			||||||
 | 
					      The following vendor "keys" are defined within various places in
 | 
				
			||||||
 | 
					      the software.  You must identify each explicitly with a
 | 
				
			||||||
 | 
					      Vendor record, for things to work as designed.
 | 
				
			||||||
 | 
					    </p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <b-field v-for="setting in supportedVendorSettings"
 | 
				
			||||||
 | 
					             :key="setting.key"
 | 
				
			||||||
 | 
					             horizontal
 | 
				
			||||||
 | 
					             :label="setting.key"
 | 
				
			||||||
 | 
					             :type="supportedVendorSettings[setting.key].value ? null : 'is-warning'"
 | 
				
			||||||
 | 
					             style="max-width: 75%;">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      <tailbone-autocomplete :name="'rattail.vendor.' + setting.key"
 | 
				
			||||||
 | 
					                             service-url="${url('vendors.autocomplete')}"
 | 
				
			||||||
 | 
					                             v-model="supportedVendorSettings[setting.key].value"
 | 
				
			||||||
 | 
					                             :initial-label="setting.label"
 | 
				
			||||||
 | 
					                             @input="settingsNeedSaved = true">
 | 
				
			||||||
 | 
					      </tailbone-autocomplete>
 | 
				
			||||||
 | 
					    </b-field>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</%def>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<%def name="modify_this_page_vars()">
 | 
				
			||||||
 | 
					  ${parent.modify_this_page_vars()}
 | 
				
			||||||
 | 
					  <script type="text/javascript">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ThisPageData.supportedVendorSettings = ${json.dumps(supported_vendor_settings)|n}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  </script>
 | 
				
			||||||
</%def>
 | 
					</%def>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4359,6 +4359,21 @@ class MasterView(View):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def configure_get_context(self, simple_settings=None,
 | 
					    def configure_get_context(self, simple_settings=None,
 | 
				
			||||||
                              input_file_templates=True):
 | 
					                              input_file_templates=True):
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        Returns the full context dict, for rendering the configure
 | 
				
			||||||
 | 
					        page template.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Default context will include the "simple" settings, as well as
 | 
				
			||||||
 | 
					        any "input file template" settings.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        You may need to override this method, to add additional
 | 
				
			||||||
 | 
					        "custom" settings.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        :param simple_settings: Optional list of simple settings, if
 | 
				
			||||||
 | 
					           already initialized.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        :returns: Context dict for the page template.
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
        context = {}
 | 
					        context = {}
 | 
				
			||||||
        if simple_settings is None:
 | 
					        if simple_settings is None:
 | 
				
			||||||
            simple_settings = self.configure_get_simple_settings()
 | 
					            simple_settings = self.configure_get_simple_settings()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										57
									
								
								tailbone/views/vendors/core.py
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										57
									
								
								tailbone/views/vendors/core.py
									
										
									
									
										vendored
									
									
								
							| 
						 | 
					@ -33,6 +33,7 @@ from rattail.db import model
 | 
				
			||||||
from webhelpers2.html import tags
 | 
					from webhelpers2.html import tags
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from tailbone.views import MasterView
 | 
					from tailbone.views import MasterView
 | 
				
			||||||
 | 
					from tailbone.db import Session
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class VendorView(MasterView):
 | 
					class VendorView(MasterView):
 | 
				
			||||||
| 
						 | 
					@ -179,6 +180,62 @@ class VendorView(MasterView):
 | 
				
			||||||
             'type': bool},
 | 
					             '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):
 | 
					def defaults(config, **kwargs):
 | 
				
			||||||
    base = globals()
 | 
					    base = globals()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue