[IMP] website_membership: added country management in website view

- controllers: added management of country_id from post
- views: added option to display country list
- + various cleaning in display and controllers

bzr revid: tde@openerp.com-20131011161310-5dfz6vf4y5nc9mj9
This commit is contained in:
Thibault Delavallée
2013-10-11 18:13:10 +02:00
parent 3e453c1156
commit e4dcbbed57
2 changed files with 87 additions and 37 deletions
+38 -10
View File
@@ -4,6 +4,9 @@ import openerp
from openerp.addons.web import http
from openerp.addons.web.http import request
from openerp.addons.website.models import website
from openerp.tools.translate import _
import urllib
class WebsiteMembership(http.Controller):
@@ -19,21 +22,43 @@ class WebsiteMembership(http.Controller):
cr, uid, context = request.cr, request.uid, request.context
product_obj = request.registry['product.product']
membership_line_obj = request.registry['membership.membership_line']
post_name = post.get('search', '')
partner_obj = request.registry['res.partner']
post_name = post.get('name', '')
post_country_id = int(post.get('country_id', '0'))
# format displayed membership lines domain
# base domain for groupby / searches
if request.context['is_public_user']:
line_domain = [('partner.website_published', '=', True)]
base_line_domain = [('partner.website_published', '=', True)]
else:
line_domain = [(1, '=', 1)]
base_line_domain = [(1, '=', 1)]
if membership_id:
line_domain += [('membership_id', '=', membership_id)]
base_line_domain += [('membership_id', '=', membership_id)]
membership = product_obj.browse(cr, openerp.SUPERUSER_ID, membership_id, context=context)
else:
membership = ''
if post_name:
line_domain += ['|', ('partner.name', 'ilike', "%%%s%%" % post_name), ('partner.website_description', 'ilike', "%%%s%%" % post_name)]
base_line_domain += ['|', ('partner.name', 'ilike', "%%%s%%" % post_name), ('partner.website_description', 'ilike', "%%%s%%" % post_name)]
# group by country, based on all customers (base domain)
membership_line_ids = membership_line_obj.search(cr, uid, base_line_domain, context=context)
countries = partner_obj.read_group(
cr, uid, [('member_lines', 'in', membership_line_ids)], ["id", "country_id"],
groupby="country_id", orderby="country_id", context=request.context)
countries_total = sum([country_dict['country_id_count'] for country_dict in countries])
countries.insert(0, {
'country_id_count': countries_total,
'country_id': (0, _("All Countries"))
})
# displayed membership lines
line_domain = list(base_line_domain)
if post_country_id:
line_domain += [('partner.country_id', '=', post_country_id)]
membership_line_ids = membership_line_obj.search(cr, uid, line_domain, context=context)
membership_lines = membership_line_obj.browse(cr, uid, membership_line_ids, context=context)
google_map_partner_ids = ",".join([str(m.partner.id) for m in membership_lines])
partner_ids = [m.partner and m.partner.id for m in membership_lines]
google_map_partner_ids = ",".join([str(pid) for pid in partner_ids])
# format domain for group_by and memberships
membership_domain = [('membership', '=', True)]
@@ -44,11 +69,14 @@ class WebsiteMembership(http.Controller):
pager = request.website.pager(url="/members/", total=len(membership_line_ids), page=page, step=self._references_per_page, scope=7, url_args=post)
values = {
'membership_line_ids': membership_lines,
'membership_ids': memberships,
'membership_lines': membership_lines,
'memberships': memberships,
'membership': membership,
'countries': countries,
'google_map_partner_ids': google_map_partner_ids,
'pager': pager,
'name_search': post_name,
'post': post,
'search': "?%s" % urllib.urlencode(post),
}
return request.website.render("website_membership.index", values)
@@ -32,44 +32,47 @@
Looking for a partner ?<br/>
<small>Find an association member</small>
</h1>
<div class="col-md-4" id="membership_left">
<h3>Associations</h3>
<ul class="nav">
<t t-foreach="membership_ids" t-as="membership_id">
<li><a t-href="/members/association/#{ membership_id.id }"><t t-esc="membership_id.name"/></a></li>
<div class="col-md-4" id="left_column">
<ul class="nav nav-pills nav-stacked mt16">
<li class="nav-header"><h3>Associations</h3></li>
<li t-att-class="membership and '' or 'active'"><a t-href="/members/">All</a></li>
<t t-foreach="memberships" t-as="membership_id">
<li t-att-class="membership and membership_id.id == membership.id and 'active' or ''">
<a t-href="/members/association/#{ membership_id.id }"><t t-esc="membership_id.name"/></a>
</li>
</t>
</ul>
</div>
<div class="col-md-8" id="ref_content">
<div class='navbar'>
<div>
<t t-call="website.pager">
<t t-set="classname">pull-left</t>
</t>
<form t-action="/members/" 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="name_search"/>
</div>
</form>
</div>
<t t-call="website.pager">
<t t-set="classname">pull-left</t>
</t>
<form t-action="/members/" method="get" class="navbar-search pull-right pagination form-inline">
<div class="form-group">
<input type="text" name="name" class="search-query col-md-2 mt4 form-control" placeholder="Search" t-att-value="post.get('name', '')"/>
</div>
</form>
</div>
<div>
<t t-if="not membership_line_ids">
<t t-if="not membership_lines">
<p>No result found.</p>
</t>
<t t-foreach="membership_line_ids" t-as="membership_line_id">
<t t-if="membership_id != membership_line_id.membership_id.id">
<t t-set="membership_id" t-value="membership_line_id.membership_id.id"/>
<t t-foreach="membership_lines" t-as="membership_line_id">
<t t-if="current_membership_id != membership_line_id.membership_id.id">
<t t-set="current_membership_id" t-value="membership_line_id.membership_id.id"/>
<h3 class="text-center"><span t-field="membership_line_id.membership_id"/></h3>
</t>
<t t-set="partner" t-value="membership_line_id.partner"/>
<div class="media thumbnail" data-publish="">
<t t-call="website.publish_management"><t t-set="object" t-value="partner"/></t>
<div class="media" data-publish="">
<t t-call="website.publish_management">
<t t-set="object" t-value="partner"/>
</t>
<a class="pull-left" t-href="/members/#{ partner.id }/">
<img class="media-object" t-att-src="partner.img('image_small')"/>
</a>
<div class="media-body" style="min-height: 64px;">
<a class="media-heading" t-href="/members/#{ partner.id }/"><span t-field="partner.parent_id"/> <span t-field="partner.name"/></a> - <span t-field="membership_line_id.membership_id"/>
<a class="media-heading" t-href="/members/#{ partner.id }/"><span t-field="partner.parent_id"/> <span t-field="partner.name"/></a>
<div t-field="partner.website_short_description"/>
</div>
</div>
@@ -80,15 +83,34 @@
</t>
</template>
<template id="ref_country" inherit_id="website_membership.index" inherit_option_id="website_membership.index" name="Left World Map">
<xpath expr="//div[@id='membership_left']/ul" position="after">
<div>
<h3>World Map</h3>
<!-- Option: index: Left Google Map -->
<template id="opt_index_country" name="Location"
inherit_option_id="website_membership.index" inherit_id="website_membership.index">
<xpath expr="//div[@id='left_column']/ul[last()]" position="after">
<ul class="nav nav-pills nav-stacked mt16">
<li class="nav-header"><h3>Location</h3></li>
<t t-foreach="countries">
<li t-if="country_id" t-att-class="post.get('country_id', '0') == str(country_id and country_id[0]) and 'active' or ''">
<a t-href="/members/#{ search }&amp;country_id=#{ country_id[0] }"><t t-esc="country_id[1]"/>
<span class="badge pull-right"><t t-esc="country_id_count"/></span>
</a>
</li>
</t>
</ul>
</xpath>
</template>
<!-- Option: index: Left Google Map -->
<template id="opt_index_google_map" name="Left World Map"
inherit_option_id="website_membership.index" inherit_id="website_membership.index">
<xpath expr="//div[@id='left_column']/ul[last()]" position="after">
<ul class="nav nav-pills nav-stacked mt16">
<li class="nav-header"><h3>World Map</h3></li>
<ul class="nav">
<iframe t-attf-src="/google_map/?width=320&amp;height=240&amp;partner_ids=#{ google_map_partner_ids }&amp;partner_url=/members/"
style="width:320px; height:260px; border:0; padding:0; margin:0;"></iframe>
</ul>
</div>
</ul>
</xpath>
</template>