[REF] website_crm_partner_assign: cleaning and improvements

Improved website_crm_partner_assign module to look more like the current
patners page of openerp.com.

Some cleaning in controllers that were quite obfuscated.

bzr revid: tde@openerp.com-20131007145516-0dziszwy0pfg1yje
This commit is contained in:
Thibault Delavallée 2013-10-07 16:55:16 +02:00
parent 532ab2333f
commit c82f6f7ef6
3 changed files with 110 additions and 135 deletions

View File

@ -1,12 +1,11 @@
{
'name': 'Public Partners References',
'name': 'Publish Partner Assignment',
'category': 'Website',
'summary': 'Publish Customer References',
'summary': 'Publish and Assign Partner',
'version': '1.0',
'description': """
OpenERP Public Partners References
==================================
Publish and Assign Partner
==========================
""",
'author': 'OpenERP SA',
'depends': ['website_partner', 'website_google_map'],

View File

@ -1,82 +1,87 @@
# -*- coding: utf-8 -*-
import urllib
import openerp
from openerp.addons.web import http
from openerp.tools.translate import _
from openerp.addons.web.http import request
from openerp.addons.website.models import website
import urllib
class website_crm_partner_assign(http.Controller):
@website.route(['/partners/', '/partners/page/<int:page>/'], type='http', auth="public", multilang=True)
def partners(self, page=0, **post):
class WebsiteCrmPartnerAssign(http.Controller):
_references_per_page = 20
@website.route([
'/partners/', '/partners/page/<int:page>/',
'/partners/country/<int:country_id>', '/partners/country/page/<int:country_id>/',
], type='http', auth="public", multilang=True)
def partners(self, country_id=None, page=0, **post):
country_obj = request.registry['res.country']
partner_obj = request.registry['res.partner']
post_name = post.get('search', '')
grade_id = post.get('grade_id', '')
country = None
def dom_without(without):
domain = [('grade_id', '!=', False)]
domain += openerp.SUPERUSER_ID != request.uid and [('website_published', '=', True)] or [(1, "=", 1)]
for key, search in domain_search.items():
if key != without:
domain += search
return domain
# format displayed membership lines domain
base_partner_domain = [('is_company', '=', True)]
if request.context['is_public_user']:
base_partner_domain += [('website_published', '=', True)]
partner_domain = list(base_partner_domain)
if grade_id:
partner_domain += [('grade_id', '=', grade_id)] # try/catch int
if country_id:
country = country_obj.browse(request.cr, request.uid, country_id, request.context)
partner_domain += [('country_id', '=', country_id)]
if post_name:
partner_domain += ['|', ('name', 'ilike', "%%%s%%" % post_name), ('website_description', 'ilike', "%%%s%%" % post_name)]
# search domains
domain_search = {}
if post.get('search'):
domain_search["search"] += ['|',
('name', 'ilike', "%%%s%%" % post.get("search")),
('website_description', 'ilike', "%%%s%%" % post.get("search"))]
if post.get("grade", "all") != 'all':
domain_search["grade"] = [("grade_id", "=", int(post.get("grade")))]
if post.get("country", "all") != 'all':
domain_search["country"] = [("country_id", "=", int(post.get("country")))]
# public partner profile
# format pager
partner_ids = partner_obj.search(
request.cr, openerp.SUPERUSER_ID, dom_without(False),
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)
# search for partners to display
partner_ids = partner_obj.search(
request.cr, openerp.SUPERUSER_ID, partner_domain,
context=request.context,
limit=self._references_per_page, offset=pager['offset'],
order="grade_id ASC,partner_weight DESC")
google_map_partner_ids = ",".join([str(p) for p in partner_ids])
partners = partner_obj.browse(
request.cr, openerp.SUPERUSER_ID, partner_ids, request.context)
# group by country
domain = dom_without("country")
countries = partner_obj.read_group(
request.cr, request.uid, domain, ["id", "country_id"],
request.cr, request.uid, base_partner_domain, ["id", "country_id"],
groupby="country_id", orderby="country_id", context=request.context)
partners = partner_obj.search(request.cr, request.uid, domain,
context=request.context, count=True)
countries_partners = partner_obj.search(
request.cr, request.uid, base_partner_domain,
context=request.context, count=True)
countries.insert(0, {
'country_id_count': partners,
'country_id': ("all", _("All Countries"))
'country_id_count': countries_partners,
'country_id': ('0', _("All Countries"))
})
# group by grade
domain = dom_without("grade")
grades = partner_obj.read_group(
request.cr, request.uid, domain, ["id", "grade_id"],
request.cr, request.uid, base_partner_domain, ["id", "grade_id"],
groupby="grade_id", orderby="grade_id", context=request.context)
grade_id_count = partner_obj.search(request.cr, request.uid, domain,
count=True, context=request.context)
grades_partners = partner_obj.search(
request.cr, request.uid, base_partner_domain,
context=request.context, count=True)
grades.insert(0, {
'grade_id_count': grade_id_count,
'grade_id': ("all", _("All Grade"))
'grade_id_count': grades_partners,
'grade_id': ("all", _("All Grades"))
})
step = 20
pager = request.website.pager(url="/partners/", total=len(partner_ids), page=page, step=step, scope=7, url_args=post)
partner_ids = partner_obj.search(
request.cr, openerp.SUPERUSER_ID, [('id', 'in', partner_ids)],
context=request.context, limit=step, offset=pager['offset'],
order="grade_id ASC,partner_weight DESC")
partners = partner_obj.browse(request.cr, openerp.SUPERUSER_ID,
partner_ids, request.context)
values = {
'countries': countries,
'country': country,
'grades': grades,
'partner_ids': partners,
'grade_id': grade_id,
'partners': partners,
'google_map_partner_ids': google_map_partner_ids,
'pager': pager,
'searches': post,
@ -84,23 +89,19 @@ class website_crm_partner_assign(http.Controller):
}
return request.website.render("website_crm_partner_assign.index", values)
@website.route(['/partners/<int:ref_id>/'], type='http', auth="public", multilang=True)
def partners_ref(self, ref_id=0, **post):
@website.route(['/partners/<int:partner_id>/'], type='http', auth="public", multilang=True)
def partners_ref(self, partner_id=0, **post):
partner_obj = request.registry['res.partner']
partner_ids = partner_obj.search(
request.cr, openerp.SUPERUSER_ID,
[('website_published', '=', True), ('id', '=', ref_id)],
context=request.context)
if not request.context['is_public_user']:
partner_ids += partner_obj.search(
request.cr, request.uid, [('id', '=', ref_id)],
context=request.context)
if request.context['is_public_user']:
partner_ids = partner_obj.search(request.cr, openerp.SUPERUSER_ID, [('website_pushished', '=', True), ('id', '=', partner_id)], context=request.context)
else:
partner_ids = partner_obj.search(request.cr, request.uid, [('id', '=', partner_id)], context=request.context)
if not partner_ids:
return self.members(post)
values = {
'partner_id': partner_obj.browse(
request.cr, openerp.SUPERUSER_ID, partner_ids[0],
context=dict(request.context, show_address=True)),
}
return request.website.render("website_crm_partner_assign.details", values)
return request.website.render("website_crm_partner_assign.partner", values)

View File

@ -4,7 +4,6 @@
<!-- Layout add nav and footer -->
<template id="footer_custom" inherit_id="website.layout" name="Custom Footer">
<xpath expr="//footer//div[@name='info']/ul" position="inside">
<li><a t-href="/partners/">Partners</a></li>
@ -12,29 +11,42 @@
</template>
<!-- Page -->
<template id="layout" name="Partners Layout">
<t t-call="website.layout">
<t t-set="title">Partners</t>
<div id="wrap">
<div class="oe_structure"/>
<div class="container">
<div class="row">
<t t-raw="ref_content" />
<t t-set="title">Partners</t>
<div id="wrap">
<div class="oe_structure"/>
<div class="container">
<div class="row">
<t t-raw="ref_content" />
</div>
</div>
</div>
</div>
</t>
</template>
<template id="index" name="Partners">
<template id="index" name="Find Partners">
<t t-call="website_crm_partner_assign.layout">
<t t-set="ref_content">
<h1 class="col-md-12 text-center">
Want services on OpenERP?<br/>
<small>Contact a local partner</small>
</h1>
<div class="col-md-12" id="ref_content">
<div class="col-md-4" id="partner_left">
<h2>Partners by Country</h2>
<ul class="nav">
<t t-foreach="countries" t-as="country">
<t t-if="country['country_id']">
<li>
<a t-href="/partners/country/#{ country['country_id'][0] }">
<t t-esc="country['country_id'][1]"/> <small>(<t t-esc="country['country_id_count']"/>)</small>
</a>
</li>
</t>
</t>
</ul>
</div>
<div class="col-md-8" id="ref_content">
<div class='navbar'>
<div>
<t t-call="website.pager">
@ -42,18 +54,7 @@
</t>
<form t-action="/partners/" method="get" class="navbar-search pull-right pagination form-inline">
<div class="form-group">
<input type="text" name="search" class="search-query col-md-2 mt4 form-control" placeholder="Search" t-att-value="searches.get('search') or '' or ''"/>
</div>
<div class="form-group">
<select class="search-query col-md-2 mt4 form-control" name="country" t-if="len(countries) > 1" onchange="submit()">
<t t-foreach="countries">
<t t-if="country_id">
<option t-att-selected="searches.get('country') == str(country_id and country_id[0]) and 'selected'" t-att-value="country_id[0]">
<t t-esc="country_id[1]"/> (<t t-esc="country_id_count"/>)
</option>
</t>
</t>
</select>
<input type="text" name="search" class="search-query col-md-2 mt4 form-control" placeholder="Search" t-att-value="name_search"/>
</div>
<div class="form-group">
<select class="search-query col-md-2 mt4 form-control" name="grade" t-if="len(grades) > 1" onchange="submit()">
@ -70,19 +71,22 @@
</div>
</div>
<div>
<t t-foreach="partner_ids" t-as="partner">
<t t-if="grade_id != partner.grade_id.id">
<t t-set="grade_id" t-value="partner.grade_id.id"/>
<h3 class="text-center well"><span t-field="partner.grade_id"/> Partners</h3>
<t t-foreach="partners" t-as="partner_id">
<t t-if="internal_gid != partner_id.grade_id.id">
<t t-set="internal_gid" t-value="partner_id.grade_id.id"/>
<h3 class="text-center">
<span t-field="partner_id.grade_id"/> Partners
<t t-if="country"> in <t t-esc="country.name"/></t>
</h3>
</t>
<div class="media thumbnail" data-publish="">
<t t-call="website.publish_management"><t t-set="object" t-value="partner"/></t>
<a class="pull-left" t-href="/partners/#{ partner.id }/">
<img class="media-object" t-att-src="partner.img('image_small')"/>
<t t-call="website.publish_management"><t t-set="object" t-value="partner_id"/></t>
<a class="pull-left" t-href="/partners/#{ partner_id.id }/">
<img class="media-object" t-att-src="partner_id.img('image_small')"/>
</a>
<div class="media-body" style="min-height: 64px;">
<a class="media-heading" t-href="/partners/#{ partner.id }/"><span t-field="partner.parent_id"/> <span t-field="partner.name"/></a> - <span t-field="partner.grade_id"/>
<div t-field="partner.website_short_description"/>
<a class="media-heading" t-href="/partners/#{ partner_id.id }/"><span t-field="partner_id.parent_id"/> <span t-field="partner_id.name"/></a> - <span t-field="partner_id.grade_id"/>
<div t-field="partner_id.website_short_description"/>
</div>
</div>
</t>
@ -93,48 +97,19 @@
</template>
<template id="ref_country" inherit_id="website_crm_partner_assign.index" inherit_option_id="website_crm_partner_assign.index" name="Left World Map">
<xpath expr="//div[@id='ref_content']" position="before">
<div class="col-md-4">
<ul class="nav">
<li class="navbar-header">World Map</li>
<iframe t-attf-src="/google_map/?width=320&amp;height=240&amp;partner_ids=#{ google_map_partner_ids }&amp;partner_url=/partners/"
style="width:320px; height:260px; border:0; padding:0; margin:0;"></iframe>
</ul>
</div>
</xpath>
<xpath expr="//div[@id='ref_content']" position="attributes">
<attribute name="class">col-md-8</attribute>
<xpath expr="//div[@id='partner_left']//h2" position="before">
<h2>World Map</h2>
<ul class="nav">
<iframe t-attf-src="/google_map/?width=320&amp;height=240&amp;partner_ids=#{ google_map_partner_ids }&amp;partner_url=/partners/"
style="width:320px; height:260px; border:0; padding:0; margin:0;"></iframe>
</ul>
</xpath>
</template>
<template id="details" name="Partner Detail">
<template id="partner" name="Partner Detail">
<t t-call="website_crm_partner_assign.layout">
<t t-set="ref_content">
<t t-call="website.publish_management"><t t-set="object" t-value="partner_id"/></t>
<h1 class="col-md-12 text-center" t-field="partner_id.name"/>
<div class="col-md-4">
<div class="text-center">
<img t-att-src="partner_id.img('image_medium')"/>
</div>
<address>
<table style="margin: auto;" class="well">
<colgroup>
<col width="100"/>
<col/>
</colgroup>
<tbody>
<t t-set="address" t-value="'&lt;br/&gt;'.join(partner_id.name_get()[0][1].split('\n')[1:])"/>
<tr t-if="address or editable"><th>Address</th><td class="span2" t-raw="address"/></tr>
<tr t-if="partner_id.website or editable"><th>Website</th><td class="span2" t-field="partner_id.website"/></tr>
<tr t-if="partner_id.phone or editable"><th>Tel</th><td class="span2" t-field="partner_id.phone"/></tr>
<tr t-if="partner_id.mobile or editable"><th>Tel</th><td class="span2" t-field="partner_id.mobile"/></tr>
<tr t-if="partner_id.fax or editable"><th>Fax</th><td class="span2" t-field="partner_id.fax"/></tr>
<tr t-if="partner_id.email or editable"><th>Email</th><td class="span2" t-field="partner_id.email"/></tr>
</tbody>
</table>
</address>
</div>
<div class="col-md-8 mt32" t-field="partner_id.website_description"/>
<t t-call="website_partner.partner_detail"/>
</t>
</t>
</template>