From 314a0358b7a100d05d5c8504953499faf1316c8a Mon Sep 17 00:00:00 2001 From: Denis Ledoux Date: Thu, 12 Feb 2015 11:54:43 +0100 Subject: [PATCH] [FIX] website_membership: include free members in members page This is possible to set a partner as a free member simply by checking the "free member" box, in the partner form This leads to the fact there is no membership lines for this partner Before this rev., only partners having membership lines were displayed on the website members page. --- addons/website_membership/controllers/main.py | 50 +++++++++++++------ .../views/website_membership.xml | 45 +++++++++-------- 2 files changed, 59 insertions(+), 36 deletions(-) diff --git a/addons/website_membership/controllers/main.py b/addons/website_membership/controllers/main.py index c88fb43da9d..942c3f13267 100644 --- a/addons/website_membership/controllers/main.py +++ b/addons/website_membership/controllers/main.py @@ -14,18 +14,18 @@ class WebsiteMembership(http.Controller): @http.route([ '/members', '/members/page/', - '/members/association/', - '/members/association//page/', + '/members/association/', + '/members/association//page/', '/members/country/', '/members/country/-', '/members/country//page/', '/members/country/-/page/', - '/members/association//country/-', - '/members/association//country/', - '/members/association//country/-/page/', - '/members/association//country//page/', + '/members/association//country/-', + '/members/association//country/', + '/members/association//country/-/page/', + '/members/association//country//page/', ], type='http', auth="public", website=True) def members(self, membership_id=None, country_name=None, country_id=0, page=0, **post): cr, uid, context = request.cr, request.uid, request.context @@ -38,7 +38,8 @@ class WebsiteMembership(http.Controller): # base domain for groupby / searches base_line_domain = [("partner.website_published", "=", True), ('state', 'in', ['free', 'paid'])] - if membership_id: + if membership_id and membership_id != 'free': + membership_id = int(membership_id) base_line_domain.append(('membership_id', '=', membership_id)) membership = product_obj.browse(cr, uid, membership_id, context=context) else: @@ -48,9 +49,14 @@ class WebsiteMembership(http.Controller): ('partner.website_description', 'ilike', post_name)] # group by country, based on all customers (base domain) - membership_line_ids = membership_line_obj.search(cr, SUPERUSER_ID, base_line_domain, context=context) + if membership_id != 'free': + membership_line_ids = membership_line_obj.search(cr, SUPERUSER_ID, base_line_domain, context=context) + country_domain = ('member_lines', 'in', membership_line_ids) + else: + membership_line_ids = [] + country_domain = ('free_member', '=', True) countries = partner_obj.read_group( - cr, uid, [('member_lines', 'in', membership_line_ids), ("website_published", "=", True)], ["id", "country_id"], + cr, uid, [country_domain, ("website_published", "=", True)], ["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) @@ -77,22 +83,38 @@ class WebsiteMembership(http.Controller): line_domain.append(('membership_id', 'in', membership_ids)) # displayed membership lines - membership_line_ids = membership_line_obj.search(cr, SUPERUSER_ID, line_domain, context=context) + if membership_id != 'free': + membership_line_ids = membership_line_obj.search(cr, SUPERUSER_ID, line_domain, context=context) membership_lines = membership_line_obj.browse(cr, uid, membership_line_ids, context=context) + # TODO: Following line can be deleted in master. Kept for retrocompatibility. membership_lines = sorted(membership_lines, key=lambda x: x.membership_id.website_sequence) partner_ids = [m.partner.id for m in membership_lines] + free_partner_ids = partner_obj.search(cr, uid, [('free_member', '=', True), ('website_published', '=', True)], context=context) google_map_partner_ids = ",".join(map(str, partner_ids)) + memberships_data = [] + for membership_record in memberships: + memberships_data.append({'id': membership_record.id, 'name': membership_record.name}) + memberships_partner_ids = {} + for line in membership_lines: + memberships_partner_ids.setdefault(line.membership_id.id, []).append(line.partner.id) + if free_partner_ids: + memberships_data.append({'id': 'free', 'name': _('Free Members')}) + if not membership_id or membership_id == 'free': + memberships_partner_ids['free'] = free_partner_ids - partners = dict((p.id, p) for p in partner_obj.browse(request.cr, SUPERUSER_ID, partner_ids, request.context)) + partners = dict((p.id, p) for p in partner_obj.browse(request.cr, SUPERUSER_ID, list(set(partner_ids + free_partner_ids)), request.context)) # request pager for lines pager = request.website.pager(url="/members", total=len(membership_line_ids), page=page, step=self._references_per_page, scope=7, url_args=post) values = { 'partners': partners, - 'membership_lines': membership_lines, - 'memberships': memberships, - 'membership': membership, + 'membership_lines': membership_lines, # TODO: This line can be deleted in master. Kept for retrocompatibility. + 'memberships': memberships, # TODO: This line too. + 'membership': membership, # TODO: This line too. + 'memberships_data': memberships_data, + 'memberships_partner_ids': memberships_partner_ids, + 'membership_id': membership_id, 'countries': countries, 'current_country': current_country and [current_country['id'], current_country['name']] or None, 'current_country_id': current_country and current_country['id'] or 0, diff --git a/addons/website_membership/views/website_membership.xml b/addons/website_membership/views/website_membership.xml index 3f4e6b0a49d..40bf6fcb028 100644 --- a/addons/website_membership/views/website_membership.xml +++ b/addons/website_membership/views/website_membership.xml @@ -31,10 +31,10 @@
@@ -51,27 +51,28 @@
- +

No result found.

- - - -

+ + +

+ + +
+ +
+ + + +
+
+
+ - -
- -
- - - -
-
-