summaryrefslogtreecommitdiff
path: root/addons/website_google_map/controllers
diff options
context:
space:
mode:
Diffstat (limited to 'addons/website_google_map/controllers')
-rw-r--r--addons/website_google_map/controllers/__init__.py1
-rw-r--r--addons/website_google_map/controllers/main.py80
2 files changed, 48 insertions, 33 deletions
diff --git a/addons/website_google_map/controllers/__init__.py b/addons/website_google_map/controllers/__init__.py
index e11f9ba81bb..cbcfe6fc8a0 100644
--- a/addons/website_google_map/controllers/__init__.py
+++ b/addons/website_google_map/controllers/__init__.py
@@ -1,3 +1,2 @@
import main
-# vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/website_google_map/controllers/main.py b/addons/website_google_map/controllers/main.py
index 9de241a00fd..efddba1b10f 100644
--- a/addons/website_google_map/controllers/main.py
+++ b/addons/website_google_map/controllers/main.py
@@ -1,48 +1,64 @@
# -*- coding: utf-8 -*-
-import openerp
+import json
+from openerp import SUPERUSER_ID
from openerp.addons.web import http
from openerp.addons.web.http import request
-from datetime import datetime
+
class google_map(http.Controller):
+ '''
+ This class generates on-the-fly partner maps that can be reused in every
+ website page. To do so, just use an ``<iframe ...>`` whose ``src``
+ attribute points to ``/google_map`` (this controller generates a complete
+ HTML5 page).
+
+ URL query parameters:
+ - ``partner_ids``: a comma-separated list of ids (partners to be shown)
+ - ``partner_url``: the base-url to display the partner
+ (eg: if ``partner_url`` is ``/partners/``, when the user will click on
+ a partner on the map, it will be redirected to <myodoo>.com/partners/<id>)
+
+ In order to resize the map, simply resize the ``iframe`` with CSS
+ directives ``width`` and ``height``.
+ '''
@http.route(['/google_map'], type='http', auth="public", website=True)
def google_map(self, *arg, **post):
- values = {
- 'partner_ids': post.get('partner_ids', ""),
- 'width': post.get('width', 900),
- 'height': post.get('height', 460),
- 'partner_url': post.get('partner_url'),
- }
- return request.website.render("website_google_map.google_map", values)
-
- @http.route(['/google_map/partners.json'], type='http', auth="public", website=True)
- def google_map_data(self, *arg, **post):
+ cr, uid, context = request.cr, request.uid, request.context
partner_obj = request.registry['res.partner']
- domain = [("id", "in", [int(p) for p in post.get('partner_ids', "").split(",") if p])]
- domain_public = domain + [('website_published', '=', True)]
- partner_ids = partner_obj.search(request.cr, openerp.SUPERUSER_ID,
- domain_public, context=request.context)
- return partner_obj.google_map_json(request.cr, openerp.SUPERUSER_ID,
- partner_ids, request.context)
+ # filter real ints from query parameters and build a domain
+ clean_ids = []
+ for s in post.get('partner_ids', "").split(","):
+ try:
+ i = int(s)
+ clean_ids.append(i)
+ except ValueError:
+ pass
- @http.route(['/google_map/set_partner_position'], type='http', methods=['POST'], auth="public", website=True)
- def google_map_set_partner_position(self, *arg, **post):
- partner_obj = request.registry['res.partner']
+ # search for partners that can be displayed on a map
+ domain = [("id", "in", clean_ids), ('website_published', '=', True), ('is_company', '=', True)]
+ partners_ids = partner_obj.search(cr, SUPERUSER_ID, domain, context=context)
- partner_id = post.get('partner_id') and int(post['partner_id'])
- latitude = post.get('latitude') and float(post['latitude'])
- longitude = post.get('longitude') and float(post['longitude'])
+ # browse and format data
+ partner_data = {
+ "counter": len(partners_ids),
+ "partners": []
+ }
+ request.context.update({'show_address': True})
+ for partner in partner_obj.browse(cr, SUPERUSER_ID, partners_ids, context=context):
+ partner_data["partners"].append({
+ 'id': partner.id,
+ 'name': partner.name,
+ 'address': '\n'.join(partner.name_get()[0][1].split('\n')[1:]),
+ 'latitude': partner.partner_latitude,
+ 'longitude': partner.partner_longitude,
+ })
+ # generate the map
values = {
- 'partner_latitude': latitude,
- 'partner_longitude': longitude,
- 'date_localization': datetime.now().strftime('%Y-%m-%d'),
+ 'partner_url': post.get('partner_url'),
+ 'partner_data': json.dumps(partner_data)
}
- partner_obj.write(request.cr, openerp.SUPERUSER_ID, [partner_id], values,
- request.context)
-
-
-# vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4:
+ return request.website.render("website_google_map.google_map", values)