From 96128a678e9501209fafde56968e5b6b997e69ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 20 May 2014 13:24:18 +0200 Subject: [PATCH] [IMP] website_crm_partner_assign: use geoip to display partners in the visitor's country. Also added a breadcrumb in partners navigation; when going on the partner view a link to come back to the list view has been added and takes into account selected grade and country. --- .../controllers/main.py | 44 +++++++++++++++++-- .../views/website_crm_partner_assign.xml | 16 ++++--- 2 files changed, 51 insertions(+), 9 deletions(-) diff --git a/addons/website_crm_partner_assign/controllers/main.py b/addons/website_crm_partner_assign/controllers/main.py index 3c9efb00b7a..faae5593a9b 100644 --- a/addons/website_crm_partner_assign/controllers/main.py +++ b/addons/website_crm_partner_assign/controllers/main.py @@ -1,8 +1,15 @@ # -*- coding: utf-8 -*- +import logging import re - import werkzeug +_logger = logging.getLogger(__name__) +try: + import GeoIP +except ImportError: + GeoIP = None + _logger.warn("Please install GeoIP python module to use events localisation.") + from openerp import SUPERUSER_ID from openerp.addons.web import http from openerp.addons.web.http import request @@ -13,6 +20,12 @@ from openerp.tools.translate import _ class WebsiteCrmPartnerAssign(http.Controller): _references_per_page = 40 + def _get_current_country_code(self): + if not GeoIP: + return False + GI = GeoIP.open('/usr/share/GeoIP/GeoIP.dat', 0) + return GI.country_code_by_addr(request.httprequest.remote_addr) + @http.route([ '/partners', '/partners/page/', @@ -27,7 +40,9 @@ class WebsiteCrmPartnerAssign(http.Controller): '/partners/grade//country//page/', ], type='http', auth="public", website=True, multilang=True) def partners(self, country=None, grade=None, page=0, **post): + country_all = post.pop('country_all', False) partner_obj = request.registry['res.partner'] + country_obj = request.registry['res.country'] search = post.get('search', '') base_partner_domain = [('is_company', '=', True), ('grade_id.website_published', '=', True), ('website_published', '=', True)] @@ -36,6 +51,12 @@ class WebsiteCrmPartnerAssign(http.Controller): # group by grade grade_domain = list(base_partner_domain) + if not country and not country_all: + country_code = self._get_current_country_code() + if country_code: + country_ids = country_obj.search(request.cr, request.uid, [('code', '=', country_code)], context=request.context) + if country_ids: + country = country_obj.browse(request.cr, request.uid, country_ids[0], context=request.context) if country: grade_domain += [('country_id', '=', country.id)] grades = partner_obj.read_group( @@ -118,7 +139,7 @@ class WebsiteCrmPartnerAssign(http.Controller): 'google_map_partner_ids': google_map_partner_ids, 'pager': pager, 'searches': post, - 'search_path': "?%s" % werkzeug.url_encode(post), + 'search_path': "%s" % werkzeug.url_encode(post), } return request.website.render("website_crm_partner_assign.index", values) @@ -126,11 +147,26 @@ class WebsiteCrmPartnerAssign(http.Controller): @http.route(['/partners/'], type='http', auth="public", website=True, multilang=True) def partners_detail(self, partner_id, partner_name='', **post): mo = re.search('-([-0-9]+)$', str(partner_id)) + current_grade, current_country = None, None + grade_id = post.get('grade_id') + country_id = post.get('country_id') + if grade_id: + grade_ids = request.registry['res.partner.grade'].exists(request.cr, request.uid, int(grade_id), context=request.context) + if grade_ids: + current_grade = request.registry['res.partner.grade'].browse(request.cr, request.uid, grade_ids[0], context=request.context) + if country_id: + country_ids = request.registry['res.country'].exists(request.cr, request.uid, int(country_id), context=request.context) + if country_ids: + current_country = request.registry['res.country'].browse(request.cr, request.uid, country_ids[0], context=request.context) if mo: partner_id = int(mo.group(1)) partner = request.registry['res.partner'].browse(request.cr, SUPERUSER_ID, partner_id, context=request.context) if partner.exists() and partner.website_published: - values = {} - values['main_object'] = values['partner'] = partner + values = { + 'main_object': partner, + 'partner': partner, + 'current_grade': current_grade, + 'current_country': current_country + } return request.website.render("website_crm_partner_assign.partner", values) return self.partners(**post) 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 b7a87b48f59..6d5b93793ad 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 @@ -15,7 +15,7 @@ Resellers
-
+
@@ -42,7 +42,7 @@
  • - + @@ -54,7 +54,7 @@
  • - + @@ -85,12 +85,12 @@
    -
    - +
    @@ -126,6 +126,12 @@