diff --git a/tailbone/templates/people/view_profile_buefy.mako b/tailbone/templates/people/view_profile_buefy.mako
index e683ce17..d44fd66a 100644
--- a/tailbone/templates/people/view_profile_buefy.mako
+++ b/tailbone/templates/people/view_profile_buefy.mako
@@ -65,6 +65,12 @@
+
+ {{ address.display }}
+
+
${self.render_customer_panel_buttons(customer)}
diff --git a/tailbone/views/customers.py b/tailbone/views/customers.py
index 084ee783..210393c1 100644
--- a/tailbone/views/customers.py
+++ b/tailbone/views/customers.py
@@ -2,7 +2,7 @@
################################################################################
#
# Rattail -- Retail Software Framework
-# Copyright © 2010-2019 Lance Edgar
+# Copyright © 2010-2020 Lance Edgar
#
# This file is part of Rattail.
#
@@ -263,14 +263,6 @@ class CustomersView(MasterView):
if query.count():
raise colander.Invalid(node, "Customer ID must be unique")
- def render_default_email(self, customer, field):
- if customer.emails:
- return customer.emails[0].address
-
- def render_default_phone(self, customer, field):
- if customer.phones:
- return customer.phones[0].number
-
def render_default_address(self, customer, field):
if customer.addresses:
return six.text_type(customer.addresses[0])
diff --git a/tailbone/views/master.py b/tailbone/views/master.py
index 016ea41a..4c5aacc3 100644
--- a/tailbone/views/master.py
+++ b/tailbone/views/master.py
@@ -2,7 +2,7 @@
################################################################################
#
# Rattail -- Retail Software Framework
-# Copyright © 2010-2019 Lance Edgar
+# Copyright © 2010-2020 Lance Edgar
#
# This file is part of Rattail.
#
@@ -847,6 +847,20 @@ class MasterView(View):
'importer_host_title': importer_host_title,
})
+ def render_default_phone(self, obj, field):
+ """
+ Render the "default" (first) phone number for the given contact.
+ """
+ if obj.phones:
+ return obj.phones[0].number
+
+ def render_default_email(self, obj, field):
+ """
+ Render the "default" (first) email address for the given contact.
+ """
+ if obj.emails:
+ return obj.emails[0].address
+
def render_product_key_value(self, obj):
"""
Render the "canonical" product key value for the given object.
diff --git a/tailbone/views/people.py b/tailbone/views/people.py
index ef78c91f..eb3f39fa 100644
--- a/tailbone/views/people.py
+++ b/tailbone/views/people.py
@@ -2,7 +2,7 @@
################################################################################
#
# Rattail -- Retail Software Framework
-# Copyright © 2010-2019 Lance Edgar
+# Copyright © 2010-2020 Lance Edgar
#
# This file is part of Rattail.
#
@@ -52,8 +52,14 @@ class PeopleView(MasterView):
has_versions = True
supports_mobile = True
bulk_deletable = True
+ is_contact = True
manage_notes_from_profile_view = False
+ labels = {
+ 'default_phone': "Phone Number",
+ 'default_email': "Email Address",
+ }
+
grid_columns = [
'display_name',
'first_name',
@@ -67,8 +73,8 @@ class PeopleView(MasterView):
'middle_name',
'last_name',
'display_name',
- 'phone',
- 'email',
+ 'default_phone',
+ 'default_email',
'address',
'employee',
'customers',
@@ -197,15 +203,26 @@ class PeopleView(MasterView):
def configure_common_form(self, f):
super(PeopleView, self).configure_common_form(f)
+ person = f.model_instance
f.set_label('display_name', "Full Name")
+ # TODO: should remove this?
f.set_readonly('phone')
f.set_label('phone', "Phone Number")
+ f.set_renderer('default_phone', self.render_default_phone)
+ if not self.creating and person.phones:
+ f.set_default('default_phone', person.phones[0].number)
+
+ # TODO: should remove this?
f.set_readonly('email')
f.set_label('email', "Email Address")
+ f.set_renderer('default_email', self.render_default_email)
+ if not self.creating and person.emails:
+ f.set_default('default_email', person.emails[0].address)
+
f.set_readonly('address')
f.set_label('address', "Mailing Address")
@@ -319,6 +336,17 @@ class PeopleView(MasterView):
'view_profile_url': self.get_action_url('view_profile', person),
}
+ def get_context_address(self, address):
+ return {
+ 'uuid': address.uuid,
+ 'street': address.street,
+ 'street2': address.street2,
+ 'city': address.city,
+ 'state': address.state,
+ 'zipcode': address.zipcode,
+ 'display': six.text_type(address),
+ }
+
def get_context_customers(self, person):
data = []
for cp in person._customers:
@@ -333,6 +361,8 @@ class PeopleView(MasterView):
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],
})
return data