summaryrefslogtreecommitdiff
path: root/addons/website_google_map/controllers/main.py
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/website_google_map/controllers/main.py
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/website_google_map/controllers/main.py')
-rw-r--r--addons/website_google_map/controllers/main.py61
1 files changed, 61 insertions, 0 deletions
diff --git a/addons/website_google_map/controllers/main.py b/addons/website_google_map/controllers/main.py
new file mode 100644
index 00000000..b4ad02a5
--- /dev/null
+++ b/addons/website_google_map/controllers/main.py
@@ -0,0 +1,61 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+import json
+
+from odoo import http
+from odoo.http import request
+from odoo.tools import html_escape as escape
+
+
+class GoogleMap(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, sitemap=False)
+ def google_map(self, *arg, **post):
+ clean_ids = []
+ for partner_id in post.get('partner_ids', "").split(","):
+ try:
+ clean_ids.append(int(partner_id))
+ except ValueError:
+ pass
+ partners = request.env['res.partner'].sudo().search([("id", "in", clean_ids),
+ ('website_published', '=', True), ('is_company', '=', True)])
+ partner_data = {
+ "counter": len(partners),
+ "partners": []
+ }
+ for partner in partners.with_context(show_address=True):
+ # TODO in master, do not use `escape` but `t-esc` in the qweb template.
+ partner_data["partners"].append({
+ 'id': partner.id,
+ 'name': escape(partner.name),
+ 'address': escape('\n'.join(partner.name_get()[0][1].split('\n')[1:])),
+ 'latitude': escape(str(partner.partner_latitude)),
+ 'longitude': escape(str(partner.partner_longitude)),
+ })
+ if 'customers' in post.get('partner_url', ''):
+ partner_url = '/customers/'
+ else:
+ partner_url = '/partners/'
+
+ google_maps_api_key = request.website.google_maps_api_key
+ values = {
+ 'partner_url': partner_url,
+ 'partner_data': json.dumps(partner_data),
+ 'google_maps_api_key': google_maps_api_key,
+ }
+ return request.render("website_google_map.google_map", values)