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):
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)]
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)
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>
</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 }&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&height=240&partner_ids=#{ google_map_partner_ids }&partner_url=/members/"
style="width:320px; height:260px; border:0; padding:0; margin:0;"></iframe>
</ul>
- </div>
+ </ul>
</xpath>
</template>