From b38fb0403551209388fe6149b5a3c490796841c5 Mon Sep 17 00:00:00 2001 From: Lene Wasskog <lene.wasskog@nibio.no> Date: Mon, 19 May 2025 15:13:09 +0200 Subject: [PATCH] feat: Include only personal pois in timeseries form --- .../ObservationTimeSeriesController.java | 3 +- .../vips/logic/i18n/vipslogictexts.properties | 1 + .../logic/i18n/vipslogictexts_nb.properties | 2 +- .../templates/observationTimeSeriesForm.ftl | 38 +++++++++++-------- 4 files changed, 25 insertions(+), 19 deletions(-) diff --git a/src/main/java/no/nibio/vips/logic/controller/servlet/ObservationTimeSeriesController.java b/src/main/java/no/nibio/vips/logic/controller/servlet/ObservationTimeSeriesController.java index ab6031ca..0b0338fa 100644 --- a/src/main/java/no/nibio/vips/logic/controller/servlet/ObservationTimeSeriesController.java +++ b/src/main/java/no/nibio/vips/logic/controller/servlet/ObservationTimeSeriesController.java @@ -225,8 +225,7 @@ public class ObservationTimeSeriesController extends HttpServlet { request.setAttribute("mapLayers", userBean.getMapLayerJSONForUser(user)); request.setAttribute("defaultMapCenter", user.getOrganizationId().getDefaultMapCenter()); request.setAttribute("defaultMapZoom", user.getOrganizationId().getDefaultMapZoom()); - request.setAttribute("locationPointOfInterests", - pointOfInterestBean.getRelevantPointOfInterestsForUser(user)); + request.setAttribute("locationPointOfInterests", pointOfInterestBean.getPoisForUser(user)); request.setAttribute("locationVisibilityFormValue", getLocationVisibilityFormValue(observationTimeSeries)); List<PolygonService> polygonServices = diff --git a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts.properties b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts.properties index dbc1492b..c2b5274f 100755 --- a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts.properties +++ b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts.properties @@ -1103,4 +1103,5 @@ observationTimeSeriesStored = Observation time series was stored noTimeSeries = No observation time series noObservations = No observations noForecasts = No forecasts +timeSeriesNoAvailablePoi=You must create a location before you can register a new time series diff --git a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_nb.properties b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_nb.properties index 0196c0ac..3488de80 100755 --- a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_nb.properties +++ b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_nb.properties @@ -1102,4 +1102,4 @@ observationTimeSeriesStored = Tidsserie lagret noTimeSeries = Ingen tidsserier noObservations = Ingen observasjoner noForecasts = Ingen varsler - +timeSeriesNoAvailablePoi=Du m� opprette et nytt sted f�r du kan registrere tidsserie diff --git a/src/main/webapp/templates/observationTimeSeriesForm.ftl b/src/main/webapp/templates/observationTimeSeriesForm.ftl index e7fb78bd..3877d87e 100644 --- a/src/main/webapp/templates/observationTimeSeriesForm.ftl +++ b/src/main/webapp/templates/observationTimeSeriesForm.ftl @@ -62,28 +62,32 @@ } fetchPOIs(function (allPois) { - buildPOIList(poiListElement, allPois, poiTypes, selectedPointOfInterestId); + buildPOIList(poiListElement, allPois, poiTypes, selectedPointOfInterestId, ${user.userId}); showCorrectMap(); }); } - function buildPOIList(poiListElement, allPois, poiTypes, selectedPointOfInterestId) { + function buildPOIList(poiListElement, allPois, poiTypes, selectedPointOfInterestId, userId) { poiListElement.options.length = 1; + const userPois = allPois.filter(poi => String(poi.userId) === String(userId)); + if(userPois.length === 0) { + document.getElementById("noAvailablePoi").style.display = "block"; + } else { + document.getElementById("noAvailablePoi").style.display = "none"; + } for (const [typeId, typeName] of Object.entries(poiTypes)) { - let poiTypeOption = new Option("-- " + typeName + " --", "-1"); + const poisOfType = userPois.filter(poi => String(poi.pointOfInterestTypeId) === String(typeId)); + if (poisOfType.length === 0) continue; + const poiTypeOption = new Option("-- " + typeName + " --", ""); poiTypeOption.disabled = true; poiListElement.options[poiListElement.options.length] = poiTypeOption; - for (let i = 0; i < allPois.length; i++) { - const poi = allPois[i]; - - if (poi.pointOfInterestTypeId == typeId) { - const poiOption = new Option(poi.name, poi.pointOfInterestId); - if (poi.pointOfInterestId === selectedPointOfInterestId) { - poiOption.selected = true; - } - poiListElement.options[poiListElement.options.length] = poiOption; + for (const poi of poisOfType) { + const poiOption = new Option(poi.name, poi.pointOfInterestId); + if (poi.pointOfInterestId === selectedPointOfInterestId) { + poiOption.selected = true; } + poiListElement.options[poiListElement.options.length] = poiOption; } } } @@ -315,6 +319,7 @@ <div id="errorMsgEl" class="alert alert-danger" <#if !formValidation?has_content> style="display:none;"</#if>> <#if formValidation?has_content>${formValidation.validationMessages?replace("\n", "<br>")}</#if> </div> + <div id="noAvailablePoi" class="alert alert-danger" style="display: none">Du må opprette et nytt sted før du kan registrere tidsserie</div> <#if messageKey?has_content> <div class="alert alert-success">${i18nBundle(messageKey)}</div> </#if> @@ -430,10 +435,11 @@ </select> </div> <div class="form-group"> - <label for="locationPointOfInterestId">${i18nBundle.location} <button - role="button" type="button" - onclick="addNewLocationPopup();">${i18nBundle.addNew}</button> - </label> + <label for="locationPointOfInterestId">${i18nBundle.location}</label> + <button + role="button" type="button" + onclick="addNewLocationPopup();">${i18nBundle.addNew}</button> + <select class="form-control" name="locationPointOfInterestId" id="locationPointOfInterestId" onchange="showCorrectMap();"> <option value="" disabled selected>${i18nBundle.pleaseSelect} ${i18nBundle.location?lower_case}</option> </select> -- GitLab