diff --git a/addons/website_membership/controllers/main.py b/addons/website_membership/controllers/main.py index b94071d7b5e..f51677b7f73 100644 --- a/addons/website_membership/controllers/main.py +++ b/addons/website_membership/controllers/main.py @@ -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) diff --git a/addons/website_membership/views/website_membership.xml b/addons/website_membership/views/website_membership.xml index b3ebf776508..89cebe064dc 100644 --- a/addons/website_membership/views/website_membership.xml +++ b/addons/website_membership/views/website_membership.xml @@ -32,44 +32,47 @@ Looking for a partner ?
Find an association member -
-

Associations

-