[FIX] website_{customer,partner,crm_partner_assign}: correct views and controllers

This commit is contained in:
Christophe Simonis 2014-05-12 19:51:21 +02:00
parent 00a4845bc7
commit 4922c5363e
16 changed files with 173 additions and 241 deletions

View File

@ -10,6 +10,7 @@ Publish and Assign Partner
'author': 'OpenERP SA',
'depends': ['crm_partner_assign','website_partner', 'website_google_map'],
'data': [
'views/partner_grade.xml',
'views/website_crm_partner_assign.xml',
],
'qweb': ['static/src/xml/*.xml'],

View File

@ -3,7 +3,6 @@
import werkzeug
import openerp
from openerp import SUPERUSER_ID
from openerp.addons.web import http
from openerp.tools.translate import _
from openerp.addons.web.http import request
@ -23,21 +22,21 @@ class WebsiteCrmPartnerAssign(http.Controller):
'/partners/country/<country_name>-<int:country_id>',
'/partners/country/<int:country_id>/page/<int:page>',
'/partners/country/<country_name>-<int:country_id>/page/<int:page>',
'/partners/grade/<int:grade_id>/country/<int:country_id>',
'/partners/grade/<int:grade_id>/country/<country_name>-<int:country_id>',
'/partners/grade/<int:grade_id>/country/<int:country_id>/page/<int:page>',
'/partners/grade/<int:grade_id>/country/<country_name>-<int:country_id>/page/<int:page>',
], type='http', auth="public", website=True, multilang=True)
def partners(self, country_id=0, grade_id=0, page=0, **post):
def partners(self, country_id=0, grade_id=0, page=0, country_name='', **post):
country_obj = request.registry['res.country']
partner_obj = request.registry['res.partner']
post_name = post.get('search', '')
country = None
# format displayed membership lines domain
base_partner_domain = [('is_company', '=', True), ('grade_id', '!=', False), ('website_published', '=', True)]
base_partner_domain = [('is_company', '=', True), ('grade_id.website_published', '=', True), ('website_published', '=', True)]
partner_domain = list(base_partner_domain)
if post_name:
partner_domain += ['|', ('name', 'ilike', post_name), ('website_description', 'ilike', post_name)]
@ -51,7 +50,7 @@ class WebsiteCrmPartnerAssign(http.Controller):
countries_partners = partner_obj.search(
request.cr, openerp.SUPERUSER_ID, partner_domain,
context=request.context, count=True)
if country_id:
country = country_obj.browse(request.cr, request.uid, country_id, request.context)
partner_domain += [('country_id', '=', country_id)]
@ -61,33 +60,29 @@ class WebsiteCrmPartnerAssign(http.Controller):
'country_id': (country_id, country.name)
})
countries.sort(key=lambda d: d['country_id'][1])
countries.insert(0, {
'country_id_count': countries_partners,
'country_id': (0, _("All Countries"))
})
# format pager
partner_ids = partner_obj.search(
partner_count = partner_obj.search_count(
request.cr, openerp.SUPERUSER_ID, partner_domain,
context=request.context)
pager = request.website.pager(url="/partners", total=len(partner_ids), page=page, step=self._references_per_page, scope=7, url_args=post)
pager = request.website.pager(url="/partners", total=partner_count, page=page, step=self._references_per_page, scope=7, url_args=post)
# search for partners to display
partners_data = partner_obj.search_read(request.cr, openerp.SUPERUSER_ID,
domain=partner_domain,
fields=request.website.get_partner_white_list_fields(),
offset=pager['offset'],
limit=self._references_per_page,
order="grade_id DESC,partner_weight DESC",
context=request.context)
google_map_partner_ids = ",".join([str(p['id']) for p in partners_data])
partner_ids = partner_obj.search(request.cr, openerp.SUPERUSER_ID, partner_domain,
offset=pager['offset'], limit=self._references_per_page,
order="grade_id DESC, partner_weight DESC",
context=request.context)
google_map_partner_ids = ','.join(map(str, partner_ids))
partners = partner_obj.browse(request.cr, openerp.SUPERUSER_ID, partner_ids, request.context)
# group by grade
grades = partner_obj.read_group(
request.cr, openerp.SUPERUSER_ID, base_partner_domain, ["id", "grade_id"],
groupby="grade_id", orderby="grade_id", context=request.context)
groupby="grade_id", orderby="grade_id DESC", context=request.context)
grades_partners = partner_obj.search(
request.cr, openerp.SUPERUSER_ID, base_partner_domain,
context=request.context, count=True)
@ -102,7 +97,7 @@ class WebsiteCrmPartnerAssign(http.Controller):
'current_country': country,
'grades': grades,
'grade_id': grade_id,
'partners_data': partners_data,
'partners': partners,
'google_map_partner_ids': google_map_partner_ids,
'pager': pager,
'searches': post,
@ -111,9 +106,8 @@ class WebsiteCrmPartnerAssign(http.Controller):
return request.website.render("website_crm_partner_assign.index", values)
@http.route(['/partners/<int:partner_id>', '/partners/<partner_name>-<int:partner_id>'], type='http', auth="public", website=True, multilang=True)
def partners_ref(self, partner_id, **post):
partner = request.registry['res.partner'].browse(request.cr, SUPERUSER_ID, partner_id, context=request.context)
values = website_partner.get_partner_template_value(partner)
def partners_ref(self, partner_id, partner_name='', **post):
values = website_partner.get_partner_template_value(partner_id)
if not values:
return self.partners(**post)
values['main_object'] = values['partner']

View File

@ -1,2 +1 @@
import res_partner
import website

View File

@ -1,9 +1,8 @@
# -*- coding: utf-8 -*-
from openerp.osv import osv, fields
class res_partner_grade(osv.osv):
_inherit = 'res.partner.grade'
_columns = {
'website_description': fields.html('Description for the website'),
'website_published': fields.boolean('Published On Website'),
}

View File

@ -1,11 +0,0 @@
# -*- coding: utf-8 -*-
from openerp.osv import orm
class Website(orm.Model):
_inherit = 'website'
def get_partner_white_list_fields(self, cr, uid, ids, context=None):
fields = super(Website, self).get_partner_white_list_fields(cr, uid, ids, context=context)
fields += ["grade_id"]
return fields

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record model="ir.ui.view" id="partner_grade_view">
<field name="name">res.partner.grade.website</field>
<field name="model">res.partner.grade</field>
<field name="inherit_id" ref="crm_partner_assign.view_partner_grade_form"/>
<field name="arch" type="xml">
<field name="active" position="after">
<field name="website_published"/>
</field>
</field>
</record>
</data>
</openerp>

View File

@ -81,27 +81,28 @@
</div>
</div>
<div>
<t t-if="not partners_data">
<p>No result found.</p>
</t>
<t t-foreach="partners_data" t-as="partner_data">
<t t-if="internal_gid != partner_data['grade_id'][1]">
<p t-if="not partners">No result found</p>
<t t-foreach="partners" t-as="partner">
<t t-if="last_grade != partner.grade_id.id">
<h3 class="text-center">
<span t-esc="partner_data['grade_id'][1]"/> Partners
<t t-if="current_country"> in <t t-esc="current_country.name"/></t>
<span t-field="partner.grade_id"/> Partners
</h3>
<t t-set="internal_gid" t-value="partner_data['grade_id'][1]"/>
<t t-set="last_grade" t-value="partner.grade_id.id"/>
</t>
<div class="media">
<a class="pull-left" t-attf-href="/partners/#{ slug([partner_data.get('id'), partner_data.get('name')]) }">
<img class="media-object" t-attf-src="data:image/png;base64,#{partner_data['image_small']}"/>
</a>
<a class="pull-left" t-attf-href="/partners/#{slug(partner)}"
t-field="partner.image_small"
t-field-options='{"widget": "image", "class": "media-object"}'
></a>
<div class="media-body" style="min-height: 64px;">
<a class="media-heading" t-attf-href="/partners/#{ slug([partner_data.get('id'), partner_data.get('name')]) }"><t t-if="partner_data['parent_id']"><span t-esc="partner_data['parent_id'][1]"/></t> <span t-esc="partner_data['name']"/></a> - <span t-esc="partner_data['grade_id'][1]"/>
<div t-esc="partner_data['website_short_description']"/>
<a class="media-heading" t-attf-href="/partners/#{slug(partner)}">
<span t-field="partner.display_name"/>
</a>
<div t-field="partner.website_short_description"/>
</div>
</div>
</t>
</div>
</div>
</t>
@ -126,5 +127,12 @@
</t>
</template>
<template id="grade_in_detail" inherit_id="website_partner.partner_detail">
<xpath expr="//*[@id='partner_name']" position="after">
<h3 class="col-md-12 text-center text-muted" t-if="partner.grade_id and partner.grade_id.website_published">
<span t-field="partner.grade_id"/> Partner</h3>
</xpath>
</template>
</data>
</openerp>

View File

@ -1,7 +1,6 @@
# -*- coding: utf-8 -*-
import openerp
from openerp import SUPERUSER_ID
from openerp.addons.web import http
from openerp.tools.translate import _
from openerp.addons.web.http import request
@ -19,14 +18,13 @@ class WebsiteCustomer(http.Controller):
'/customers/country/<int:country_id>/page/<int:page>',
'/customers/country/<country_name>-<int:country_id>/page/<int:page>',
], type='http', auth="public", website=True, multilang=True)
def customers(self, country_id=0, page=0, **post):
def customers(self, country_id=0, page=0, country_name='', **post):
cr, uid, context = request.cr, request.uid, request.context
country_obj = request.registry['res.country']
partner_obj = request.registry['res.partner']
partner_name = post.get('search', '')
base_domain = [('website_published','=',True)]
domain = list(base_domain)
domain = [('website_published', '=', True), ('assigned_partner_id', '!=', False)]
if partner_name:
domain += [
'|',
@ -57,25 +55,24 @@ class WebsiteCustomer(http.Controller):
})
# search customers to display
partner_ids = partner_obj.search(cr, openerp.SUPERUSER_ID, domain, context=request.context)
google_map_partner_ids = ",".join([str(p) for p in partner_ids])
partner_count = partner_obj.search_count(cr, openerp.SUPERUSER_ID, domain, context=request.context)
# pager
pager = request.website.pager(
url="/customers", total=len(partner_ids), page=page, step=self._references_per_page,
url="/customers", total=partner_count, page=page, step=self._references_per_page,
scope=7, url_args=post
)
# browse page of customers to display
partner_ids = partner_obj.search(
cr, openerp.SUPERUSER_ID, domain,
limit=self._references_per_page, offset=pager['offset'], context=context)
partners_data = partner_obj.read(
request.cr, openerp.SUPERUSER_ID, partner_ids, request.website.get_partner_white_list_fields(), context=request.context)
partner_ids = partner_obj.search(request.cr, openerp.SUPERUSER_ID, domain,
offset=pager['offset'], limit=self._references_per_page,
context=request.context)
google_map_partner_ids = ','.join(map(str, partner_ids))
partners = partner_obj.browse(request.cr, openerp.SUPERUSER_ID, partner_ids, request.context)
values = {
'countries': countries,
'current_country_id': country_id or 0,
'partners_data': partners_data,
'partners': partners,
'google_map_partner_ids': google_map_partner_ids,
'pager': pager,
'post': post,
@ -84,25 +81,10 @@ class WebsiteCustomer(http.Controller):
return request.website.render("website_customer.index", values)
@http.route(['/customers/<int:partner_id>', '/customers/<partner_name>-<int:partner_id>'], type='http', auth="public", website=True, multilang=True)
def customer(self, partner_id, **post):
partner = request.registry['res.partner'].browse(request.cr, SUPERUSER_ID, partner_id, context=request.context)
values = website_partner.get_partner_template_value(partner)
def customer(self, partner_id, partner_name='', **post):
values = website_partner.get_partner_template_value(partner_id)
if not values:
return self.customers(**post)
partner_obj = request.registry['res.partner']
if values['partner_data'].get('assigned_partner_id', None):
values['assigned_partner_data'] = partner_obj.read(
request.cr, openerp.SUPERUSER_ID, [values['partner_data']['assigned_partner_id'][0]],
request.website.get_partner_white_list_fields(), context=request.context)[0]
if values['partner_data'].get('implemented_partner_ids', None):
implemented_partners_data = partner_obj.read(
request.cr, openerp.SUPERUSER_ID, values['partner_data']['implemented_partner_ids'],
request.website.get_partner_white_list_fields(), context=request.context)
values['implemented_partners_data'] = []
for data in implemented_partners_data:
if data.get('website_published'):
values['implemented_partners_data'].append(data)
values['main_object'] = values['partner']
return request.website.render("website_customer.details", values)

View File

@ -39,21 +39,22 @@
</div>
<div class="row">
<t t-if="not partners_data">
<p>No result found.</p>
</t>
<t t-foreach="partners_data" t-as="partner_data" class="media">
<div class="media">
<a class="pull-left" t-attf-href="/customers/#{ slug([partner_data.get('id'), partner_data.get('name')]) }">
<img class="media-object" t-attf-src="data:image/png;base64,#{partner_data.get('image_small')}"/>
</a>
<div class="media-body" style="min-height: 64px;">
<a t-attf-href="/customers/#{ slug([partner_data.get('id'), partner_data.get('name')]) }" t-esc="partner_data.get('name')"/>
<div t-raw="partner_data.get('website_short_description') or ''"/>
</div>
</div>
<div class="clearfix mb8"/>
</t>
<p t-if="not partners">No result found</p>
<t t-foreach="partners" t-as="partner">
<div class="media">
<a class="pull-left" t-attf-href="/customers/#{slug(partner)}"
t-field="partner.image_small"
t-field-options='{"widget": "image", "class": "media-object"}'
></a>
<div class="media-body" style="min-height: 64px;">
<a class="media-heading" t-attf-href="/customers/#{slug(partner)}">
<span t-field="partner.display_name"/>
</a>
<div t-field="partner.website_short_description"/>
</div>
</div>
</t>
</div>
</div>
@ -101,15 +102,15 @@
<div class="col-md-5">
<ol class="breadcrumb">
<li><a href="/customers">Our References</a></li>
<li class="active"><span t-esc="partner_data.get('name')"/></li>
<li class="active"><span t-field="partner.display_name"/></li>
</ol>
</div>
<t t-call="website_partner.partner_detail">
<t t-set="left_column">
<div id="left_column"></div>
<div id="left_column"><t t-call="website_customer.implemented_by_block"/></div>
</t>
<t t-set="right_column">
<div id="right_column"></div>
<div id="right_column"><t t-call="website_customer.references_block"/></div>
</t>
</t>
</div>
@ -119,57 +120,59 @@
</t>
</template>
<template id="partner_assign" inherit_option_id="website_customer.details" inherit_id="website_customer.details" name="Implemented By">
<xpath expr="//div[@id='left_column']" position="inside">
<t t-if="assigned_partner_data">
<template id="partner_details" inherit_id="website_partner.partner_page" name="Partner Detail Columns">
<xpath expr="//t[@t-call='website_partner.partner_detail']" position="inside">
<t t-set="left_column"><div id="left_column"><t t-call="website_customer.implemented_by_block"/></div></t>
<t t-set="right_column"><div id="right_column"><t t-call="website_customer.references_block"/></div></t>
</xpath>
</template>
<template id="implemented_by_block" name="Partner Implemented By Block">
<t t-if="partner.assigned_partner_id and partner.assigned_partner_id.website_published">
<div class="panel panel-default">
<div class="panel-heading">
<h4>Implemented By</h4>
</div>
<div class="panel-body">
<div class="text-center">
<img class="img img-shadow" t-attf-src="data:image/png;base64,#{assigned_partner_data.get('image_medium')}"/>
</div>
<address class="mt16 mb8">
<strong t-esc="assigned_partner_data.get('name')"/>
<div t-if="assigned_partner_data.get('phone')">
<span class="fa fa-phone"/> <span t-esc="assigned_partner_data.get('phone')"/>
</div>
<div t-if="assigned_partner_data.get('email')">
<span class="fa fa-envelope"/>
<a t-att-href="'mailto:'+assigned_partner_data.get('email')">
<span t-esc="assigned_partner_data.get('email')"/>
</a>
</div>
</address>
<div>
<a t-attf-href="/customers/#{ slug([partner_data.get('id'), partner_data.get('name')]) }/#references" t-if="implemented_partner_ids">
<t t-esc="len(implemented_partner_ids)"/> references
</a>
</div>
<div class="panel-body text-center">
<h4>
<a t-attf-href="/partners/#{slug(partner.assigned_partner_id)}">
<span t-field="partner.assigned_partner_id"/>
<span class="small"> (<t t-esc="len([p for p in partner.assigned_partner_id.implemented_partner_ids if p.website_published])"/> reference(s))</span>
</a>
</h4>
<div><a t-attf-href="/partners/#{slug(partner.assigned_partner_id)}"
t-field="partner.assigned_partner_id.image_medium"
t-field-options='{"widget": "image", "class": "center-block"}'
/>
</div>
<address class="well text-left">
<div t-field="partner.assigned_partner_id" t-field-options='{
"widget": "contact",
"fields": ["address", "website", "phone", "fax", "email"]
}'/>
</address>
</div>
</div>
</t>
</xpath>
</template>
<template id="references" inherit_id="website_customer.details" name="Partner References">
<xpath expr="//div[@id='right_column']" position="inside">
<t t-if="implemented_partners_data">
<template id="references_block" name="Partner References Block">
<t t-if="any([p.website_published for p in partner.implemented_partner_ids])">
<h3 id="references">References</h3>
<div t-foreach="implemented_partners_data" t-as="partner_data" class="media">
<a class="pull-left" t-attf-href="/customers/#{ slug([partner_data.get('id'), partner_data.get('name')]) }">
<img class="media-object" t-attf-src="data:image/png;base64,#{partner_data.get('image_small')}"/>
<div t-foreach="partner.implemented_partner_ids" t-as="reference" class="media">
<t t-if="reference.website_published">
<a class="pull-left" t-attf-href="/customers/#{slug(reference)}">
<span t-field="reference.image_small" t-field-options='{"widget": "image", "class": "center-block"}'/>
</a>
<div class="media-body" style="min-height: 64px;">
<a class="media-heading" t-attf-href="/customers/#{ slug([partner_data.get('id'), partner_data.get('name')]) }">
<t t-if="partner_data.get('parent_id')"><span t-esc="partner_data.get('parent_id')[1]"/></t> <span t-esc="partner_data.get('name')"/>
<a class="media-heading" t-attf-href="/customers/#{slug(reference)}">
<span t-field="reference.self"/>
</a>
<div t-if="partner_data.get('website_short_description')" t-raw="partner_data.get('website_short_description')"/>
<div t-field='reference.website_short_description'/>
</div>
</t>
</div>
</t>
</xpath>
</template>
</data>

View File

@ -1,43 +1,25 @@
# -*- coding: utf-8 -*-
import openerp
import werkzeug
from openerp import SUPERUSER_ID
from openerp.addons.web import http
from openerp.addons.web.http import request
import werkzeug
def get_partner_template_value(partner):
ctx = dict(request.context, show_address=True)
partner_obj = request.registry['res.partner']
partner_id = partner.id
partner_ids = partner_obj.search(request.cr, request.uid, [('id', '=', partner_id)], context=request.context)
if not partner.exists() or not partner_ids:
partner = None
partner_data = partner_obj.read(
request.cr, openerp.SUPERUSER_ID, [partner_id], request.website.get_partner_white_list_fields(), context=ctx)[0]
if not partner_data["website_published"]:
def get_partner_template_value(partner_id):
partner = request.registry['res.partner'].browse(request.cr, SUPERUSER_ID, partner_id, context=request.context)
if not partner.exists() or not partner.website_published:
return None
partner_data['name_get'] = partner_obj.name_get(request.cr, openerp.SUPERUSER_ID, [partner_id],context=request.context)[0]
partner_data['address'] = '<br/>'.join(partner_obj.name_get(
request.cr, openerp.SUPERUSER_ID, [partner_id],context=ctx)[0][1].split('\n')[1:])
values = {
return {
'partner': partner,
'partner_data': partner_data,
}
return values
class WebsitePartner(http.Controller):
@http.route(['/partners/<int:partner_id>', '/partners/<partner_name>-<int:partner_id>'], type='http', auth="public", website=True, multilang=True)
def partner(self, partner_id, **post):
def partner(self, partner_id, partner_name='', **post):
""" Route for displaying a single partner / customer. """
partner = request.registry['res.partner'].browse(request.cr, SUPERUSER_ID, partner_id, context=request.context)
values = get_partner_template_value(partner)
values = get_partner_template_value(partner_id)
if not values:
raise werkzeug.exceptions.NotFound
return request.website.render("website_partner.partner_detail", values)
raise werkzeug.exceptions.NotFound()
return request.website.render("website_partner.partner_page", values)

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="base.main_company" model="res.company">
<record id="base.main_partner" model="res.partner">
<field name="website_published">True</field>
</record>
</data>
</openerp>
</openerp>

View File

@ -1,3 +1 @@
import res_partner
import res_company
import website

View File

@ -1,10 +0,0 @@
# -*- coding: utf-8 -*-
from openerp.osv import osv, fields
class WebsiteResCompany(osv.Model):
_inherit = 'res.company'
_columns = {
'website_published': fields.related('partner_id', 'website_published', string='Publish', help="Publish on the website"),
}

View File

@ -5,7 +5,10 @@ from openerp.osv import osv, fields
class WebsiteResPartner(osv.Model):
_name = 'res.partner'
_inherit = ['res.partner','website.seo.metadata']
_inherit = ['res.partner', 'website.seo.metadata']
def _get_ids(self, cr, uid, ids, flds, args, context=None):
return {i: i for i in ids}
_columns = {
'website_published': fields.boolean(
@ -16,10 +19,10 @@ class WebsiteResPartner(osv.Model):
'website_short_description': fields.text(
'Website artner Short Description'
),
# hack to allow using plain browse record in qweb views
'self': fields.function(_get_ids, type='many2one', relation=_name),
}
_defaults = {
'website_published': False
}
def img(self, cr, uid, ids, field='image_small', context=None):
return "/website/image?model=%s&field=%s&id=%s" % (self._name, field, ids[0])

View File

@ -1,10 +0,0 @@
# -*- coding: utf-8 -*-
from openerp.osv import orm
class Website(orm.Model):
_inherit = 'website'
def get_partner_white_list_fields(self, cr, uid, ids, context=None):
return ["name", "parent_id", 'website_short_description', "website_published",
"website_description", "tel", "fax", "image", "image_small", "image_medium"]

View File

@ -2,54 +2,33 @@
<openerp>
<data>
<template id="partner_detail" name="Partner Details (Complex Template for Access Right)">
<t t-if="partner" >
<t t-call="website.publish_management">
<t t-set="object" t-value="partner"/>
<t t-set="publish_edit" t-value="True"/>
</t>
</t>
<t t-if="partner"><h1 class="col-md-12 text-center" t-field="partner.name"/></t>
<t t-if="not partner"><h1 class="col-md-12 text-center" t-esc="partner_data.get('name_get')[1]"/></t>
<div class="col-md-4">
<div class="text-center">
<t t-if="partner"><img t-att-src="partner.img('image')"/></t>
<t t-if="not partner"><img t-attf-src="data:image/png;base64,#{partner_data.get('image')}"/></t>
<template id="partner_page" name="Partner Page">
<t t-call="website.layout">
<div id="wrap">
<div class="oe_structure"/>
<div class="container">
<div class="row">
<t t-call="website_partner.partner_detail"></t>
</div>
<address>
<table style="margin: auto;" class="well">
<colgroup>
<col width="100"/>
<col/>
</colgroup>
<tbody>
<t t-if="partner">
<t t-set="address" t-value="'&lt;br/&gt;'.join(partner.name_get()[0][1].split('\n')[1:])"/>
<tr t-if="address or editable"><th class="texttop">Address</th><td class="span2" t-raw="address"/></tr>
</t>
<tr t-if="not partner and partner_data.get('address')"><th class="texttop">Address</th><td class="span2" t-raw="partner_data.get('address')"/></tr>
</div>
<div class="oe_structure"/>
</div>
</t>
</template>
<tr t-if="partner and (partner.website or editable)"><th>Website</th><td class="span2">
<t t-if="partner.website"><span t-field="partner.website"/></t></td></tr>
<tr t-if="partner_data.get('website')"><th>Website</th><td class="span2"><span t-esc="partner_data.get('website')"/></td></tr>
<tr t-if="partner and (partner.phone or editable)"><th>Phone</th><td class="span2">
<t t-if="partner.phone"><span t-field="partner.phone"/></t></td></tr>
<tr t-if="partner_data.get('phone')"><th>Phone</th><td class="span2"><span t-esc="partner_data.get('phone')"/></td></tr>
<tr t-if="partner and (partner.mobile or editable)"><th>Tel</th><td class="span2">
<t t-if="partner.mobile"><span t-field="partner.mobile"/></t></td></tr>
<tr t-if="partner_data.get('mobile')"><th>Tel</th><td class="span2"><span t-esc="partner_data.get('mobile')"/></td></tr>
<tr t-if="partner and (partner.fax or editable)"><th>Fax</th><td class="span2">
<t t-if="partner.fax"><span t-field="partner.fax"/></t></td></tr>
<tr t-if="partner_data.get('fax')"><th>Fax</th><td class="span2"><span t-esc="partner_data.get('fax')"/></td></tr>
<tr t-if="partner and (partner.email or editable)"><th>Email</th><td class="span2">
<t t-if="partner.email"><span t-field="partner.email"/></t></td></tr>
<tr t-if="partner_data.get('email')"><th>Email</th><td class="span2"><span t-esc="partner_data.get('email')"/></td></tr>
</tbody>
</table>
<template id="partner_detail" name="Partner Details">
<t t-call="website.publish_management">
<t t-set="object" t-value="partner"/>
<t t-set="publish_edit" t-value="True"/>
</t>
<h1 class="col-md-12 text-center" id="partner_name" t-field="partner.display_name"/>
<div class="col-md-4">
<div t-field="partner.image" t-field-options='{"widget": "image", "class": "center-block"}'/>
<address class="well">
<div t-field="partner.self" t-field-options='{
"widget": "contact",
"fields": ["address", "website", "phone", "fax", "email"]
}'/>
</address>
<t t-raw="left_column or ''"/>
</div>
@ -61,9 +40,6 @@
<div class="css_non_editable_mode_hidden" t-field="partner.website_short_description"/>
</t>
</t>
<t t-if="not partner">
<div class="col-md-8 mt32" t-raw="partner_data.get('website_description')"/>
</t>
<t t-raw="right_column or ''"/>
</div>
</template>