Use Grid.make_sorter() instead of legacy code

b/c multi-column sorting relies on this
This commit is contained in:
Lance Edgar 2023-10-18 18:18:55 -05:00
parent 659f5a8fe1
commit 919d8d109f
14 changed files with 198 additions and 176 deletions

View file

@ -2,7 +2,7 @@
################################################################################
#
# Rattail -- Retail Software Framework
# Copyright © 2010-2022 Lance Edgar
# Copyright © 2010-2023 Lance Edgar
#
# This file is part of Rattail.
#
@ -24,10 +24,6 @@
Views for "true" purchase orders
"""
from __future__ import unicode_literals, absolute_import
import six
from rattail.db import model
from webhelpers2.html import HTML, tags
@ -143,28 +139,35 @@ class PurchaseView(MasterView):
if purchase.date_ordered:
return "{} (ordered {})".format(purchase.vendor, purchase.date_ordered.strftime('%Y-%m-%d'))
return "{} (ordered)".format(purchase.vendor)
return six.text_type(purchase)
return str(purchase)
def configure_grid(self, g):
super(PurchaseView, self).configure_grid(g)
super().configure_grid(g)
model = self.model
g.joiners['store'] = lambda q: q.join(model.Store)
g.filters['store'] = g.make_filter('store', model.Store.name)
g.sorters['store'] = g.make_sorter(model.Store.name)
# store
g.set_joiner('store', lambda q: q.join(model.Store))
g.set_sorter('store', model.Store.name)
g.set_filter('store', model.Store.name)
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)
# vendor
g.set_joiner('vendor', lambda q: q.join(model.Vendor))
g.set_sorter('vendor', model.Vendor.name)
g.set_filter('vendor', model.Vendor.name,
default_active=True,
default_verb='contains')
g.joiners['department'] = lambda q: q.join(model.Department)
g.filters['department'] = g.make_filter('department', model.Department.name)
g.sorters['department'] = g.make_sorter(model.Department.name)
# department
g.set_joiner('department', lambda q: q.join(model.Department))
g.set_sorter('department', model.Department.name)
g.set_filter('department', model.Department.name)
g.joiners['buyer'] = lambda q: q.join(model.Employee).join(model.Person)
g.filters['buyer'] = g.make_filter('buyer', model.Person.display_name,
default_active=True, default_verb='contains')
g.sorters['buyer'] = g.make_sorter(model.Person.display_name)
# buyer
g.set_joiner('buyer', lambda q: q.join(model.Employee).join(model.Person))
g.set_sorter('buyer', model.Person.display_name)
g.set_filter('buyer', model.Person.display_name,
default_active=True,
default_verb='contains')
# id
g.set_renderer('id', self.render_id_str)
@ -198,7 +201,7 @@ class PurchaseView(MasterView):
g.set_link('invoice_total')
def configure_form(self, f):
super(PurchaseView, self).configure_form(f)
super().configure_form(f)
# id
f.set_renderer('id', self.render_id_str)
@ -322,7 +325,7 @@ class PurchaseView(MasterView):
.filter(model.PurchaseItem.purchase == purchase)
def configure_row_grid(self, g):
super(PurchaseView, self).configure_row_grid(g)
super().configure_row_grid(g)
g.set_sort_defaults('sequence')
@ -353,7 +356,7 @@ class PurchaseView(MasterView):
g.remove('po_total')
def configure_row_form(self, f):
super(PurchaseView, self).configure_row_form(f)
super().configure_row_form(f)
# quantity fields
f.set_type('case_quantity', 'quantity')