Add master view for Units of Measure mapping table
w/ support for "collect from wild" tool
This commit is contained in:
		
							parent
							
								
									0035a4129a
								
							
						
					
					
						commit
						dde6195f38
					
				
					 2 changed files with 192 additions and 0 deletions
				
			
		
							
								
								
									
										66
									
								
								tailbone/templates/units-of-measure/index.mako
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								tailbone/templates/units-of-measure/index.mako
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,66 @@ | ||||||
|  | ## -*- coding: utf-8; -*- | ||||||
|  | <%inherit file="/master/index.mako" /> | ||||||
|  | 
 | ||||||
|  | <%def name="grid_tools()"> | ||||||
|  |   ${parent.grid_tools()} | ||||||
|  | 
 | ||||||
|  |   <b-button type="is-primary" | ||||||
|  |             icon-pack="fas" | ||||||
|  |             icon-left="fas fa-shopping-basket" | ||||||
|  |             @click="showingCollectWildDialog = true"> | ||||||
|  |     Collect from the Wild | ||||||
|  |   </b-button> | ||||||
|  | 
 | ||||||
|  |   ${h.form(url('{}.collect_wild_uoms'.format(route_prefix)), ref='collect-wild-uoms-form')} | ||||||
|  |   ${h.csrf_token(request)} | ||||||
|  |   ${h.end_form()} | ||||||
|  | 
 | ||||||
|  |   <b-modal has-modal-card | ||||||
|  |            :active.sync="showingCollectWildDialog"> | ||||||
|  |     <div class="modal-card"> | ||||||
|  | 
 | ||||||
|  |       <header class="modal-card-head"> | ||||||
|  |         <p class="modal-card-title">Collect from the Wild</p> | ||||||
|  |       </header> | ||||||
|  | 
 | ||||||
|  |       <section class="modal-card-body"> | ||||||
|  |         <p> | ||||||
|  |           This tool will query some database(s) in order to discover all UOM | ||||||
|  |           abbreviations which currently exist in your product data. | ||||||
|  |         </p> | ||||||
|  |         <p> | ||||||
|  |           Depending on how it has to go about that, this could take a minute or | ||||||
|  |           two.  Please be patient when running it. | ||||||
|  |         </p> | ||||||
|  |       </section> | ||||||
|  | 
 | ||||||
|  |       <footer class="modal-card-foot"> | ||||||
|  |         <b-button @click="showingCollectWildDialog = false"> | ||||||
|  |           Cancel | ||||||
|  |         </b-button> | ||||||
|  |         <once-button type="is-primary" | ||||||
|  |                      @click="collectFromWild()" | ||||||
|  |                      icon-left="shopping-basket" | ||||||
|  |                      text="Collect from the Wild"> | ||||||
|  |         </once-button> | ||||||
|  |       </footer> | ||||||
|  | 
 | ||||||
|  |     </div> | ||||||
|  |   </b-modal> | ||||||
|  | </%def> | ||||||
|  | 
 | ||||||
|  | <%def name="modify_this_page_vars()"> | ||||||
|  |   ${parent.modify_this_page_vars()} | ||||||
|  |   <script type="text/javascript"> | ||||||
|  | 
 | ||||||
|  |     TailboneGridData.showingCollectWildDialog = false | ||||||
|  | 
 | ||||||
|  |     TailboneGrid.methods.collectFromWild = function() { | ||||||
|  |         this.$refs['collect-wild-uoms-form'].submit() | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |   </script> | ||||||
|  | </%def> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ${parent.body()} | ||||||
							
								
								
									
										126
									
								
								tailbone/views/uoms.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										126
									
								
								tailbone/views/uoms.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,126 @@ | ||||||
|  | # -*- coding: utf-8; -*- | ||||||
|  | ################################################################################ | ||||||
|  | # | ||||||
|  | #  Rattail -- Retail Software Framework | ||||||
|  | #  Copyright © 2010-2021 Lance Edgar | ||||||
|  | # | ||||||
|  | #  This file is part of Rattail. | ||||||
|  | # | ||||||
|  | #  Rattail is free software: you can redistribute it and/or modify it under the | ||||||
|  | #  terms of the GNU General Public License as published by the Free Software | ||||||
|  | #  Foundation, either version 3 of the License, or (at your option) any later | ||||||
|  | #  version. | ||||||
|  | # | ||||||
|  | #  Rattail is distributed in the hope that it will be useful, but WITHOUT ANY | ||||||
|  | #  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | ||||||
|  | #  FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more | ||||||
|  | #  details. | ||||||
|  | # | ||||||
|  | #  You should have received a copy of the GNU General Public License along with | ||||||
|  | #  Rattail.  If not, see <http://www.gnu.org/licenses/>. | ||||||
|  | # | ||||||
|  | ################################################################################ | ||||||
|  | """ | ||||||
|  | UOM Views | ||||||
|  | """ | ||||||
|  | 
 | ||||||
|  | from __future__ import unicode_literals, absolute_import | ||||||
|  | 
 | ||||||
|  | from rattail.db import model | ||||||
|  | 
 | ||||||
|  | from tailbone.views import MasterView | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class UnitOfMeasureView(MasterView): | ||||||
|  |     """ | ||||||
|  |     Master view for the UOM mappings. | ||||||
|  |     """ | ||||||
|  |     model_class = model.UnitOfMeasure | ||||||
|  |     route_prefix = 'uoms' | ||||||
|  |     url_prefix = '/units-of-measure' | ||||||
|  |     bulk_deletable = True | ||||||
|  |     has_versions = True | ||||||
|  | 
 | ||||||
|  |     labels = { | ||||||
|  |         'sil_code': "SIL Code", | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     grid_columns = [ | ||||||
|  |         'abbreviation', | ||||||
|  |         'sil_code', | ||||||
|  |         'description', | ||||||
|  |         'notes', | ||||||
|  |     ] | ||||||
|  | 
 | ||||||
|  |     form_fields = [ | ||||||
|  |         'abbreviation', | ||||||
|  |         'sil_code', | ||||||
|  |         'description', | ||||||
|  |         'notes', | ||||||
|  |     ] | ||||||
|  | 
 | ||||||
|  |     def configure_grid(self, g): | ||||||
|  |         super(UnitOfMeasureView, self).configure_grid(g) | ||||||
|  | 
 | ||||||
|  |         g.set_renderer('description', self.render_description) | ||||||
|  | 
 | ||||||
|  |         g.set_sort_defaults('abbreviation') | ||||||
|  | 
 | ||||||
|  |         g.set_link('abbreviation') | ||||||
|  |         g.set_link('description') | ||||||
|  | 
 | ||||||
|  |     def configure_form(self, f): | ||||||
|  |         super(UnitOfMeasureView, self).configure_form(f) | ||||||
|  | 
 | ||||||
|  |         f.set_renderer('description', self.render_description) | ||||||
|  |         f.set_type('notes', 'text') | ||||||
|  | 
 | ||||||
|  |         if not self.creating: | ||||||
|  |             f.set_readonly('abbreviation') | ||||||
|  | 
 | ||||||
|  |         if self.creating or self.editing: | ||||||
|  |             f.remove('description') | ||||||
|  |             f.set_enum('sil_code', self.enum.UNIT_OF_MEASURE) | ||||||
|  | 
 | ||||||
|  |     def redirect_after_create(self, uom, **kwargs): | ||||||
|  |         return self.redirect(self.get_index_url()) | ||||||
|  | 
 | ||||||
|  |     def redirect_after_edit(self, uom, **kwargs): | ||||||
|  |         return self.redirect(self.get_index_url()) | ||||||
|  | 
 | ||||||
|  |     def render_description(self, uom, field): | ||||||
|  |         code = uom.sil_code | ||||||
|  |         if code: | ||||||
|  |             if code in self.enum.UNIT_OF_MEASURE: | ||||||
|  |                 return self.enum.UNIT_OF_MEASURE[code] | ||||||
|  |             return "(unknown code)" | ||||||
|  | 
 | ||||||
|  |     def collect_wild_uoms(self): | ||||||
|  |         app = self.get_rattail_app() | ||||||
|  |         handler = app.get_products_handler() | ||||||
|  |         uoms = handler.collect_wild_uoms() | ||||||
|  |         self.request.session.flash("All abbreviations from the wild have been added.  Now please map each to a SIL code.") | ||||||
|  |         return self.redirect(self.get_index_url()) | ||||||
|  | 
 | ||||||
|  |     @classmethod | ||||||
|  |     def defaults(cls, config): | ||||||
|  |         cls._uom_defaults(config) | ||||||
|  |         cls._defaults(config) | ||||||
|  | 
 | ||||||
|  |     @classmethod | ||||||
|  |     def _uom_defaults(cls, config): | ||||||
|  |         route_prefix = cls.get_route_prefix() | ||||||
|  |         url_prefix = cls.get_url_prefix() | ||||||
|  |         permission_prefix = cls.get_permission_prefix() | ||||||
|  | 
 | ||||||
|  |         # collect wild uoms | ||||||
|  |         config.add_tailbone_permission(permission_prefix, '{}.collect_wild_uoms'.format(permission_prefix), | ||||||
|  |                                        "Collect UoM abbreviations from the wild") | ||||||
|  |         config.add_route('{}.collect_wild_uoms'.format(route_prefix), '{}/collect-wild-uoms'.format(url_prefix), | ||||||
|  |                          request_method='POST') | ||||||
|  |         config.add_view(cls, attr='collect_wild_uoms', route_name='{}.collect_wild_uoms'.format(route_prefix), | ||||||
|  |                         permission='{}.collect_wild_uoms'.format(permission_prefix)) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def includeme(config): | ||||||
|  |     UnitOfMeasureView.defaults(config) | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Lance Edgar
						Lance Edgar