Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

var console = require("console");
var LABKEY = require("labkey");
var ldkUtils = require("ldk/Utils").LDK.Server.Utils;

var helper = org.labkey.ldk.query.LookupValidationHelper.create(LABKEY.Security.currentContainer.id, LABKEY.Security.currentUser.id, 'ehr_compliancedb', 'completiondates');

Expand All @@ -27,17 +28,5 @@ function beforeUpdate(row, oldRow, errors){
}

function beforeUpsert(row, errors){
var lookupFields = ['employeeid', 'requirementname'];
for (var i=0;i<lookupFields.length;i++){
var f = lookupFields[i];
var val = row[f];
if (!LABKEY.ExtAdapter.isEmpty(val)){
var normalizedVal = helper.getLookupValue(val, f);

if (LABKEY.ExtAdapter.isEmpty(normalizedVal))
errors[f] = 'Unknown value for field: ' + f + '. Value was: ' + val;
else
row[f] = normalizedVal; //cache value for purpose of normalizing case
}
}
ldkUtils.normalizeLookupFields(helper, row, errors, ['employeeid', 'requirementname']);
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ function afterUpdate(row, oldRow, errors){
helper.cascadeUpdate('ehr_compliancedb', 'employees', 'category', row[fieldName], oldRow[fieldName]);
helper.cascadeUpdate('ehr_compliancedb', 'requirementspercategory', 'category', row[fieldName], oldRow[fieldName]);
helper.cascadeUpdate('ehr_compliancedb', 'sopbycategory', 'category', row[fieldName], oldRow[fieldName]);
helper.cascadeUpdate('ehr_compliancedb', 'employeeperunit', 'category', row[fieldName], oldRow[fieldName]);
}
}
}
Expand All @@ -35,6 +36,10 @@ function beforeDelete(row, errors){
if (helper.verifyNotUsed('ehr_compliancedb', 'sopbycategory', 'category', row[fieldName], 'employeecategory')){
addError(errors, fieldName, 'Cannot delete row with value: ' + row[fieldName] + ' because it is referenced by the sopbycategory table');
}

if (helper.verifyNotUsed('ehr_compliancedb', 'employeeperunit', 'category', row[fieldName], 'employeecategory')){
addError(errors, fieldName, 'Cannot delete row with value: ' + row[fieldName] + ' because it is referenced by the employeeperunit table');
}
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/*
* Copyright (c) 2026 LabKey Corporation
*
* Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0
*/

var LABKEY = require("labkey");
var ldkUtils = require("ldk/Utils").LDK.Server.Utils;

var helper = org.labkey.ldk.query.LookupValidationHelper.create(LABKEY.Security.currentContainer.id, LABKEY.Security.currentUser.id, 'ehr_compliancedb', 'employeeperunit');

function beforeInsert(row, errors){
beforeUpsert(row, errors);
}

function beforeUpdate(row, oldRow, errors){
//NOTE: this is designed to merge the old row into the new one.
for (var prop in oldRow){
if(!row.hasOwnProperty(prop) && LABKEY.ExtAdapter.isDefined(oldRow[prop])){
row[prop] = oldRow[prop];
}
}

beforeUpsert(row, errors);
}

function beforeUpsert(row, errors){
ldkUtils.normalizeLookupFields(helper, row, errors, ['employeeid', 'unit', 'category']);
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

var console = require("console");
var LABKEY = require("labkey");
var ldkUtils = require("ldk/Utils").LDK.Server.Utils;

var helper = org.labkey.ldk.query.LookupValidationHelper.create(LABKEY.Security.currentContainer.id, LABKEY.Security.currentUser.id, 'ehr_compliancedb', 'employeerequirementexemptions');

Expand All @@ -27,17 +28,5 @@ function beforeUpdate(row, oldRow, errors){
}

function beforeUpsert(row, errors){
var lookupFields = ['employeeid', 'requirementname'];
for (var i=0;i<lookupFields.length;i++){
var f = lookupFields[i];
var val = row[f];
if (!LABKEY.ExtAdapter.isEmpty(val)){
var normalizedVal = helper.getLookupValue(val, f);

if (LABKEY.ExtAdapter.isEmpty(normalizedVal))
errors[f] = 'Unknown value for field: ' + f + '. Value was: ' + val;
else
row[f] = normalizedVal; //cache value for purpose of normalizing case
}
}
ldkUtils.normalizeLookupFields(helper, row, errors, ['employeeid', 'requirementname']);
}
18 changes: 4 additions & 14 deletions EHR_ComplianceDB/resources/queries/ehr_compliancedb/employees.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

var console = require("console");
var LABKEY = require("labkey");
var ldkUtils = require("ldk/Utils").LDK.Server.Utils;

var helper = org.labkey.ldk.query.LookupValidationHelper.create(LABKEY.Security.currentContainer.id, LABKEY.Security.currentUser.id, 'ehr_compliancedb', 'employees');

Expand All @@ -27,19 +28,7 @@ function beforeUpdate(row, oldRow, errors){
}

function beforeUpsert(row, errors){
var lookupFields = ['type', 'title', 'category', 'unit', 'location'];
for (var i=0;i<lookupFields.length;i++){
var f = lookupFields[i];
var val = row[f];
if (!LABKEY.ExtAdapter.isEmpty(val)){
var normalizedVal = helper.getLookupValue(val, f);

if (LABKEY.ExtAdapter.isEmpty(normalizedVal))
errors[f] = 'Unknown value for field: ' + f + '. Value was: ' + val;
else
row[f] = normalizedVal; //cache value for purpose of normalizing case
}
}
ldkUtils.normalizeLookupFields(helper, row, errors, ['type', 'title', 'category', 'unit', 'location']);
}

function afterUpdate(row, oldRow, errors){
Expand All @@ -48,6 +37,7 @@ function afterUpdate(row, oldRow, errors){
fieldName = fields[i];
if (row[fieldName] && oldRow[fieldName] && row[fieldName] != oldRow[fieldName]){
helper.cascadeUpdate('ehr_compliancedb', 'employeerequirementexemptions', 'employeeid', row[fieldName], oldRow[fieldName]);
helper.cascadeUpdate('ehr_compliancedb', 'employeeperunit', 'employeeid', row[fieldName], oldRow[fieldName]);
helper.cascadeUpdate('ehr_compliancedb', 'requirementsperemployee', 'employeeid', row[fieldName], oldRow[fieldName]);
helper.cascadeUpdate('ehr_compliancedb', 'sopdates', 'employeeid', row[fieldName], oldRow[fieldName]);
helper.cascadeUpdate('ehr_compliancedb', 'completiondates', 'employeeid', row[fieldName], oldRow[fieldName]);
Expand All @@ -57,7 +47,7 @@ function afterUpdate(row, oldRow, errors){
}

function beforeDelete(row, errors){
var queries = ['employeerequirementexemptions', 'requirementsperemployee', 'sopdates', 'completiondates'], query;
var queries = ['employeerequirementexemptions', 'employeeperunit', 'requirementsperemployee', 'sopdates', 'completiondates'], query;
var fields = ['employeeid'], fieldName;
for (var j=0;j<queries.length;j++){
query = queries[j];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

var console = require("console");
var LABKEY = require("labkey");
var ldkUtils = require("ldk/Utils").LDK.Server.Utils;

var helper = org.labkey.ldk.query.LookupValidationHelper.create(LABKEY.Security.currentContainer.id, LABKEY.Security.currentUser.id, 'ehr_compliancedb', 'requirements');

Expand All @@ -27,19 +28,7 @@ function beforeUpdate(row, oldRow, errors){
}

function beforeUpsert(row, errors){
var lookupFields = ['type'];
for (var i=0;i<lookupFields.length;i++){
var f = lookupFields[i];
var val = row[f];
if (!LABKEY.ExtAdapter.isEmpty(val)){
var normalizedVal = helper.getLookupValue(val, f);

if (LABKEY.ExtAdapter.isEmpty(normalizedVal))
errors[f] = 'Unknown value for field: ' + f + '. Value was: ' + val;
else
row[f] = normalizedVal; //cache value for purpose of normalizing case
}
}
ldkUtils.normalizeLookupFields(helper, row, errors, ['type']);
}

function afterUpdate(row, oldRow, errors){
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

var console = require("console");
var LABKEY = require("labkey");
var ldkUtils = require("ldk/Utils").LDK.Server.Utils;

var helper = org.labkey.ldk.query.LookupValidationHelper.create(LABKEY.Security.currentContainer.id, LABKEY.Security.currentUser.id, 'ehr_compliancedb', 'requirementspercategory');

Expand All @@ -27,17 +28,5 @@ function beforeUpdate(row, oldRow, errors){
}

function beforeUpsert(row, errors){
var lookupFields = ['requirementname', 'category', 'unit'];
for (var i=0;i<lookupFields.length;i++){
var f = lookupFields[i];
var val = row[f];
if (!LABKEY.ExtAdapter.isEmpty(val)){
var normalizedVal = helper.getLookupValue(val, f);

if (LABKEY.ExtAdapter.isEmpty(normalizedVal))
errors[f] = 'Unknown value for field: ' + f + '. Value was: ' + val;
else
row[f] = normalizedVal; //cache value for purpose of normalizing case
}
}
ldkUtils.normalizeLookupFields(helper, row, errors, ['requirementname', 'category', 'unit']);
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

var console = require("console");
var LABKEY = require("labkey");
var ldkUtils = require("ldk/Utils").LDK.Server.Utils;

var helper = org.labkey.ldk.query.LookupValidationHelper.create(LABKEY.Security.currentContainer.id, LABKEY.Security.currentUser.id, 'ehr_compliancedb', 'requirementsperemployee');

Expand All @@ -27,17 +28,5 @@ function beforeUpdate(row, oldRow, errors){
}

function beforeUpsert(row, errors){
var lookupFields = ['employeeid', 'requirementname'];
for (var i=0;i<lookupFields.length;i++){
var f = lookupFields[i];
var val = row[f];
if (!LABKEY.ExtAdapter.isEmpty(val)){
var normalizedVal = helper.getLookupValue(val, f);

if (LABKEY.ExtAdapter.isEmpty(normalizedVal))
errors[f] = 'Unknown value for field: ' + f + '. Value was: ' + val;
else
row[f] = normalizedVal; //cache value for purpose of normalizing case
}
}
ldkUtils.normalizeLookupFields(helper, row, errors, ['employeeid', 'requirementname']);
}
30 changes: 30 additions & 0 deletions EHR_ComplianceDB/resources/queries/ehr_compliancedb/sopdates.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/*
* Copyright (c) 2026 LabKey Corporation
*
* Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0
*/

var LABKEY = require("labkey");
var ldkUtils = require("ldk/Utils").LDK.Server.Utils;

var helper = org.labkey.ldk.query.LookupValidationHelper.create(LABKEY.Security.currentContainer.id, LABKEY.Security.currentUser.id, 'ehr_compliancedb', 'sopdates');

function beforeInsert(row, errors){
beforeUpsert(row, errors);
}

function beforeUpdate(row, oldRow, errors){
//NOTE: this is designed to merge the old row into the new one.
for (var prop in oldRow){
if(!row.hasOwnProperty(prop) && LABKEY.ExtAdapter.isDefined(oldRow[prop])){
row[prop] = oldRow[prop];
}
}

beforeUpsert(row, errors);
}

function beforeUpsert(row, errors){
//sopid is omitted deliberately: its fk to sops is commented out in ehr_compliancedb.xml, so getLookupValue would return null and reject every row
ldkUtils.normalizeLookupFields(helper, row, errors, ['employeeid']);
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,13 @@ function afterUpdate(row, oldRow, errors){
if (row[fieldName] && oldRow[fieldName] && row[fieldName] != oldRow[fieldName]){
helper.cascadeUpdate('ehr_compliancedb', 'requirementspercategory', 'unit', row[fieldName], oldRow[fieldName]);
helper.cascadeUpdate('ehr_compliancedb', 'employees', 'unit', row[fieldName], oldRow[fieldName]);
helper.cascadeUpdate('ehr_compliancedb', 'employeeperunit', 'unit', row[fieldName], oldRow[fieldName]);
}
}
}

function beforeDelete(row, errors){
var queries = ['requirementspercategory', 'employees'], query;
var queries = ['requirementspercategory', 'employees', 'employeeperunit'], query;
var fields = ['unit'], fieldName;
for (var j=0;j<queries.length;j++){
query = queries[j];
Expand Down
3 changes: 1 addition & 2 deletions ehr/resources/web/ehr/studyButtons.js
Original file line number Diff line number Diff line change
Expand Up @@ -139,8 +139,7 @@ EHR.DatasetButtons = new function () {
var params = {
schemaName: 'auditLog',
'query.queryName': 'DatasetAuditEvent',
'query.viewName': 'Detailed',
'query.intkey1~eq': row['Dataset/DataSetId']
'query.datasetId~eq': row['Dataset/DataSetId']
};

//NOTE: for demographics data, the objectId is not part of the LSID. therefore the best we can do is filter on Id, even though this might have changed over the life of the record.
Expand Down
5 changes: 4 additions & 1 deletion ehr/src/org/labkey/ehr/utils/TriggerScriptHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
import org.labkey.api.data.SQLFragment;
import org.labkey.api.data.Selector;
import org.labkey.api.data.SimpleFilter;
import org.labkey.api.data.Sort;
import org.labkey.api.data.SqlExecutor;
import org.labkey.api.data.SqlSelector;
import org.labkey.api.data.Table;
Expand Down Expand Up @@ -1781,7 +1782,9 @@ public void updateStatusField(List<String> ids, Map<String, List<Date>> liveBirt
ColumnInfo acquisitionColumn = columns.get(acquisitionFieldKey);
if (acquisitionColumn != null)
{
TableSelector ts = new TableSelector(arrivalTable, Collections.singleton(acquisitionColumn), new SimpleFilter(FieldKey.fromParts("Id"), id), null);
// In some cases, an animal can arrive more than once, so bound this to one row: unbounded, getObject()
// throws on the extra rows rather than picking one. Sort so the row picked is the latest arrival, not arbitrary.
TableSelector ts = new TableSelector(arrivalTable, Collections.singleton(acquisitionColumn), new SimpleFilter(FieldKey.fromParts("Id"), id), new Sort("-date")).setMaxRows(1);
acquitype = ts.getObject(String.class);
}
}
Expand Down
Loading