Convert (most?) basic views to use master view pattern.

This commit is contained in:
Lance Edgar 2015-12-07 15:08:14 -06:00
parent ab40685175
commit 16bbbb4a75
35 changed files with 363 additions and 1187 deletions

View file

@ -24,10 +24,9 @@
Views pertaining to vendors
"""
from __future__ import unicode_literals
from __future__ import unicode_literals, absolute_import
from .core import (VendorsGrid, VendorCrud, VendorVersionView,
VendorsAutocomplete, add_routes)
from .core import VendorsView, VendorVersionView, VendorsAutocomplete
def includeme(config):

View file

@ -24,38 +24,29 @@
Vendor Views
"""
from __future__ import unicode_literals
from __future__ import unicode_literals, absolute_import
from rattail.db import model
from rattail.db.model import Vendor
from tailbone import forms
from tailbone.db import Session
from tailbone.views import SearchableAlchemyGridView, CrudView, AutocompleteView
from tailbone.views import MasterView, AutocompleteView
from tailbone.views.continuum import VersionView, version_defaults
from tailbone.forms import AssociationProxyField, PersonFieldRenderer
class VendorsGrid(SearchableAlchemyGridView):
class VendorsView(MasterView):
"""
Master view for the Vendor class.
"""
model_class = model.Vendor
mapped_class = Vendor
config_prefix = 'vendors'
sort = 'name'
def configure_grid(self, g):
g.filters['name'].default_active = True
g.filters['name'].default_verb = 'contains'
g.filters['id'].label = "ID"
g.default_sortkey = 'name'
def filter_map(self):
return self.make_filter_map(exact=['id'], ilike=['name'])
def filter_config(self):
return self.make_filter_config(
include_filter_name=True,
filter_type_name='lk',
filter_label_id="ID")
def sort_map(self):
return self.make_sort_map('id', 'name')
def grid(self):
g = self.make_grid()
g.append(AssociationProxyField('contact'))
g.append(forms.AssociationProxyField('contact'))
g.configure(
include=[
g.id.label("ID"),
@ -63,28 +54,11 @@ class VendorsGrid(SearchableAlchemyGridView):
g.phone.label("Phone Number"),
g.email.label("Email Address"),
g.contact,
],
],
readonly=True)
if self.request.has_perm('vendors.read'):
g.viewable = True
g.view_route_name = 'vendor.read'
if self.request.has_perm('vendors.update'):
g.editable = True
g.edit_route_name = 'vendor.update'
if self.request.has_perm('vendors.delete'):
g.deletable = True
g.delete_route_name = 'vendor.delete'
return g
class VendorCrud(CrudView):
mapped_class = Vendor
home_route = 'vendors'
def fieldset(self, model):
fs = self.make_fieldset(model)
fs.append(AssociationProxyField('contact'))
def configure_fieldset(self, fs):
fs.append(forms.AssociationProxyField('contact'))
fs.configure(
include=[
fs.id.label("ID"),
@ -94,12 +68,10 @@ class VendorCrud(CrudView):
fs.order_interval_days.label("Order Interval in Days"),
fs.phone.label("Phone Number").readonly(),
fs.email.label("Email Address").readonly(),
fs.contact.with_renderer(PersonFieldRenderer).readonly(),
])
return fs
def pre_delete(self, vendor):
fs.contact.with_renderer(forms.PersonFieldRenderer).readonly(),
])
def before_delete(self, vendor):
# Remove all product costs.
q = Session.query(model.ProductCost).filter(
model.ProductCost.vendor == vendor)
@ -112,42 +84,21 @@ class VendorVersionView(VersionView):
View which shows version history for a vendor.
"""
parent_class = model.Vendor
route_model_view = 'vendor.read'
route_model_view = 'vendors.view'
class VendorsAutocomplete(AutocompleteView):
mapped_class = Vendor
mapped_class = model.Vendor
fieldname = 'name'
def add_routes(config):
config.add_route('vendors', '/vendors')
config.add_route('vendors.autocomplete', '/vendors/autocomplete')
config.add_route('vendor.create', '/vendors/new')
config.add_route('vendor.read', '/vendors/{uuid}')
config.add_route('vendor.update', '/vendors/{uuid}/edit')
config.add_route('vendor.delete', '/vendors/{uuid}/delete')
def includeme(config):
add_routes(config)
config.add_view(VendorsGrid, route_name='vendors',
renderer='/vendors/index.mako',
permission='vendors.list')
# autocomplete
config.add_route('vendors.autocomplete', '/vendors/autocomplete')
config.add_view(VendorsAutocomplete, route_name='vendors.autocomplete',
renderer='json', permission='vendors.list')
config.add_view(VendorCrud, attr='create', route_name='vendor.create',
renderer='/vendors/crud.mako',
permission='vendors.create')
config.add_view(VendorCrud, attr='read', route_name='vendor.read',
renderer='/vendors/crud.mako',
permission='vendors.read')
config.add_view(VendorCrud, attr='update', route_name='vendor.update',
renderer='/vendors/crud.mako',
permission='vendors.update')
config.add_view(VendorCrud, attr='delete', route_name='vendor.delete',
permission='vendors.delete')
VendorsView.defaults(config)
version_defaults(config, VendorVersionView, 'vendor')