Add "view profile" for viewing *all* details of a given person at once
feature preview (easter egg) only for now though, lots of refinement to do yet
This commit is contained in:
parent
ec70d85638
commit
6ae703dfd9
155
tailbone/templates/people/view_profile.mako
Normal file
155
tailbone/templates/people/view_profile.mako
Normal file
|
@ -0,0 +1,155 @@
|
||||||
|
## -*- coding: utf-8; -*-
|
||||||
|
<%inherit file="/master/view.mako" />
|
||||||
|
|
||||||
|
<%def name="extra_javascript()">
|
||||||
|
${parent.extra_javascript()}
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(function() {
|
||||||
|
$('#profile-tabs').tabs();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</%def>
|
||||||
|
|
||||||
|
<div id="profile-tabs">
|
||||||
|
<ul>
|
||||||
|
<li><a href="#personal-tab">Personal</a></li>
|
||||||
|
<li><a href="#customer-tab">Customer</a></li>
|
||||||
|
<li><a href="#employee-tab">Employee</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div id="personal-tab">
|
||||||
|
|
||||||
|
<div class="field-wrapper first_name">
|
||||||
|
<div class="field-row">
|
||||||
|
<label>First Name</label>
|
||||||
|
<div class="field">
|
||||||
|
${person.first_name}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="field-wrapper middle_name">
|
||||||
|
<div class="field-row">
|
||||||
|
<label>Middle Name</label>
|
||||||
|
<div class="field">
|
||||||
|
${person.middle_name}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="field-wrapper last_name">
|
||||||
|
<div class="field-row">
|
||||||
|
<label>Last Name</label>
|
||||||
|
<div class="field">
|
||||||
|
${person.last_name}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="field-wrapper street">
|
||||||
|
<div class="field-row">
|
||||||
|
<label>Street 1</label>
|
||||||
|
<div class="field">
|
||||||
|
${person.address.street if person.address else ''}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="field-wrapper street2">
|
||||||
|
<div class="field-row">
|
||||||
|
<label>Street 2</label>
|
||||||
|
<div class="field">
|
||||||
|
${person.address.street2 if person.address else ''}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="field-wrapper city">
|
||||||
|
<div class="field-row">
|
||||||
|
<label>City</label>
|
||||||
|
<div class="field">
|
||||||
|
${person.address.city if person.address else ''}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="field-wrapper state">
|
||||||
|
<div class="field-row">
|
||||||
|
<label>State</label>
|
||||||
|
<div class="field">
|
||||||
|
${person.address.state if person.address else ''}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="field-wrapper zipcode">
|
||||||
|
<div class="field-row">
|
||||||
|
<label>Zipcode</label>
|
||||||
|
<div class="field">
|
||||||
|
${person.address.zipcode if person.address else ''}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div><!-- personal-tab -->
|
||||||
|
|
||||||
|
<div id="customer-tab">
|
||||||
|
% for customer in person.customers:
|
||||||
|
|
||||||
|
<div class="field-wrapper id">
|
||||||
|
<div class="field-row">
|
||||||
|
<label>ID</label>
|
||||||
|
<div class="field">
|
||||||
|
${customer.id or ''}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="field-wrapper name">
|
||||||
|
<div class="field-row">
|
||||||
|
<label>Name</label>
|
||||||
|
<div class="field">
|
||||||
|
${customer.name}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
% endfor
|
||||||
|
</div><!-- customer-tab -->
|
||||||
|
|
||||||
|
<div id="employee-tab">
|
||||||
|
% if person.employee:
|
||||||
|
|
||||||
|
<div class="field-wrapper id">
|
||||||
|
<div class="field-row">
|
||||||
|
<label>ID</label>
|
||||||
|
<div class="field">
|
||||||
|
${person.employee.id or ''}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="field-wrapper display_name">
|
||||||
|
<div class="field-row">
|
||||||
|
<label>Display Name</label>
|
||||||
|
<div class="field">
|
||||||
|
${person.employee.display_name or ''}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="field-wrapper status">
|
||||||
|
<div class="field-row">
|
||||||
|
<label>Status</label>
|
||||||
|
<div class="field">
|
||||||
|
${enum.EMPLOYEE_STATUS[person.employee.status]}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
% else:
|
||||||
|
<p>${person} has never been an employee.</p>
|
||||||
|
% endif
|
||||||
|
</div><!-- employee-tab -->
|
||||||
|
|
||||||
|
</div><!-- profile-tabs -->
|
|
@ -225,6 +225,20 @@ class PeopleView(MasterView):
|
||||||
(model.VendorContact, 'person_uuid'),
|
(model.VendorContact, 'person_uuid'),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
def view_profile(self):
|
||||||
|
"""
|
||||||
|
View which exposes the "full profile" for a given person, i.e. all
|
||||||
|
related customer, employee, user info etc.
|
||||||
|
"""
|
||||||
|
self.viewing = True
|
||||||
|
person = self.get_instance()
|
||||||
|
context = {
|
||||||
|
'person': person,
|
||||||
|
'instance': person,
|
||||||
|
'instance_title': self.get_instance_title(person),
|
||||||
|
}
|
||||||
|
return self.render_to_response('view_profile', context)
|
||||||
|
|
||||||
def make_user(self):
|
def make_user(self):
|
||||||
uuid = self.request.POST['person_uuid']
|
uuid = self.request.POST['person_uuid']
|
||||||
person = self.Session.query(model.Person).get(uuid)
|
person = self.Session.query(model.Person).get(uuid)
|
||||||
|
@ -249,8 +263,19 @@ class PeopleView(MasterView):
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _people_defaults(cls, config):
|
def _people_defaults(cls, config):
|
||||||
|
permission_prefix = cls.get_permission_prefix()
|
||||||
route_prefix = cls.get_route_prefix()
|
route_prefix = cls.get_route_prefix()
|
||||||
url_prefix = cls.get_url_prefix()
|
url_prefix = cls.get_url_prefix()
|
||||||
|
model_key = cls.get_model_key()
|
||||||
|
model_title = cls.get_model_title()
|
||||||
|
|
||||||
|
# view profile
|
||||||
|
config.add_tailbone_permission(permission_prefix, '{}.view_profile'.format(permission_prefix),
|
||||||
|
"View full \"profile\" for {}".format(model_title))
|
||||||
|
config.add_route('{}.view_profile'.format(route_prefix), '{}/{{{}}}/profile'.format(url_prefix, model_key),
|
||||||
|
request_method='GET')
|
||||||
|
config.add_view(cls, attr='view_profile', route_name='{}.view_profile'.format(route_prefix),
|
||||||
|
permission='{}.view_profile'.format(permission_prefix))
|
||||||
|
|
||||||
# make user for person
|
# make user for person
|
||||||
config.add_route('{}.make_user'.format(route_prefix), '{}/make-user'.format(url_prefix),
|
config.add_route('{}.make_user'.format(route_prefix), '{}/make-user'.format(url_prefix),
|
||||||
|
|
Loading…
Reference in a new issue