From 87dad68685295b27177b92201c102d5226e20d4f Mon Sep 17 00:00:00 2001
From: Tor-Einar Skog <tor-einar.skog@nibio.no>
Date: Thu, 11 May 2023 16:01:26 +0200
Subject: [PATCH] Add observation.is_positive [VIPSUTV-469]

---
 .../controller/servlet/ObservationController.java     |  1 +
 .../java/no/nibio/vips/logic/entity/Observation.java  | 11 ++++++++++-
 .../nibio/vips/logic/i18n/vipslogictexts.properties   |  2 +-
 .../vips/logic/i18n/vipslogictexts_bs.properties      |  1 +
 .../vips/logic/i18n/vipslogictexts_hr.properties      |  2 +-
 .../vips/logic/i18n/vipslogictexts_nb.properties      |  3 +--
 .../vips/logic/i18n/vipslogictexts_sr.properties      |  2 +-
 .../vips/logic/i18n/vipslogictexts_zh_CN.properties   |  1 +
 src/main/webapp/formdefinitions/observationForm.json  |  5 +++++
 src/main/webapp/templates/observationForm.ftl         | 10 +++++++++-
 10 files changed, 31 insertions(+), 7 deletions(-)

diff --git a/src/main/java/no/nibio/vips/logic/controller/servlet/ObservationController.java b/src/main/java/no/nibio/vips/logic/controller/servlet/ObservationController.java
index 8cdcbb17..66842864 100755
--- a/src/main/java/no/nibio/vips/logic/controller/servlet/ObservationController.java
+++ b/src/main/java/no/nibio/vips/logic/controller/servlet/ObservationController.java
@@ -464,6 +464,7 @@ public class ObservationController extends HttpServlet {
                                             null
                                             : formValidation.getFormField("observationData").getWebValue()
                             );
+                            observation.setIsPositive(formValidation.getFormField("isPositiveRegistration").getWebValue() != null);
                             observation.setIsQuantified(formValidation.getFormField("isQuantified").getWebValue() != null);
                             this.setObservationLocationVisibility(observation, formValidation.getFormField("locationVisibility").getWebValue());
                             observation.setBroadcastMessage(formValidation.getFormField("broadcastMessage").getWebValue() != null);
diff --git a/src/main/java/no/nibio/vips/logic/entity/Observation.java b/src/main/java/no/nibio/vips/logic/entity/Observation.java
index d34522ac..d9d732ac 100755
--- a/src/main/java/no/nibio/vips/logic/entity/Observation.java
+++ b/src/main/java/no/nibio/vips/logic/entity/Observation.java
@@ -105,6 +105,7 @@ public class Observation implements Serializable, no.nibio.vips.observation.Obse
     private String statusRemarks;
     private String observationData;
     private Boolean isQuantified;
+    private Boolean isPositive;
     private Boolean broadcastMessage;
     private Boolean locationIsPrivate;
     private PolygonService polygonService;
@@ -665,5 +666,13 @@ public class Observation implements Serializable, no.nibio.vips.observation.Obse
 	public void setLastEditedTime(Date lastEditedTime) {
 		this.lastEditedTime = lastEditedTime;
 	}
-    
+
+    @Column(name = "is_positive")
+    public Boolean getIsPositive() {
+        return isPositive;
+    }
+
+    public void setIsPositive(Boolean positive) {
+        isPositive = positive;
+    }
 }
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 b05c1069..7a7b2ba2 100755
--- a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts.properties
+++ b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts.properties
@@ -389,7 +389,7 @@ isPest = Is pest
 isPrivate = Is private
 
 isQuantified = Is quantified
-
+isPositiveRegistration=Positive registration
 isRequiredField = Required field
 
 language = Language
diff --git a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_bs.properties b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_bs.properties
index 74853b8c..1c08fd30 100755
--- a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_bs.properties
+++ b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_bs.properties
@@ -15,6 +15,7 @@
  # You should have received a copy of the NIBIO Open Source License
  # along with VIPSLogic.  If not, see <http://www.nibio.no/licenses/>.
  # 
+isPositiveRegistration=Positive registration
 ALTERNARIA = Alternaria Model
 
 APPLESCABM = Apple scab model
diff --git a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_hr.properties b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_hr.properties
index f601b244..89b795fc 100755
--- a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_hr.properties
+++ b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_hr.properties
@@ -15,7 +15,7 @@
  # You should have received a copy of the NIBIO Open Source License
  # along with VIPSLogic.  If not, see <http://www.nibio.no/licenses/>.
  # 
-
+isPositiveRegistration=Positive registration
 ALTERNARIA = Alternaria Model
 
 APPLESCABM = Apple scab model
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 086079ba..15d53c9e 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
@@ -15,8 +15,7 @@
  # You should have received a copy of the NIBIO Open Source License
  # along with VIPSLogic.  If not, see <http://www.nibio.no/licenses/>.
  # 
-
-
+isPositiveRegistration=Positiv registrering
 ALTERNARIA = Alternariamodell
 
 APPLESCABM = Epleskurvmodell
diff --git a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_sr.properties b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_sr.properties
index e413bd27..701fc7ac 100755
--- a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_sr.properties
+++ b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_sr.properties
@@ -15,7 +15,7 @@
  # You should have received a copy of the NIBIO Open Source License
  # along with VIPSLogic.  If not, see <http://www.nibio.no/licenses/>.
  # 
-
+isPositiveRegistration=Positive registration
 ALTERNARIA = Alternaria Model
 
 APPLESCABM = Apple scab model
diff --git a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_zh_CN.properties b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_zh_CN.properties
index b0b8fa8f..915f84b1 100755
--- a/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_zh_CN.properties
+++ b/src/main/resources/no/nibio/vips/logic/i18n/vipslogictexts_zh_CN.properties
@@ -15,6 +15,7 @@
  # You should have received a copy of the NIBIO Open Source License
  # along with VIPSLogic.  If not, see <http://www.nibio.no/licenses/>.
  # 
+isPositiveRegistration=Positive registration
 ALTERNARIA = Alternaria Model
 
 APPLESCABM = \u82f9\u679c\u9ed1\u661f\u75c5\u6a21\u578b
diff --git a/src/main/webapp/formdefinitions/observationForm.json b/src/main/webapp/formdefinitions/observationForm.json
index 652dd4e9..d559d505 100755
--- a/src/main/webapp/formdefinitions/observationForm.json
+++ b/src/main/webapp/formdefinitions/observationForm.json
@@ -69,6 +69,11 @@
             "fieldType" : "SELECT_MULTIPLE",
             "required" : false
         },
+        {
+            "name" : "isPositive",
+            "dataType" : "STRING",
+            "required" : false
+        },
         {
             "name" : "isQuantified",
             "dataType" : "STRING",
diff --git a/src/main/webapp/templates/observationForm.ftl b/src/main/webapp/templates/observationForm.ftl
index aa57b3d0..24bd4a96 100755
--- a/src/main/webapp/templates/observationForm.ftl
+++ b/src/main/webapp/templates/observationForm.ftl
@@ -619,7 +619,15 @@
 			    <input type="text" class="form-control" id="timeOfObservation" name="timeOfObservation" placeholder="${i18nBundle.timeOfObservation}" value="${(observation.timeOfObservation?string("yyyy-MM-dd HH:mmZ"))!.now?string("yyyy-MM-dd HH:mmZ")}" onblur="validateField(this);"  <#if editAccess!="W">readonly="readonly"</#if>/>
 			    <span class="help-block" id="${formId}_timeOfObservation_validation"></span>
 			  </div>
-			  
+                <div class="form-group">
+                    <div class="checkbox">
+                        <#if editAccess!="W" && observation.isPositive?has_content && observation.isPositive ==true><input type="hidden" name="isPositive" value="true"/></#if>
+                        <label>
+                            <input type="checkbox" name="isPositive"<#if observation.isPositive?has_content && observation.isPositive == false><#else> checked="checked"</#if> <#if editAccess!="W">disabled="disabled"</#if>/>
+                        </label>
+                        ${i18nBundle.isPositiveRegistration}
+                    </div>
+                </div>
 			  <div class="form-group">
 			  	<div class="checkbox">
                                         <#if editAccess!="W" && observation.isQuantified?has_content && observation.isQuantified ==true><input type="hidden" name="isQuantified" value="true"/></#if>
-- 
GitLab