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
15 changes: 12 additions & 3 deletions nirc_ehr/resources/queries/study/arrival.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,8 @@ EHR.Server.TriggerManager.registerHandlerForQuery(EHR.Server.TriggerManager.Even
Id: row.Id,
date: row.birth,
qcstate: row.qcstate,
taskid: row.taskid
taskid: row.taskid,
performedby: row.performedby
}

var birthErrors = triggerHelper.saveBirthRecord(row.Id, birthInfo);
Expand All @@ -67,7 +68,8 @@ EHR.Server.TriggerManager.registerHandlerForQuery(EHR.Server.TriggerManager.Even
date: row.date,
taskid: row.taskid,
remark: row.remark,
qcstate: row.qcstate
qcstate: row.qcstate,
performedby: row.performedby
}

if (row.project) {
Expand All @@ -89,7 +91,8 @@ EHR.Server.TriggerManager.registerHandlerForQuery(EHR.Server.TriggerManager.Even
cage: row.cage,
taskid: row.taskid,
qcstate: row.qcstate,
reason: row.arrivalType
reason: row.arrivalType,
performedby: row.performedby
}

var housingErrors = triggerHelper.createHousingRecord(row.Id, housingRec, "arrival");
Expand Down Expand Up @@ -152,6 +155,12 @@ EHR.Server.TriggerManager.registerHandlerForQuery(EHR.Server.TriggerManager.Even
hasUpdates = true;
}

if (row.performedby && row.performedby !== data.performedby)
{
obj.performedby = row.performedby;
hasUpdates = true;
}

if (hasUpdates)
{
console.info("Arrival update for animal Id " + row.Id + " included demographic changes Demographic record updated.");
Expand Down
14 changes: 11 additions & 3 deletions nirc_ehr/resources/queries/study/birth.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ EHR.Server.TriggerManager.registerHandlerForQuery(EHR.Server.TriggerManager.Even
date: row.date,
taskid: row.taskid,
remark: row.remark,
qcstate: row.qcstate
qcstate: row.qcstate,
performedby: row.performedby
}

if (row.project) {
Expand All @@ -62,7 +63,8 @@ EHR.Server.TriggerManager.registerHandlerForQuery(EHR.Server.TriggerManager.Even
cage: row.cage,
taskid: row.taskid,
qcstate: row.qcstate,
reason: 'Husbandry'
reason: 'Husbandry',
performedby: row.performedby
}

var housingErrors = triggerHelper.createHousingRecord(row.Id, housingRec, "birth");
Expand All @@ -87,7 +89,8 @@ EHR.Server.TriggerManager.registerHandlerForQuery(EHR.Server.TriggerManager.Even
gender: row['Id/demographics/gender'] || null,
taskid: row.taskid,
remark: row.remark,
QCStateLabel: row.QCStateLabel
QCStateLabel: row.QCStateLabel,
performedby: row.performedby
};

//find dam, if provided
Expand Down Expand Up @@ -136,6 +139,11 @@ EHR.Server.TriggerManager.registerHandlerForQuery(EHR.Server.TriggerManager.Even
hasUpdates = true;
}

if (obj.performedby && obj.performedby !== data.performedby) {
record.performedby = obj.performedby;
hasUpdates = true;
}

if (obj.QCStateLabel && obj.QCStateLabel !== data.QCStateLabel) {
record.QCStateLabel = obj.QCStateLabel;
hasUpdates = true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@
</column>
<column columnName="performedBy">
<columnTitle>Performed By</columnTitle>
<nullable>false</nullable>
</column>
<column columnName="scheduledDate">
<columnTitle>Scheduled Date</columnTitle>
Expand Down
3 changes: 2 additions & 1 deletion nirc_ehr/resources/queries/study/housing.query.xml
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,8 @@
</fk>
</column>
<column columnName="remark"/>
<column columnName="performedBy" />
<column columnName="performedBy">
</column>
</columns>
</table>
</tables>
Expand Down
3 changes: 2 additions & 1 deletion nirc_ehr/resources/queries/study/necropsy.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,8 @@ function onUpsert(helper, scriptErrors, row, oldRow) {
date: row.date,
weight: row.necropsyWeight,
taskid: row.taskid,
qcstate: qcstate
qcstate: qcstate,
performedby: row.performedby
};
triggerHelper.upsertWeightRecord(weightRecord);
}
Expand Down
42 changes: 33 additions & 9 deletions nirc_ehr/resources/web/nirc_ehr/model/sources/NIRCDefault.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ EHR.model.DataModelManager.registerMetadata('Default', {
},
performedby: {
hidden: false,
allowBlank: true,
defaultValue: LABKEY.Security.currentUser.id,
getInitialValue: function (v, rec) {
return LABKEY.Security.currentUser.id;
Expand Down Expand Up @@ -112,15 +113,6 @@ EHR.model.DataModelManager.registerMetadata('Default', {
'enddate': {
hidden: true
},
performedby: {
allowBlank: false,
lookup: {
schemaName: 'core',
queryName: 'users',
keyColumn: 'UserId',
displayColumn: 'DisplayName',
},
},
reason: {
defaultValue: null,
allowBlank: false,
Expand All @@ -131,6 +123,35 @@ EHR.model.DataModelManager.registerMetadata('Default', {
filterArray: [LABKEY.Filter.create('date_disabled', null, LABKEY.Filter.Types.ISBLANK)]
}
},
performedby: {
hidden: false,
allowBlank: true,
defaultValue: LABKEY.Security.currentUser.id,
lookup: {
schemaName: 'core',
queryName: 'users',
keyColumn: 'UserId',
displayColumn: 'DisplayName',
columns: 'UserId,DisplayName,FirstName,LastName',
sort: 'Type,DisplayName'
},
getInitialValue: function (v, rec) {
return LABKEY.Security.currentUser.id;
},
editorConfig: {
store: {
type: 'labkey-store',
schemaName: 'core',

// 'performedby' is a text field in the dataset and its lookup to the userid is an int field - this mismatch causes it to disappear
// from the display when a value is selected from the dropdown even though the 'userid' value gets saved as a text (this behavior was only seen
// in the form panel but not in the grid panel).
// casting it as a varchar when loading the store fixes this issue.
sql: "SELECT CAST (UserId AS VARCHAR) AS UserId,DisplayName,FirstName,LastName FROM core.PrincipalsWithoutAdmin WHERE active = TRUE AND Type = 'u'",
autoLoad: true
}
}
},
},
'study.arrival': {
initialRoom: {
Expand Down Expand Up @@ -190,6 +211,9 @@ EHR.model.DataModelManager.registerMetadata('Default', {
treatmentid: {
hidden: true,
nullable: true
},
performedby: {
allowBlank: true,
}
},
'study.observation_order': {
Expand Down
15 changes: 15 additions & 0 deletions nirc_ehr/src/org/labkey/nirc_ehr/query/NIRC_EHRTriggerHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ public String createHousingRecord(String id, Map<String, Object> row, String for
Date date = ConvertHelper.convert(row.get("date"), Date.class);
String location = ConvertHelper.convert(row.get("cage"), String.class);
String reason = ConvertHelper.convert(row.get("reason"), String.class);
Integer performedby = ConvertHelper.convert(row.get("performedby"), Integer.class);
if (id == null || date == null || location == null)
return "Attempting to create a housing record with no id, date, or location";

Expand Down Expand Up @@ -166,6 +167,7 @@ else if (enddate == null || enddate.after(deathDate))
saveRow.put("taskId", taskId);
saveRow.put("qcstate", qcstate);
saveRow.put("reason", reason);
saveRow.put("performedby", performedby);
if (updateRecord)
saveRow.put("objectid", ts.getMap().get("objectid"));
else
Expand Down Expand Up @@ -220,6 +222,11 @@ public String saveBirthRecord(String id, Map<String, Object> row) throws QueryUp
return "Attempting to create a birth record with no qcstate";
}

Integer performedby = ConvertHelper.convert(row.get("performedby"), Integer.class);
if (performedby == null) {
return "Attempting to create a birth record with no performedby";
}

TableInfo ti = getTableInfo("study", "birth");

// If there is already a housing record for this task, update that record
Expand All @@ -236,6 +243,7 @@ public String saveBirthRecord(String id, Map<String, Object> row) throws QueryUp
saveRow.put("date", date);
saveRow.put("taskId", taskId);
saveRow.put("qcstate", qcstate);
saveRow.put("performedby", performedby);
if (updateRecord)
{
saveRow.put("objectid", ts.getMap().get("objectid"));
Expand Down Expand Up @@ -315,6 +323,7 @@ public void upsertWeightRecord(Map<String, Object> row) throws QueryUpdateServic
saveRow.put("date", date);
saveRow.put("taskid", taskId);
saveRow.put("qcstate", row.get("qcstate"));
saveRow.put("performedby", row.get("performedby"));
if (updateRecord)
{
saveRow.put("objectid", ts.getMap().get("objectid"));
Expand Down Expand Up @@ -570,6 +579,11 @@ public String createAssignmentRecord(String dataset, String id, Map<String, Obje
return "Attempting to create a project assignment record with no qcstate";
}

String performedby = ConvertHelper.convert(row.get("performedby"), String.class);
if (performedby == null) {
return "Attempting to create a project assignment record with no performedby";
}

boolean updateRecord = false;

// If there is already a project assignment record for this task, update that record
Expand All @@ -586,6 +600,7 @@ public String createAssignmentRecord(String dataset, String id, Map<String, Obje
saveRow.put("date", date);
saveRow.put("taskId", taskId);
saveRow.put("qcstate", qcstate);
saveRow.put("performedby", performedby);
if (updateRecord)
{
saveRow.put("objectid", ts.getMap().get("objectid"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,20 +11,44 @@

/**
* Shared dataset trigger to add triggers to act on all the study datasets.
* */
*/
public class NIRC_EHRSharedDatasetTrigger implements Trigger
{
private void transformAnimalIdToUpperCase(Map<String, Object> row)
{
if (row != null && row.containsKey("Id"))
if (row != null && row.containsKey("Id") && row.get("Id") != null)
{
row.put("Id", ((String) row.get("Id")).toUpperCase());
}
}

private void verifyPerformedBy(TableInfo table, @Nullable Map<String, Object> newRow, ValidationException errors)
{
if (newRow != null && newRow.containsKey("performedby") && newRow.get("performedby") == null)
{
if (!newRow.containsKey("QCStateLabel") || newRow.get("QCStateLabel") == null)
{
errors.addFieldError("performedby", "Record in " + table.getTitle() + " cannot be submitted without Performed By if QCStateLabel is not found. Contact your administrator.");
}
else if (newRow.containsKey("QCStateLabel") && newRow.get("QCStateLabel").equals("Completed"))
{
errors.addFieldError("performedby", "Performed By must be entered in all records before submitting final. Table: " + table.getTitle());
}
}
}

@Override
public void beforeInsert(TableInfo table, Container c, User user, @Nullable Map<String, Object> newRow, ValidationException errors, Map<String, Object> extraContext) throws ValidationException
{
transformAnimalIdToUpperCase(newRow);
verifyPerformedBy(table, newRow, errors);
}

@Override
public void beforeUpdate(TableInfo table, Container c,
User user, @Nullable Map<String, Object> newRow, @Nullable Map<String, Object> oldRow,
ValidationException errors, Map<String, Object> extraContext) throws ValidationException
{
verifyPerformedBy(table, newRow, errors);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
objectid Id QCStateLabel date remark Description
1 TEST4551032 Completed -4377d nunc augue feugiat neque imperdiet et ornare euismod consequat
2 TEST5904521 Completed -4188d tellus sit semper fringilla arcu tincidunt turpis quis imperdiet ultrices eleifend
3 TEST1993532 Completed -6088d ut erat auctor fringilla hendrerit vitae ornare
4 44442 Completed -6100d
5 44443 Completed -6100d
objectid Id QCStateLabel date remark Description performedby
1 TEST4551032 Completed -4377d nunc augue feugiat neque imperdiet et ornare euismod consequat 1004
2 TEST5904521 Completed -4188d tellus sit semper fringilla arcu tincidunt turpis quis imperdiet ultrices eleifend 1004
3 TEST1993532 Completed -6088d ut erat auctor fringilla hendrerit vitae ornare 1004
4 44442 Completed -6100d 1004
5 44443 Completed -6100d 1004
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
objectid Id QCStateLabel date enddate project
1 44444 Completed -1381d -1321d 795644
2 44444 Completed -1321d 640991
3 44446 Completed -1406d -1316d 795644
4 44446 Completed -1316d 640991
5 TEST4551032 Completed -6362d 795644
6 44442 Completed -6100d -5920d 640991
7 44442 Completed -5920d 795644
8 44443 Completed -6100d 640991
objectid Id QCStateLabel date enddate project performedby
1 44444 Completed -1381d -1321d 795644 1004
2 44444 Completed -1321d 640991 1004
3 44446 Completed -1406d -1316d 795644 1004
4 44446 Completed -1316d 640991 1004
5 TEST4551032 Completed -6362d 795644 1004
6 44442 Completed -6100d -5920d 640991 1004
7 44442 Completed -5920d 795644 1004
8 44443 Completed -6100d 640991 1004
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
objectid Id date QCStateLabel
1 44444 -2895d Completed
2 44445 -2854d Completed
3 44446 -2703d Completed
4 44447 -2600d Completed
5 TEST6390238 -5601d Completed
6 TEST5904521 -5602d Completed
7 TEST3804589 -2603d Completed
8 TEST2312318 -3000d Completed
objectid Id date QCStateLabel performedby
1 44444 -2895d Completed 1004
2 44445 -2854d Completed 1004
3 44446 -2703d Completed 1004
4 44447 -2600d Completed 1004
5 TEST6390238 -5601d Completed 1004
6 TEST5904521 -5602d Completed 1004
7 TEST3804589 -2603d Completed 1004
8 TEST2312318 -3000d Completed 1004
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
objectid Id date QCStateLabel performedby
1 44444 -2895d Completed 1004
2 44445 -2854d Completed 1004
3 44446 -2703d Completed 1004
4 44447 -2600d Completed 1004
5 TEST6390238 -5601d Completed 1004
6 TEST5904521 -5602d Completed 1004
7 TEST3804589 -2603d Completed 1004
8 TEST2312318 -3000d Completed 1004
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
objectid Id date QCStateLabel cause manner remark
1 TEST1993532 -2212d Completed 1 S sed nibh viverra
2 44445 -723d Completed 2 X labor omnia vincit
objectid Id date QCStateLabel cause manner remark performedby
1 TEST1993532 -2212d Completed 1 S sed nibh viverra 1004
2 44445 -723d Completed 2 X labor omnia vincit 1004
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
objectid Id QCStateLabel date birth death calculated_status gender sire dam species origin
1 44444 Completed -1381d -1381d Alive 1 44442 44443 10 00001
2 44446 Completed -1406d -1406d Alive 1 44442 44443 10 00003
3 44445 Completed -1414d -1414d -726d Dead 2 44442 44443 10 00004
4 TEST6390238 Completed -3923d -3923d Shipped 2 3565069 5250080 9 00002
5 TEST5904521 Completed -5431d -5431d Shipped 1 8377984 9 00004
6 TEST3804589 Completed -5806d -5806d Shipped 1 493957 9749422 9 00005
7 TEST2312318 Completed -8069d -8069d Shipped 1 5748235 8739374 9 00002
8 TEST1993532 Completed -11808d -11808d -2259d Dead 2 5409336 3784452 9 00003
9 TEST4551032 Completed -6362d -6362d Alive 1 5030167 8416939 9 00001
11 44442 Completed -6100d -6100d Alive 1 8377984 10 00004
12 44443 Completed -6100d -6100d Alive 1 8377984 10 00004
13 44447 Completed -2600d -2600d Alive 1 8377984 10 00004
14 8377984 Completed -2600d -2600d Alive 1 8377984 10 00004
objectid Id QCStateLabel date birth death calculated_status gender sire dam species origin performedby
1 44444 Completed -1381d -1381d Alive 1 44442 44443 10 00001 1004
2 44446 Completed -1406d -1406d Alive 1 44442 44443 10 00003 1004
3 44445 Completed -1414d -1414d -726d Dead 2 44442 44443 10 00004 1004
4 TEST6390238 Completed -3923d -3923d Shipped 2 3565069 5250080 9 00002 1004
5 TEST5904521 Completed -5431d -5431d Shipped 1 8377984 9 00004 1004
6 TEST3804589 Completed -5806d -5806d Shipped 1 493957 9749422 9 00005 1004
7 TEST2312318 Completed -8069d -8069d Shipped 1 5748235 8739374 9 00002 1004
8 TEST1993532 Completed -11808d -11808d -2259d Dead 2 5409336 3784452 9 00003 1004
9 TEST4551032 Completed -6362d -6362d Alive 1 5030167 8416939 9 00001 1004
11 44442 Completed -6100d -6100d Alive 1 8377984 10 00004 1004
12 44443 Completed -6100d -6100d Alive 1 8377984 10 00004 1004
13 44447 Completed -2600d -2600d Alive 1 8377984 10 00004 1004
14 8377984 Completed -2600d -2600d Alive 1 8377984 10 00004 1004
Loading