diff --git a/addons/website_crm_partner_assign/controllers/main.py b/addons/website_crm_partner_assign/controllers/main.py index 486d10e6ef6..c9621b7a0e9 100644 --- a/addons/website_crm_partner_assign/controllers/main.py +++ b/addons/website_crm_partner_assign/controllers/main.py @@ -6,97 +6,111 @@ import werkzeug from openerp import SUPERUSER_ID from openerp.addons.web import http from openerp.addons.web.http import request +from openerp.addons.website.models.website import slug from openerp.tools.translate import _ + class WebsiteCrmPartnerAssign(http.Controller): - _references_per_page = 20 + _references_per_page = 40 @http.route([ '/partners', '/partners/page/', - '/partners/grade/', - '/partners/grade//page/', + '/partners/grade/', + '/partners/grade//page/', - '/partners/country/', - '/partners/country/-', - '/partners/country//page/', - '/partners/country/-/page/', - - '/partners/grade//country/', - '/partners/grade//country/-', - '/partners/grade//country//page/', - '/partners/grade//country/-/page/', + '/partners/country/', + '/partners/country//page/', + '/partners/grade//country/', + '/partners/grade//country//page/', ], type='http', auth="public", website=True, multilang=True) - def partners(self, country_id=0, grade_id=0, page=0, country_name='', **post): - country_obj = request.registry['res.country'] + def partners(self, country=None, grade=None, page=0, **post): partner_obj = request.registry['res.partner'] - post_name = post.get('search', '') - country = None + search = post.get('search', '') - # format displayed membership lines domain base_partner_domain = [('is_company', '=', True), ('grade_id.website_published', '=', True), ('website_published', '=', True)] - partner_domain = list(base_partner_domain) - if post_name: - partner_domain += ['|', ('name', 'ilike', post_name), ('website_description', 'ilike', post_name)] - if grade_id and grade_id != "all": - partner_domain += [('grade_id', '=', int(grade_id))] # try/catch int + if search: + base_partner_domain += ['|', ('name', 'ilike', search), ('website_description', 'ilike', search)] - # group by country - countries = partner_obj.read_group( - request.cr, SUPERUSER_ID, partner_domain, ["id", "country_id"], - groupby="country_id", orderby="country_id", context=request.context) - countries_partners = partner_obj.search( - request.cr, SUPERUSER_ID, partner_domain, + # group by grade + grade_domain = list(base_partner_domain) + if country: + grade_domain += [('country_id', '=', country.id)] + grades = partner_obj.read_group( + request.cr, SUPERUSER_ID, grade_domain, ["id", "grade_id"], + groupby="grade_id", orderby="grade_id DESC", context=request.context) + grades_partners = partner_obj.search( + request.cr, SUPERUSER_ID, grade_domain, context=request.context, count=True) - - if country_id: - country = country_obj.browse(request.cr, request.uid, country_id, request.context) - partner_domain += [('country_id', '=', country_id)] - if not any(x['country_id'][0] == country_id for x in countries): - countries.append({ - 'country_id_count': 0, - 'country_id': (country_id, country.name) - }) - countries.sort(key=lambda d: d['country_id'][1]) - - countries.insert(0, { - 'country_id_count': countries_partners, - 'country_id': (0, _("All Countries")) + # flag active grade + for grade_dict in grades: + grade_dict['active'] = grade and grade_dict['grade_id'][0] == grade.id + grades.insert(0, { + 'grade_id_count': grades_partners, + 'grade_id': (0, _("All Categories")), + 'active': bool(grade is None), }) - # format pager - partner_count = partner_obj.search_count( - request.cr, SUPERUSER_ID, partner_domain, - context=request.context) - pager = request.website.pager(url="/partners", total=partner_count, page=page, step=self._references_per_page, scope=7, url_args=post) + # group by country + country_domain = list(base_partner_domain) + if grade: + country_domain += [('grade_id', '=', grade.id)] + countries = partner_obj.read_group( + request.cr, SUPERUSER_ID, country_domain, ["id", "country_id"], + groupby="country_id", orderby="country_id", context=request.context) + countries_partners = partner_obj.search( + request.cr, SUPERUSER_ID, country_domain, + context=request.context, count=True) + # flag active country + for country_dict in countries: + country_dict['active'] = country and country_dict['country_id'][0] == country.id + countries.insert(0, { + 'country_id_count': countries_partners, + 'country_id': (0, _("All Countries")), + 'active': bool(country is None), + }) - partner_ids = partner_obj.search(request.cr, SUPERUSER_ID, partner_domain, - offset=pager['offset'], limit=self._references_per_page, - order="grade_id DESC, partner_weight DESC", - context=request.context) + # current search + if grade: + base_partner_domain += [('grade_id', '=', grade.id)] + if country: + base_partner_domain += [('country_id', '=', country.id)] + + # format pager + if grade and not country: + url = '/partners/grade/' + slug(grade) + elif country and not grade: + url = '/partners/country/' + slug(country) + elif country and grade: + url = '/partners/grade/' + slug(grade) + '/country/' + slug(country) + else: + url = '/partners' + url_args = {} + if search: + url_args['search'] = search + partner_count = partner_obj.search_count( + request.cr, SUPERUSER_ID, base_partner_domain, + context=request.context) + pager = request.website.pager( + url=url, total=partner_count, page=page, step=self._references_per_page, scope=7, + url_args=url_args) + + # search partners matching current search parameters + partner_ids = partner_obj.search( + request.cr, SUPERUSER_ID, base_partner_domain, + offset=pager['offset'], limit=self._references_per_page, + order="grade_id DESC, partner_weight DESC", + context=request.context) google_map_partner_ids = ','.join(map(str, partner_ids)) partners = partner_obj.browse(request.cr, SUPERUSER_ID, partner_ids, request.context) - # group by grade - grades = partner_obj.read_group( - request.cr, SUPERUSER_ID, base_partner_domain, ["id", "grade_id"], - groupby="grade_id", orderby="grade_id DESC", context=request.context) - grades_partners = partner_obj.search( - request.cr, SUPERUSER_ID, base_partner_domain, - context=request.context, count=True) - grades.insert(0, { - 'grade_id_count': grades_partners, - 'grade_id': (0, _("All Categories")) - }) - values = { 'countries': countries, - 'current_country_id': country_id, 'current_country': country, 'grades': grades, - 'grade_id': grade_id, + 'current_grade': grade, 'partners': partners, 'google_map_partner_ids': google_map_partner_ids, 'pager': pager, diff --git a/addons/website_crm_partner_assign/views/website_crm_partner_assign.xml b/addons/website_crm_partner_assign/views/website_crm_partner_assign.xml index 3e96bc12443..b43f7c1538a 100644 --- a/addons/website_crm_partner_assign/views/website_crm_partner_assign.xml +++ b/addons/website_crm_partner_assign/views/website_crm_partner_assign.xml @@ -36,13 +36,13 @@ -
+
-
-
-