Provide a way to show enum display text for some version diff fields
master view must explicitly declare which enums for which fields
This commit is contained in:
parent
2a9d5f74ce
commit
35131c8732
7 changed files with 172 additions and 26 deletions
|
@ -597,7 +597,6 @@ class MasterView(View):
|
|||
return defaults
|
||||
|
||||
def configure_row_grid(self, grid):
|
||||
# super(MasterView, self).configure_row_grid(grid)
|
||||
self.set_row_labels(grid)
|
||||
|
||||
self.configure_column_customer_key(grid)
|
||||
|
@ -1528,6 +1527,15 @@ class MasterView(View):
|
|||
})
|
||||
|
||||
def title_for_version(self, version):
|
||||
"""
|
||||
Must return the title text for the given version. By default
|
||||
this will be the :term:`rattail:model title` for the version's
|
||||
data class.
|
||||
|
||||
:param version: Reference to a Continuum version object.
|
||||
|
||||
:returns: Title text for the version, as string.
|
||||
"""
|
||||
cls = continuum.parent_class(version.__class__)
|
||||
return cls.get_model_title()
|
||||
|
||||
|
@ -4962,13 +4970,52 @@ class MasterView(View):
|
|||
return diffs.Diff(old_data, new_data, **kwargs)
|
||||
|
||||
def get_version_diff_factory(self, **kwargs):
|
||||
"""
|
||||
Must return the factory to be used when creating version diff
|
||||
objects.
|
||||
|
||||
By default this returns the
|
||||
:class:`tailbone.diffs.VersionDiff` class, unless
|
||||
:attr:`version_diff_factory` is set, in which case that is
|
||||
returned as-is.
|
||||
|
||||
:returns: A factory which can produce
|
||||
:class:`~tailbone.diffs.VersionDiff` objects.
|
||||
"""
|
||||
if hasattr(self, 'version_diff_factory'):
|
||||
return self.version_diff_factory
|
||||
return diffs.VersionDiff
|
||||
|
||||
def get_version_diff_enums(self, version):
|
||||
"""
|
||||
This can optionally return a dict of field enums, to be passed
|
||||
to the version diff factory. This method is called as part of
|
||||
:meth:`make_version_diff()`.
|
||||
"""
|
||||
|
||||
def make_version_diff(self, version, *args, **kwargs):
|
||||
"""
|
||||
Make a version diff object, using the factory returned by
|
||||
:meth:`get_version_diff_factory()`.
|
||||
|
||||
:param version: Reference to a Continuum version object.
|
||||
|
||||
:param title: If specified, must be as a kwarg. Optional
|
||||
override for the version title text. If not specified,
|
||||
:meth:`title_for_version()` is called for the title.
|
||||
|
||||
:param \*args: Additional args to pass to the factory.
|
||||
|
||||
:param \*\*kwargs: Additional kwargs to pass to the factory.
|
||||
|
||||
:returns: A :class:`~tailbone.diffs.VersionDiff` object.
|
||||
"""
|
||||
if 'title' not in kwargs:
|
||||
kwargs['title'] = self.title_for_version(version)
|
||||
|
||||
if 'enums' not in kwargs:
|
||||
kwargs['enums'] = self.get_version_diff_enums(version)
|
||||
|
||||
factory = self.get_version_diff_factory()
|
||||
return factory(version, *args, **kwargs)
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@ Member Views
|
|||
from collections import OrderedDict
|
||||
|
||||
import sqlalchemy as sa
|
||||
import sqlalchemy_continuum as continuum
|
||||
|
||||
from rattail.db import model
|
||||
from rattail.db.model import MembershipType, Member, MemberEquityPayment
|
||||
|
@ -71,6 +72,7 @@ class MembershipTypeView(MasterView):
|
|||
]
|
||||
|
||||
def configure_grid(self, g):
|
||||
""" """
|
||||
super().configure_grid(g)
|
||||
|
||||
g.set_sort_defaults('number')
|
||||
|
@ -79,6 +81,7 @@ class MembershipTypeView(MasterView):
|
|||
g.set_link('name')
|
||||
|
||||
def get_row_data(self, memtype):
|
||||
""" """
|
||||
model = self.model
|
||||
return self.Session.query(model.Member)\
|
||||
.filter(model.Member.membership_type == memtype)
|
||||
|
@ -102,7 +105,7 @@ class MemberView(MasterView):
|
|||
"""
|
||||
Master view for the Member class.
|
||||
"""
|
||||
model_class = model.Member
|
||||
model_class = Member
|
||||
is_contact = True
|
||||
touchable = True
|
||||
has_versions = True
|
||||
|
@ -169,6 +172,7 @@ class MemberView(MasterView):
|
|||
return app.get_people_handler().get_quickie_search_placeholder()
|
||||
|
||||
def configure_grid(self, g):
|
||||
""" """
|
||||
super().configure_grid(g)
|
||||
route_prefix = self.get_route_prefix()
|
||||
model = self.model
|
||||
|
@ -263,13 +267,16 @@ class MemberView(MasterView):
|
|||
default=False)
|
||||
|
||||
def grid_extra_class(self, member, i):
|
||||
""" """
|
||||
if not member.active:
|
||||
return 'warning'
|
||||
if member.equity_current is False:
|
||||
return 'notice'
|
||||
|
||||
def configure_form(self, f):
|
||||
""" """
|
||||
super().configure_form(f)
|
||||
model = self.model
|
||||
member = f.model_instance
|
||||
|
||||
# date fields
|
||||
|
@ -342,6 +349,7 @@ class MemberView(MasterView):
|
|||
return app.render_currency(total)
|
||||
|
||||
def template_kwargs_view(self, **kwargs):
|
||||
""" """
|
||||
kwargs = super().template_kwargs_view(**kwargs)
|
||||
app = self.get_rattail_app()
|
||||
member = kwargs['instance']
|
||||
|
@ -360,10 +368,12 @@ class MemberView(MasterView):
|
|||
return kwargs
|
||||
|
||||
def render_default_email(self, member, field):
|
||||
""" """
|
||||
if member.emails:
|
||||
return member.emails[0].address
|
||||
|
||||
def render_default_phone(self, member, field):
|
||||
""" """
|
||||
if member.phones:
|
||||
return member.phones[0].number
|
||||
|
||||
|
@ -376,6 +386,7 @@ class MemberView(MasterView):
|
|||
return tags.link_to(text, url)
|
||||
|
||||
def get_row_data(self, member):
|
||||
""" """
|
||||
model = self.model
|
||||
return self.Session.query(model.MemberEquityPayment)\
|
||||
.filter(model.MemberEquityPayment.member == member)
|
||||
|
@ -395,6 +406,7 @@ class MemberView(MasterView):
|
|||
uuid=payment.uuid)
|
||||
|
||||
def configure_get_simple_settings(self):
|
||||
""" """
|
||||
return [
|
||||
|
||||
# General
|
||||
|
@ -417,7 +429,7 @@ class MemberEquityPaymentView(MasterView):
|
|||
"""
|
||||
Master view for the MemberEquityPayment class.
|
||||
"""
|
||||
model_class = model.MemberEquityPayment
|
||||
model_class = MemberEquityPayment
|
||||
route_prefix = 'member_equity_payments'
|
||||
url_prefix = '/member-equity-payments'
|
||||
supports_grid_totals = True
|
||||
|
@ -450,6 +462,7 @@ class MemberEquityPaymentView(MasterView):
|
|||
]
|
||||
|
||||
def query(self, session):
|
||||
""" """
|
||||
query = super().query(session)
|
||||
model = self.model
|
||||
|
||||
|
@ -458,6 +471,7 @@ class MemberEquityPaymentView(MasterView):
|
|||
return query
|
||||
|
||||
def configure_grid(self, g):
|
||||
""" """
|
||||
super().configure_grid(g)
|
||||
model = self.model
|
||||
|
||||
|
@ -502,6 +516,7 @@ class MemberEquityPaymentView(MasterView):
|
|||
return {'totals_display': app.render_currency(total)}
|
||||
|
||||
def configure_form(self, f):
|
||||
""" """
|
||||
super().configure_form(f)
|
||||
model = self.model
|
||||
payment = f.model_instance
|
||||
|
@ -543,6 +558,14 @@ class MemberEquityPaymentView(MasterView):
|
|||
# status_code
|
||||
f.set_enum('status_code', model.MemberEquityPayment.STATUS)
|
||||
|
||||
def get_version_diff_enums(self, version):
|
||||
""" """
|
||||
model = self.model
|
||||
cls = continuum.parent_class(version.__class__)
|
||||
|
||||
if cls is model.MemberEquityPayment:
|
||||
return {'status_code': model.MemberEquityPayment.STATUS}
|
||||
|
||||
|
||||
def defaults(config, **kwargs):
|
||||
base = globals()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue