diff --git a/nirc_ehr/resources/queries/study/arrival.js b/nirc_ehr/resources/queries/study/arrival.js index 3eccf2fd..114c2a1c 100644 --- a/nirc_ehr/resources/queries/study/arrival.js +++ b/nirc_ehr/resources/queries/study/arrival.js @@ -2,19 +2,15 @@ require("ehr/triggers").initScript(this); var triggerHelper = new org.labkey.nirc_ehr.query.NIRC_EHRTriggerHelper(LABKEY.Security.currentUser.id, LABKEY.Security.currentContainer.id); -function onInit(event, helper){ - helper.setScriptOptions({ - allowAnyId: true, - requiresStatusRecalc: true, - allowDatesInDistantPast: true, - skipAssignmentCheck: true, - }); -} - EHR.Server.TriggerManager.registerHandlerForQuery(EHR.Server.TriggerManager.Events.BEFORE_UPSERT, 'study', 'Arrival', function(helper, scriptErrors, row, oldRow) { + console.log('isRearrival:', row.rearrival); + if(!row.rearrival){ + helper.setScriptOptions({requiresStatusRecalc: true}); + } + // Due to order of operation, this needs to be done in upsert instead of insert - if (helper.getEvent() == 'insert' && row.Id && triggerHelper.animalIdExists(row.Id)) { + if (!row.rearrival && helper.getEvent() == 'insert' && row.Id && triggerHelper.animalIdExists(row.Id)) { EHR.Server.Utils.addError(scriptErrors, 'Id', 'Animal Id ' + row.Id + ' is already in use. Please use a different Id.', 'ERROR'); } @@ -25,7 +21,7 @@ EHR.Server.TriggerManager.registerHandlerForQuery(EHR.Server.TriggerManager.Even helper.registerArrival(row.Id, row.date); //Insert or update demographic and birth records - if (!helper.isETL() && !helper.isGeneratedByServer() && !helper.isValidateOnly()) { + if (!row.rearrival && !helper.isETL() && !helper.isGeneratedByServer() && !helper.isValidateOnly()) { // this allows demographic records in qcstates other than completed var extraDemographicsFieldMappings = { diff --git a/nirc_ehr/resources/queries/study/arrival.query.xml b/nirc_ehr/resources/queries/study/arrival.query.xml index 1d70cffe..ffe21086 100644 --- a/nirc_ehr/resources/queries/study/arrival.query.xml +++ b/nirc_ehr/resources/queries/study/arrival.query.xml @@ -69,6 +69,9 @@ meaning + + Rearrival + diff --git a/nirc_ehr/resources/queries/study/arrival/.qview.xml b/nirc_ehr/resources/queries/study/arrival/.qview.xml index 81c4e233..9aa2dd42 100644 --- a/nirc_ehr/resources/queries/study/arrival/.qview.xml +++ b/nirc_ehr/resources/queries/study/arrival/.qview.xml @@ -5,15 +5,14 @@ - - + + - \ No newline at end of file diff --git a/nirc_ehr/resources/queries/study/protocolAssignment.js b/nirc_ehr/resources/queries/study/protocolAssignment.js index 6f505272..c0429b50 100644 --- a/nirc_ehr/resources/queries/study/protocolAssignment.js +++ b/nirc_ehr/resources/queries/study/protocolAssignment.js @@ -6,7 +6,6 @@ var prevDate; var missing = []; var count = 0; -let animalIds = []; var triggerHelper = new org.labkey.nirc_ehr.query.NIRC_EHRTriggerHelper(LABKEY.Security.currentUser.id, LABKEY.Security.currentContainer.id); @@ -31,12 +30,7 @@ function getLastAssignment(id){ } function onInit(event, helper){ - - helper.setScriptOptions({ - allowAnyId: false, - requiresStatusRecalc: true, - allowDatesInDistantPast: true - }); + if (helper.isETL()) { LABKEY.Query.selectRows({ schemaName: 'ehr', diff --git a/nirc_ehr/resources/referenceStudy/study/datasets/datasets_metadata.xml b/nirc_ehr/resources/referenceStudy/study/datasets/datasets_metadata.xml index bc4e8f73..f8d49b0e 100644 --- a/nirc_ehr/resources/referenceStudy/study/datasets/datasets_metadata.xml +++ b/nirc_ehr/resources/referenceStudy/study/datasets/datasets_metadata.xml @@ -108,6 +108,9 @@ varchar + + boolean + diff --git a/nirc_ehr/resources/scripts/nirc_triggers.js b/nirc_ehr/resources/scripts/nirc_triggers.js index 3e90d1ea..ca94b556 100644 --- a/nirc_ehr/resources/scripts/nirc_triggers.js +++ b/nirc_ehr/resources/scripts/nirc_triggers.js @@ -26,10 +26,27 @@ exports.init = function (EHR) { }); }); + EHR.Server.TriggerManager.registerHandlerForQuery(EHR.Server.TriggerManager.Events.INIT, 'study', 'arrival', function(event, helper) { + helper.setScriptOptions({ + allowAnyId: true, + requiresStatusRecalc: false, // set in upsert to handle rearrival + allowDatesInDistantPast: true, + skipAssignmentCheck: true, + }); + }); + + EHR.Server.TriggerManager.registerHandlerForQuery(EHR.Server.TriggerManager.Events.INIT, 'study', 'protocolAssignment', function(event, helper) { + helper.setScriptOptions({ + allowAnyId: false, + requiresStatusRecalc: false, + allowDatesInDistantPast: true + }); + }); + EHR.Server.TriggerManager.registerHandlerForQuery(EHR.Server.TriggerManager.Events.INIT, 'study', 'assignment', function(event, helper) { helper.setScriptOptions({ allowAnyId: false, - requiresStatusRecalc: true, + requiresStatusRecalc: false, allowDatesInDistantPast: true, skipAssignmentCheck: true, removeTimeFromDate: false, diff --git a/nirc_ehr/resources/web/nirc_ehr/model/sources/Arrival.js b/nirc_ehr/resources/web/nirc_ehr/model/sources/Arrival.js index 4fbabbe7..4586e7fe 100644 --- a/nirc_ehr/resources/web/nirc_ehr/model/sources/Arrival.js +++ b/nirc_ehr/resources/web/nirc_ehr/model/sources/Arrival.js @@ -97,6 +97,11 @@ EHR.model.DataModelManager.registerMetadata('Arrival', { columnConfig: { width: 200 } + }, + rearrival: { + allowBlank: true, + hidden: true, + showInGrid: false } } } diff --git a/nirc_ehr/resources/web/nirc_ehr/model/sources/NIRCDefault.js b/nirc_ehr/resources/web/nirc_ehr/model/sources/NIRCDefault.js index eee4923b..87ff22d8 100644 --- a/nirc_ehr/resources/web/nirc_ehr/model/sources/NIRCDefault.js +++ b/nirc_ehr/resources/web/nirc_ehr/model/sources/NIRCDefault.js @@ -14,7 +14,7 @@ EHR.model.DataModelManager.registerMetadata('Default', { allowBlank: true, defaultValue: LABKEY.Security.currentUser.id, getInitialValue: function (v, rec) { - if (Number.isInteger(v)){ + if (Number.isInteger(Number(v))){ return v; } @@ -140,7 +140,7 @@ EHR.model.DataModelManager.registerMetadata('Default', { sort: 'Type,DisplayName' }, getInitialValue: function (v, rec) { - if (Number.isInteger(v)){ + if (Number.isInteger(Number(v))){ return v; } diff --git a/nirc_ehr/resources/web/nirc_ehr/model/sources/Rearrival.js b/nirc_ehr/resources/web/nirc_ehr/model/sources/Rearrival.js new file mode 100644 index 00000000..99600f02 --- /dev/null +++ b/nirc_ehr/resources/web/nirc_ehr/model/sources/Rearrival.js @@ -0,0 +1,57 @@ + +EHR.model.DataModelManager.registerMetadata('Rearrival', { + + byQuery: { + 'study.arrival': { + rearrival: { + getInitialValue: function (v, rec) { + return true + }, + editable: false, + hidden: true, + columnConfig: { + editable: false + } + }, + performedby: { + hidden: true, + showInGrid: false + }, + sourceFacility: { + allowBlank: false, + columnConfig: { + fixed: true, + width: 150 + }, + }, + acquisitionType: { + allowBlank: false, + columnConfig: { + fixed: true, + width: 150 + }, + }, + arrivalType: { + allowBlank: false, + columnConfig: { + width: 200 + } + }, + 'cage': { + allowBlank: true, + hidden: true, + showInGrid: false + }, + project: { + allowBlank: true, + hidden: true, + showInGrid: false + }, + arrivalProtocol: { + allowBlank: true, + hidden: true, + showInGrid: false + }, + } + } +}); \ No newline at end of file diff --git a/nirc_ehr/src/org/labkey/nirc_ehr/NIRC_EHRModule.java b/nirc_ehr/src/org/labkey/nirc_ehr/NIRC_EHRModule.java index f2413357..59dac4c5 100644 --- a/nirc_ehr/src/org/labkey/nirc_ehr/NIRC_EHRModule.java +++ b/nirc_ehr/src/org/labkey/nirc_ehr/NIRC_EHRModule.java @@ -236,6 +236,7 @@ private void registerDataEntry() EHRService.get().registerFormType(new DefaultDataEntryFormFactory(NIRCBehaviorRoundsFormType.class, this)); EHRService.get().registerFormType(new DefaultDataEntryFormFactory(NIRCChemistryImportFormType.class, this)); EHRService.get().registerFormType(new DefaultDataEntryFormFactory(NIRCSerologyImportFormType.class, this)); + EHRService.get().registerFormType(new DefaultDataEntryFormFactory(NIRCRearrivalFormType.class, this)); } @Override diff --git a/nirc_ehr/src/org/labkey/nirc_ehr/dataentry/form/NIRCRearrivalFormType.java b/nirc_ehr/src/org/labkey/nirc_ehr/dataentry/form/NIRCRearrivalFormType.java new file mode 100644 index 00000000..3bc51d94 --- /dev/null +++ b/nirc_ehr/src/org/labkey/nirc_ehr/dataentry/form/NIRCRearrivalFormType.java @@ -0,0 +1,45 @@ +package org.labkey.nirc_ehr.dataentry.form; + +import org.labkey.api.ehr.dataentry.DataEntryFormContext; +import org.labkey.api.ehr.dataentry.FormSection; +import org.labkey.api.ehr.dataentry.forms.LockAnimalsFormSection; +import org.labkey.api.module.Module; +import org.labkey.api.security.permissions.AdminPermission; +import org.labkey.api.view.template.ClientDependency; +import org.labkey.nirc_ehr.dataentry.section.NIRCAnimalDetailsFormSection; +import org.labkey.nirc_ehr.dataentry.section.NIRCArrivalInstructionsFormSection; +import org.labkey.nirc_ehr.dataentry.section.NIRCRearrivalFormSection; +import org.labkey.nirc_ehr.dataentry.section.NIRCTaskFormSection; + +import java.util.Arrays; + +public class NIRCRearrivalFormType extends NIRCBaseTaskFormType +{ + public static final String NAME = "Rearrival"; + + public NIRCRearrivalFormType(DataEntryFormContext ctx, Module owner) + { + super(ctx, owner, NAME, "Rearrivals", "Colony Management", Arrays.asList( + new LockAnimalsFormSection(), + new NIRCArrivalInstructionsFormSection(), + new NIRCTaskFormSection(), + new NIRCAnimalDetailsFormSection(), + new NIRCRearrivalFormSection() + )); + + addClientDependency(ClientDependency.supplierFromPath("nirc_ehr/model/sources/Arrival.js")); + addClientDependency(ClientDependency.supplierFromPath("nirc_ehr/model/sources/Rearrival.js")); + + for (FormSection s : getFormSections()) + { + s.addConfigSource("Arrival"); + s.addConfigSource("Rearrival"); + } + } + + @Override + public boolean isAvailable() + { + return super.isAvailable() && getCtx().getContainer().hasPermission(getCtx().getUser(), AdminPermission.class); + } +} diff --git a/nirc_ehr/src/org/labkey/nirc_ehr/dataentry/section/NIRCRearrivalFormSection.java b/nirc_ehr/src/org/labkey/nirc_ehr/dataentry/section/NIRCRearrivalFormSection.java new file mode 100644 index 00000000..17c7eed4 --- /dev/null +++ b/nirc_ehr/src/org/labkey/nirc_ehr/dataentry/section/NIRCRearrivalFormSection.java @@ -0,0 +1,20 @@ +package org.labkey.nirc_ehr.dataentry.section; + +import org.json.JSONObject; +import org.labkey.api.ehr.dataentry.DataEntryFormContext; + +public class NIRCRearrivalFormSection extends BaseFormSection +{ + public NIRCRearrivalFormSection() + { + super("study", "arrival", "Rearrivals", "ehr-gridpanel", true, true, true); + } + + @Override + public JSONObject toJSON(DataEntryFormContext ctx, boolean includeFormElements) + { + JSONObject json = super.toJSON(ctx, includeFormElements); + json.put("dataDependentCollapseHeader", true); + return json; + } +}