From df0467f8e493840f3013bc58ca26fc6d98793c95 Mon Sep 17 00:00:00 2001 From: "Indoteknik ." Date: Tue, 10 Jun 2025 15:47:32 +0700 Subject: (andri) add openstreetmaps pada contact --- ab_openstreetmap/__init__.py | 0 ab_openstreetmap/__manifest__.py | 17 +++++ .../static/src/js/openstreetmap_widget.js | 86 ++++++++++++++++++++++ .../static/src/xml/openstreetmap_template.xml | 8 ++ ab_openstreetmap/views/templates.xml | 13 ++++ 5 files changed, 124 insertions(+) create mode 100644 ab_openstreetmap/__init__.py create mode 100644 ab_openstreetmap/__manifest__.py create mode 100644 ab_openstreetmap/static/src/js/openstreetmap_widget.js create mode 100644 ab_openstreetmap/static/src/xml/openstreetmap_template.xml create mode 100644 ab_openstreetmap/views/templates.xml (limited to 'ab_openstreetmap') diff --git a/ab_openstreetmap/__init__.py b/ab_openstreetmap/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/ab_openstreetmap/__manifest__.py b/ab_openstreetmap/__manifest__.py new file mode 100644 index 00000000..745e57ab --- /dev/null +++ b/ab_openstreetmap/__manifest__.py @@ -0,0 +1,17 @@ +{ + 'name': "Openstreetmap Widget", + 'summary': """ + Openstreetmap Widget + """, + 'description': """ + Show Openstreetmap in Form View + Required for works add a lat long field to the model + """, + 'author': "PT. ISMATA NUSANTARA ABADI", + 'website': "http://www.ismata.co.id", + 'category': 'Uncategorized', + 'version': '0.1', + 'depends': ['base'], + "qweb": ['static/src/xml/openstreetmap_template.xml'], + 'data': ['views/templates.xml'], +} diff --git a/ab_openstreetmap/static/src/js/openstreetmap_widget.js b/ab_openstreetmap/static/src/js/openstreetmap_widget.js new file mode 100644 index 00000000..42760d2d --- /dev/null +++ b/ab_openstreetmap/static/src/js/openstreetmap_widget.js @@ -0,0 +1,86 @@ +odoo.define("ab_openstreetmap.openstreetmap_widget", function (require) { + "use strict"; + var fieldRegistry = require("web.field_registry"); + var abstractField = require("web.AbstractField"); + + var openstreetmap = abstractField.extend({ + template: "openstreetmap_template", + start: function () { + var self = this; + this._super(); + self._initMap(); + }, + _initMap: function () { + var self = this + $(document).ready(function () { + setTimeout(() => { + var lat = self.recordData.lat; + var lng = self.recordData.lng; + + if (!lat && !lng) { + lat = -6.2349; + lng = 106.9896; + } + + var mymap = L.map('mapid').setView([lat, lng], 13); + L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", { + attribution: + '© OpenStreetMap contributors', + }).addTo(mymap); + + var edit = self.mode == "edit" ? true : false; + var marker = L.marker([lat, lng], { draggable: edit }).addTo(mymap); + + marker.on("dragend", function (e) { + var latlng = e.target._latlng; + self.trigger_up("field_changed", { + dataPointID: self.dataPointID, + changes: { + lat: latlng.lat, + lng: latlng.lng, + }, + viewType: self.viewType, + }); + }); + + if (edit) { + var geocode = L.Control.geocoder({ + defaultMarkGeocode: false, + }).addTo(mymap); + + geocode.on("markgeocode", function (e) { + var lat = e.geocode.center.lat; + var lng = e.geocode.center.lng; + + mymap.flyTo([lat, lng]); + marker.setLatLng(new L.LatLng(lat, lng)); + self.trigger_up("field_changed", { + dataPointID: self.dataPointID, + changes: { + lat: lat, + lng: lng, + }, + viewType: self.viewType, + }); + }); + } + + var interval = setInterval(() => { + if (mymap && mymap._size.x > 0){ + clearInterval(interval); + } else if (!document.getElementById("mapid")) { + clearInterval(interval); + } + window.dispatchEvent(new Event("resize")); + }, 500); + }, 100); + + }); + }, + isSet: function () { + return true; + }, + }); + + fieldRegistry.add("openstreetmap", openstreetmap); +}); diff --git a/ab_openstreetmap/static/src/xml/openstreetmap_template.xml b/ab_openstreetmap/static/src/xml/openstreetmap_template.xml new file mode 100644 index 00000000..82672748 --- /dev/null +++ b/ab_openstreetmap/static/src/xml/openstreetmap_template.xml @@ -0,0 +1,8 @@ + + + +
+
+
+ + \ No newline at end of file diff --git a/ab_openstreetmap/views/templates.xml b/ab_openstreetmap/views/templates.xml new file mode 100644 index 00000000..ed82ae84 --- /dev/null +++ b/ab_openstreetmap/views/templates.xml @@ -0,0 +1,13 @@ + + +