diff --git a/WNPRC_EHR/resources/queries/study/WaterScheduleWithWeight.sql b/WNPRC_EHR/resources/queries/study/WaterScheduleWithWeight.sql
index 44e7abf98..3107a1a86 100644
--- a/WNPRC_EHR/resources/queries/study/WaterScheduleWithWeight.sql
+++ b/WNPRC_EHR/resources/queries/study/WaterScheduleWithWeight.sql
@@ -20,6 +20,7 @@ SELECT
frequencyMeaning AS frequencyMeaningCoalesced,
timeofday AS timeofday,
displaytimeofday AS displaytimeofday,
+ actionRequired AS actionRequired,
qcstate AS qcstate,
--(SELECT max(wg.qcstate) as label FROM study.waterGiven wg WHERE WCO.objectid = wg.treatmentid AND WCO.dateOrdered = wg.dateordered ) AS waterStatus,
diff --git a/WNPRC_EHR/resources/queries/study/WaterScheduleWithWeight/.qview.xml b/WNPRC_EHR/resources/queries/study/WaterScheduleWithWeight/.qview.xml
index 94d6b88d0..22cd5484f 100644
--- a/WNPRC_EHR/resources/queries/study/WaterScheduleWithWeight/.qview.xml
+++ b/WNPRC_EHR/resources/queries/study/WaterScheduleWithWeight/.qview.xml
@@ -20,6 +20,7 @@
+
diff --git a/WNPRC_EHR/resources/queries/study/deaths.js b/WNPRC_EHR/resources/queries/study/deaths.js
index a8ca9fa94..d5b85a5aa 100644
--- a/WNPRC_EHR/resources/queries/study/deaths.js
+++ b/WNPRC_EHR/resources/queries/study/deaths.js
@@ -16,8 +16,35 @@ function onComplete(event, errors, helper) {
var ids = helper.getRows().map(function (row) {
return row.row.id;
});
+ var animalDateMap= [];
+ let clientRows = helper.getRows();
+
+ console.log("number of rows "+ clientRows.length);
+ if (clientRows){
+
+ for (var i= 0; i < clientRows.length; i++){
+ console.log("animalId "+clientRows[i].row.id);
+
+ animalDateMap.push({
+ animalId: clientRows[i].row.id,
+ endDate : clientRows[i].row.date
+ });
+
+ }
+
+ }
+ /*console.log("array line 37 " + Object.values(animalDateMap).length);
+
+ for (var i = 0; i < animalDateMap.length; i++){
+ console.log("array value " + animalDateMap[i]);
+ }*/
+
+ WNPRC.Utils.getJavaHelper().removeWaterAmounts(animalDateMap);
//Sends notification.
var hostName = 'https://' + LABKEY.serverName;
WNPRC.Utils.getJavaHelper().sendDeathNotification(ids, hostName);
+
+
+
}
\ No newline at end of file
diff --git a/WNPRC_EHR/resources/queries/study/waterGiven.js b/WNPRC_EHR/resources/queries/study/waterGiven.js
index e72858ff3..d623ac973 100644
--- a/WNPRC_EHR/resources/queries/study/waterGiven.js
+++ b/WNPRC_EHR/resources/queries/study/waterGiven.js
@@ -85,36 +85,19 @@ function onInit(event, helper){
}
function onUpsert(helper, scriptErrors, row, oldRow) {
- /*if (row.volume == null){
- EHR.Server.Utils.addError(scriptErrors, 'volume', 'This field is required', 'WARN');
- console.log ("value of QCState "+ row.QCState)
- }*/
-
if (row.QCStateLabel == 'Scheduled'){
EHR.Server.Validation.verifyDate(row, scriptErrors, helper);
}
if (row.Id && row.date)
{
- // volume is handled differently for requestsvs actual draws
var errorQC = 'ERROR';
- //if (EHR.Server.Security.getQCStateByLabel(row.QCStateLabel)['isRequest'] && !row.taskid)
- // errorQC = 'ERROR';
- //else
- // errorQC = 'INFO';
var map = helper.getProperty('waterInTransaction');
var waters = [];
if (map && map[row.Id])
{
waters = map[row.Id];
- /*for (var i=0;ihusbandry_fruit
value
-
-
-
Water Source
@@ -59,6 +56,9 @@
value
title
+
+
+
Water Location
diff --git a/WNPRC_EHR/resources/queries/study/waterOrders.js b/WNPRC_EHR/resources/queries/study/waterOrders.js
index 53760c8fd..9d037b697 100644
--- a/WNPRC_EHR/resources/queries/study/waterOrders.js
+++ b/WNPRC_EHR/resources/queries/study/waterOrders.js
@@ -7,7 +7,8 @@ let allowUsersMap = {};
function onInit(event, helper){
helper.setScriptOptions({
allowFutureDates: true,
- allowDatesInDistantPast: true
+ allowDatesInDistantPast: true,
+ skipWaterRegulationCheck: false
});
LABKEY.Query.selectRows({
requiredVersion: 9.1,
@@ -35,9 +36,40 @@ function onInit(event, helper){
});
}
+function onInsert(helper, scriptErrors, row){
+ if (row.frequency !== 4 && row.waterSource === 'lixit'){
+ EHR.Server.Utils.addError(scriptErrors,"frequency", "Frequency should be 'Daily - Any Time' when selecting Lixit/Ad Lib", "ERROR");
+ }
-function onUpsert(helper, scriptErrors, row, oldRow){
+ if (row.id && row.waterSource === 'regulated' && row.frequency && row.assignedTo && row.provideFruit && row.date){
+ let lixitOrderMap = WNPRC.Utils.getJavaHelper().checkWaterLixit(row.id, row.date);
+ let lixitStartDate;
+ let lixitOrderObjectid;
+ let latestWaterSource;
+
+ if (lixitOrderMap != null){
+ lixitStartDate = new Date(lixitOrderMap.date);
+ lixitOrderObjectid = lixitOrderMap.objectid;
+ latestWaterSource = lixitOrderMap.waterSource;
+
+ if(latestWaterSource === "lixit" ) {
+ let lixitEndDate = new Date(row.date);
+ console.log(lixitEndDate)
+ lixitEndDate.setDate(lixitEndDate.getDate()-1);
+ console.log("startdate " + lixitStartDate + " objectid " + lixitOrderObjectid + "enddate " + lixitEndDate + " watersource " +row.waterSource);
+ let jsonArray = WNPRC.Utils.getJavaHelper().closeWaterOrder(row.id, lixitStartDate, lixitEndDate, row.project, lixitOrderObjectid, true);
+ if (jsonArray != null) {
+ for (var i = 0; i < jsonArray.length; i++) {
+ var errorObject = jsonArray[i];
+ EHR.Server.Utils.addError(scriptErrors, errorObject.field, errorObject.message, errorObject.severity);
+ }
+ }
+ }
+ }
+ }
+}
+function onUpsert(helper, scriptErrors, row, oldRow){
if (row.Id){
EHR.Server.Utils.findDemographics({
participant: row.Id,
@@ -54,13 +86,9 @@ function onUpsert(helper, scriptErrors, row, oldRow){
});
var animalRestricted = {};
animalRestricted = WNPRC.Utils.getJavaHelper().checkIfAnimalInCondition(row.Id, row.date);
- //console.log (animalRestricted);
if (!animalRestricted && !row.skipWaterRegulationCheck){
EHR.Server.Utils.addError(scriptErrors,'Id', 'Animal not assigned to water restriction protocol or is already in ' + row.waterSource + ' condition.', 'ERROR');
}
-
-
-
}
@@ -84,27 +112,31 @@ function onUpsert(helper, scriptErrors, row, oldRow){
if (rowDate.getTime() > endDate.getTime()){
EHR.Server.Utils.addError(scriptErrors,'endDate', 'EndDate cannot be before StartDate', 'ERROR');
}
-
- if (!row.frequency && row.waterSource == 'regulated'){
+ if (!row.frequency && row.waterSource === 'regulated'){
EHR.Server.Utils.addError(scriptErrors, 'frequency', 'Frequency is required when entering regulated water orders.', 'ERROR');
}
- if (!row.volume && row.waterSource == 'regulated'){
+ if (!row.volume && row.waterSource === 'regulated'){
//console.log ("water vol "+ row.volume);
EHR.Server.Utils.addError(scriptErrors, 'volume', 'Volume is required when entering regulated water orders.', 'ERROR');
}
-
- if (!row.assignedTo && row.waterSource == 'regulated'){
+ if (!row.assignedTo && row.waterSource === 'regulated'){
EHR.Server.Utils.addError(scriptErrors, 'assignedTo', 'Assigned To is required when entering regulated water orders.', 'ERROR');
}
-
+ if (!row.provideFruit && row.waterSource === 'regulated'){
+ EHR.Server.Utils.addError(scriptErrors, 'provideFruit', 'Provide Fruit is required when entering regulated water orders.', 'INFO');
+ }
if (!row.waterSource){
EHR.Server.Utils.addError(scriptErrors, 'waterSource', 'Water Source is required when entering new orders.', 'ERROR');
}
+ if (row.volume !== undefined && row.volume!== null && row.waterSource === 'lixit'){
+ EHR.Server.Utils.addError(scriptErrors,"volume", "Volume should be blank when selecting Lixit/Ad Lib for Water Source", "ERROR");
+ }
+ if (row.frequency !== 4 && row.waterSource === 'lixit'){
+ EHR.Server.Utils.addError(scriptErrors,"frequency", "Frequency should be 'Daily - Any Time' when selecting Lixit/Ad Lib", "ERROR");
+ }
+
- //console.log ("value of ObjectId "+oldRow.objectid + " Value of new objectId "+ row.objectid);
- //console.log ('skipWaterRegulation '+ row.skipWaterRegulationCheck);
- // if (oldRow && row.date && row.Id && row.frequency && (oldRow.objectid != row.objectid)) {
- if (row.project && row.objectid && row.Id && row.date && row.frequency && row.assignedTo && row.waterSource != 'lixit' && !row.skipWaterRegulationCheck) {
+ if (row.project && row.objectid && row.Id && row.date && row.frequency && row.assignedTo && row.waterSource !== 'lixit' && !row.skipWaterRegulationCheck && !row.closingRecord ) {
let jsonArray = WNPRC.Utils.getJavaHelper().checkWaterRegulation(row.id, row.date, row.enddate ? row.enddate : null, row.frequency, row.waterSource, row.objectid, row.project, this.extraContext);
if (jsonArray != null) {
for (var i = 0; i < jsonArray.length; i++) {
@@ -115,35 +147,19 @@ function onUpsert(helper, scriptErrors, row, oldRow){
row.date = rowDate;
}
- //if (oldRow && oldRow.waterSource == 'regulated' && row.waterSource == 'lixit'){
- //TODO: by pass water regulation to change water order to lixit and also chnage the water regulated animals data
- if ( row.waterSource == 'lixit' && !row.skipWaterRegulationCheck && !oldRow){
-
- let jsonArray = WNPRC.Utils.getJavaHelper().changeWaterScheduled(row.id,row.date,row.waterSource, row.project, row.objectid,this.extraContext);
- let jsonExtraContext = this.extraContext.extraContextArray;
-
- if (jsonArray != null){
- for (var i=0; i < jsonArray.length; i++){
- let errorObject = JSON.parse(jsonArray[i]);
- EHR.Server.Utils.addError(scriptErrors,errorObject.field, errorObject.message, errorObject.severity);
-
- }
- if (jsonExtraContext != null){
- for (var i = 0; i < jsonExtraContext.length; i++){
- let extraContextObject = jsonExtraContext[i];
- let date = extraContextObject.date;
- let dateOnly = new Date(date.getTime());
- dateOnly = dateOnly.getFullYear()+ "-" +dateOnly.getMonth()+ "-" + dateOnly.getDate();
- let infoMessage = "Water Order for "+ row.Id + " started on " + dateOnly + " with frequency of " + extraContextObject.frequency + " and volume of " + extraContextObject.volume + "ml will close.";
- EHR.Server.Utils.addError(scriptErrors,"waterSource",infoMessage,"INFO")
-
- }
-
+ if (row.Id && row.date && row.enddate && row.project && row.objectid && row.closingRecord){
+ let jsonArray = WNPRC.Utils.getJavaHelper().closeWaterOrder(row.id, row.date, row.enddate, row.project, row.objectid, row.closingRecord);
+ if (jsonArray != null) {
+ for (var i = 0; i < jsonArray.length; i++) {
+ var errorObject = jsonArray[i];
+ EHR.Server.Utils.addError(scriptErrors, errorObject.field, errorObject.message, errorObject.severity);
}
-
}
}
+ if ( row.waterSource === 'lixit' && row.volume === undefined && row.project && row.assignedTo && !row.skipWaterRegulationCheck){
+ changeWaterScheduled(row, scriptErrors);
+ }
}
function onUpdate(helper, scriptErrors, row, oldRow){
@@ -211,17 +227,40 @@ function onUpdate(helper, scriptErrors, row, oldRow){
}
}
}
+ }
-
- if (row.id !== oldRow.id || row.date !== oldRow.date || row.volume !== oldRow.volume)
- {
- //EHR.Server.Utils.addError(scriptErrors,'date');
-
- }
-
+ if ( row.waterSource === 'lixit' && row.project && row.volume === undefined && row.assignedTo && !row.skipWaterRegulationCheck){
+ changeWaterScheduled(row, scriptErrors);
}
}
function addErrorMessage(key,scriptErrors){
EHR.Server.Utils.addError(scriptErrors, key, 'User does not have permission to modify this field.', 'ERROR');
}
+
+function changeWaterScheduled(row, scriptErrors){
+
+ let jsonArray = WNPRC.Utils.getJavaHelper().changeWaterScheduled(row.id,row.date,row.waterSource, row.project, row.objectid,this.extraContext);
+ let jsonExtraContext = this.extraContext.extraContextArray;
+
+ if (jsonArray != null){
+ for (var i=0; i < jsonArray.length; i++){
+ let errorObject = jsonArray[i];
+ EHR.Server.Utils.addError(scriptErrors,errorObject.field, errorObject.message, errorObject.severity);
+ }
+ if (jsonExtraContext != null){
+ for (var j = 0; j < jsonExtraContext.length; j++){
+ let extraContextObject = jsonExtraContext[j];
+ let date = extraContextObject.date;
+ let dateOnly = new Date(date.getTime());
+ let monthString = dateOnly.getMonth();
+ monthString++;
+
+ dateOnly = dateOnly.getFullYear()+ "-" + monthString + "-" + dateOnly.getDate();
+ let infoMessage = "Water Order for "+ row.Id + " started on " + dateOnly + " with frequency of " + extraContextObject.frequency + " and volume of " + extraContextObject.volume + "ml will close.";
+ EHR.Server.Utils.addError(scriptErrors,"waterSource",infoMessage,"INFO");
+ }
+ }
+ }
+
+}
diff --git a/WNPRC_EHR/resources/queries/study/waterSchedule.sql b/WNPRC_EHR/resources/queries/study/waterSchedule.sql
index 9c921b9c0..fcc232cbe 100644
--- a/WNPRC_EHR/resources/queries/study/waterSchedule.sql
+++ b/WNPRC_EHR/resources/queries/study/waterSchedule.sql
@@ -10,9 +10,9 @@ d.calculated_status AS calculated_status,
s.*,
s.objectid as treatmentid,
--(SELECT max(d.qcstate) as label FROM study.drug d WHERE s.objectid = d.treatmentid AND s.date = d.timeordered) as treatmentStatus,
-COALESCE((SELECT max(wg.qcstate) as label FROM study.waterGiven wg WHERE wg.treatmentid LIKE '%' || s.objectid || '%' AND s.date = wg.dateordered AND wg.volume IS NOT NULL ),10) as waterStatus,
+COALESCE((SELECT max(wg.qcstate) as label FROM study.waterGiven wg WHERE wg.treatmentid LIKE '%' || s.objectid || '%' AND s.date = wg.dateordered AND (wg.volume IS NOT NULL OR wg.waterSource = 'lixit') ),10) as waterStatus,
--COALESCE((SELECT max(wg.qcstate) as label FROM study.waterGiven wg WHERE s.objectid IN (wg.treatmentid) AND s.date = wg.dateordered AND wg.volume IS NOT NULL ),10) as waterStatus,
-COALESCE((SELECT max(wg.treatmentid) as treatmentIds FROM study.waterGiven wg WHERE s.date = wg.dateordered AND wg.volume IS NOT NULL ),'objectId') as watertreatment
+COALESCE((SELECT max(wg.treatmentid) as treatmentIds FROM study.waterGiven wg WHERE s.date = wg.dateordered AND (wg.volume IS NOT NULL OR wg.waterSource = 'lixit') ),'objectId') as watertreatment
FROM study.demographics d
diff --git a/WNPRC_EHR/resources/queries/study/waterScheduleCoalesced/Treatments AM.qview.xml b/WNPRC_EHR/resources/queries/study/waterScheduleCoalesced/Treatments AM.qview.xml
index 11fffa874..d8c25f4f9 100644
--- a/WNPRC_EHR/resources/queries/study/waterScheduleCoalesced/Treatments AM.qview.xml
+++ b/WNPRC_EHR/resources/queries/study/waterScheduleCoalesced/Treatments AM.qview.xml
@@ -21,6 +21,7 @@
+
\ No newline at end of file
diff --git a/WNPRC_EHR/resources/queries/study/waterScheduleCoalesced/Treatments PM.qview.xml b/WNPRC_EHR/resources/queries/study/waterScheduleCoalesced/Treatments PM.qview.xml
index 25edae2bc..afb012fed 100644
--- a/WNPRC_EHR/resources/queries/study/waterScheduleCoalesced/Treatments PM.qview.xml
+++ b/WNPRC_EHR/resources/queries/study/waterScheduleCoalesced/Treatments PM.qview.xml
@@ -21,6 +21,7 @@
+
\ No newline at end of file
diff --git a/WNPRC_EHR/resources/queries/study/waterScheduleCoalesced/Treatments.qview.xml b/WNPRC_EHR/resources/queries/study/waterScheduleCoalesced/Treatments.qview.xml
index 70db97c06..518868d7f 100644
--- a/WNPRC_EHR/resources/queries/study/waterScheduleCoalesced/Treatments.qview.xml
+++ b/WNPRC_EHR/resources/queries/study/waterScheduleCoalesced/Treatments.qview.xml
@@ -25,7 +25,8 @@
-
-
+
+
+
\ No newline at end of file
diff --git a/WNPRC_EHR/resources/web/wnprc_ehr/animalWaterCalendar.js b/WNPRC_EHR/resources/web/wnprc_ehr/animalWaterCalendar.js
index 3b73b342c..a062785fc 100644
--- a/WNPRC_EHR/resources/web/wnprc_ehr/animalWaterCalendar.js
+++ b/WNPRC_EHR/resources/web/wnprc_ehr/animalWaterCalendar.js
@@ -15,6 +15,7 @@ EHR.reports.animalWaterCalendar = function (panel, tab){
} else if (panel.getFilterArray(tab).nonRemovable.length === 0){
entireColony = true;
panel.resolveSubjectsFromHousing(tab,renderCalendar,this);
+ calendarRender++;
//renderCalendar('null', tab)
}
else{
diff --git a/WNPRC_EHR/resources/web/wnprc_ehr/ext4/components/buttons/husbandryButtons.js b/WNPRC_EHR/resources/web/wnprc_ehr/ext4/components/buttons/husbandryButtons.js
index 942ca3c9f..e543bdc1e 100644
--- a/WNPRC_EHR/resources/web/wnprc_ehr/ext4/components/buttons/husbandryButtons.js
+++ b/WNPRC_EHR/resources/web/wnprc_ehr/ext4/components/buttons/husbandryButtons.js
@@ -250,4 +250,69 @@ Ext4.define('EHR.window.SubmitForReviewWindowHusbandry', {
this.callParent(arguments);
},
-});
\ No newline at end of file
+});
+
+
+EHR.DataEntryUtils.registerDataEntryFormButton('SUBMIT_WATER', {
+ text: 'Submit Final',
+ name: 'submit',
+ requiredQC: 'Completed',
+ targetQC: 'Completed',
+ errorThreshold: 'WARN',
+ successURL: LABKEY.ActionURL.getParameter('srcURL') || LABKEY.ActionURL.buildURL('wnprc_ehr', 'dataEntry.view'),
+ disabled: true,
+ itemId: 'submitWtrBtn',
+ disableOn: 'WARN',
+ handler: function(btn){
+ //this.onSubmit(btn);
+ // let waterGiven = btn.up('gridpanel').store;
+ // if (store.getFields().get('waterSource')){
+ //
+ // }
+
+ let waterStore = this.storeCollection.getServerStoreForQuery("study", "waterGiven");
+
+ if (waterStore){
+ var animalIds = [];
+ for (var idx=0; idx1){
+ animalIds.forEach((animalId)=> animalString+=animalId+',');
+ }else{
+ animalString = animalIds[0];
+ }
+
+ Ext4.MessageBox.show({
+ title: 'Lixit Confirmation',
+ msg: 'Is the water line connected for animal '+ animalString,
+ width: '300',
+ buttons: Ext4.MessageBox.YESNO,
+ icon: Ext4.MessageBox.QUESTION,
+ scope: this,
+ fn: function proceed(resp){
+ if (resp === 'yes'){
+ this.onSubmit(btn);
+ }else{
+ Ext4.MessageBox.hide();
+ }
+ }
+ });
+ }else {
+ this.onSubmit(btn);
+ }
+ }
+
+
+
+ //var panel = btn.up('ehr-dataentrypanel');
+
+
+ }
+
+});
diff --git a/WNPRC_EHR/resources/web/wnprc_ehr/ext4/utils/DataEntryButtons.js b/WNPRC_EHR/resources/web/wnprc_ehr/ext4/utils/DataEntryButtons.js
index 953f5569c..2078018f6 100644
--- a/WNPRC_EHR/resources/web/wnprc_ehr/ext4/utils/DataEntryButtons.js
+++ b/WNPRC_EHR/resources/web/wnprc_ehr/ext4/utils/DataEntryButtons.js
@@ -120,52 +120,6 @@
tooltip: "Set the status of this record to Complete, save the record, and leave this page."
}));
- var SubmitWaterButtonName = 'WNPRC_SUBMIT_WATER';
- registerBtn(SubmitWaterButtonName, _.extend(getBtn("SUBMIT"), {
- text: "Submit Water",
- name: "submit_water",
- successURL: getReturnURL() || LABKEY.ActionURL.buildURL('wnprc_ehr', 'dataEntry.view'),
- hideOnQCState: "Scheduled",
- tooltip: "Set the status of this record to Complete, save the record, and leave this page.",
- handler: function (btn){
- var storeCollection = this.storeCollection;
- let waterStore = storeCollection.getServerStoreForQuery("study", "waterGiven");
-
- if (waterStore){
- var animalIds = [];
- for (var idx=0; idx1){
- animalIds.forEach((animalId)=> animalString+=animalId+',');
- }else{
- animalString = animalIds[0];
- }
-
- Ext4.MessageBox.show({
- title: 'Lixit Confirmation',
- msg: 'Is the water line connected for animal '+ animalString,
- width: '300',
- buttons: Ext4.MessageBox.YESNO,
- icon: Ext4.MessageBox.QUESTION,
- fn: function proceed(resp){
- if (resp == 'yes'){
- this.onSubmit(btn);
- }else{
- Ext4.MessageBox.hide();
- }
- }
- });
- }
- }
- }
- }));
-
/*
* Prompt the user for a yes or no answer. Resolves on "yes" and rejects with an error with a
* message of "canceled" if "no" is selected.
diff --git a/WNPRC_EHR/resources/web/wnprc_ehr/ext4/windows/AddScheduleWaterWindow.js b/WNPRC_EHR/resources/web/wnprc_ehr/ext4/windows/AddScheduleWaterWindow.js
index d272d0435..f9667ed98 100644
--- a/WNPRC_EHR/resources/web/wnprc_ehr/ext4/windows/AddScheduleWaterWindow.js
+++ b/WNPRC_EHR/resources/web/wnprc_ehr/ext4/windows/AddScheduleWaterWindow.js
@@ -312,11 +312,15 @@ Ext4.define('wnprc_ehr.window.AddScheduledWaterWindow', {
}
waterObjects[Id].push(waterObject);
+ let volumeText = null;
+ if (row.getValue('volume') !== null){
+ volumeText = row.getValue('volume') + previousVolume
+ }
var tempModel = this.targetStore.createModel({
Id: row.getValue('Id'),
date: modelDate,
- volume: row.getValue('volume') + previousVolume,
+ volume: volumeText,
project: row.getValue('project'),
assignedto: row.getValue('assignedTo'),
waterSource: row.getValue('waterSource'),
diff --git a/WNPRC_EHR/resources/web/wnprc_ehr/model/sources/Encounter.js b/WNPRC_EHR/resources/web/wnprc_ehr/model/sources/Encounter.js
index 20591606d..81e748e23 100644
--- a/WNPRC_EHR/resources/web/wnprc_ehr/model/sources/Encounter.js
+++ b/WNPRC_EHR/resources/web/wnprc_ehr/model/sources/Encounter.js
@@ -51,7 +51,7 @@ EHR.model.DataModelManager.registerMetadata('Encounter', {
waterSource:{
editable: false,
allowBlank: false,
- shownInGrid: false
+ shownInGrid: true
},
remarks :{
diff --git a/WNPRC_EHR/resources/web/wnprc_ehr/model/sources/WaterOrderTask.js b/WNPRC_EHR/resources/web/wnprc_ehr/model/sources/WaterOrderTask.js
index 6364a0864..225e2abb0 100644
--- a/WNPRC_EHR/resources/web/wnprc_ehr/model/sources/WaterOrderTask.js
+++ b/WNPRC_EHR/resources/web/wnprc_ehr/model/sources/WaterOrderTask.js
@@ -98,7 +98,7 @@ EHR.model.DataModelManager.registerMetadata('WaterOrderTask', {
},
provideFruit:{
defaultValue: 'none',
- allowBlank: false,
+ allowBlank: true,
lookup:{
schemaName: 'ehr_lookups',
queryName: 'husbandry_fruit',
diff --git a/WNPRC_EHR/resources/web/wnprc_ehr/reports/IncompleteTreatmentsReport.js b/WNPRC_EHR/resources/web/wnprc_ehr/reports/IncompleteTreatmentsReport.js
index 57ac0fae9..f065e374e 100644
--- a/WNPRC_EHR/resources/web/wnprc_ehr/reports/IncompleteTreatmentsReport.js
+++ b/WNPRC_EHR/resources/web/wnprc_ehr/reports/IncompleteTreatmentsReport.js
@@ -10,6 +10,8 @@ EHR.reports.IncompleteTreatmentsReport = function (panel, tab) {
let reportStartDate = new Date();
reportStartDate.setDate(reportStartDate.getDate()-40);
reportStartDate = reportStartDate.format(LABKEY.extDefaultDateFormat)
+ var reportEndDate = new Date();
+ reportEndDate = reportEndDate.format(LABKEY.extDefaultDateFormat)
let config = panel.getQWPConfig({
title: 'Incomplete Water Treatments',
@@ -27,7 +29,7 @@ EHR.reports.IncompleteTreatmentsReport = function (panel, tab) {
schemaName: 'study',
queryName: 'waterTotalByDateWithWeight',
viewName: 'tooLittleWater',
- //parameters: {'NumDays': '180', 'StartDate': reportStartDate},
+ parameters: {'STARTTARGET': reportStartDate, 'ENDTARGETDATE': reportEndDate},
filters: filterArray.nonRemovable,
removeableFilters: filterArray.removable,
frame: true
diff --git a/WNPRC_EHR/resources/web/wnprc_ehr/wnprcHusbandryReports.js b/WNPRC_EHR/resources/web/wnprc_ehr/wnprcHusbandryReports.js
index 605134192..3110516f6 100644
--- a/WNPRC_EHR/resources/web/wnprc_ehr/wnprcHusbandryReports.js
+++ b/WNPRC_EHR/resources/web/wnprc_ehr/wnprcHusbandryReports.js
@@ -24,8 +24,40 @@ EHR.reports.waterGridCalendar = function (panel, tab) {
tab.add({
xtype: 'ldk-querypanel',
style: 'margin-bottom:20px;',
- queryConfig: config
+ queryConfig: config,
+ height: 3000
});
};
+
+EHR.reports.totalWaterByDay = function (panel, tab) {
+ var filterArray = panel.getFilterArray(tab);
+ var title = panel.getTitleSuffix();
+
+ var target = tab.add({tag: 'span', style: 'padding-bottom: 20px'});
+ tab.doLayout();
+ var reportStartDate = new Date("1947-02-10");
+ reportStartDate = reportStartDate.format(LABKEY.extDefaultDateFormat);
+ var reportEndDate = new Date();
+ reportEndDate = reportEndDate.format(LABKEY.extDefaultDateFormat);
+
+ var config = panel.getQWPConfig({
+ title: 'Total Water By Date',
+ schemaName: 'study',
+ queryName: 'waterTotalByDateWithWeight',
+ parameters: {'STARTTARGET': reportStartDate, 'ENDTARGETDATE': reportEndDate},
+ filters: filterArray.nonRemovable,
+ removeableFilters: filterArray.removable,
+ frame: true
+
+ });
+
+ tab.add({
+ xtype: 'ldk-querypanel',
+ style: 'margin-bottom:20px;',
+ queryConfig: config
+
+ });
+
+};
diff --git a/WNPRC_EHR/src/org/labkey/wnprc_ehr/TriggerScriptHelper.java b/WNPRC_EHR/src/org/labkey/wnprc_ehr/TriggerScriptHelper.java
index b2929a3c0..fd7b70a6d 100644
--- a/WNPRC_EHR/src/org/labkey/wnprc_ehr/TriggerScriptHelper.java
+++ b/WNPRC_EHR/src/org/labkey/wnprc_ehr/TriggerScriptHelper.java
@@ -4,10 +4,11 @@
import com.google.common.collect.Maps;
import org.apache.commons.beanutils.ConversionException;
import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.time.DateUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-import org.apache.commons.lang3.time.DateUtils;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import org.json.JSONArray;
import org.json.JSONObject;
import org.labkey.api.announcements.api.Announcement;
@@ -17,16 +18,16 @@
import org.labkey.api.data.CompareType;
import org.labkey.api.data.Container;
import org.labkey.api.data.ContainerManager;
-import org.labkey.api.data.Results;
-import org.labkey.api.data.SimpleFilter;
import org.labkey.api.data.ConvertHelper;
import org.labkey.api.data.JdbcType;
+import org.labkey.api.data.Results;
import org.labkey.api.data.Selector;
+import org.labkey.api.data.SimpleFilter;
import org.labkey.api.data.Sort;
import org.labkey.api.data.Table;
import org.labkey.api.data.TableInfo;
-import org.labkey.api.ehr.EHRDemographicsService;
import org.labkey.api.data.TableSelector;
+import org.labkey.api.ehr.EHRDemographicsService;
import org.labkey.api.ehr.EHRService;
import org.labkey.api.ehr.demographics.AnimalRecord;
import org.labkey.api.ehr.security.EHRDataAdminPermission;
@@ -39,14 +40,15 @@
import org.labkey.api.query.FieldKey;
import org.labkey.api.query.InvalidKeyException;
import org.labkey.api.query.QueryHelper;
-import org.labkey.api.query.QueryUpdateServiceException;
import org.labkey.api.query.QueryService;
+import org.labkey.api.query.QueryUpdateServiceException;
import org.labkey.api.query.UserSchema;
import org.labkey.api.security.User;
import org.labkey.api.security.UserManager;
+import org.labkey.api.study.security.SecurityEscalator;
+import org.labkey.api.util.DateUtil;
import org.labkey.api.util.PageFlowUtil;
import org.labkey.api.view.ActionURL;
-import org.labkey.api.study.security.SecurityEscalator;
import org.labkey.dbutils.api.SimpleQueryFactory;
import org.labkey.dbutils.api.SimpleQueryUpdater;
import org.labkey.dbutils.api.SimplerFilter;
@@ -62,11 +64,12 @@
import org.labkey.wnprc_ehr.notification.ProjectRequestNotification;
import org.labkey.wnprc_ehr.notification.VvcNotification;
+import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
-import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
+import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
@@ -84,7 +87,6 @@
import java.util.Set;
import java.util.TreeMap;
import java.util.UUID;
-import java.util.concurrent.atomic.AtomicBoolean;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@@ -1421,11 +1423,11 @@ public JSONArray checkWaterRegulation(String animalId, Date clientStartDate, Dat
JSONArray extraContextArray = new JSONArray();
boolean existingOrder = false;
+ // boolean closingWaterRecord = closingRecord;
Map majorErrorMap = new HashMap<>();
Map errorMap = new HashMap<>();
- //TODO: Check is the animal is at least one time in the WaterSchedule Table
if(checkIfAnimalInCondition(animalId,clientStartDate).size()==0){
JSONObject returnErrors = new JSONObject();
returnErrors.put("field", "Id");
@@ -1460,10 +1462,11 @@ public JSONArray checkWaterRegulation(String animalId, Date clientStartDate, Dat
SimpleFilter filter = new SimpleFilter(FieldKey.fromString("Id"), animalId);
filter.addCondition(FieldKey.fromString("date"), startDate.getTime(),CompareType.DATE_GTE);
filter.addCondition(FieldKey.fromString("waterSource"),"regulated");
- //filter.addCondition(FieldKey.fromString("frequency"), frequency);
+ filter.addCondition(FieldKey.fromString("QCState"), EHRService.get().getQCStates(container).get(EHRService.QCSTATES.Scheduled.getLabel()).getRowId(), CompareType.EQUAL);
+
//Adding all the water records from database to a list of waterRecord objects that can be compared
- TableSelector waterOrdersFromDatabase = new TableSelector(waterSchedule, PageFlowUtil.set( "taskId","objectid","lsid","Id", "date", "startDateCoalesced","endDateCoalescedFuture","dataSource","project","frequency", "assignedTo","volume","waterOrderObjectId"), filter, null);
+ TableSelector waterOrdersFromDatabase = new TableSelector(waterSchedule, PageFlowUtil.set( "taskId","objectid","lsid","Id", "date", "qcstate","startDateCoalesced","endDateCoalescedFuture","dataSource","project","frequency", "assignedTo","volume","waterOrderObjectId"), filter, null);
waterOrdersFromDatabase.setNamedParameters(parameters);
waterRecords.addAll(waterOrdersFromDatabase.getArrayList(WaterDataBaseRecord.class));
@@ -1500,10 +1503,10 @@ public JSONArray checkWaterRegulation(String animalId, Date clientStartDate, Dat
if (loopDate.compareTo(convertToLocalDateViaSqlDate(waterRecord.getDate()))==0){
- String serverMeaning = getMeaningFromRowid( waterRecord.getFrequency(), "husbandry_frequency", "wnprc" );
+ String serverFrequencyMeaning = getMeaningFromRowid( waterRecord.getFrequency(), "husbandry_frequency", "wnprc" );
//Check frequency compatibility with water orders in the server
- if (!checkFrequencyCompatibility(serverMeaning, meaningFrequency))
+ if (!checkFrequencyCompatibility(serverFrequencyMeaning, meaningFrequency))
{
//Formatting the dates to return a legible date for error message
@@ -1556,7 +1559,7 @@ else if (Date.from(endOfLoop.atStartOfDay(ZoneId.systemDefault()).toInstant()).g
//Adding dataSource, objetcId, severity and message to the exception in case of error
returnErrors.put("dataSource", waterRecord.getDataSource());
returnErrors.put("message", "Overlapping Water Order already in the system. Start date: " + startFormatDate +
- " End Date: " + endFormattedDate +" Frequency: "+waterRecord.getFrequency() +" Source: " + waterRecord.getDataSource() + " EDIT");
+ " End Date: " + endFormattedDate +" Frequency: "+serverFrequencyMeaning +" Source: " + waterRecord.getDataSource() + " EDIT");
returnErrors.put("objectId", waterRecord.getObjectId());
returnErrors.put("severity", "ERROR");
@@ -1619,7 +1622,8 @@ else if (Date.from(endOfLoop.atStartOfDay(ZoneId.systemDefault()).toInstant()).g
}
}
if (!returnErrors.isEmpty() && checkIfAnimalInCondition(animalId,clientStartDate).size()>0){
- errorMap.put(waterRecord.getObjectId(), returnErrors);
+ JSONObject returnErrorsExport = new JSONObject(returnErrors,JSONObject.getNames(returnErrors));
+ errorMap.put(waterRecord.getObjectId(), returnErrorsExport);
extraContext.put("extraContextArray", extraContextArray);
}
}
@@ -1838,38 +1842,190 @@ public JSONArray checkWaterSchedule(String animalId, Date clientDate, String ob
+ }
+
+ public JSONArray closeWaterOrder(String animalId, Date clientStartDate, Date clientEndDate, Integer project, String objectId, boolean closingRecord){
+ JSONArray arrayOfErrors = new JSONArray();
+ Map majorErrorMap = new HashMap<>();
+ Map errorMap = new HashMap<>();
+
+ if(checkIfAnimalInCondition(animalId,clientStartDate).size()==0){
+ JSONObject returnErrors = new JSONObject();
+ returnErrors.put("field", "Id");
+ returnErrors.put("severity","ERROR");
+ returnErrors.put("message","Animal not in waterScheduledAnimals table, contact compliance staff to enter new animals into the water monitoring system");
+ majorErrorMap.put(objectId, returnErrors);
+
+ }
+
+ if (majorErrorMap.isEmpty()){
+ //Closing existing lixit order in the system and adding a record in the waterScheduleAnimals table
+ TableInfo waterOrders = getTableInfo("study","waterOrders");
+ SimpleFilter filterOrders = new SimpleFilter (FieldKey.fromString("objectid"), objectId);
+ filterOrders.addCondition(FieldKey.fromString("Id"), animalId, CompareType.EQUAL);
+
+ TableSelector waterOrderRecords = new TableSelector(waterOrders, PageFlowUtil.set("lsid", "id", "date","frequency","enddate"),filterOrders,null);
+ Map [] waterOrderObject = waterOrderRecords.getMapArray();
+
+
+ if (waterOrderObject.length > 0){
+ List