[FIX] website_{customer,partner,crm_partner_assign}: correct views and controllers
This commit is contained in:
parent
00a4845bc7
commit
4922c5363e
|
@ -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'],
|
||||
|
|
|
@ -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']
|
||||
|
|
|
@ -1,2 +1 @@
|
|||
import res_partner
|
||||
import website
|
||||
|
|
|
@ -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'),
|
||||
}
|
||||
|
|
|
@ -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
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -1,3 +1 @@
|
|||
import res_partner
|
||||
import res_company
|
||||
import website
|
|
@ -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"),
|
||||
}
|
|
@ -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])
|
||||
|
|
|
@ -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"]
|
|
@ -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="'<br/>'.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>
|
||||
|
|
Loading…
Reference in New Issue