update grid, crud views per edbob changes

This commit is contained in:
Lance Edgar 2012-08-16 10:31:24 -07:00
parent 59c8da5690
commit dcbcf81c40
24 changed files with 110 additions and 186 deletions

View file

@ -1,4 +1,4 @@
<%inherit file="/index.mako" />
<%inherit file="/grid.mako" />
<%def name="title()">Customer Groups</%def>

View file

@ -1,4 +1,4 @@
<%inherit file="/index.mako" />
<%inherit file="/grid.mako" />
<%def name="title()">Customers</%def>

View file

@ -2,8 +2,10 @@
${parent.body()}
<% customer = form.fieldset.model %>
<h2>People</h2>
% if fieldset.model.people:
% if customer.people:
<p>Customer account is associated with the following people:</p>
<div class="grid hoverable">
<table>
@ -12,7 +14,7 @@ ${parent.body()}
<th>Last Name</th>
</thead>
<tbody>
% for i, person in enumerate(fieldset.model.people, 1):
% for i, person in enumerate(customer.people, 1):
<tr class="${'odd' if i % 2 else 'even'}">
<td>${person.first_name or ''}</td>
<td>${person.last_name or ''}</td>
@ -26,7 +28,7 @@ ${parent.body()}
% endif
<h2>Groups</h2>
% if fieldset.model.groups:
% if customer.groups:
<p>Customer account belongs to the following groups:</p>
<div class="grid hoverable">
<table>
@ -35,7 +37,7 @@ ${parent.body()}
<th>Name</th>
</thead>
<tbody>
% for i, group in enumerate(fieldset.model.groups, 1):
% for i, group in enumerate(customer.groups, 1):
<tr class="${'odd' if i % 2 else 'even'}">
<td>${group.id}</td>
<td>${group.name or ''}</td>

View file

@ -1,2 +0,0 @@
<%inherit file="/base.mako" />
${parent.body()}

View file

@ -1,5 +1,4 @@
<%inherit file="/departments/base.mako" />
<%inherit file="/index.mako" />
<%inherit file="/grid.mako" />
<%def name="title()">Departments</%def>

View file

@ -1,2 +0,0 @@
<%inherit file="/base.mako" />
${parent.body()}

View file

@ -1,8 +0,0 @@
<%inherit file="/employees/base.mako" />
<%inherit file="/crud.mako" />
<%def name="menu()">
<p>${h.link_to("Back to Employees", url('employees.list'))}</p>
</%def>
${parent.body()}

View file

@ -1,2 +0,0 @@
<%inherit file="/employees/crud.mako" />
${parent.body()}

View file

@ -1,12 +1,5 @@
<%inherit file="/employees/base.mako" />
<%inherit file="/index.mako" />
<%inherit file="/grid.mako" />
<%def name="title()">Employees</%def>
<%def name="menu()">
% if request.has_perm('employees.create'):
<p>${h.link_to("Create a new Employee", url('employees.new'))}</p>
% endif
</%def>
${parent.body()}

View file

@ -1,2 +0,0 @@
<%inherit file="/employees/crud.mako" />
${parent.body()}

View file

@ -1,2 +0,0 @@
<%inherit file="/base.mako" />
${parent.body()}

View file

@ -1,7 +1,7 @@
<%inherit file="/crud.mako" />
<%def name="context_menu_items()">
<p>${h.link_to("Back to Products", url('products'))}</p>
<li>${h.link_to("Back to Products", url('products'))}</li>
</%def>
${parent.body()}

View file

@ -1,5 +1,4 @@
<%inherit file="/products/base.mako" />
<%inherit file="/index.mako" />
<%inherit file="/grid.mako" />
<%def name="title()">Products</%def>
@ -7,17 +6,17 @@
${parent.head_tags()}
<style type="text/css">
table.header td.tools table {
table.grid-header td.tools table {
margin-left: auto;
}
table.header td.tools table th,
table.header td.tools table td {
table.grid-header td.tools table th,
table.grid-header td.tools table td {
padding: 0px;
text-align: left;
}
table.header td.tools table #label-quantity {
table.grid-header td.tools table #label-quantity {
text-align: right;
width: 30px;
}

View file

@ -1,21 +1,12 @@
<%inherit file="/products/crud.mako" />
<%def name="head_tags()">
${parent.head_tags()}
<style type="text/css">
#product-costs td.center {
text-align: center;
}
</style>
</%def>
${parent.body()}
<% product = form.fieldset.model %>
<div id="product-costs">
<h2>Product Costs:</h2>
% if fieldset.model.costs:
% if product.costs:
<div class="grid hoverable">
<table>
<thead>
@ -27,7 +18,7 @@ ${parent.body()}
<th>Unit Cost</th>
</thead>
<tbody>
% for i, cost in enumerate(fieldset.model.costs, 1):
% for i, cost in enumerate(product.costs, 1):
<tr class="${'odd' if i % 2 else 'even'}">
<td class="center">${'X' if cost.preference == 1 else ''}</td>
<td>${cost.vendor}</td>

View file

@ -1,4 +1,4 @@
<%inherit file="/index.mako" />
<%inherit file="/grid.mako" />
<%def name="title()">Subdepartments</%def>

View file

@ -1,2 +0,0 @@
<%inherit file="/base.mako" />
${parent.body()}

View file

@ -1,5 +1,4 @@
<%inherit file="/vendors/base.mako" />
<%inherit file="/index.mako" />
<%inherit file="/grid.mako" />
<%def name="title()">Vendors</%def>

View file

@ -34,10 +34,7 @@ import rattail
class CustomerGroupsGrid(SearchableAlchemyGridView):
mapped_class = rattail.CustomerGroup
route_name = 'customergroups'
route_url = '/customergroups'
renderer = '/customergroups/index.mako'
permission = 'customergroups.list'
config_prefix = 'customer_groups'
sort = 'name'
def filter_map(self):
@ -63,4 +60,8 @@ class CustomerGroupsGrid(SearchableAlchemyGridView):
def includeme(config):
CustomerGroupsGrid.add_route(config)
config.add_route('customer_groups', '/customer-groups')
config.add_view(CustomerGroupsGrid, route_name='customer_groups',
renderer='/customer_groups/index.mako',
permission='customer_groups.list')

View file

@ -28,8 +28,7 @@
from sqlalchemy import and_
from edbob.pyramid.views import SearchableAlchemyGridView
from edbob.pyramid.views.crud import Crud
from edbob.pyramid.views import SearchableAlchemyGridView, CrudView
import rattail
@ -37,10 +36,7 @@ import rattail
class CustomersGrid(SearchableAlchemyGridView):
mapped_class = rattail.Customer
route_name = 'customers'
route_url = '/customers'
renderer = '/customers/index.mako'
permission = 'customers.list'
config_prefix = 'customers'
sort = 'name'
clickable = True
@ -87,20 +83,17 @@ class CustomersGrid(SearchableAlchemyGridView):
g.email.label("Email Address"),
],
readonly=True)
g.row_route_name = 'customer.read'
g.row_route_kwargs = lambda x: {'uuid': x.uuid}
g.click_route_name = 'customer.read'
return g
class CustomerCrud(Crud):
class CustomerCrud(CrudView):
mapped_class = rattail.Customer
home_route = 'customers'
def fieldset(self, obj):
fs = self.make_fieldset(obj)
def fieldset(self, model):
fs = self.make_fieldset(model)
fs.configure(
include=[
fs.id.label("ID"),
@ -112,5 +105,13 @@ class CustomerCrud(Crud):
def includeme(config):
CustomersGrid.add_route(config)
CustomerCrud.add_routes(config)
config.add_route('customers', '/customers')
config.add_view(CustomersGrid, route_name='customers',
renderer='/customers/index.mako',
permission='customers.list')
config.add_route('customer.read', '/customers/{uuid}')
config.add_view(CustomerCrud, attr='read', route_name='customer.read',
renderer='/customers/read.mako',
permission='customers.read')

View file

@ -26,37 +26,16 @@
``rattail.pyramid.views.departments`` -- Department Views
"""
# import transaction
# from pyramid.httpexceptions import HTTPFound
# from pyramid.view import view_config
# from edbob.pyramid import Session
from edbob.pyramid.views import SearchableAlchemyGridView, AlchemyGridView
import rattail
# @view_config(route_name='department.delete')
# def delete_department(context, request):
# uuid = request.matchdict['uuid']
# dept = Session.query(rattail.Department).get(uuid) if uuid else None
# assert dept
# with transaction.manager:
# q = Session.query(rattail.Product)
# q = q.filter(rattail.Product.department_uuid == dept.uuid)
# if q.count():
# q.update({'department_uuid': None}, synchronize_session=False)
# Session.delete(dept)
# return HTTPFound(location=request.route_url('departments.list'))
class DepartmentsGrid(SearchableAlchemyGridView):
mapped_class = rattail.Department
route_name = 'departments'
route_url = '/departments'
renderer = '/departments/index.mako'
permission = 'departments.list'
config_prefix = 'departments'
sort = 'name'
def filter_map(self):
@ -84,8 +63,7 @@ class DepartmentsGrid(SearchableAlchemyGridView):
class DepartmentsByVendorGrid(AlchemyGridView):
mapped_class = rattail.Department
route_name = 'departments.by_vendor'
route_url = '/departments/by-vendor'
config_prefix = 'departments.by_vendor'
checkboxes = True
partial_only = True
@ -110,8 +88,12 @@ class DepartmentsByVendorGrid(AlchemyGridView):
def includeme(config):
# config.add_route('department.delete', '/department/{uuid}/delete')
# config.scan(__name__)
DepartmentsGrid.add_route(config)
DepartmentsByVendorGrid.add_route(config)
config.add_route('departments', '/departments')
config.add_view(DepartmentsGrid, route_name='departments',
renderer='/departments/index.mako',
permission='departments.list')
config.add_route('departments.by_vendor', '/departments/by-vendor')
config.add_view(DepartmentsByVendorGrid, route_name='departments.by_vendor',
permission='departments.list')

View file

@ -29,10 +29,8 @@
from sqlalchemy import and_
import edbob
from edbob.pyramid import grids
from edbob.pyramid.forms import AssociationProxyField
from edbob.pyramid.views import SearchableAlchemyGridView
from edbob.pyramid.views.crud import Crud
import rattail
@ -40,9 +38,7 @@ import rattail
class EmployeesGrid(SearchableAlchemyGridView):
mapped_class = rattail.Employee
route_name = 'employees'
route_url = '/employees'
renderer = '/employees/index.mako'
config_prefix = 'employees'
sort = 'first_name'
def join_map(self):
@ -55,9 +51,9 @@ class EmployeesGrid(SearchableAlchemyGridView):
def filter_map(self):
return self.make_filter_map(
first_name=grids.search.filter_ilike(edbob.Person.first_name),
last_name=grids.search.filter_ilike(edbob.Person.last_name),
phone=grids.search.filter_ilike(rattail.EmployeePhoneNumber.number))
first_name=self.filter_ilike(edbob.Person.first_name),
last_name=self.filter_ilike(edbob.Person.last_name),
phone=self.filter_ilike(rattail.EmployeePhoneNumber.number))
def filter_config(self):
return self.make_filter_config(
@ -69,9 +65,9 @@ class EmployeesGrid(SearchableAlchemyGridView):
def sort_map(self):
return self.make_sort_map(
first_name=grids.util.sorter(edbob.Person.first_name),
last_name=grids.util.sorter(edbob.Person.last_name),
phone=grids.util.sorter(rattail.EmployeePhoneNumber.number))
first_name=self.sorter(edbob.Person.first_name),
last_name=self.sorter(edbob.Person.last_name),
phone=self.sorter(rattail.EmployeePhoneNumber.number))
def query(self):
q = self.make_query()
@ -94,20 +90,9 @@ class EmployeesGrid(SearchableAlchemyGridView):
return g
class EmployeeCrud(Crud):
mapped_class = rattail.Employee
home_route = 'employees.list'
def fieldset(self, obj):
fs = self.make_fieldset(obj)
fs.configure(
include=[
fs.person,
])
return fs
def includeme(config):
EmployeesGrid.add_route(config)
EmployeeCrud.add_routes(config)
config.add_route('employees', '/employees')
config.add_view(EmployeesGrid, route_name='employees',
renderer='/employees/index.mako',
permission='employees.list')

View file

@ -32,9 +32,7 @@ from sqlalchemy.orm import joinedload
import edbob
from edbob.pyramid import Session
from edbob.pyramid import grids
from edbob.pyramid.views import SearchableAlchemyGridView
from edbob.pyramid.views.crud import Crud
from edbob.pyramid.views import SearchableAlchemyGridView, CrudView
import rattail
import rattail.labels
@ -44,9 +42,7 @@ from rattail.pyramid.forms import UpcFieldRenderer, PriceFieldRenderer
class ProductsGrid(SearchableAlchemyGridView):
mapped_class = rattail.Product
route_name = 'products'
route_url = '/products'
renderer = '/products/index.mako'
config_prefix = 'products'
sort = 'description'
clickable = True
@ -72,9 +68,9 @@ class ProductsGrid(SearchableAlchemyGridView):
return self.make_filter_map(
exact=['upc'],
ilike=['description', 'size'],
brand=grids.search.filter_ilike(rattail.Brand.name),
department=grids.search.filter_ilike(rattail.Department.name),
subdepartment=grids.search.filter_ilike(rattail.Subdepartment.name))
brand=self.filter_ilike(rattail.Brand.name),
department=self.filter_ilike(rattail.Department.name),
subdepartment=self.filter_ilike(rattail.Subdepartment.name))
def filter_config(self):
return self.make_filter_config(
@ -91,11 +87,11 @@ class ProductsGrid(SearchableAlchemyGridView):
def sort_map(self):
return self.make_sort_map(
'upc', 'description', 'size',
brand=grids.util.sorter(rattail.Brand.name),
department=grids.util.sorter(rattail.Department.name),
subdepartment=grids.util.sorter(rattail.Subdepartment.name),
regular_price=grids.util.sorter(rattail.ProductPrice.price),
current_price=grids.util.sorter(rattail.ProductPrice.price))
brand=self.sorter(rattail.Brand.name),
department=self.sorter(rattail.Department.name),
subdepartment=self.sorter(rattail.Subdepartment.name),
regular_price=self.sorter(rattail.ProductPrice.price),
current_price=self.sorter(rattail.ProductPrice.price))
def query(self):
q = self.make_query()
@ -123,8 +119,7 @@ class ProductsGrid(SearchableAlchemyGridView):
],
readonly=True)
g.row_route_name = 'product.read'
g.row_route_kwargs = lambda x: {'uuid': x.uuid}
g.click_route_name = 'product.read'
if edbob.config.getboolean('rattail.labels', 'enabled', default=False):
def labels(row):
@ -134,13 +129,13 @@ class ProductsGrid(SearchableAlchemyGridView):
return g
class ProductCrud(Crud):
class ProductCrud(CrudView):
mapped_class = rattail.Product
home_route = 'products'
def fieldset(self, obj):
fs = self.make_fieldset(obj)
def fieldset(self, model):
fs = self.make_fieldset(model)
fs.upc.set(renderer=UpcFieldRenderer)
fs.regular_price.set(renderer=PriceFieldRenderer)
fs.current_price.set(renderer=PriceFieldRenderer)
@ -177,11 +172,20 @@ def print_label(request):
def includeme(config):
ProductsGrid.add_route(config)
ProductCrud.add_routes(config)
config.add_route('products', '/products')
config.add_view(ProductsGrid, route_name='products',
renderer='/products/index.mako',
permission='products.list')
config.add_route('products.print_label', '/products/label')
config.add_view(print_label, route_name='products.print_label', renderer='json')
config.add_view(print_label, route_name='products.print_label',
renderer='json')
config.add_route('product.read', '/products/{uuid}')
config.add_view(ProductCrud, attr='read', route_name='product.read',
renderer='/products/read.mako',
permission='products.read')
# from sqlalchemy.orm import joinedload

View file

@ -26,7 +26,7 @@
``rattail.pyramid.views.subdepartments`` -- Subdepartment Views
"""
from edbob.pyramid.views import SearchableAlchemyGridView, AlchemyGridView
from edbob.pyramid.views import SearchableAlchemyGridView
import rattail
@ -34,10 +34,7 @@ import rattail
class SubdepartmentsGrid(SearchableAlchemyGridView):
mapped_class = rattail.Subdepartment
route_name = 'subdepartments'
route_url = '/subdepartments'
renderer = '/subdepartments/index.mako'
permission = 'subdepartments.list'
config_prefix = 'subdepartments'
sort = 'name'
def filter_map(self):
@ -63,4 +60,8 @@ class SubdepartmentsGrid(SearchableAlchemyGridView):
def includeme(config):
SubdepartmentsGrid.add_route(config)
config.add_route('subdepartments', '/subdepartments')
config.add_view(SubdepartmentsGrid, route_name='subdepartments',
renderer='/subdepartments/index.mako',
permission='subdepartments.list')

View file

@ -27,7 +27,6 @@
"""
from edbob.pyramid.views import SearchableAlchemyGridView, AutocompleteView
from edbob.pyramid.views.crud import Crud
import rattail
@ -35,10 +34,7 @@ import rattail
class VendorsGrid(SearchableAlchemyGridView):
mapped_class = rattail.Vendor
route_name = 'vendors'
route_url = '/vendors'
renderer = '/vendors/index.mako'
permission = 'vendors.list'
config_prefix = 'vendors'
sort = 'name'
def filter_map(self):
@ -66,28 +62,19 @@ class VendorsGrid(SearchableAlchemyGridView):
return g
class VendorCrud(Crud):
mapped_class = rattail.Vendor
home_route = 'vendors.list'
def fieldset(self, obj):
fs = self.make_fieldset(obj)
fs.configure(
include=[
fs.id,
fs.name,
])
return fs
class VendorAutocomplete(AutocompleteView):
class VendorsAutocomplete(AutocompleteView):
mapped_class = rattail.Vendor
fieldname = 'name'
def includeme(config):
VendorsGrid.add_route(config)
VendorCrud.add_routes(config)
VendorAutocomplete.add_route(config)
config.add_route('vendors', '/vendors')
config.add_view(VendorsGrid, route_name='vendors',
renderer='/vendors/index.mako',
permission='vendors.list')
config.add_route('vendors.autocomplete', '/vendors/autocomplete')
config.add_view(VendorsAutocomplete, route_name='vendors.autocomplete',
renderer='json', permission='vendors.list')