Prefer account holder, shoppers over legacy Customers.people
but until all are migrated, support both
This commit is contained in:
parent
eab3b75ae5
commit
961cf803f2
|
@ -4,16 +4,7 @@
|
|||
|
||||
<%def name="object_helpers()">
|
||||
${parent.object_helpers()}
|
||||
<% people = h.OrderedDict() %>
|
||||
% if instance.person:
|
||||
<% people[instance.person.uuid] = instance.person %>
|
||||
% endif
|
||||
% if instance.customer:
|
||||
% for person in instance.customer.people:
|
||||
<% people[person.uuid] = person %>
|
||||
% endfor
|
||||
% endif
|
||||
${view_profiles_helper(people.values())}
|
||||
${view_profiles_helper(show_profiles_people)}
|
||||
</%def>
|
||||
|
||||
${parent.body()}
|
||||
|
|
|
@ -27,6 +27,7 @@ Customer Views
|
|||
from collections import OrderedDict
|
||||
|
||||
import sqlalchemy as sa
|
||||
from sqlalchemy import orm
|
||||
|
||||
import colander
|
||||
from pyramid.httpexceptions import HTTPNotFound
|
||||
|
@ -125,10 +126,18 @@ class CustomerView(MasterView):
|
|||
'customers.expose_people',
|
||||
default=True)
|
||||
|
||||
def query(self, session):
|
||||
query = super().query(session)
|
||||
model = self.model
|
||||
return query.outerjoin(model.Person,
|
||||
model.Person.uuid == model.Customer.account_holder_uuid)
|
||||
|
||||
def configure_grid(self, g):
|
||||
super(CustomerView, self).configure_grid(g)
|
||||
super().configure_grid(g)
|
||||
app = self.get_rattail_app()
|
||||
model = self.model
|
||||
route_prefix = self.get_route_prefix()
|
||||
legacy = app.get_clientele_handler().should_use_legacy_people()
|
||||
|
||||
# customer key
|
||||
field = self.get_customer_key_field()
|
||||
|
@ -162,15 +171,23 @@ class CustomerView(MasterView):
|
|||
# email_preference
|
||||
g.set_enum('email_preference', self.enum.EMAIL_PREFERENCE)
|
||||
|
||||
# account_holder_*_name
|
||||
g.set_filter('account_holder_first_name', model.Person.first_name)
|
||||
g.set_filter('account_holder_last_name', model.Person.last_name)
|
||||
|
||||
# person
|
||||
g.set_joiner('person', lambda q:
|
||||
q.outerjoin(model.CustomerPerson,
|
||||
sa.and_(
|
||||
model.CustomerPerson.customer_uuid == model.Customer.uuid,
|
||||
model.CustomerPerson.ordinal == 1))\
|
||||
.outerjoin(model.Person))
|
||||
g.set_sorter('person', model.Person.display_name)
|
||||
g.set_renderer('person', self.grid_render_person)
|
||||
if legacy:
|
||||
LegacyPerson = orm.aliased(model.Person)
|
||||
g.set_joiner('person', lambda q:
|
||||
q.outerjoin(model.CustomerPerson,
|
||||
sa.and_(
|
||||
model.CustomerPerson.customer_uuid == model.Customer.uuid,
|
||||
model.CustomerPerson.ordinal == 1))\
|
||||
.outerjoin(LegacyPerson))
|
||||
g.set_sorter('person', LegacyPerson.display_name)
|
||||
else:
|
||||
g.set_sorter('person', model.Person.display_name)
|
||||
|
||||
# active_in_pos
|
||||
if self.get_expose_active_in_pos():
|
||||
|
@ -395,6 +412,10 @@ class CustomerView(MasterView):
|
|||
if kwargs['show_profiles_helper']:
|
||||
people = OrderedDict()
|
||||
|
||||
if customer.account_holder:
|
||||
person = customer.account_holder
|
||||
people.setdefault(person.uuid, person)
|
||||
|
||||
for shopper in customer.shoppers:
|
||||
person = shopper.person
|
||||
people.setdefault(person.uuid, person)
|
||||
|
@ -434,6 +455,7 @@ class CustomerView(MasterView):
|
|||
url = self.request.route_url('people.view', uuid=person.uuid)
|
||||
return tags.link_to(text, url)
|
||||
|
||||
# TODO: remove if no longer used
|
||||
def render_people(self, customer, field):
|
||||
people = customer.people
|
||||
if not people:
|
||||
|
|
|
@ -282,6 +282,25 @@ class MemberView(MasterView):
|
|||
'withdrew',
|
||||
)
|
||||
|
||||
def template_kwargs_view(self, **kwargs):
|
||||
kwargs = super().template_kwargs_view(**kwargs)
|
||||
member = kwargs['instance']
|
||||
|
||||
people = OrderedDict()
|
||||
if member.person:
|
||||
person = member.person
|
||||
people.setdefault(person.uuid, person)
|
||||
if member.customer:
|
||||
customer = member.customer
|
||||
if customer.account_holder:
|
||||
person = customer.account_holder
|
||||
people.setdefault(person.uuid, person)
|
||||
for person in customer.people:
|
||||
people.setdefault(person.uuid, person)
|
||||
kwargs['show_profiles_people'] = list(people.values())
|
||||
|
||||
return kwargs
|
||||
|
||||
def render_default_email(self, member, field):
|
||||
if member.emails:
|
||||
return member.emails[0].address
|
||||
|
|
|
@ -371,12 +371,15 @@ class PersonView(MasterView):
|
|||
return tags.link_to(text, url)
|
||||
|
||||
def render_customers(self, person, field):
|
||||
customers = person._customers
|
||||
app = self.get_rattail_app()
|
||||
clientele = app.get_clientele_handler()
|
||||
|
||||
customers = clientele.get_customers_for_account_holder(person)
|
||||
if not customers:
|
||||
return ""
|
||||
return
|
||||
|
||||
items = []
|
||||
for customer in customers:
|
||||
customer = customer.customer
|
||||
text = str(customer)
|
||||
if customer.number:
|
||||
text = "(#{}) {}".format(customer.number, text)
|
||||
|
@ -384,6 +387,7 @@ class PersonView(MasterView):
|
|||
text = "({}) {}".format(customer.id, text)
|
||||
url = self.request.route_url('customers.view', uuid=customer.uuid)
|
||||
items.append(HTML.tag('li', c=[tags.link_to(text, url)]))
|
||||
|
||||
return HTML.tag('ul', c=items)
|
||||
|
||||
def render_members(self, person, field):
|
||||
|
@ -595,6 +599,7 @@ class PersonView(MasterView):
|
|||
app = self.get_rattail_app()
|
||||
clientele = app.get_clientele_handler()
|
||||
expose_shoppers = self.customers_should_expose_shoppers()
|
||||
expose_people = self.customers_should_expose_people()
|
||||
|
||||
customers = clientele.get_customers_for_account_holder(person)
|
||||
key = self.get_customer_key_field()
|
||||
|
@ -609,8 +614,6 @@ class PersonView(MasterView):
|
|||
'name': customer.name,
|
||||
'view_url': self.request.route_url('customers.view',
|
||||
uuid=customer.uuid),
|
||||
'people': [self.get_context_person(p)
|
||||
for p in customer.people],
|
||||
'addresses': [self.get_context_address(a)
|
||||
for a in customer.addresses],
|
||||
'external_links': [],
|
||||
|
@ -624,6 +627,10 @@ class PersonView(MasterView):
|
|||
context['shoppers'] = [self.get_context_shopper(s)
|
||||
for s in customer.shoppers]
|
||||
|
||||
if expose_people:
|
||||
context['people'] = [self.get_context_person(p)
|
||||
for p in customer.people]
|
||||
|
||||
for supp in self.iter_view_supplements():
|
||||
if hasattr(supp, 'get_context_for_customer'):
|
||||
context = supp.get_context_for_customer(customer, context)
|
||||
|
|
Loading…
Reference in a new issue