diff --git a/pom.xml b/pom.xml
index 2cdaeab..94e4f62 100644
--- a/pom.xml
+++ b/pom.xml
@@ -32,6 +32,7 @@
5.18.0
+
org.springframework.boot
spring-boot-starter-batch
diff --git a/src/frontend/assets/map.json b/src/frontend/assets/map.json
new file mode 100644
index 0000000..84dff7c
--- /dev/null
+++ b/src/frontend/assets/map.json
@@ -0,0 +1,165 @@
+{
+"version": 8,
+"name": "Custom Style",
+"sources": {
+"raster-tiles": {
+"type": "raster",
+"tiles": ["https://atlas.microsoft.com/map/tile?api-version=2.0&tilesetId=microsoft.base.road&zoom={z}&x={x}&y={y}"],
+"tileSize": 256,
+"attribution": "© Microsoft"
+}
+},
+"sprite": "https://atlas.microsoft.com/map/sprites/atlas?api-version=2.0",
+"glyphs": "https://atlas.microsoft.com/map/fonts/{fontstack}/{range}.pbf?api-version=2.0",
+"layers": [
+{
+"id": "background",
+"type": "background",
+"paint": {
+"background-color": "#f8fafc"
+}
+},
+{
+"id": "landcover",
+"type": "fill",
+"source": "vectorTiles",
+"source-layer": "Landcover",
+"paint": {
+"fill-color": "#ffffff",
+"fill-opacity": 0.8
+}
+},
+{
+"id": "water",
+"type": "fill",
+"source": "vectorTiles",
+"source-layer": "Water",
+"paint": {
+"fill-color": "#8DB3FE"
+}
+},
+{
+"id": "water-outline",
+"type": "line",
+"source": "vectorTiles",
+"source-layer": "Water",
+"paint": {
+"line-color": "#6B869C",
+"line-width": 1
+}
+},
+{
+"id": "park",
+"type": "fill",
+"source": "vectorTiles",
+"source-layer": "Landuse",
+"filter": ["==", ["get", "class"], "park"],
+"paint": {
+"fill-color": "#5AF0B4",
+"fill-opacity": 0.3
+}
+},
+{
+"id": "building",
+"type": "fill",
+"source": "vectorTiles",
+"source-layer": "Building",
+"paint": {
+"fill-color": "#6b7280",
+"fill-opacity": 0.6
+}
+},
+{
+"id": "building-outline",
+"type": "line",
+"source": "vectorTiles",
+"source-layer": "Building",
+"paint": {
+"line-color": "#002F54",
+"line-width": 0.5
+}
+},
+{
+"id": "road-minor",
+"type": "line",
+"source": "vectorTiles",
+"source-layer": "Road",
+"filter": ["in", ["get", "class"], ["literal", ["service", "track"]]],
+"paint": {
+"line-color": "#ffffff",
+"line-width": 2
+}
+},
+{
+"id": "road-major",
+"type": "line",
+"source": "vectorTiles",
+"source-layer": "Road",
+"filter": ["in", ["get", "class"], ["literal", ["primary", "secondary", "tertiary"]]],
+"paint": {
+"line-color": "#6B869C",
+"line-width": 3
+}
+},
+{
+"id": "road-highway",
+"type": "line",
+"source": "vectorTiles",
+"source-layer": "Road",
+"filter": ["in", ["get", "class"], ["literal", ["motorway", "trunk"]]],
+"paint": {
+"line-color": "#BC2B72",
+"line-width": 4
+}
+},
+{
+"id": "road-label",
+"type": "symbol",
+"source": "vectorTiles",
+"source-layer": "Road",
+"layout": {
+"text-field": ["get", "name"],
+"text-font": ["Poppins"],
+"text-size": 12,
+"symbol-placement": "line"
+},
+"paint": {
+"text-color": "#002F54",
+"text-halo-color": "#ffffff",
+"text-halo-width": 2
+}
+},
+{
+"id": "place-label",
+"type": "symbol",
+"source": "vectorTiles",
+"source-layer": "Place",
+"layout": {
+"text-field": ["get", "name"],
+"text-font": ["Poppins"],
+"text-size": 14
+},
+"paint": {
+"text-color": "#002F54",
+"text-halo-color": "#ffffff",
+"text-halo-width": 2
+}
+},
+{
+"id": "poi-label",
+"type": "symbol",
+"source": "vectorTiles",
+"source-layer": "POI",
+"layout": {
+"text-field": ["get", "name"],
+"text-font": ["Poppins"],
+"text-size": 11
+},
+"paint": {
+"text-color": "#5AF0B4",
+"text-halo-color": "#002F54",
+"text-halo-width": 1.5
+}
+}
+]
+}
\ No newline at end of file
diff --git a/src/frontend/index.html b/src/frontend/index.html
index 467a876..581899e 100644
--- a/src/frontend/index.html
+++ b/src/frontend/index.html
@@ -1,13 +1,13 @@
-
+
LCC
-
-
-
-
-
+
+
+
+
+
diff --git a/src/frontend/package-lock.json b/src/frontend/package-lock.json
index 687924b..e7552ea 100644
--- a/src/frontend/package-lock.json
+++ b/src/frontend/package-lock.json
@@ -10,7 +10,9 @@
"dependencies": {
"@phosphor-icons/vue": "^2.2.1",
"@vueuse/core": "^13.6.0",
+ "azure-maps-control": "^3.6.1",
"chart.js": "^4.5.0",
+ "leaflet": "^1.9.4",
"loglevel": "^1.9.2",
"pinia": "^3.0.3",
"vite-plugin-static-copy": "^3.1.3",
@@ -41,6 +43,27 @@
"node": ">=6.0.0"
}
},
+ "node_modules/@azure/msal-browser": {
+ "version": "2.39.0",
+ "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-2.39.0.tgz",
+ "integrity": "sha512-kks/n2AJzKUk+DBqZhiD+7zeQGBl+WpSOQYzWy6hff3bU0ZrYFqr4keFLlzB5VKuKZog0X59/FGHb1RPBDZLVg==",
+ "license": "MIT",
+ "dependencies": {
+ "@azure/msal-common": "13.3.3"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/@azure/msal-common": {
+ "version": "13.3.3",
+ "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-13.3.3.tgz",
+ "integrity": "sha512-n278DdCXKeiWhLwhEL7/u9HRMyzhUXLefeajiknf6AmEedoiOiv2r5aRJ7LXdT3NGPyubkdIbthaJlVtmuEqvA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
"node_modules/@babel/code-frame": {
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
@@ -957,6 +980,46 @@
"integrity": "sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==",
"license": "MIT"
},
+ "node_modules/@mapbox/jsonlint-lines-primitives": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz",
+ "integrity": "sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/@mapbox/mapbox-gl-supported": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-2.0.1.tgz",
+ "integrity": "sha512-HP6XvfNIzfoMVfyGjBckjiAOQK9WfX0ywdLubuPMPv+Vqf5fj0uCbgBQYpiqcWZT6cbyyRnTSXDheT1ugvF6UQ==",
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/@mapbox/unitbezier": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz",
+ "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==",
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/@maplibre/maplibre-gl-style-spec": {
+ "version": "20.4.0",
+ "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-20.4.0.tgz",
+ "integrity": "sha512-AzBy3095fTFPjDjmWpR2w6HVRAZJ6hQZUCwk5Plz6EyfnfuQW1odeW5i2Ai47Y6TBA2hQnC+azscjBSALpaWgw==",
+ "license": "ISC",
+ "dependencies": {
+ "@mapbox/jsonlint-lines-primitives": "~2.0.2",
+ "@mapbox/unitbezier": "^0.0.1",
+ "json-stringify-pretty-compact": "^4.0.0",
+ "minimist": "^1.2.8",
+ "quickselect": "^2.0.0",
+ "rw": "^1.3.3",
+ "tinyqueue": "^3.0.0"
+ },
+ "bin": {
+ "gl-style-format": "dist/gl-style-format.mjs",
+ "gl-style-migrate": "dist/gl-style-migrate.mjs",
+ "gl-style-validate": "dist/gl-style-validate.mjs"
+ }
+ },
"node_modules/@phosphor-icons/vue": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/@phosphor-icons/vue/-/vue-2.2.1.tgz",
@@ -1282,6 +1345,12 @@
"integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
"license": "MIT"
},
+ "node_modules/@types/geojson": {
+ "version": "7946.0.16",
+ "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz",
+ "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==",
+ "license": "MIT"
+ },
"node_modules/@types/web-bluetooth": {
"version": "0.0.21",
"resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz",
@@ -1627,6 +1696,18 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
+ "node_modules/azure-maps-control": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/azure-maps-control/-/azure-maps-control-3.6.1.tgz",
+ "integrity": "sha512-EqJ96GOjUcCG9XizUbyqDu92x3KKT9C9AwRL3hmPicQjn00ql7em6RbBqJYO4nvIoH53DG6MOITj9t/zv1mQYg==",
+ "license": "SEE LICENSE.TXT",
+ "dependencies": {
+ "@azure/msal-browser": "^2.32.1",
+ "@mapbox/mapbox-gl-supported": "^2.0.1",
+ "@maplibre/maplibre-gl-style-spec": "^20.0.0",
+ "@types/geojson": "^7946.0.14"
+ }
+ },
"node_modules/binary-extensions": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
@@ -2290,6 +2371,12 @@
"node": ">=6"
}
},
+ "node_modules/json-stringify-pretty-compact": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-4.0.0.tgz",
+ "integrity": "sha512-3CNZ2DnrpByG9Nqj6Xo8vqbjT4F6N+tb4Gb28ESAZjYZ5yqvmc56J+/kuIwkaAMOyblTQhUW7PxMkUb8Q36N3Q==",
+ "license": "MIT"
+ },
"node_modules/json5": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
@@ -2322,6 +2409,12 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/leaflet": {
+ "version": "1.9.4",
+ "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz",
+ "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==",
+ "license": "BSD-2-Clause"
+ },
"node_modules/loglevel": {
"version": "1.9.2",
"resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.2.tgz",
@@ -2354,6 +2447,15 @@
"@jridgewell/sourcemap-codec": "^1.5.5"
}
},
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/mitt": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz",
@@ -2598,6 +2700,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/quickselect": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz",
+ "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==",
+ "license": "ISC"
+ },
"node_modules/readdirp": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
@@ -2681,6 +2789,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/rw": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz",
+ "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==",
+ "license": "BSD-3-Clause"
+ },
"node_modules/semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
@@ -2801,6 +2915,12 @@
"url": "https://github.com/sponsors/SuperchupuDev"
}
},
+ "node_modules/tinyqueue": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-3.0.0.tgz",
+ "integrity": "sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==",
+ "license": "ISC"
+ },
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
diff --git a/src/frontend/package.json b/src/frontend/package.json
index f6d0659..07c28f8 100644
--- a/src/frontend/package.json
+++ b/src/frontend/package.json
@@ -14,7 +14,9 @@
"dependencies": {
"@phosphor-icons/vue": "^2.2.1",
"@vueuse/core": "^13.6.0",
+ "azure-maps-control": "^3.6.1",
"chart.js": "^4.5.0",
+ "leaflet": "^1.9.4",
"loglevel": "^1.9.2",
"pinia": "^3.0.3",
"vite-plugin-static-copy": "^3.1.3",
diff --git a/src/frontend/src/App.vue b/src/frontend/src/App.vue
index 38cc276..122f690 100644
--- a/src/frontend/src/App.vue
+++ b/src/frontend/src/App.vue
@@ -16,6 +16,7 @@ import ErrorNotification from "@/components/UI/ErrorNotifcation.vue";
export default {
components: {ErrorNotification, TheHeader},
+
}
diff --git a/src/frontend/src/backend.js b/src/frontend/src/backend.js
index 6a6b33c..7a2d69e 100644
--- a/src/frontend/src/backend.js
+++ b/src/frontend/src/backend.js
@@ -123,7 +123,6 @@ const executeRequest = async (requestingStore, request) => {
throw e;
});
-
let data = null;
if (request.expectResponse) {
try {
diff --git a/src/frontend/src/components/UI/AzureMapsComponent.vue b/src/frontend/src/components/UI/AzureMapsComponent.vue
deleted file mode 100644
index 1adcec3..0000000
--- a/src/frontend/src/components/UI/AzureMapsComponent.vue
+++ /dev/null
@@ -1,346 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/frontend/src/components/UI/OpenStreetMapEmbed.vue b/src/frontend/src/components/UI/OpenStreetMapEmbed.vue
new file mode 100644
index 0000000..1f8d5d7
--- /dev/null
+++ b/src/frontend/src/components/UI/OpenStreetMapEmbed.vue
@@ -0,0 +1,191 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/frontend/src/components/layout/edit/SupplierView.vue b/src/frontend/src/components/layout/edit/SupplierView.vue
index 406f39d..0fe608d 100644
--- a/src/frontend/src/components/layout/edit/SupplierView.vue
+++ b/src/frontend/src/components/layout/edit/SupplierView.vue
@@ -16,7 +16,7 @@
{{ coordinatesDMS }}