diff options
Diffstat (limited to 'addons/website_google_map/controllers')
| -rw-r--r-- | addons/website_google_map/controllers/__init__.py | 1 | ||||
| -rw-r--r-- | addons/website_google_map/controllers/main.py | 80 |
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) |
