[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.
This commit is contained in:
parent
3d542b1199
commit
314a0358b7
|
@ -14,18 +14,18 @@ class WebsiteMembership(http.Controller):
|
|||
@http.route([
|
||||
'/members',
|
||||
'/members/page/<int:page>',
|
||||
'/members/association/<int:membership_id>',
|
||||
'/members/association/<int:membership_id>/page/<int:page>',
|
||||
'/members/association/<membership_id>',
|
||||
'/members/association/<membership_id>/page/<int:page>',
|
||||
|
||||
'/members/country/<int:country_id>',
|
||||
'/members/country/<country_name>-<int:country_id>',
|
||||
'/members/country/<int:country_id>/page/<int:page>',
|
||||
'/members/country/<country_name>-<int:country_id>/page/<int:page>',
|
||||
|
||||
'/members/association/<int:membership_id>/country/<country_name>-<int:country_id>',
|
||||
'/members/association/<int:membership_id>/country/<int:country_id>',
|
||||
'/members/association/<int:membership_id>/country/<country_name>-<int:country_id>/page/<int:page>',
|
||||
'/members/association/<int:membership_id>/country/<int:country_id>/page/<int:page>',
|
||||
'/members/association/<membership_id>/country/<country_name>-<int:country_id>',
|
||||
'/members/association/<membership_id>/country/<int:country_id>',
|
||||
'/members/association/<membership_id>/country/<country_name>-<int:country_id>/page/<int:page>',
|
||||
'/members/association/<membership_id>/country/<int:country_id>/page/<int: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,
|
||||
|
|
|
@ -31,10 +31,10 @@
|
|||
<div class="col-md-3 mb32" id="left_column">
|
||||
<ul class="nav nav-pills nav-stacked mt16">
|
||||
<li class="nav-header"><h3>Associations</h3></li>
|
||||
<li t-att-class="'' if membership else 'active'"><a 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-attf-href="/members/association/#{ membership_id.id }#{current_country and '/country/%s' % slug(current_country) or ''}#{ search }"><t t-esc="membership_id.name"/></a>
|
||||
<li t-att-class="'' if membership_id else 'active'"><a href="/members">All</a></li>
|
||||
<t t-foreach="memberships_data" t-as="membership_data">
|
||||
<li t-att-class="membership_id and membership_data['id'] == membership_id and 'active' or ''">
|
||||
<a t-attf-href="/members/association/#{ membership_data['id'] }#{current_country and '/country/%s' % slug(current_country) or ''}#{ search }"><t t-esc="membership_data['name']"/></a>
|
||||
</li>
|
||||
</t>
|
||||
</ul>
|
||||
|
@ -51,27 +51,28 @@
|
|||
</form>
|
||||
</div>
|
||||
<div>
|
||||
<t t-if="not membership_lines">
|
||||
<t t-if="not memberships_partner_ids">
|
||||
<p>No result found.</p>
|
||||
</t>
|
||||
<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-foreach="memberships_data" t-as="membership_data">
|
||||
<t t-if="memberships_partner_ids.get(membership_data['id'])">
|
||||
<h3 class="text-center"><span t-esc="membership_data['name']"/></h3>
|
||||
<t t-foreach="memberships_partner_ids[membership_data['id']]" t-as="partner_id">
|
||||
<t t-set="partner" t-value="partners[partner_id]"/>
|
||||
<div class="media">
|
||||
<a class="pull-left" t-attf-href="/members/#{slug(partner)}"
|
||||
t-field="partner.image_small"
|
||||
t-field-options='{"widget": "image", "class": "media-object"}'
|
||||
></a>
|
||||
<div class="media-body" style="min-height: 64px;">
|
||||
<a class="media-heading" t-attf-href="/members/#{slug(partner)}">
|
||||
<span t-field="partner.display_name"/>
|
||||
</a>
|
||||
<div t-field="partner.website_short_description"/>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</t>
|
||||
<t t-set="partner" t-value="partners[membership_line_id.partner.id]"/>
|
||||
<div class="media">
|
||||
<a class="pull-left" t-attf-href="/members/#{slug(partner)}"
|
||||
t-field="partner.image_small"
|
||||
t-field-options='{"widget": "image", "class": "media-object"}'
|
||||
></a>
|
||||
<div class="media-body" style="min-height: 64px;">
|
||||
<a class="media-heading" t-attf-href="/members/#{slug(partner)}">
|
||||
<span t-field="partner.display_name"/>
|
||||
</a>
|
||||
<div t-field="partner.website_short_description"/>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</div>
|
||||
</div>
|
||||
|
|
Loading…
Reference in New Issue