Skip to content

Commit 41a6200

Browse files
Incorporate performedby into workflow (#598)
* Remove performed by required configurations * Add global performed by check on submit final * Fix housing performed by field
1 parent db2ab65 commit 41a6200

File tree

20 files changed

+1149
-915
lines changed

20 files changed

+1149
-915
lines changed

nirc_ehr/resources/queries/study/arrival.js

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ EHR.Server.TriggerManager.registerHandlerForQuery(EHR.Server.TriggerManager.Even
5151
Id: row.Id,
5252
date: row.birth,
5353
qcstate: row.qcstate,
54-
taskid: row.taskid
54+
taskid: row.taskid,
55+
performedby: row.performedby
5556
}
5657

5758
var birthErrors = triggerHelper.saveBirthRecord(row.Id, birthInfo);
@@ -67,7 +68,8 @@ EHR.Server.TriggerManager.registerHandlerForQuery(EHR.Server.TriggerManager.Even
6768
date: row.date,
6869
taskid: row.taskid,
6970
remark: row.remark,
70-
qcstate: row.qcstate
71+
qcstate: row.qcstate,
72+
performedby: row.performedby
7173
}
7274

7375
if (row.project) {
@@ -89,7 +91,8 @@ EHR.Server.TriggerManager.registerHandlerForQuery(EHR.Server.TriggerManager.Even
8991
cage: row.cage,
9092
taskid: row.taskid,
9193
qcstate: row.qcstate,
92-
reason: row.arrivalType
94+
reason: row.arrivalType,
95+
performedby: row.performedby
9396
}
9497

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

158+
if (row.performedby && row.performedby !== data.performedby)
159+
{
160+
obj.performedby = row.performedby;
161+
hasUpdates = true;
162+
}
163+
155164
if (hasUpdates)
156165
{
157166
console.info("Arrival update for animal Id " + row.Id + " included demographic changes Demographic record updated.");

nirc_ehr/resources/queries/study/birth.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ EHR.Server.TriggerManager.registerHandlerForQuery(EHR.Server.TriggerManager.Even
3838
date: row.date,
3939
taskid: row.taskid,
4040
remark: row.remark,
41-
qcstate: row.qcstate
41+
qcstate: row.qcstate,
42+
performedby: row.performedby
4243
}
4344

4445
if (row.project) {
@@ -62,7 +63,8 @@ EHR.Server.TriggerManager.registerHandlerForQuery(EHR.Server.TriggerManager.Even
6263
cage: row.cage,
6364
taskid: row.taskid,
6465
qcstate: row.qcstate,
65-
reason: 'Husbandry'
66+
reason: 'Husbandry',
67+
performedby: row.performedby
6668
}
6769

6870
var housingErrors = triggerHelper.createHousingRecord(row.Id, housingRec, "birth");
@@ -87,7 +89,8 @@ EHR.Server.TriggerManager.registerHandlerForQuery(EHR.Server.TriggerManager.Even
8789
gender: row['Id/demographics/gender'] || null,
8890
taskid: row.taskid,
8991
remark: row.remark,
90-
QCStateLabel: row.QCStateLabel
92+
QCStateLabel: row.QCStateLabel,
93+
performedby: row.performedby
9194
};
9295

9396
//find dam, if provided
@@ -136,6 +139,11 @@ EHR.Server.TriggerManager.registerHandlerForQuery(EHR.Server.TriggerManager.Even
136139
hasUpdates = true;
137140
}
138141

142+
if (obj.performedby && obj.performedby !== data.performedby) {
143+
record.performedby = obj.performedby;
144+
hasUpdates = true;
145+
}
146+
139147
if (obj.QCStateLabel && obj.QCStateLabel !== data.QCStateLabel) {
140148
record.QCStateLabel = obj.QCStateLabel;
141149
hasUpdates = true;

nirc_ehr/resources/queries/study/clinical_observations.query.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
</column>
3535
<column columnName="performedBy">
3636
<columnTitle>Performed By</columnTitle>
37-
<nullable>false</nullable>
3837
</column>
3938
<column columnName="scheduledDate">
4039
<columnTitle>Scheduled Date</columnTitle>

nirc_ehr/resources/queries/study/housing.query.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@
4343
</fk>
4444
</column>
4545
<column columnName="remark"/>
46-
<column columnName="performedBy" />
46+
<column columnName="performedBy">
47+
</column>
4748
</columns>
4849
</table>
4950
</tables>

nirc_ehr/resources/queries/study/necropsy.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ function onUpsert(helper, scriptErrors, row, oldRow) {
5454
date: row.date,
5555
weight: row.necropsyWeight,
5656
taskid: row.taskid,
57-
qcstate: qcstate
57+
qcstate: qcstate,
58+
performedby: row.performedby
5859
};
5960
triggerHelper.upsertWeightRecord(weightRecord);
6061
}

nirc_ehr/resources/web/nirc_ehr/model/sources/NIRCDefault.js

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ EHR.model.DataModelManager.registerMetadata('Default', {
1111
},
1212
performedby: {
1313
hidden: false,
14+
allowBlank: true,
1415
defaultValue: LABKEY.Security.currentUser.id,
1516
getInitialValue: function (v, rec) {
1617
return LABKEY.Security.currentUser.id;
@@ -112,15 +113,6 @@ EHR.model.DataModelManager.registerMetadata('Default', {
112113
'enddate': {
113114
hidden: true
114115
},
115-
performedby: {
116-
allowBlank: false,
117-
lookup: {
118-
schemaName: 'core',
119-
queryName: 'users',
120-
keyColumn: 'UserId',
121-
displayColumn: 'DisplayName',
122-
},
123-
},
124116
reason: {
125117
defaultValue: null,
126118
allowBlank: false,
@@ -131,6 +123,35 @@ EHR.model.DataModelManager.registerMetadata('Default', {
131123
filterArray: [LABKEY.Filter.create('date_disabled', null, LABKEY.Filter.Types.ISBLANK)]
132124
}
133125
},
126+
performedby: {
127+
hidden: false,
128+
allowBlank: true,
129+
defaultValue: LABKEY.Security.currentUser.id,
130+
lookup: {
131+
schemaName: 'core',
132+
queryName: 'users',
133+
keyColumn: 'UserId',
134+
displayColumn: 'DisplayName',
135+
columns: 'UserId,DisplayName,FirstName,LastName',
136+
sort: 'Type,DisplayName'
137+
},
138+
getInitialValue: function (v, rec) {
139+
return LABKEY.Security.currentUser.id;
140+
},
141+
editorConfig: {
142+
store: {
143+
type: 'labkey-store',
144+
schemaName: 'core',
145+
146+
// 'performedby' is a text field in the dataset and its lookup to the userid is an int field - this mismatch causes it to disappear
147+
// 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
148+
// in the form panel but not in the grid panel).
149+
// casting it as a varchar when loading the store fixes this issue.
150+
sql: "SELECT CAST (UserId AS VARCHAR) AS UserId,DisplayName,FirstName,LastName FROM core.PrincipalsWithoutAdmin WHERE active = TRUE AND Type = 'u'",
151+
autoLoad: true
152+
}
153+
}
154+
},
134155
},
135156
'study.arrival': {
136157
initialRoom: {
@@ -190,6 +211,9 @@ EHR.model.DataModelManager.registerMetadata('Default', {
190211
treatmentid: {
191212
hidden: true,
192213
nullable: true
214+
},
215+
performedby: {
216+
allowBlank: true,
193217
}
194218
},
195219
'study.observation_order': {

nirc_ehr/src/org/labkey/nirc_ehr/query/NIRC_EHRTriggerHelper.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ public String createHousingRecord(String id, Map<String, Object> row, String for
110110
Date date = ConvertHelper.convert(row.get("date"), Date.class);
111111
String location = ConvertHelper.convert(row.get("cage"), String.class);
112112
String reason = ConvertHelper.convert(row.get("reason"), String.class);
113+
Integer performedby = ConvertHelper.convert(row.get("performedby"), Integer.class);
113114
if (id == null || date == null || location == null)
114115
return "Attempting to create a housing record with no id, date, or location";
115116

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

225+
Integer performedby = ConvertHelper.convert(row.get("performedby"), Integer.class);
226+
if (performedby == null) {
227+
return "Attempting to create a birth record with no performedby";
228+
}
229+
223230
TableInfo ti = getTableInfo("study", "birth");
224231

225232
// If there is already a housing record for this task, update that record
@@ -236,6 +243,7 @@ public String saveBirthRecord(String id, Map<String, Object> row) throws QueryUp
236243
saveRow.put("date", date);
237244
saveRow.put("taskId", taskId);
238245
saveRow.put("qcstate", qcstate);
246+
saveRow.put("performedby", performedby);
239247
if (updateRecord)
240248
{
241249
saveRow.put("objectid", ts.getMap().get("objectid"));
@@ -315,6 +323,7 @@ public void upsertWeightRecord(Map<String, Object> row) throws QueryUpdateServic
315323
saveRow.put("date", date);
316324
saveRow.put("taskid", taskId);
317325
saveRow.put("qcstate", row.get("qcstate"));
326+
saveRow.put("performedby", row.get("performedby"));
318327
if (updateRecord)
319328
{
320329
saveRow.put("objectid", ts.getMap().get("objectid"));
@@ -570,6 +579,11 @@ public String createAssignmentRecord(String dataset, String id, Map<String, Obje
570579
return "Attempting to create a project assignment record with no qcstate";
571580
}
572581

582+
String performedby = ConvertHelper.convert(row.get("performedby"), String.class);
583+
if (performedby == null) {
584+
return "Attempting to create a project assignment record with no performedby";
585+
}
586+
573587
boolean updateRecord = false;
574588

575589
// If there is already a project assignment record for this task, update that record
@@ -586,6 +600,7 @@ public String createAssignmentRecord(String dataset, String id, Map<String, Obje
586600
saveRow.put("date", date);
587601
saveRow.put("taskId", taskId);
588602
saveRow.put("qcstate", qcstate);
603+
saveRow.put("performedby", performedby);
589604
if (updateRecord)
590605
{
591606
saveRow.put("objectid", ts.getMap().get("objectid"));

nirc_ehr/src/org/labkey/nirc_ehr/table/NIRC_EHRSharedDatasetTrigger.java

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,44 @@
1111

1212
/**
1313
* Shared dataset trigger to add triggers to act on all the study datasets.
14-
* */
14+
*/
1515
public class NIRC_EHRSharedDatasetTrigger implements Trigger
1616
{
1717
private void transformAnimalIdToUpperCase(Map<String, Object> row)
1818
{
19-
if (row != null && row.containsKey("Id"))
19+
if (row != null && row.containsKey("Id") && row.get("Id") != null)
2020
{
2121
row.put("Id", ((String) row.get("Id")).toUpperCase());
2222
}
2323
}
2424

25+
private void verifyPerformedBy(TableInfo table, @Nullable Map<String, Object> newRow, ValidationException errors)
26+
{
27+
if (newRow != null && newRow.containsKey("performedby") && newRow.get("performedby") == null)
28+
{
29+
if (!newRow.containsKey("QCStateLabel") || newRow.get("QCStateLabel") == null)
30+
{
31+
errors.addFieldError("performedby", "Record in " + table.getTitle() + " cannot be submitted without Performed By if QCStateLabel is not found. Contact your administrator.");
32+
}
33+
else if (newRow.containsKey("QCStateLabel") && newRow.get("QCStateLabel").equals("Completed"))
34+
{
35+
errors.addFieldError("performedby", "Performed By must be entered in all records before submitting final. Table: " + table.getTitle());
36+
}
37+
}
38+
}
39+
2540
@Override
2641
public void beforeInsert(TableInfo table, Container c, User user, @Nullable Map<String, Object> newRow, ValidationException errors, Map<String, Object> extraContext) throws ValidationException
2742
{
2843
transformAnimalIdToUpperCase(newRow);
44+
verifyPerformedBy(table, newRow, errors);
45+
}
46+
47+
@Override
48+
public void beforeUpdate(TableInfo table, Container c,
49+
User user, @Nullable Map<String, Object> newRow, @Nullable Map<String, Object> oldRow,
50+
ValidationException errors, Map<String, Object> extraContext) throws ValidationException
51+
{
52+
verifyPerformedBy(table, newRow, errors);
2953
}
3054
}
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
objectid Id QCStateLabel date remark Description
2-
1 TEST4551032 Completed -4377d nunc augue feugiat neque imperdiet et ornare euismod consequat
3-
2 TEST5904521 Completed -4188d tellus sit semper fringilla arcu tincidunt turpis quis imperdiet ultrices eleifend
4-
3 TEST1993532 Completed -6088d ut erat auctor fringilla hendrerit vitae ornare
5-
4 44442 Completed -6100d
6-
5 44443 Completed -6100d
1+
objectid Id QCStateLabel date remark Description performedby
2+
1 TEST4551032 Completed -4377d nunc augue feugiat neque imperdiet et ornare euismod consequat 1004
3+
2 TEST5904521 Completed -4188d tellus sit semper fringilla arcu tincidunt turpis quis imperdiet ultrices eleifend 1004
4+
3 TEST1993532 Completed -6088d ut erat auctor fringilla hendrerit vitae ornare 1004
5+
4 44442 Completed -6100d 1004
6+
5 44443 Completed -6100d 1004
Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
objectid Id QCStateLabel date enddate project
2-
1 44444 Completed -1381d -1321d 795644
3-
2 44444 Completed -1321d 640991
4-
3 44446 Completed -1406d -1316d 795644
5-
4 44446 Completed -1316d 640991
6-
5 TEST4551032 Completed -6362d 795644
7-
6 44442 Completed -6100d -5920d 640991
8-
7 44442 Completed -5920d 795644
9-
8 44443 Completed -6100d 640991
1+
objectid Id QCStateLabel date enddate project performedby
2+
1 44444 Completed -1381d -1321d 795644 1004
3+
2 44444 Completed -1321d 640991 1004
4+
3 44446 Completed -1406d -1316d 795644 1004
5+
4 44446 Completed -1316d 640991 1004
6+
5 TEST4551032 Completed -6362d 795644 1004
7+
6 44442 Completed -6100d -5920d 640991 1004
8+
7 44442 Completed -5920d 795644 1004
9+
8 44443 Completed -6100d 640991 1004

0 commit comments

Comments
 (0)