[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:
parent
532ab2333f
commit
c82f6f7ef6
|
@ -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'],
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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&height=240&partner_ids=#{ google_map_partner_ids }&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&height=240&partner_ids=#{ google_map_partner_ids }&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="'<br/>'.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>
|
||||
|
|
Loading…
Reference in New Issue