diff --git a/WNPRC_EHR/resources/web/wnprc_ehr/datasetButtons.js b/WNPRC_EHR/resources/web/wnprc_ehr/datasetButtons.js
index 51ea4fd69..a02a93d60 100644
--- a/WNPRC_EHR/resources/web/wnprc_ehr/datasetButtons.js
+++ b/WNPRC_EHR/resources/web/wnprc_ehr/datasetButtons.js
@@ -673,6 +673,25 @@ WNPRC_EHR.DatasetButtons = new function(){
}
}
},
+
+ checkBloodSchedule: function(records) {
+
+ return new Promise((resolve, reject) => {
+ LABKEY.Ajax.request({
+ url: LABKEY.ActionURL.buildURL('WNPRC_EHR', 'CompareBloodSchedules'),
+ jsonData: { records: records },
+ callback: function (config, success, xhr) {
+ if (success) {
+ resolve(xhr.responseText);
+ } else {
+ reject('Couldn\'t compare blood schedule, internal error.');
+ }
+ }
+ })
+ });
+
+ },
+
/**
* This add a handler to a dataset that allows the user to change the QCState of the records, designed to approve or deny blood requests.
* It also captures values for 'billedBy' and 'instructions'.
@@ -710,14 +729,26 @@ WNPRC_EHR.DatasetButtons = new function(){
title: 'Change Request Status',
width: 430,
autoHeight: true,
+ id: 'change-request-window',
items: [{
xtype: 'form',
+ height: '100%',
ref: 'theForm',
+ id: 'change-request-form',
+ autoHeight: true,
bodyStyle: 'padding: 5px;',
defaults: {
border: false
},
- items: [{
+ items: [
+
+ {
+ id:'bloodCompareResponseWrapper',
+ height: '100%',
+ html: '
loading..
',
+ tag: 'div'
+ },
+ {
html: 'Total Records: '+checked.length+'
',
tag: 'div'
},{
@@ -767,10 +798,11 @@ WNPRC_EHR.DatasetButtons = new function(){
}],
buttons: [{
text:'Submit',
- disabled:false,
+ disabled:true,
formBind: true,
ref: '../submit',
scope: this,
+ id: 'submitButton',
handler: function(o){
var win = o.up('window');
var form = win.down('form');
@@ -848,7 +880,37 @@ WNPRC_EHR.DatasetButtons = new function(){
handler: function(o){
o.ownerCt.ownerCt.close();
}
- }]
+ }],
+ listeners: {
+ afterrender: () => {
+ this.checkBloodSchedule(records).then(response => {
+ let resp = document.getElementById('bloodCompareResponse');
+ let rsp = JSON.parse(response).message;
+ let txt = '';
+ if (rsp) {
+ for (let item of rsp) {
+ txt += '' + item.message + ' (Project(s): ' + item.projects + '; Contacts: ' + item.emails + '' + ')';
+ }
+ }
+ if (txt.length > 0){
+ txt = ''
+ resp.innerHTML = ' Warning: ' + txt;
+ } else {
+ resp.innerHTML = '';
+ }
+ Ext4.getCmp('submitButton').enable()
+ // Have to reset the height since the form has a set height after initial rendering,
+ // but when text is dynamically added the height does not change.
+ Ext4.getCmp('change-request-form').setHeight('100%')
+ }).catch(error => {
+ Ext4.getCmp('submitButton').enable()
+ console.error(error);
+ let resp = document.getElementById('bloodCompareResponse');
+ resp.innerHTML = 'Error checking blood schedule, you are still able to submit. Please contact EHR admins with details: ' + new Date() + ' ' + JSON.parse(error) + '
'
+ Ext4.getCmp('change-request-form').setHeight('100%')
+ });
+ }
+ }
}).show();
}
},
diff --git a/WNPRC_EHR/src/org/labkey/wnprc_ehr/WNPRC_EHRController.java b/WNPRC_EHR/src/org/labkey/wnprc_ehr/WNPRC_EHRController.java
index e6e06d899..4742774b7 100644
--- a/WNPRC_EHR/src/org/labkey/wnprc_ehr/WNPRC_EHRController.java
+++ b/WNPRC_EHR/src/org/labkey/wnprc_ehr/WNPRC_EHRController.java
@@ -37,6 +37,7 @@
import org.labkey.api.action.SimpleRedirectAction;
import org.labkey.api.action.SpringActionController;
import org.labkey.api.data.ColumnInfo;
+import org.labkey.api.data.CompareType;
import org.labkey.api.data.Container;
import org.labkey.api.data.CoreSchema;
import org.labkey.api.data.DbSchema;
@@ -76,11 +77,13 @@
import org.labkey.api.security.RequiresPermission;
import org.labkey.api.security.RequiresSiteAdmin;
import org.labkey.api.security.User;
+import org.labkey.api.security.UserManager;
import org.labkey.api.security.permissions.AdminPermission;
import org.labkey.api.security.permissions.ReadPermission;
import org.labkey.api.study.Dataset;
import org.labkey.api.study.StudyService;
import org.labkey.api.util.ExceptionUtil;
+import org.labkey.api.util.PageFlowUtil;
import org.labkey.api.util.Path;
import org.labkey.api.util.ResultSetUtil;
import org.labkey.api.util.URLHelper;
@@ -122,6 +125,8 @@
import java.io.InputStreamReader;
import java.nio.file.Paths;
import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
@@ -129,6 +134,7 @@
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -2105,4 +2111,198 @@ public Object execute(Object o, BindException errors) throws Exception
return response;
}
}
+
+ public static class CompareBloodSchedulesForm
+ {
+ private List