Skip to content
Snippets Groups Projects
Commit ea4df48b authored by Tor-Einar Skog's avatar Tor-Einar Skog
Browse files

First working version of season trapsite maintenance list

parent debc382a
Branches
No related tags found
No related merge requests found
...@@ -303,4 +303,9 @@ public class BarkbeetleBean { ...@@ -303,4 +303,9 @@ public class BarkbeetleBean {
.executeUpdate(); .executeUpdate();
} }
public void setMaintenanceCompleted(Integer seasonTrapsiteId, boolean isMaintenanceCompleted) {
SeasonTrapsite site = em.find(SeasonTrapsite.class, seasonTrapsiteId);
site.setMaintenanceCompleted(isMaintenanceCompleted);
}
} }
...@@ -91,6 +91,18 @@ public class BarkbeetleController extends HttpServlet { ...@@ -91,6 +91,18 @@ public class BarkbeetleController extends HttpServlet {
request.setAttribute("messageKey", request.getParameter("messageKey")); request.setAttribute("messageKey", request.getParameter("messageKey"));
request.getRequestDispatcher("/modules/barkbeetle/barkbeetleSeasonTrapsiteList.ftl").forward(request, response); request.getRequestDispatcher("/modules/barkbeetle/barkbeetleSeasonTrapsiteList.ftl").forward(request, response);
} }
else if(action.equals("seasonTrapsiteMaintenanceList"))
{
List<SeasonTrapsite> seasonTrapSites = BarkbeetleBean.getInstance().getSeasonTrapsites(season);
Collections.sort(seasonTrapSites);
Integer firstAvailableSeason = BarkbeetleBean.getInstance().getFirstAvailableSeason();
Integer lastAvailableSeason = Calendar.getInstance().get(Calendar.YEAR) + 1;
request.setAttribute("firstAvailableSeason", firstAvailableSeason);
request.setAttribute("lastAvailableSeason", lastAvailableSeason);
request.setAttribute("season", season);
request.setAttribute("seasonTrapsites", seasonTrapSites);
request.getRequestDispatcher("/modules/barkbeetle/barkbeetleSeasonTrapsiteMaintenanceList.ftl").forward(request, response);
}
else if(action.equals("editSeasonTrapsite")) else if(action.equals("editSeasonTrapsite"))
{ {
SeasonTrapsite trapsite = request.getParameter("seasonTrapsiteId") != null ? SeasonTrapsite trapsite = request.getParameter("seasonTrapsiteId") != null ?
......
...@@ -23,6 +23,7 @@ import javax.persistence.EntityManager; ...@@ -23,6 +23,7 @@ import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext; import javax.persistence.PersistenceContext;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.GET; import javax.ws.rs.GET;
import javax.ws.rs.PATCH;
import javax.ws.rs.Path; import javax.ws.rs.Path;
import javax.ws.rs.PathParam; import javax.ws.rs.PathParam;
import javax.ws.rs.Produces; import javax.ws.rs.Produces;
...@@ -61,4 +62,21 @@ public class BarkbeetleService { ...@@ -61,4 +62,21 @@ public class BarkbeetleService {
{ {
return Response.ok().entity(BarkbeetleBean.getInstance().getSeasonTrapsitesStatusKml(season, ServletUtil.getServerName(httpServletRequest))).build(); return Response.ok().entity(BarkbeetleBean.getInstance().getSeasonTrapsitesStatusKml(season, ServletUtil.getServerName(httpServletRequest))).build();
} }
/**
*
* @param seasonTrapsiteId
* @param isMaintenanceCompleted
* @return 200 (OK) or 204 (No Content). 404 (Not Found), if ID not found or invalid.
*/
@PATCH
@Path("seasontrapsite/{seasonTrapsiteId}/maintenancecompleted/{isMaintenanceCompleted}")
public Response setMaintenanceCompleted(
@PathParam("seasonTrapsiteId") Integer seasonTrapsiteId,
@PathParam("isMaintenanceCompleted") String isMaintenanceCompleted
)
{
BarkbeetleBean.getInstance().setMaintenanceCompleted(seasonTrapsiteId, isMaintenanceCompleted != null && isMaintenanceCompleted.equals("true"));
return Response.ok().build();
}
} }
...@@ -142,6 +142,8 @@ public class SeasonTrapsite implements Serializable, Comparable { ...@@ -142,6 +142,8 @@ public class SeasonTrapsite implements Serializable, Comparable {
private String observedAttacksDescription; private String observedAttacksDescription;
@Column(name = "maintenance_description") @Column(name = "maintenance_description")
private String maintenanceDescription; private String maintenanceDescription;
@Column(name = "maintenance_completed")
private Boolean maintenanceCompleted;
public SeasonTrapsite() { public SeasonTrapsite() {
} }
...@@ -579,5 +581,13 @@ public class SeasonTrapsite implements Serializable, Comparable { ...@@ -579,5 +581,13 @@ public class SeasonTrapsite implements Serializable, Comparable {
public void setMaintenanceDescription(String maintenanceDescription) { public void setMaintenanceDescription(String maintenanceDescription) {
this.maintenanceDescription = maintenanceDescription; this.maintenanceDescription = maintenanceDescription;
} }
public Boolean getMaintenanceCompleted() {
return maintenanceCompleted;
}
public void setMaintenanceCompleted(Boolean maintenanceCompleted) {
this.maintenanceCompleted = maintenanceCompleted;
}
} }
...@@ -98,6 +98,11 @@ ...@@ -98,6 +98,11 @@
<a href="/barkbeetle?action=listSeasonTrapsiteCandidates&season=${season}" class="btn btn-default" role="button">Hent en kopi fra fjoråret (${season-1})</a> <a href="/barkbeetle?action=listSeasonTrapsiteCandidates&season=${season}" class="btn btn-default" role="button">Hent en kopi fra fjoråret (${season-1})</a>
</p> </p>
</#if> </#if>
<#if userIsAdmin>
<p>
<a href="/barkbeetle?action=seasonTrapsiteMaintenanceList&season=${season}" class="btn btn-default" role="button">Se vedlikeholdsliste</a>
</p>
</#if>
<div class="singleBlockContainer"> <div class="singleBlockContainer">
<div class="row"> <div class="row">
<table class="table table-striped"> <table class="table table-striped">
......
<#--
Copyright (c) 2020 NIBIO <http://www.nibio.no/>.
This file is part of VIPSLogic.
VIPSLogic is free software: you can redistribute it and/or modify
it under the terms of the NIBIO Open Source License as published by
NIBIO, either version 1 of the License, or (at your option) any
later version.
VIPSLogic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
NIBIO Open Source License for more details.
You should have received a copy of the NIBIO Open Source License
along with VIPSLogic. If not, see <http://www.nibio.no/licenses/>.
--><#include "../../master.ftl">
<#macro page_head>
<title>Barkbilleovervåking: Vedlikehold av fellelokaliteter for sesongen ${season}</title>
</#macro>
<#macro page_contents>
<h1>Barkbilleovervåking</h1>
<h2>Vedlikehold av fellelokaliteter for sesongen ${season}</h2>
<div class="form-inline">
<div class="form-group">
Velg sesong <select class="form-control" onchange="window.location.href='/barkbeetle?action=seasonTrapsiteMaintenanceList&season=' + this.options[this.selectedIndex].value;">
<#list firstAvailableSeason..lastAvailableSeason as availableSeason>
<option value="${availableSeason}" <#if availableSeason==season>selected</#if>>${availableSeason}</option>
</#list>
</select>
<div class="alert alert-warning"><i class="fa fa-arrow-up"></i> <span style="font-weight: bold; font-style: italic;">Pass på at du har valgt rett sesong!</span></div>
</div>
</div>
<div class="row">
<div class="col-md-12">
Vedlikeholdsansvarlig behandler vedlikeholdsbehov oppgitt nedenfor. Kryss av for "Sak behandlet".
</div>
</div>
<div class="singleBlockContainer">
<div class="row">
<table class="table table-striped">
<thead>
<th>Fylke</th>
<th>Kommune</th>
<th>Gårdsnr/bruksnr</th>
<th>Høyde o.h.</th>
<th>Eier</th>
<th>Registrant</th>
<th>Vedlikeholdsbehov</th>
<th>Sak behandlet</th>
</thead>
<tbody id="seasonTrapsiteTBody">
<#list seasonTrapsites as site>
<#if !site.maintenanceCompleted && site.maintenanceDescription?has_content>
<tr class="maintenanceNeeded">
<td>${site.countyName!""}</td>
<td>${site.municipalityName!""}</td>
<td>${site.propertyNo!""}/${site.propertySectionNo!""}</td>
<td>${site.altitude!""}</td>
<td>${site.ownerName!""}</td>
<td>${site.userId.firstName} ${site.userId.lastName}</td>
<td>${site.maintenanceDescription!""}</td>
<td><input type="checkbox" name="maintenanceCompleted" onclick="handleMaintenanceCompletedClick(${site.seasonTrapsiteId},this);" <#if site.maintenanceCompleted>checked</#if>></td>
</tr>
</#if>
</#list>
<#list seasonTrapsites as site>
<#if site.maintenanceCompleted || ! site.maintenanceDescription?has_content>
<tr class="maintenanceNotNeeded">
<td>${site.countyName!""}</td>
<td>${site.municipalityName!""}</td>
<td>${site.propertyNo!""}/${site.propertySectionNo!""}</td>
<td>${site.altitude!""}</td>
<td>${site.ownerName!""}</td>
<td>${site.userId.firstName} ${site.userId.lastName}</td>
<td>${site.maintenanceDescription!""}</td>
<td><input type="checkbox" name="maintenanceCompleted" onclick="handleMaintenanceCompletedClick(${site.seasonTrapsiteId},this);" <#if site.maintenanceCompleted>checked</#if>></td>
</tr>
</#if>
</#list>
</tbody>
</table>
</div>
</div>
</#macro>
<#macro custom_js>
<script type="text/javascript" src="/js/constants.js"></script>
<script type="text/javascript" src="/js/3rdparty/ol.js"></script>
<script type="text/javascript">
$(document).ready(function() {
// Check for Internet Explorer
var ua = window.navigator.userAgent;
//console.info(ua);
if(ua.indexOf("MSIE ") >= 0 || navigator.userAgent.match(/Trident.*rv\:11\./))
{
alert("Hei! Det ser ut som du bruker Internet Explorer. Vi anbefaler Firefox, Edge eller Chrome når du er på denne nettsiden.");
return;
}
});
/**
* Using AJAX to update the backend system. Changing status color.
*/
function handleMaintenanceCompletedClick(seasonTrapsiteId, clickedCheckBox){
var maintenanceCompleted = clickedCheckBox.checked;
fetch(
"/rest/barkbeetle/seasontrapsite/" + seasonTrapsiteId + "/maintenancecompleted/" + (maintenanceCompleted ? "true" : "false"),
{
method: "PATCH"
}
)
.then(response => {
if(response.status == 200)
{
var parentRow = clickedCheckBox.parentNode.parentNode;
var maintenanceDesc = parentRow.getElementsByTagName("td")[6].textContent;
var maintenanceNeeded = !clickedCheckBox.checked && maintenanceDesc.trim() != "";
parentRow.classList.remove(maintenanceNeeded ? "maintenanceNotNeeded" : "maintenanceNeeded");
parentRow.classList.add(maintenanceNeeded ? "maintenanceNeeded" : "maintenanceNotNeeded");
}
});
}
</script>
</#macro>
<#macro custom_css>
<link rel="stylesheet" type="text/css" href="/css/3rdparty/ol.css"/ >
<style type="text/css">
tr.maintenanceNotNeeded td {
background-color: #1aff88 !important;
}
tr.maintenanceNeeded td {
background-color: #ff6e66 !important;
}
</style>
</#macro>
<@page_html/>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment