[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:
@@ -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 }&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>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user