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.

- - - -

+ + +

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