Skip to content
Snippets Groups Projects
Commit bace2acb authored by Lene Wasskog's avatar Lene Wasskog
Browse files

feat: Fix validation of location fields, add map button

parent 327dba1d
No related branches found
No related tags found
No related merge requests found
...@@ -16,13 +16,23 @@ ...@@ -16,13 +16,23 @@
"You should have received a copy of the NIBIO Open Source License ", "You should have received a copy of the NIBIO Open Source License ",
"along with VIPSWeb. If not, see <http://www.nibio.no/licenses/>. " "along with VIPSWeb. If not, see <http://www.nibio.no/licenses/>. "
], ],
"_comment" : "Structure of the observationForm and how to validate it", "_comment" : "Structure of the barleyNetBlotchForm and how to validate it",
"fields": [ "fields": [
{
"name" : "latitude",
"dataType" : "DOUBLE",
"required" : false
},
{
"name" : "longitude",
"dataType" : "DOUBLE",
"required" : false
},
{ {
"name" : "weatherStationId", "name" : "weatherStationId",
"dataType" : "INTEGER", "dataType" : "INTEGER",
"fieldType" : "SELECT_SINGLE", "fieldType" : "SELECT_SINGLE",
"required" : true, "required" : false,
"nullValue" : "-1" "nullValue" : "-1"
}, },
{ {
......
...@@ -32,12 +32,12 @@ ...@@ -32,12 +32,12 @@
<style type="text/css"> <style type="text/css">
input#latitude, input#longitude { input#latitude, input#longitude {
width: 40%; width: 30%;
display: inline-block; display: inline-block;
margin: 10px 10px 10px 0px; margin: 10px 10px 10px 0px;
} }
select#weatherStationId { select#weatherStationId {
width: 80%; width: 60%;
display: inline-block; display: inline-block;
margin: 10px 10px 10px 0px; margin: 10px 10px 10px 0px;
} }
...@@ -48,12 +48,13 @@ ...@@ -48,12 +48,13 @@
.space { .space {
margin-top: 40px; margin-top: 40px;
} }
</style> </style>
{% endblock %} {% endblock %}
{% block content %} {% block content %}
<div class="singleBlockContainer"> <div class="singleBlockContainer">
<h1>{% trans "Barley net blotch" %}</h1> <h1>Elens modell</h1>
<div class="alert alert-danger" role="alert" id="oldIEWarning" style="display:none;"> <div class="alert alert-danger" role="alert" id="oldIEWarning" style="display:none;">
Du bruker en gammel versjon av Internet Explorer. Den nye byggbrunflekkmodellen fungerer med Du bruker en gammel versjon av Internet Explorer. Den nye byggbrunflekkmodellen fungerer med
de fleste moderne nettlesere, som Chrome, Firefox og Internet Explorer versjon 10 og nyere. de fleste moderne nettlesere, som Chrome, Firefox og Internet Explorer versjon 10 og nyere.
...@@ -64,7 +65,7 @@ ...@@ -64,7 +65,7 @@
<p class="lead"> <p class="lead">
<a href="https://www.vips-landbruk.no/forecasts/models/BARLEYNETB/">Elens modell for byggbrunflekk</a> lager en tilvekstkurve for byggbrunflekk med værdata som grunnlag. <a href="https://www.vips-landbruk.no/forecasts/models/BARLEYNETB/">Elens modell for byggbrunflekk</a> lager en tilvekstkurve for byggbrunflekk med værdata som grunnlag.
Du kan velge å kjøre modellen med værdata for et vilkårlig punkt i kartet, eller fra en værstasjon. Det er i tillegg nødvendig å legge inn informasjon om angrep av sjukdommen, samt Du kan velge å kjøre modellen med værdata for et vilkårlig punkt i kartet, eller fra en værstasjon. Det er i tillegg nødvendig å legge inn informasjon om angrep av sjukdommen, samt
sådato, sort, vekstskifte og jordarbeiding. Dersom du har en privat værstasjon som er registrert i Vips, vil denne være tilgjengelig i skjemaet under etter <a href="https://logic.vips.nibio.no/login">innlogging</a>. sådato, sort, vekstskifte og jordarbeiding. Dersom du har en privat værstasjon som er registrert i Vips, vil denne være tilgjengelig i skjemaet etter <a href="https://logic.vips.nibio.no/login">innlogging</a>.
</p> </p>
</div> </div>
</div> </div>
...@@ -75,28 +76,30 @@ ...@@ -75,28 +76,30 @@
<label class="main-label" for="weatherdataType">Jeg vil bruke værdata</label> <label class="main-label" for="weatherdataType">Jeg vil bruke værdata</label>
<div class="radio"> <div class="radio">
<label> <label>
<input type="radio" name="weatherdataType" id="weatherstation" value="weatherstation" checked onchange="displayCoordinatesInput()"> <input type="radio" name="weatherdataType" id="coordinates" value="coordinates" checked onchange="displayCoordinatesInput()">
for et spesifikt punkt (koordinater) for et spesifikt punkt (koordinater)
</label> </label>
<div id="input-coordinates"> <div id="input-coordinates">
<input type="text" class="form-control" id="latitude" placeholder="Breddegrad" aria-label="Breddegrad"> <input type="text" class="form-control" name="latitude" id="latitude" placeholder="Breddegrad" aria-label="Breddegrad">
<input type="text" class="form-control" id="longitude" placeholder="Lengdegrad" aria-label="Lengdegrad"> <input type="text" class="form-control" name="longitude" id="longitude" placeholder="Lengdegrad" aria-label="Lengdegrad">
<i id="open-map-modal-icon" class="fa fa-map-marker" onclick="openCoordinatesMap()"></i> <button type="button" class="btn btn-primary" onclick="openCoordinatesMap()"><i class="fa fa-map-marker fa-lg"></i> Velg i kart</button>
</div> </div>
<div id="coordinates-map" class="map-modal"></div> <div id="coordinates-map" class="map-modal"></div>
</div> </div>
<div class="radio"> <div class="radio">
<label> <label>
<input type="radio" name="weatherdataType" id="coordinates" value="coordinates" onchange="displayWeatherstationInput()"> <input type="radio" name="weatherdataType" id="weatherstation" value="weatherstation" onchange="displayWeatherstationInput()">
fra en værstasjon fra en værstasjon
</label> </label>
<div id="input-weatherstation" style="display: none;"> <div id="input-weatherstation" style="display: none;">
<select name="weatherStationId" id="weatherStationId" class="form-control" onblur="validateField(this);"></select> <select name="weatherStationId" id="weatherStationId" class="form-control" onblur="validateField(this);"></select>
<i id="open-map-modal-icon" class="fa fa-map-marker" onclick="openPoiMap()"></i> <button type="button" class="btn btn-primary" onclick.prevent="openPoiMap()"><i class="fa fa-map-marker fa-lg"></i> Velg i kart</button>
</div> </div>
<div id="poi-map" class="map-modal"></div> <div id="poi-map" class="map-modal"></div>
</div> </div>
<span class="help-block" id="{{ form_id }}_latitude_validation"></span>
<span class="help-block" id="{{ form_id }}_weatherStationId_validation"></span> <span class="help-block" id="{{ form_id }}_weatherStationId_validation"></span>
<span class="help-block" id="{{ form_id }}_longitude_validation"></span>
</div> </div>
<div class="form-group space"> <div class="form-group space">
<label class="main-label" for="cropOrganismId">Jeg har dyrket</label> <label class="main-label" for="cropOrganismId">Jeg har dyrket</label>
...@@ -110,17 +113,19 @@ ...@@ -110,17 +113,19 @@
<span class="help-block" id="{{ form_id }}_sowingDate_validation"></span> <span class="help-block" id="{{ form_id }}_sowingDate_validation"></span>
</div> </div>
<div class="form-group"> <div class="form-group">
<input type="checkbox" name="sameCropAsLastSeason"/> Jeg dyrket samme sort på samme skifte i fjor<br/> <label>Vekstskifte</label><br>
<input type="checkbox" name="sameCropAsLastSeason"/> Jeg dyrket bygg på samme skifte i fjor<br/>
<span class="help-block" id="{{ form_id }}_sameCropAsLastSeason_validation"></span> <span class="help-block" id="{{ form_id }}_sameCropAsLastSeason_validation"></span>
</div> </div>
<div class="form-group"> <div class="form-group">
<input type="checkbox" name="plowed"/> Jeg har pløyet<br/> <label>Jordarbeiding</label><br>
<input type="checkbox" name="plowed"/> Jeg har pløyd<br/>
<span class="help-block" id="{{ form_id }}_plowed_validation"></span> <span class="help-block" id="{{ form_id }}_plowed_validation"></span>
</div> </div>
</div> </div>
<div class="col-md-6 form-group"> <div class="col-md-6 form-group">
<div class="form-group"> <div class="form-group">
<label class="main-label" for="observationDate">Observasjon utført</label> <label class="main-label" for="observationDate">Observasjonsdato</label>
<input type="date" name="observationDate" class="form-control"/> <input type="date" name="observationDate" class="form-control"/>
<span class="help-block" id="{{ form_id }}_observationDate_validation"></span> <span class="help-block" id="{{ form_id }}_observationDate_validation"></span>
</div> </div>
...@@ -130,7 +135,7 @@ ...@@ -130,7 +135,7 @@
<span class="help-block" id="{{ form_id }}_observationValue_validation"></span> <span class="help-block" id="{{ form_id }}_observationValue_validation"></span>
</div> </div>
<div class="form-group space"> <div class="form-group space">
<label class="main-label" for="sprayingDate">Sprøyting utført</label> <label class="main-label" for="sprayingDate">Sprøytedato</label>
<input type="date" name="sprayingDate" class="form-control"/> <input type="date" name="sprayingDate" class="form-control"/>
<span class="help-block" id="{{ form_id }}_sprayingDate_validation"></span> <span class="help-block" id="{{ form_id }}_sprayingDate_validation"></span>
</div> </div>
...@@ -189,6 +194,7 @@ ...@@ -189,6 +194,7 @@
<script type="module"> <script type="module">
import MapModal from 'https://logic.testvips.nibio.no/js/mapModal.js'; import MapModal from 'https://logic.testvips.nibio.no/js/mapModal.js';
//import MapModal from settings.vipslogicProtocol + "://" + settings.vipslogicServerName + "/js/mapModal.js" //import MapModal from settings.vipslogicProtocol + "://" + settings.vipslogicServerName + "/js/mapModal.js"
const inputLatitudeElement = document.getElementById("latitude"); const inputLatitudeElement = document.getElementById("latitude");
const inputLongitudeElement = document.getElementById("longitude"); const inputLongitudeElement = document.getElementById("longitude");
const selectPoiElement = document.getElementById("weatherStationId"); const selectPoiElement = document.getElementById("weatherStationId");
...@@ -240,7 +246,6 @@ ...@@ -240,7 +246,6 @@
}, },
"properties": { "properties": {
"pointOfInterestId": selectedPoint, "pointOfInterestId": selectedPoint,
"pointOfInterestName": "Punkt",
} }
}] }]
}; };
...@@ -249,12 +254,15 @@ ...@@ -249,12 +254,15 @@
selectedFeature = undefined; selectedFeature = undefined;
} }
const coordinatesMapInstance = new MapModal('coordinates-map', {}, selectedFeature, 'nb', true, selectCoordinates); // TODO Open map with currently selected language! (not 'nb')
const isPoiMap = false; // Map should enable selection of coordinates (not pois)
const allowNewPoints = true; // User should be able to select new pois
const coordinatesMapInstance = new MapModal('coordinates-map', selectedFeature, 'nb', isPoiMap, allowNewPoints, selectCoordinates);
coordinatesMapInstance.openModal(selectedPoint); coordinatesMapInstance.openModal(selectedPoint);
} }
window.openPoiMap = () => { window.openPoiMap = () => {
const typeNameMap = {1: "Værstasjon", 2: "Gård", 5: "Felle", 3: "Felt"};
fetch(settings.vipslogicProtocol + "://" + settings.vipslogicServerName + "/rest/poi/geojson", { fetch(settings.vipslogicProtocol + "://" + settings.vipslogicServerName + "/rest/poi/geojson", {
method: 'POST', method: 'POST',
headers: { headers: {
...@@ -265,7 +273,9 @@ ...@@ -265,7 +273,9 @@
}) })
.then(response => response.json()) .then(response => response.json())
.then(geoJson => { .then(geoJson => {
const poiMapInstance = new MapModal('poi-map', typeNameMap, geoJson, 'nb', false, selectPoi); const isPoiMap = true; // Map should enable selection of pois
const allowNewPoints = false; // User should not be able to create new pois
const poiMapInstance = new MapModal('poi-map', geoJson, 'nb', isPoiMap, allowNewPoints, selectPoi);
const selectedPoiId = getSelectedPoiId(); const selectedPoiId = getSelectedPoiId();
poiMapInstance.openModal(selectedPoiId); poiMapInstance.openModal(selectedPoiId);
}) })
...@@ -287,6 +297,20 @@ ...@@ -287,6 +297,20 @@
window.validateFormExtra = () => { window.validateFormExtra = () => {
var theForm = document.getElementById("{{ form_id }}"); var theForm = document.getElementById("{{ form_id }}");
// Location: Either weatherStationId or latitude/longitude must be set
const selectedWeatherdataType = theForm.querySelector('input[name="weatherdataType"]:checked').value;
if( selectedWeatherdataType === "coordinates") {
const trimmedLat = theForm["latitude"].value.trim()
const trimmedLon = theForm["longitude"].value.trim()
if(trimmedLat === "" || trimmedLon === "" || isNaN(Number(trimmedLat)) || isNaN(Number(trimmedLon))) {
alert("Mangler gyldig punkt");
return false;
}
}
if (selectedWeatherdataType === "weatherstation" && theForm["weatherStationId"].value === -1) {
alert("Mangler værstasjon")
}
// Observation: Either no fields or all fields must be set // Observation: Either no fields or all fields must be set
if(theForm["observationDate"].value.trim() == "" ^ theForm["observationValue"].value.trim() == "") if(theForm["observationDate"].value.trim() == "" ^ theForm["observationValue"].value.trim() == "")
{ {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment