diff --git a/src/main/java/no/nibio/vips/logic/modules/barkbeetle/BarkbeetleBean.java b/src/main/java/no/nibio/vips/logic/modules/barkbeetle/BarkbeetleBean.java index 161711d6158660893d4eb554684ead1cf01a5672..9026ebfb46d7d63305bb1b7d6cc39ed9f76c812b 100644 --- a/src/main/java/no/nibio/vips/logic/modules/barkbeetle/BarkbeetleBean.java +++ b/src/main/java/no/nibio/vips/logic/modules/barkbeetle/BarkbeetleBean.java @@ -17,41 +17,42 @@ */ package no.nibio.vips.logic.modules.barkbeetle; -import de.micromata.opengis.kml.v_2_2_0.Coordinate; -import de.micromata.opengis.kml.v_2_2_0.Document; -import de.micromata.opengis.kml.v_2_2_0.Kml; -import de.micromata.opengis.kml.v_2_2_0.KmlFactory; -import de.micromata.opengis.kml.v_2_2_0.LabelStyle; -import de.micromata.opengis.kml.v_2_2_0.Placemark; -import de.micromata.opengis.kml.v_2_2_0.Units; -import de.micromata.opengis.kml.v_2_2_0.Vec2; - import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; +import java.util.Calendar; import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.List; -import java.util.Calendar; import java.util.Locale; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; +import javax.naming.InitialContext; +import javax.naming.NamingException; +import org.geotools.api.referencing.FactoryException; +import org.geotools.api.referencing.crs.CoordinateReferenceSystem; +import org.geotools.api.referencing.operation.MathTransform; +import org.geotools.api.referencing.operation.TransformException; +import org.geotools.geometry.jts.JTS; +import org.geotools.referencing.CRS; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import de.micromata.opengis.kml.v_2_2_0.Coordinate; +import de.micromata.opengis.kml.v_2_2_0.Document; +import de.micromata.opengis.kml.v_2_2_0.Kml; +import de.micromata.opengis.kml.v_2_2_0.KmlFactory; +import de.micromata.opengis.kml.v_2_2_0.LabelStyle; +import de.micromata.opengis.kml.v_2_2_0.Placemark; +import de.micromata.opengis.kml.v_2_2_0.Units; +import de.micromata.opengis.kml.v_2_2_0.Vec2; import jakarta.ejb.EJB; - import jakarta.ejb.LocalBean; import jakarta.ejb.Stateless; -import javax.naming.InitialContext; -import javax.naming.NamingException; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; - -import org.geotools.geometry.jts.JTS; -import org.geotools.referencing.CRS; - - import no.nibio.vips.logic.controller.session.SessionControllerGetter; import no.nibio.vips.logic.controller.session.UserBean; import no.nibio.vips.logic.entity.Organization; @@ -64,12 +65,6 @@ import no.nibio.vips.logic.messaging.UniversalMessageFormat; import no.nibio.vips.logic.util.GISEntityUtil; import no.nibio.vips.logic.util.Globals; import no.nibio.vips.logic.util.SimpleMailSender; -import org.geotools.api.referencing.FactoryException; -import org.geotools.api.referencing.crs.CoordinateReferenceSystem; -import org.geotools.api.referencing.operation.MathTransform; -import org.geotools.api.referencing.operation.TransformException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * @copyright 2022 <a href="http://www.nibio.no/">NIBIO</a> @@ -292,7 +287,7 @@ public class BarkbeetleBean { + "<li>Eier: " + trap.getOwnerName() + (trap.getOwnerPhone() == null || trap.getOwnerPhone().isBlank() ? "" : ", tlf: " + trap.getOwnerPhone()) + "</li>" + "<li>Registrant: <a href='mailto:" + trap.getUserId().getEmail() + "'>" + trap.getUserId().getFirstName() + " " + trap.getUserId().getLastName() + "</a>, tlf: " + trap.getUserId().getPhone() + "</li>" + "</ul>") - .withStyleUrl(styleUrl + trap.getWarningStatus()) + .withStyleUrl(styleUrl + trap.getWarningStatus(season)) .withId(trap.getSeasonTrapsiteId().toString()); final de.micromata.opengis.kml.v_2_2_0.Point point = placemark.createAndSetPoint(); diff --git a/src/main/java/no/nibio/vips/logic/modules/barkbeetle/SeasonTrapsite.java b/src/main/java/no/nibio/vips/logic/modules/barkbeetle/SeasonTrapsite.java index 07899fda2af9ddd8327848e7a3c7a1c2053e5107..6e82a1ff3f109e624f28746e8d1ec0c6807c697c 100644 --- a/src/main/java/no/nibio/vips/logic/modules/barkbeetle/SeasonTrapsite.java +++ b/src/main/java/no/nibio/vips/logic/modules/barkbeetle/SeasonTrapsite.java @@ -18,9 +18,7 @@ package no.nibio.vips.logic.modules.barkbeetle; -import com.fasterxml.jackson.annotation.JsonIgnore; import java.io.Serializable; -import java.time.Instant; import java.time.LocalDate; import java.time.ZoneId; import java.time.temporal.WeekFields; @@ -30,6 +28,11 @@ import java.util.Collections; import java.util.Date; import java.util.List; import java.util.Locale; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlTransient; +import org.locationtech.jts.geom.Geometry; +import org.locationtech.jts.geom.Point; +import com.fasterxml.jackson.annotation.JsonIgnore; import jakarta.persistence.Basic; import jakarta.persistence.CascadeType; import jakarta.persistence.Column; @@ -39,7 +42,6 @@ import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.JoinColumn; -import jakarta.persistence.Lob; import jakarta.persistence.ManyToOne; import jakarta.persistence.NamedQueries; import jakarta.persistence.NamedQuery; @@ -51,12 +53,8 @@ import jakarta.persistence.Temporal; import jakarta.persistence.TemporalType; import jakarta.persistence.Transient; import jakarta.validation.constraints.Size; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlTransient; import no.nibio.vips.logic.entity.VipsLogicUser; import no.nibio.vips.logic.util.SystemTime; -import org.locationtech.jts.geom.Geometry; -import org.locationtech.jts.geom.Point; /** * @copyright 2020 <a href="http://www.nibio.no/">NIBIO</a> @@ -446,11 +444,13 @@ public class SeasonTrapsite implements Serializable, Comparable { private final Integer THRESHOLD_HIGH_RISK = 15000; @Transient - public Integer getWarningStatus(){ - // Are we before week 21? Return the "gray" status + public Integer getWarningStatus(Integer season){ + // Are we before week 21 of current year? Return the "gray" status WeekFields weekFields = WeekFields.of(Locale.getDefault()); - Integer systemTimeWeek = LocalDate.ofInstant(SystemTime.getSystemTime().toInstant(), ZoneId.of("Europe/Oslo")).get(weekFields.weekOfWeekBasedYear()); - if(systemTimeWeek < this.getFirstPossibleRegistrationWeek()) + LocalDate systemTime = LocalDate.ofInstant(SystemTime.getSystemTime().toInstant(), ZoneId.of("Europe/Oslo")); + Integer systemTimeWeek = systemTime.get(weekFields.weekOfWeekBasedYear()); + Integer systemYear = systemTime.getYear(); + if(systemYear <= season && systemTimeWeek < this.getFirstPossibleRegistrationWeek()) { return SeasonTrapsite.WARNING_NOT_APPLICABLE; } @@ -467,7 +467,7 @@ public class SeasonTrapsite implements Serializable, Comparable { Collections.sort(siteRegs); TrapsiteRegistration lastReg = siteRegs.get(siteRegs.size()-1); Integer lastWeekOfRegistration = lastReg.getTrapsiteRegistrationPK().getWeek(); - if(lastWeekOfRegistration < this.getExpectedLastRegistrationWeek(systemTimeWeek)) + if(systemYear <= season && lastWeekOfRegistration < this.getExpectedLastRegistrationWeek(systemTimeWeek)) { return SeasonTrapsite.WARNING_MISSING_DATA; }