Add new "v3" grids, refactor all views to use them

or at least that's the idea..hopefully we caught them all
This commit is contained in:
Lance Edgar 2017-07-07 09:13:53 -05:00
parent f244c2934b
commit 5b1ae27a10
71 changed files with 2679 additions and 2030 deletions

View file

@ -35,7 +35,7 @@ import formalchemy
from tailbone import forms
from tailbone.db import Session
from tailbone.views.batch import FileBatchMasterView
from tailbone.views.batch import FileBatchMasterView2 as FileBatchMasterView
log = logging.getLogger(__name__)
@ -52,28 +52,40 @@ class VendorCatalogsView(FileBatchMasterView):
editable = False
rows_bulk_deletable = True
grid_columns = [
'created',
'created_by',
'vendor',
'effective',
'filename',
'executed',
]
row_grid_columns = [
'sequence',
'upc',
'brand_name',
'description',
'size',
'vendor_code',
'old_unit_cost',
'unit_cost',
'unit_cost_diff',
'status_code',
]
def get_parsers(self):
if not hasattr(self, 'parsers'):
self.parsers = sorted(iter_catalog_parsers(), key=lambda p: p.display)
return self.parsers
def configure_grid(self, g):
super(VendorCatalogsView, self).configure_grid(g)
g.joiners['vendor'] = lambda q: q.join(model.Vendor)
g.filters['vendor'] = g.make_filter('vendor', model.Vendor.name,
default_active=True, default_verb='contains')
g.sorters['vendor'] = g.make_sorter(model.Vendor.name)
g.configure(
include=[
g.created,
g.created_by,
g.vendor,
g.effective,
g.filename,
g.executed,
],
readonly=True)
def get_instance_title(self, batch):
return unicode(batch.vendor)
@ -115,28 +127,18 @@ class VendorCatalogsView(FileBatchMasterView):
return kwargs
def configure_row_grid(self, g):
g.configure(
include=[
g.sequence,
g.upc.label("UPC"),
g.brand_name.label("Brand"),
g.description,
g.size,
g.vendor_code,
g.old_unit_cost.label("Old Cost"),
g.unit_cost.label("New Cost"),
g.unit_cost_diff.label("Diff."),
g.status_code,
],
readonly=True)
super(VendorCatalogsView, self).configure_row_grid(g)
g.set_label('upc', "UPC")
g.set_label('brand_name', "Brand")
g.set_label('old_unit_cost', "Old Cost")
g.set_label('unit_cost', "New Cost")
g.set_label('unit_cost_diff', "Diff.")
def row_grid_row_attrs(self, row, i):
attrs = {}
if row.status_code in (row.STATUS_NEW_COST, row.STATUS_UPDATE_COST):
attrs['class_'] = 'notice'
def row_grid_extra_class(self, row, i):
if row.status_code == row.STATUS_PRODUCT_NOT_FOUND:
attrs['class_'] = 'warning'
return attrs
return 'warning'
if row.status_code in (row.STATUS_NEW_COST, row.STATUS_UPDATE_COST):
return 'notice'
def template_kwargs_create(self, **kwargs):
parsers = self.get_parsers()

View file

@ -30,7 +30,7 @@ from rattail.db import model
from tailbone import forms
from tailbone.db import Session
from tailbone.views import MasterView, AutocompleteView
from tailbone.views import MasterView2 as MasterView, AutocompleteView
class VendorsView(MasterView):
@ -40,22 +40,24 @@ class VendorsView(MasterView):
model_class = model.Vendor
has_versions = True
grid_columns = [
'id',
'name',
'phone',
'email',
'contact',
]
def configure_grid(self, g):
super(VendorsView, self).configure_grid(g)
g.filters['name'].default_active = True
g.filters['name'].default_verb = 'contains'
g.filters['id'].label = "ID"
g.default_sortkey = 'name'
g.append(forms.AssociationProxyField('contact'))
g.configure(
include=[
g.id.label("ID"),
g.name,
g.phone.label("Phone Number"),
g.email.label("Email Address"),
g.contact,
],
readonly=True)
g.set_label('id', "ID")
g.set_label('phone', "Phone Number")
g.set_label('email', "Email Address")
def configure_fieldset(self, fs):
fs.append(forms.AssociationProxyField('contact'))

View file

@ -1,4 +1,4 @@
# -*- coding: utf-8 -*-
# -*- coding: utf-8; -*-
################################################################################
#
# Rattail -- Retail Software Framework
@ -32,7 +32,7 @@ from rattail.vendors.invoices import iter_invoice_parsers, require_invoice_parse
import formalchemy
from tailbone.db import Session
from tailbone.views.batch import FileBatchMasterView
from tailbone.views.batch import FileBatchMasterView2 as FileBatchMasterView
class VendorInvoicesView(FileBatchMasterView):
@ -44,23 +44,36 @@ class VendorInvoicesView(FileBatchMasterView):
default_handler_spec = 'rattail.batch.vendorinvoice:VendorInvoiceHandler'
url_prefix = '/vendors/invoices'
grid_columns = [
'created',
'created_by',
'vendor',
'filename',
'executed',
]
row_grid_columns = [
'sequence',
'upc',
'brand_name',
'description',
'size',
'vendor_code',
'shipped_cases',
'shipped_units',
'unit_cost',
'status_code',
]
def get_instance_title(self, batch):
return unicode(batch.vendor)
def configure_grid(self, g):
super(VendorInvoicesView, self).configure_grid(g)
g.joiners['vendor'] = lambda q: q.join(model.Vendor)
g.filters['vendor'] = g.make_filter('vendor', model.Vendor.name,
default_active=True, default_verb='contains')
g.sorters['vendor'] = g.make_sorter(model.Vendor.name)
g.configure(
include=[
g.created,
g.created_by,
g.vendor,
g.filename,
g.executed,
],
readonly=True)
def configure_fieldset(self, fs):
fs.purchase_order_number.set(label=self.handler.po_number_title)
@ -123,34 +136,21 @@ class VendorInvoicesView(FileBatchMasterView):
return True
def configure_row_grid(self, g):
g.filters['upc'].label = "UPC"
g.filters['brand_name'].label = "Brand"
g.configure(
include=[
g.sequence,
g.upc.label("UPC"),
g.brand_name.label("Brand"),
g.description,
g.size,
g.vendor_code,
g.shipped_cases.label("Cases"),
g.shipped_units.label("Units"),
g.unit_cost,
g.status_code,
],
readonly=True)
super(VendorInvoicesView, self).configure_row_grid(g)
g.set_label('upc', "UPC")
g.set_label('brand_name', "Brand")
g.set_label('shipped_cases', "Cases")
g.set_label('shipped_units', "Units")
def row_grid_row_attrs(self, row, i):
attrs = {}
if row.status_code in (row.STATUS_NOT_IN_PURCHASE,
row.STATUS_NOT_IN_INVOICE,
row.STATUS_DIFFERS_FROM_PURCHASE):
attrs['class_'] = 'notice'
def row_grid_extra_class(self, row, i):
if row.status_code in (row.STATUS_NOT_IN_DB,
row.STATUS_COST_NOT_IN_DB,
row.STATUS_NO_CASE_QUANTITY):
attrs['class_'] = 'warning'
return attrs
return 'warning'
if row.status_code in (row.STATUS_NOT_IN_PURCHASE,
row.STATUS_NOT_IN_INVOICE,
row.STATUS_DIFFERS_FROM_PURCHASE):
return 'notice'
def includeme(config):