From 7e2d75830792b713d761c5a8f3eb1b176c1cafdd Mon Sep 17 00:00:00 2001 From: bbimber Date: Mon, 10 Apr 2023 11:54:32 -0700 Subject: [PATCH 01/17] LSID column cannot be unselectable anymore --- tcrdb/resources/schemas/tcrdb.xml | 3 --- 1 file changed, 3 deletions(-) diff --git a/tcrdb/resources/schemas/tcrdb.xml b/tcrdb/resources/schemas/tcrdb.xml index 96bb782ad..a6dd79ed1 100644 --- a/tcrdb/resources/schemas/tcrdb.xml +++ b/tcrdb/resources/schemas/tcrdb.xml @@ -171,7 +171,6 @@ true true false - true ObjectUri Object @@ -269,7 +268,6 @@ true true false - true ObjectUri Object @@ -397,7 +395,6 @@ true true false - true ObjectUri Object From 91cc35c716c2b9730c8cf826a210ac862cb5e739 Mon Sep 17 00:00:00 2001 From: bbimber Date: Tue, 11 Apr 2023 08:03:24 -0700 Subject: [PATCH 02/17] Remove unselectable on LSID column --- mGAP/resources/schemas/mgap.xml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/mGAP/resources/schemas/mgap.xml b/mGAP/resources/schemas/mgap.xml index 5f75392b1..1c135af37 100644 --- a/mGAP/resources/schemas/mgap.xml +++ b/mGAP/resources/schemas/mgap.xml @@ -1076,8 +1076,7 @@ lsidtype true true - false - true + false ObjectUri Object @@ -1141,4 +1140,4 @@ - \ No newline at end of file + From 7d21536e41ce8547c404463a2b1ff193e5252280 Mon Sep 17 00:00:00 2001 From: bbimber Date: Tue, 11 Apr 2023 10:43:45 -0700 Subject: [PATCH 03/17] Improve study metadata --- .../queries/study/departure.query.xml | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 mcc/resources/queries/study/departure.query.xml diff --git a/mcc/resources/queries/study/departure.query.xml b/mcc/resources/queries/study/departure.query.xml new file mode 100644 index 000000000..af495244e --- /dev/null +++ b/mcc/resources/queries/study/departure.query.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + Destination + + ehr_lookups + source + code + + + + +
+
+
+
\ No newline at end of file From 6318a70b1f475b0dc39213de10c94e0683e29ed5 Mon Sep 17 00:00:00 2001 From: bbimber Date: Thu, 13 Apr 2023 21:43:59 -0700 Subject: [PATCH 04/17] Add MCC fields and new statuses (#103) * Add disease focus to MCC and allow widthdrawl of requests --- mGAP/resources/etls/prime-seq.xml | 2 +- mcc/package-lock.json | 7 +- mcc/resources/etls/snprc-datasets.xml | 2 +- .../mcc/animalRequests/Non-Draft.qview.xml | 2 + .../requestScores/Pending Requests.qview.xml | 3 +- .../postgresql/mcc-20.013-20.014.sql | 1 + .../dbscripts/sqlserver/mcc-20.013-20.014.sql | 1 + mcc/resources/schemas/mcc.xml | 3 + mcc/resources/views/mccRequestAdmin.html | 2 +- .../web/mcc/window/ChangeStatusWindow.js | 68 +++++++++++++++++++ .../client/AnimalRequest/animal-request.tsx | 22 +++++- .../components/ReadOnlyRequest.tsx | 6 ++ mcc/src/client/components/RequestUtils.tsx | 2 + mcc/src/org/labkey/mcc/MccManager.java | 3 +- mcc/src/org/labkey/mcc/MccModule.java | 2 +- mcc/src/org/labkey/mcc/query/MccRequest.java | 1 + ...questScoreActionsDisplayColumnFactory.java | 24 ++++++- .../org/labkey/test/tests/mcc/MccTest.java | 1 + 18 files changed, 137 insertions(+), 15 deletions(-) create mode 100644 mcc/resources/schemas/dbscripts/postgresql/mcc-20.013-20.014.sql create mode 100644 mcc/resources/schemas/dbscripts/sqlserver/mcc-20.013-20.014.sql create mode 100644 mcc/resources/web/mcc/window/ChangeStatusWindow.js diff --git a/mGAP/resources/etls/prime-seq.xml b/mGAP/resources/etls/prime-seq.xml index a8f394aa7..d23936eff 100644 --- a/mGAP/resources/etls/prime-seq.xml +++ b/mGAP/resources/etls/prime-seq.xml @@ -133,7 +133,7 @@ Copy to local table - + releaseId contig diff --git a/mcc/package-lock.json b/mcc/package-lock.json index 68c3ae536..dfa8d782d 100644 --- a/mcc/package-lock.json +++ b/mcc/package-lock.json @@ -20419,11 +20419,6 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, - "caniuse-lite": { - "version": "1.0.30001332", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001332.tgz", - "integrity": "sha512-10T30NYOEQtN6C11YGg411yebhvpnC6Z102+B95eAsN0oB6KUs01ivE8u+G6FMIRtIrVlYXhL+LUwQ3/hXwDWw==" - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -27183,4 +27178,4 @@ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" } } -} +} \ No newline at end of file diff --git a/mcc/resources/etls/snprc-datasets.xml b/mcc/resources/etls/snprc-datasets.xml index e13e9c112..981a4855b 100644 --- a/mcc/resources/etls/snprc-datasets.xml +++ b/mcc/resources/etls/snprc-datasets.xml @@ -7,7 +7,7 @@ Copy to target - + AnimalId date diff --git a/mcc/resources/queries/mcc/animalRequests/Non-Draft.qview.xml b/mcc/resources/queries/mcc/animalRequests/Non-Draft.qview.xml index 835a123cd..1ac293000 100644 --- a/mcc/resources/queries/mcc/animalRequests/Non-Draft.qview.xml +++ b/mcc/resources/queries/mcc/animalRequests/Non-Draft.qview.xml @@ -1,6 +1,8 @@ + + diff --git a/mcc/resources/queries/mcc/requestScores/Pending Requests.qview.xml b/mcc/resources/queries/mcc/requestScores/Pending Requests.qview.xml index 9a0b82fa5..d9c239e9e 100644 --- a/mcc/resources/queries/mcc/requestScores/Pending Requests.qview.xml +++ b/mcc/resources/queries/mcc/requestScores/Pending Requests.qview.xml @@ -1,6 +1,7 @@ - + + diff --git a/mcc/resources/schemas/dbscripts/postgresql/mcc-20.013-20.014.sql b/mcc/resources/schemas/dbscripts/postgresql/mcc-20.013-20.014.sql new file mode 100644 index 000000000..0cc134275 --- /dev/null +++ b/mcc/resources/schemas/dbscripts/postgresql/mcc-20.013-20.014.sql @@ -0,0 +1 @@ +ALTER TABLE mcc.animalrequests add diseasefocus varchar(4000); \ No newline at end of file diff --git a/mcc/resources/schemas/dbscripts/sqlserver/mcc-20.013-20.014.sql b/mcc/resources/schemas/dbscripts/sqlserver/mcc-20.013-20.014.sql new file mode 100644 index 000000000..0cc134275 --- /dev/null +++ b/mcc/resources/schemas/dbscripts/sqlserver/mcc-20.013-20.014.sql @@ -0,0 +1 @@ +ALTER TABLE mcc.animalrequests add diseasefocus varchar(4000); \ No newline at end of file diff --git a/mcc/resources/schemas/mcc.xml b/mcc/resources/schemas/mcc.xml index 3b6e8e167..47dd4816c 100644 --- a/mcc/resources/schemas/mcc.xml +++ b/mcc/resources/schemas/mcc.xml @@ -302,6 +302,9 @@ Neuroscience Relevance true + + Research/Disease Focus + Participate In Census? true diff --git a/mcc/resources/views/mccRequestAdmin.html b/mcc/resources/views/mccRequestAdmin.html index 153bdcf30..32661a15f 100644 --- a/mcc/resources/views/mccRequestAdmin.html +++ b/mcc/resources/views/mccRequestAdmin.html @@ -44,7 +44,7 @@ frame: 'left-nav', schemaName: 'mcc', queryName: 'requestScores', - //viewName: 'Pending Requests', + viewName: 'Pending Requests', showRecordSelectors: true, showDetailsColumn: true }).render(webpart.wrapperDivId + '-webpartPending'); diff --git a/mcc/resources/web/mcc/window/ChangeStatusWindow.js b/mcc/resources/web/mcc/window/ChangeStatusWindow.js new file mode 100644 index 000000000..3e3e3ddab --- /dev/null +++ b/mcc/resources/web/mcc/window/ChangeStatusWindow.js @@ -0,0 +1,68 @@ +/** + * @cfg dataRegionName + */ +Ext4.define('MCC.window.ChangeStatusWindow', { + extend: 'Ext.window.Window', + + fieldName: 'disabled', + + statics: { + buttonHandler: function(dataRegionName, requestId, status){ + Ext4.create('MCC.window.ChangeStatusWindow', { + dataRegionName: dataRegionName, + requestId: requestId, + status: status + }).show(); + }, + }, + + initComponent: function(){ + Ext4.apply(this, { + modal: true, + title: 'Change Status', + closeAction: 'destroy', + width: 380, + items: [{ + bodyStyle: 'padding: 5px;', + html: 'This will update request #' + this.requestId + ' to: ' + this.status + }], + buttons: [{ + text:'Submit', + disabled:false, + scope: this, + handler: this.onSubmit + },{ + text: 'Close', + handler: function(btn){ + btn.up('window').close(); + } + }] + }); + + this.callParent(arguments); + }, + + onSubmit: function(btn){ + Ext4.Msg.wait('Loading...'); + var dataRegion = this.dataRegionName ? LABKEY.DataRegions[this.dataRegionName] : null; + + LABKEY.Query.updateRows({ + method: 'POST', + schemaName: 'mcc', + queryName: 'animalRequests', + rows: [{ + rowid: this.requestId, + status: this.status + }], + scope: this, + success: function(){ + this.close(); + Ext4.Msg.hide(); + if (dataRegion) { + dataRegion.refresh(); + } + }, + failure: LDK.Utils.getErrorCallback() + }); + } +}); \ No newline at end of file diff --git a/mcc/src/client/AnimalRequest/animal-request.tsx b/mcc/src/client/AnimalRequest/animal-request.tsx index 704af6297..0f34d9349 100644 --- a/mcc/src/client/AnimalRequest/animal-request.tsx +++ b/mcc/src/client/AnimalRequest/animal-request.tsx @@ -132,6 +132,13 @@ export function AnimalRequest() { return "Draft" === requestData.request.status } + function shouldShowWithdraw() + { + const ctx = getServerContext().getModuleContext('mcc') || {}; + + return !!ctx.hasRequestAdminPermission + } + function handleSubmitButton(e, isSubmitting) { setIsSubmitting(isSubmitting); @@ -273,6 +280,7 @@ export function AnimalRequest() { "title": data.get("project-title"), "narrative": data.get("project-narrative"), "neuroscience": data.get("neuroscience"), + "diseasefocus": data.get("diseasefocus"), "lastname": data.get("investigator-last-name"), "firstname": data.get("investigator-first-name"), "middleinitial": data.get("investigator-middle-initial"), @@ -453,7 +461,14 @@ export function AnimalRequest() { - + <Title text="3. Research/Disease Focus*"/> + <div className="tw-w-full tw-px-3 tw-mb-6 md:tw-mb-0"> + <ErrorMessageHandler isSubmitting={isSubmitting}> + <Input id="diseasefocus" ariaLabel="Research/Disease Focus" isSubmitting={isSubmitting} required={doEnforceRequiredFields()} placeholder="What is the research area or disease focus of this project" defaultValue={requestData.request.diseasefocus}/> + </ErrorMessageHandler> + </div> + + <Title text="4. How does the research relate to neuroscience?*"/> <div className="tw-w-full tw-px-3 tw-mb-6 md:tw-mb-0"> <ErrorMessageHandler isSubmitting={isSubmitting}> <TextArea id="neuroscience" ariaLabel="Connection to neuroscience" isSubmitting={isSubmitting} placeholder="How does the research relate to neuroscience" required={doEnforceRequiredFields()} defaultValue={requestData.request.neuroscience}/> @@ -694,6 +709,11 @@ export function AnimalRequest() { <Button onClick={(e) => { handleSubmitButton(e, true); }} text={getSubmitButtonText()} display={hasEditPermission()}/> + + <Button onClick={(e) => { + requestData.request.status = "withdrawn" + handleSubmitButton(e, false); + }} text={"Widthdraw"} display={shouldShowWithdraw()}/> </div> </form> diff --git a/mcc/src/client/RequestReview/components/ReadOnlyRequest.tsx b/mcc/src/client/RequestReview/components/ReadOnlyRequest.tsx index 9cb7933fc..1c6f5b4bd 100644 --- a/mcc/src/client/RequestReview/components/ReadOnlyRequest.tsx +++ b/mcc/src/client/RequestReview/components/ReadOnlyRequest.tsx @@ -91,6 +91,12 @@ export default function ReadOnlyRequest(props: {requestData: AnimalRequestModel} <Grid item xs={10}> {requestData.request.narrative} </Grid> + <Grid item xs={2} className={styles.fieldLabel}> + Research/disease focus: + </Grid> + <Grid item xs={10}> + {requestData.request.diseasefocus} + </Grid> <Grid item xs={2} className={styles.fieldLabel}> Relation to neuroscience: </Grid> diff --git a/mcc/src/client/components/RequestUtils.tsx b/mcc/src/client/components/RequestUtils.tsx index 661e7c70a..9a6974dd1 100644 --- a/mcc/src/client/components/RequestUtils.tsx +++ b/mcc/src/client/components/RequestUtils.tsx @@ -14,6 +14,7 @@ export class AnimalRequestProps { narrative: string; title: string; neuroscience: string; + diseasefocus: string; census: boolean; censusreason: string; middleinitial: string; @@ -88,6 +89,7 @@ export async function queryRequestInformation(requestId, handleFailure) { "narrative", "title", "neuroscience", + "diseasefocus", "census", "censusreason", "terminalprocedures", diff --git a/mcc/src/org/labkey/mcc/MccManager.java b/mcc/src/org/labkey/mcc/MccManager.java index fdbee6eb3..7b5b8d1b7 100644 --- a/mcc/src/org/labkey/mcc/MccManager.java +++ b/mcc/src/org/labkey/mcc/MccManager.java @@ -53,7 +53,8 @@ public enum RequestStatus Approved(5, "Approved", MccRequestAdminPermission.class), Rejected(6, "Rejected", MccRequestAdminPermission.class), Processing(7, "Processing", MccRequestAdminPermission.class), - Fulfilled(8, "Fulfilled", MccRequestAdminPermission.class); + Fulfilled(8, "Fulfilled", MccRequestAdminPermission.class), + Withdrawn(9, "Withdrawn", MccRequestorPermission.class); int sortOrder; String label; diff --git a/mcc/src/org/labkey/mcc/MccModule.java b/mcc/src/org/labkey/mcc/MccModule.java index 0c5ccc55b..1adc4744f 100644 --- a/mcc/src/org/labkey/mcc/MccModule.java +++ b/mcc/src/org/labkey/mcc/MccModule.java @@ -59,7 +59,7 @@ public String getName() @Override public @Nullable Double getSchemaVersion() { - return 20.013; + return 20.014; } @Override diff --git a/mcc/src/org/labkey/mcc/query/MccRequest.java b/mcc/src/org/labkey/mcc/query/MccRequest.java index e8814c94e..300b196b3 100644 --- a/mcc/src/org/labkey/mcc/query/MccRequest.java +++ b/mcc/src/org/labkey/mcc/query/MccRequest.java @@ -13,6 +13,7 @@ public class MccRequest private String _title; private String _narrative; private String _neuroscience; + private String _diseasefocus; private boolean _census; private String _censusReason; diff --git a/mcc/src/org/labkey/mcc/query/RequestScoreActionsDisplayColumnFactory.java b/mcc/src/org/labkey/mcc/query/RequestScoreActionsDisplayColumnFactory.java index 029ccd955..d075223cc 100644 --- a/mcc/src/org/labkey/mcc/query/RequestScoreActionsDisplayColumnFactory.java +++ b/mcc/src/org/labkey/mcc/query/RequestScoreActionsDisplayColumnFactory.java @@ -5,7 +5,6 @@ import org.jetbrains.annotations.NotNull; import org.labkey.api.data.ColumnInfo; import org.labkey.api.data.Container; -import org.labkey.api.data.DataColumn; import org.labkey.api.data.DisplayColumn; import org.labkey.api.data.DisplayColumnFactory; import org.labkey.api.data.RenderContext; @@ -13,6 +12,7 @@ import org.labkey.api.query.FieldKey; import org.labkey.api.security.User; import org.labkey.api.security.UserManager; +import org.labkey.api.util.PageFlowUtil; import org.labkey.api.view.template.ClientDependency; import org.labkey.mcc.MccManager; import org.labkey.mcc.security.MccFinalReviewPermission; @@ -20,6 +20,7 @@ import java.io.IOException; import java.io.Writer; +import java.util.LinkedHashSet; import java.util.Set; public class RequestScoreActionsDisplayColumnFactory implements DisplayColumnFactory @@ -73,6 +74,7 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep { DetailsURL url = DetailsURL.fromString("/mcc/requestReview.view?requestId=" + requestId + "&mode=primaryReview", requestContainer); out.write("<br><a class=\"labkey-text-link\" href=\"" + url.getActionURL().addReturnURL(ctx.getViewContext().getActionURL()) + "\">Enter MCC Internal Review</a>"); + out.write(getWithdrawnLine(ctx, requestRowId)); } } else if (st == MccManager.RequestStatus.RabReview && ctx.get(FieldKey.fromString("pendingRabReviews"), Integer.class) == 0) @@ -81,6 +83,7 @@ else if (st == MccManager.RequestStatus.RabReview && ctx.get(FieldKey.fromString { DetailsURL url = DetailsURL.fromString("/mcc/requestReview.view?requestId=" + requestId + "&mode=resourceAvailability", requestContainer); out.write("<br><a class=\"labkey-text-link\" href=\"" + url.getActionURL().addReturnURL(ctx.getViewContext().getActionURL()) + "\">Enter Resource Availability Assessment</a>"); + out.write(getWithdrawnLine(ctx, requestRowId)); } } else if (st == MccManager.RequestStatus.PendingDecision) @@ -89,11 +92,13 @@ else if (st == MccManager.RequestStatus.PendingDecision) { DetailsURL url = DetailsURL.fromString("/mcc/requestReview.view?requestId=" + requestId + "&mode=finalReview", requestContainer); out.write("<br><a class=\"labkey-text-link\" href=\"" + url.getActionURL().addReturnURL(ctx.getViewContext().getActionURL()) + "\">Enter Final Review</a>"); + out.write(getWithdrawnLine(ctx, requestRowId)); } } else if (st == MccManager.RequestStatus.Approved) { - out.write("<br><a class=\"labkey-text-link\" href=\"javascript:alert('This is not enabled yet')\">Update Animal Availability</a>"); + out.write("<br><a class=\"labkey-text-link\" onclick=\"MCC.window.ChangeStatusWindow.buttonHandler(" + PageFlowUtil.jsString(ctx.getCurrentRegion().getName()) + "," + requestRowId + ", 'Fulfilled')\">Mark Fulfilled</a>"); + out.write(getWithdrawnLine(ctx, requestRowId)); } } catch (IllegalArgumentException e) @@ -115,6 +120,21 @@ public void addQueryFieldKeys(Set<FieldKey> keys) keys.add(getBoundKey("requestId", "status")); keys.add(getBoundKey("requestId" , "rowid")); } + + @Override + public @NotNull Set<ClientDependency> getClientDependencies() + { + Set<ClientDependency> ret = new LinkedHashSet<>(super.getClientDependencies()); + ret.add(ClientDependency.fromPath("LDK/LDKApi.lib.xml")); + ret.add(ClientDependency.fromPath("mcc/window/ChangeStatusWindow.js")); + + return ret; + } }; } + + private String getWithdrawnLine(RenderContext ctx, int requestRowId) + { + return "<br><a class=\"labkey-text-link\" onclick=\"MCC.window.ChangeStatusWindow.buttonHandler(" + PageFlowUtil.jsString(ctx.getCurrentRegion().getName()) + "," + requestRowId + ", 'Withdrawn')\">Withdraw Request</a>"; + } } diff --git a/mcc/test/src/org/labkey/test/tests/mcc/MccTest.java b/mcc/test/src/org/labkey/test/tests/mcc/MccTest.java index a8d35cad8..f609b554f 100644 --- a/mcc/test/src/org/labkey/test/tests/mcc/MccTest.java +++ b/mcc/test/src/org/labkey/test/tests/mcc/MccTest.java @@ -362,6 +362,7 @@ else if ("radio".equals(inputType)) new FormElement("project-narrative", "narrative", "the narrative").inputType("textarea"), new FormElement("investigator-last-name", "lastName", "last name"), new FormElement("neuroscience", "neuroscience", "neuroscience connection").inputType("textarea"), + new FormElement("diseasefocus", "diseasefocus", "my disease focus"), new FormElement("investigator-first-name", "firstName", "first name"), new FormElement("investigator-middle-initial", "middleinitial", "m"), new FormElement("is-early-stage-investigator", "earlystageinvestigator", true).radio(), From 92546b9d96db19e619e3f919818d3b39aa14b8e8 Mon Sep 17 00:00:00 2001 From: bbimber <bbimber@gmail.com> Date: Fri, 14 Apr 2023 09:34:26 -0700 Subject: [PATCH 05/17] Update MCC scoring logic to work when user enters multiple values --- mcc/resources/queries/mcc/animalRequests.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mcc/resources/queries/mcc/animalRequests.js b/mcc/resources/queries/mcc/animalRequests.js index 952a378e5..e069b428e 100644 --- a/mcc/resources/queries/mcc/animalRequests.js +++ b/mcc/resources/queries/mcc/animalRequests.js @@ -121,10 +121,11 @@ function calculatePreliminaryScore(row, oldRow) { console.error('Unknown MCC institutiontype: ' + row.institutiontype) } - if (['nih', 'other-federal', 'start-up', 'foundation'].indexOf(row.fundingsource) !== -1) { + var fs = row.fundingsource ? row.fundingsource.split(',') : [] + if (fs.indexOf('nih') !== -1 || fs.indexOf('other-federal') !== -1 || fs.indexOf('start-up') !== -1 || fs.indexOf('foundation') !== -1) { score += 1; } - else if (row.fundingsource === 'private' || row.fundingsource === 'no-funding') { + else if (fs.indexOf('private') !== -1 || fs.indexOf('no-funding') !== -1) { // no score change } else { From 30545b1f872935f596f3bf5095e2ed88b3d94eec Mon Sep 17 00:00:00 2001 From: bbimber <bbimber@gmail.com> Date: Fri, 14 Apr 2023 14:17:02 -0700 Subject: [PATCH 06/17] Add validation to mGAP release steps --- mGAP/resources/etls/prime-seq.xml | 1 + .../mgap/pipeline/GenerateMgapTracksStep.java | 15 +++------------ .../mgap/pipeline/mGapReleaseGenerator.java | 4 +++- 3 files changed, 7 insertions(+), 13 deletions(-) diff --git a/mGAP/resources/etls/prime-seq.xml b/mGAP/resources/etls/prime-seq.xml index d23936eff..ea71e51b5 100644 --- a/mGAP/resources/etls/prime-seq.xml +++ b/mGAP/resources/etls/prime-seq.xml @@ -131,6 +131,7 @@ </columnTransforms> </destination> </transform> + <transform id="step5" type="RemoteQueryTransformStep"> <description>Copy to local table</description> <source schemaName="mGAP" queryName="variantList" remoteSource="PRIMESEQ" sourceTimeout="0"> diff --git a/mGAP/src/org/labkey/mgap/pipeline/GenerateMgapTracksStep.java b/mGAP/src/org/labkey/mgap/pipeline/GenerateMgapTracksStep.java index 0a49a2109..dec738929 100644 --- a/mGAP/src/org/labkey/mgap/pipeline/GenerateMgapTracksStep.java +++ b/mGAP/src/org/labkey/mgap/pipeline/GenerateMgapTracksStep.java @@ -75,8 +75,9 @@ public static class Provider extends AbstractVariantProcessingStepProvider<Gener public Provider() { super("GenerateMgapTracksStep", "Generate mGAP Tracks", "GenerateMgapTracksStep", "This will use the set of sample IDs from the table mgap.releaseTrackSubsets to subset the input VCF and produce one VCF per track. It will perform basic validation and also update mgap.releaseTracks.", Arrays.asList( - ToolParameterDescriptor.create("releaseVersion", "mGAP Version", "This is the string that was used to annotate novel variants.", "textfield", new JSONObject(){{ + ToolParameterDescriptor.create("releaseVersion", "mGAP Version", "This is the string that was used to annotate novel variants.", "ldk-numberfield", new JSONObject(){{ put("allowBlank", false); + put("decimalPrecision", 1); put("doNotIncludeInTemplates", true); }}, null) ), null, null); @@ -174,17 +175,7 @@ public Output processVariants(File inputVCF, File outputDirectory, ReferenceGeno } // Also create the Novel Sites track: - String releaseVersion = getProvider().getParameterByName("releaseVersion").extractValue(getPipelineCtx().getJob(), getProvider(), getStepIdx(), String.class); - if (releaseVersion.toLowerCase().startsWith("v")) - { - releaseVersion = releaseVersion.substring(1); - } - - if (!NumberUtils.isCreatable(releaseVersion)) - { - throw new IllegalArgumentException("Expected the release version to be numeric: " + releaseVersion); - } - + Double releaseVersion = getProvider().getParameterByName("releaseVersion").extractValue(getPipelineCtx().getJob(), getProvider(), getStepIdx(), Double.class); File novelSitesOutput = new File(outputDirectory, "mGAP_v" + releaseVersion + "_NovelSites.vcf.gz"); if (new File(novelSitesOutput.getPath() + ".tbi").exists()) { diff --git a/mGAP/src/org/labkey/mgap/pipeline/mGapReleaseGenerator.java b/mGAP/src/org/labkey/mgap/pipeline/mGapReleaseGenerator.java index de1b00c8d..e9462a65a 100644 --- a/mGAP/src/org/labkey/mgap/pipeline/mGapReleaseGenerator.java +++ b/mGAP/src/org/labkey/mgap/pipeline/mGapReleaseGenerator.java @@ -99,8 +99,10 @@ public class mGapReleaseGenerator extends AbstractParameterizedOutputHandler<Seq public mGapReleaseGenerator() { super(ModuleLoader.getInstance().getModule(mGAPModule.class), "Create mGAP Release", "This will prepare an input VCF for use as an mGAP public release. This will optionally include: removing excess annotations and program records, limiting to SNVs (optional) and removing genotype data (optional). If genotypes are retained, the subject names will be checked for mGAP aliases and replaced as needed.", new LinkedHashSet<>(PageFlowUtil.set("sequenceanalysis/field/GenomeFileSelectorField.js")), Arrays.asList( - ToolParameterDescriptor.create("releaseVersion", "Version", "This string will be used as the version when published.", "textfield", new JSONObject(){{ + ToolParameterDescriptor.create("releaseVersion", "Version", "This value will be used as the version when published.", "ldk-numberfield", new JSONObject(){{ put("allowBlank", false); + put("decimalPrecision", 1); + put("doNotIncludeInTemplates", true); }}, null), ToolParameterDescriptor.createExpDataParam("gtfFile", "GTF File", "The gene file used to create these annotations.", "sequenceanalysis-genomefileselectorfield", new JSONObject() {{ From 31608d6abe1a9d6fe0599a4fe9dd698e6ace17dc Mon Sep 17 00:00:00 2001 From: bbimber <bbimber@gmail.com> Date: Sun, 16 Apr 2023 06:37:33 -0700 Subject: [PATCH 07/17] Bugfix to track import --- .../org/labkey/mgap/pipeline/GenerateMgapTracksStep.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/mGAP/src/org/labkey/mgap/pipeline/GenerateMgapTracksStep.java b/mGAP/src/org/labkey/mgap/pipeline/GenerateMgapTracksStep.java index dec738929..afffb0cdf 100644 --- a/mGAP/src/org/labkey/mgap/pipeline/GenerateMgapTracksStep.java +++ b/mGAP/src/org/labkey/mgap/pipeline/GenerateMgapTracksStep.java @@ -250,13 +250,15 @@ private void createOrUpdateTrack(SequenceOutputFile so, PipelineJob job, String } else { - job.getLogger().debug("Updating existing track: " + so.getName()); + int rowId = ts.getObject(Integer.class) + job.getLogger().debug("Updating existing track: " + so.getName() + " / " + rowId); + Map<String, Object> toUpdate = new CaseInsensitiveHashMap<>(); - toUpdate.put("rowId", ts.getObject(Integer.class)); + toUpdate.put("rowId", rowId); toUpdate.put("vcfId", so.getRowid()); Map<String, Object> oldKeys = new CaseInsensitiveHashMap<>(); - toUpdate.put("rowId", ts.getObject(Integer.class)); + oldKeys.put("rowId", rowId); releaseTracks.getUpdateService().updateRows(job.getUser(), targetContainer, Arrays.asList(toUpdate), Arrays.asList(oldKeys), null, null); } From ce9f7697f6bab9e69d119f8d49e8d6bb851a9b63 Mon Sep 17 00:00:00 2001 From: bbimber <bbimber@gmail.com> Date: Sun, 16 Apr 2023 06:45:51 -0700 Subject: [PATCH 08/17] Bugfix to track import --- mGAP/src/org/labkey/mgap/pipeline/GenerateMgapTracksStep.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mGAP/src/org/labkey/mgap/pipeline/GenerateMgapTracksStep.java b/mGAP/src/org/labkey/mgap/pipeline/GenerateMgapTracksStep.java index afffb0cdf..d4939791b 100644 --- a/mGAP/src/org/labkey/mgap/pipeline/GenerateMgapTracksStep.java +++ b/mGAP/src/org/labkey/mgap/pipeline/GenerateMgapTracksStep.java @@ -250,7 +250,7 @@ private void createOrUpdateTrack(SequenceOutputFile so, PipelineJob job, String } else { - int rowId = ts.getObject(Integer.class) + int rowId = ts.getObject(Integer.class); job.getLogger().debug("Updating existing track: " + so.getName() + " / " + rowId); Map<String, Object> toUpdate = new CaseInsensitiveHashMap<>(); From 86ed3dab26d9674724d231cf9e47cad7b87044ce Mon Sep 17 00:00:00 2001 From: bbimber <bbimber@gmail.com> Date: Sun, 16 Apr 2023 12:47:30 -0700 Subject: [PATCH 09/17] Bugfix to track import --- .../org/labkey/mgap/pipeline/GenerateMgapTracksStep.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/mGAP/src/org/labkey/mgap/pipeline/GenerateMgapTracksStep.java b/mGAP/src/org/labkey/mgap/pipeline/GenerateMgapTracksStep.java index 10d0e6924..c18b50c7a 100644 --- a/mGAP/src/org/labkey/mgap/pipeline/GenerateMgapTracksStep.java +++ b/mGAP/src/org/labkey/mgap/pipeline/GenerateMgapTracksStep.java @@ -252,13 +252,15 @@ private void createOrUpdateTrack(SequenceOutputFile so, PipelineJob job, String } else { - job.getLogger().debug("Updating existing track: " + so.getName()); + int rowId = ts.getObject(Integer.class); + job.getLogger().debug("Updating existing track: " + so.getName() + " / " + rowId); + Map<String, Object> toUpdate = new CaseInsensitiveHashMap<>(); - toUpdate.put("rowId", ts.getObject(Integer.class)); + toUpdate.put("rowId", rowId); toUpdate.put("vcfId", so.getRowid()); Map<String, Object> oldKeys = new CaseInsensitiveHashMap<>(); - toUpdate.put("rowId", ts.getObject(Integer.class)); + oldKeys.put("rowId", rowId); releaseTracks.getUpdateService().updateRows(job.getUser(), targetContainer, Arrays.asList(toUpdate), Arrays.asList(oldKeys), null, null); } From ac46639863dd33687a2f96c4955f1c0cb5fbec72 Mon Sep 17 00:00:00 2001 From: bbimber <bbimber@gmail.com> Date: Mon, 17 Apr 2023 05:19:00 -0700 Subject: [PATCH 10/17] Fix error in mGAP track creation --- mGAP/src/org/labkey/mgap/pipeline/GenerateMgapTracksStep.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mGAP/src/org/labkey/mgap/pipeline/GenerateMgapTracksStep.java b/mGAP/src/org/labkey/mgap/pipeline/GenerateMgapTracksStep.java index c18b50c7a..c20fcf64f 100644 --- a/mGAP/src/org/labkey/mgap/pipeline/GenerateMgapTracksStep.java +++ b/mGAP/src/org/labkey/mgap/pipeline/GenerateMgapTracksStep.java @@ -233,7 +233,7 @@ private void createOrUpdateTrack(SequenceOutputFile so, PipelineJob job, String { Container targetContainer = job.getContainer().isWorkbook() ? job.getContainer().getParent() : job.getContainer(); TableInfo releaseTracks = QueryService.get().getUserSchema(job.getUser(), targetContainer, mGAPSchema.NAME).getTable(mGAPSchema.TABLE_RELEASE_TRACKS); - TableSelector ts = new TableSelector(releaseTracks, PageFlowUtil.set("rowid"), new SimpleFilter(FieldKey.fromString("trackName"), so.getName()), null); + TableSelector ts = new TableSelector(releaseTracks, PageFlowUtil.set("rowid"), new SimpleFilter(FieldKey.fromString("trackName"), trackName), null); if (!ts.exists()) { job.getLogger().debug("Creating new track: " + so.getName()); From 4816e893dbdd2b4cf0d07314881558cb07c7b26a Mon Sep 17 00:00:00 2001 From: bbimber <bbimber@gmail.com> Date: Tue, 18 Apr 2023 08:02:03 -0700 Subject: [PATCH 11/17] Merge discvr-22.11 to discvr-23.3 (#105) * Bugfix to track import * Fix error in mGAP track creation --- mGAP/src/org/labkey/mgap/pipeline/GenerateMgapTracksStep.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mGAP/src/org/labkey/mgap/pipeline/GenerateMgapTracksStep.java b/mGAP/src/org/labkey/mgap/pipeline/GenerateMgapTracksStep.java index d4939791b..edba9dc80 100644 --- a/mGAP/src/org/labkey/mgap/pipeline/GenerateMgapTracksStep.java +++ b/mGAP/src/org/labkey/mgap/pipeline/GenerateMgapTracksStep.java @@ -231,7 +231,7 @@ private void createOrUpdateTrack(SequenceOutputFile so, PipelineJob job, String { Container targetContainer = job.getContainer().isWorkbook() ? job.getContainer().getParent() : job.getContainer(); TableInfo releaseTracks = QueryService.get().getUserSchema(job.getUser(), targetContainer, mGAPSchema.NAME).getTable(mGAPSchema.TABLE_RELEASE_TRACKS); - TableSelector ts = new TableSelector(releaseTracks, PageFlowUtil.set("rowid"), new SimpleFilter(FieldKey.fromString("trackName"), so.getName()), null); + TableSelector ts = new TableSelector(releaseTracks, PageFlowUtil.set("rowid"), new SimpleFilter(FieldKey.fromString("trackName"), trackName), null); if (!ts.exists()) { job.getLogger().debug("Creating new track: " + so.getName()); From 12b829af98f6899d2425a67926e083df84722f85 Mon Sep 17 00:00:00 2001 From: bbimber <bbimber@gmail.com> Date: Thu, 27 Apr 2023 11:26:16 -0700 Subject: [PATCH 12/17] Misc debugging updates --- mGAP/src/org/labkey/mgap/pipeline/GenerateMgapTracksStep.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mGAP/src/org/labkey/mgap/pipeline/GenerateMgapTracksStep.java b/mGAP/src/org/labkey/mgap/pipeline/GenerateMgapTracksStep.java index edba9dc80..7556dd25f 100644 --- a/mGAP/src/org/labkey/mgap/pipeline/GenerateMgapTracksStep.java +++ b/mGAP/src/org/labkey/mgap/pipeline/GenerateMgapTracksStep.java @@ -234,7 +234,7 @@ private void createOrUpdateTrack(SequenceOutputFile so, PipelineJob job, String TableSelector ts = new TableSelector(releaseTracks, PageFlowUtil.set("rowid"), new SimpleFilter(FieldKey.fromString("trackName"), trackName), null); if (!ts.exists()) { - job.getLogger().debug("Creating new track: " + so.getName()); + job.getLogger().debug("Creating new track: " + trackName + " / " + so.getName()); Map<String, Object> newRow = new CaseInsensitiveHashMap<>(); newRow.put("trackName", trackName); newRow.put("label", trackName); From c54ca96eba7d3bd1e6dbabbed0568ffe11e9b669 Mon Sep 17 00:00:00 2001 From: bbimber <bbimber@gmail.com> Date: Fri, 28 Apr 2023 17:04:40 -0700 Subject: [PATCH 13/17] Initial PRIMe ETLs --- primeseq/resources/etls/prime-blooddraws.xml | 30 +++++++++++++ .../resources/etls/prime-demographics.xml | 34 +++++++++++++++ primeseq/resources/etls/prime-parentage.xml | 32 ++++++++++++++ primeseq/resources/etls/prime-weight.xml | 29 +++++++++++++ primeseq/resources/etls/prime.xml | 43 +++++++++++++++++++ 5 files changed, 168 insertions(+) create mode 100644 primeseq/resources/etls/prime-blooddraws.xml create mode 100644 primeseq/resources/etls/prime-demographics.xml create mode 100644 primeseq/resources/etls/prime-parentage.xml create mode 100644 primeseq/resources/etls/prime-weight.xml create mode 100644 primeseq/resources/etls/prime.xml diff --git a/primeseq/resources/etls/prime-blooddraws.xml b/primeseq/resources/etls/prime-blooddraws.xml new file mode 100644 index 000000000..8faf28096 --- /dev/null +++ b/primeseq/resources/etls/prime-blooddraws.xml @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8"?> +<etl xmlns="http://labkey.org/etl/xml" standalone="false"> + <name>PRIME_Blood_Data</name> + <description>PRIMe Blood Data</description> + <transforms> + <transform type="RemoteQueryTransformStep" id="blood"> + <description>Copy to target</description> + <source remoteSource="PRIME" schemaName="study" queryName="blood" sourceTimeout="0"> + <sourceColumns> + <column>Id</column> + <column>date</column> + <column>reason</column> + <column>quantity</column> + <column>objectid</column> + <column>QCState</column> + </sourceColumns> + </source> + <destination schemaName="study" queryName="blood" targetOption="merge" bulkLoad="true"> + + </destination> + </transform> + </transforms> + <incrementalFilter timestampColumnName="modified" pkColumnName="lsid" className="ModifiedSinceFilterStrategy" > + <deletedRowsSource remoteSource="PRIME" schemaName="auditlog" queryName="DatasetAuditEvent" timestampColumnName="Created" sourceTimeout="0" deletedSourceKeyColumnName="lsid" targetKeyColumnName="lsid"> + <sourceFilters> + <sourceFilter column="datasetid/Name" operator="eq" value="blood" /> + </sourceFilters> + </deletedRowsSource> + </incrementalFilter> +</etl> diff --git a/primeseq/resources/etls/prime-demographics.xml b/primeseq/resources/etls/prime-demographics.xml new file mode 100644 index 000000000..6485f5ee1 --- /dev/null +++ b/primeseq/resources/etls/prime-demographics.xml @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?> +<etl xmlns="http://labkey.org/etl/xml" standalone="false"> + <name>PRIME_Demographics_Data</name> + <description>PRIMe Demographics Data</description> + <transforms> + <transform type="RemoteQueryTransformStep" id="demographics"> + <description>Copy to target</description> + <source remoteSource="PRIME" schemaName="study" queryName="Demographics" sourceTimeout="0"> + <sourceColumns> + <column>Id</column> + <column>date</column> + <column>gender</column> + <column>geographic_origin</column> + <column>birth</column> + <column>death</column> + <column>species</column> + <column>status</column> + <column>objectid</column> + <column>QCState</column> + </sourceColumns> + </source> + <destination schemaName="study" queryName="Demographics" targetOption="merge" bulkLoad="true"> + + </destination> + </transform> + </transforms> + <incrementalFilter timestampColumnName="modified" pkColumnName="lsid" className="ModifiedSinceFilterStrategy" > + <deletedRowsSource remoteSource="PRIME" schemaName="auditlog" queryName="DatasetAuditEvent" timestampColumnName="Created" sourceTimeout="0" deletedSourceKeyColumnName="lsid" targetKeyColumnName="lsid"> + <sourceFilters> + <sourceFilter column="datasetid/Name" operator="eq" value="blood" /> + </sourceFilters> + </deletedRowsSource> + </incrementalFilter> +</etl> diff --git a/primeseq/resources/etls/prime-parentage.xml b/primeseq/resources/etls/prime-parentage.xml new file mode 100644 index 000000000..107683da9 --- /dev/null +++ b/primeseq/resources/etls/prime-parentage.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<etl xmlns="http://labkey.org/etl/xml" standalone="false"> + <name>PRIME_Parentage_Data</name> + <description>PRIMe Parentage Data</description> + <transforms> + <transform type="RemoteQueryTransformStep" id="demographics"> + <description>Copy to target</description> + <source remoteSource="PRIME" schemaName="study" queryName="Parentage" sourceTimeout="0"> + <sourceColumns> + <column>Id</column> + <column>date</column> + <column>parent</column> + <column>relationship</column> + <column>method</column> + <column>datedisabled</column> + <column>objectid</column> + <column>QCState</column> + </sourceColumns> + </source> + <destination schemaName="study" queryName="Parentage" targetOption="merge" bulkLoad="true"> + + </destination> + </transform> + </transforms> + <incrementalFilter timestampColumnName="modified" pkColumnName="lsid" className="ModifiedSinceFilterStrategy" > + <deletedRowsSource remoteSource="PRIME" schemaName="auditlog" queryName="DatasetAuditEvent" timestampColumnName="Created" sourceTimeout="0" deletedSourceKeyColumnName="lsid" targetKeyColumnName="lsid"> + <sourceFilters> + <sourceFilter column="datasetid/Name" operator="eq" value="parentage" /> + </sourceFilters> + </deletedRowsSource> + </incrementalFilter> +</etl> diff --git a/primeseq/resources/etls/prime-weight.xml b/primeseq/resources/etls/prime-weight.xml new file mode 100644 index 000000000..dba86c54d --- /dev/null +++ b/primeseq/resources/etls/prime-weight.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?> +<etl xmlns="http://labkey.org/etl/xml" standalone="false"> + <name>PRIME_Parentage_Data</name> + <description>PRIMe Parentage Data</description> + <transforms> + <transform type="RemoteQueryTransformStep" id="weight"> + <description>Copy to target</description> + <source remoteSource="PRIME" schemaName="study" queryName="weight" sourceTimeout="0"> + <sourceColumns> + <column>Id</column> + <column>date</column> + <column>weight</column> + <column>objectid</column> + <column>QCState</column> + </sourceColumns> + </source> + <destination schemaName="study" queryName="weight" targetOption="merge" bulkLoad="true"> + + </destination> + </transform> + </transforms> + <incrementalFilter timestampColumnName="modified" pkColumnName="lsid" className="ModifiedSinceFilterStrategy" > + <deletedRowsSource remoteSource="PRIME" schemaName="auditlog" queryName="DatasetAuditEvent" timestampColumnName="Created" sourceTimeout="0" deletedSourceKeyColumnName="lsid" targetKeyColumnName="lsid"> + <sourceFilters> + <sourceFilter column="datasetid/Name" operator="eq" value="weight" /> + </sourceFilters> + </deletedRowsSource> + </incrementalFilter> +</etl> diff --git a/primeseq/resources/etls/prime.xml b/primeseq/resources/etls/prime.xml new file mode 100644 index 000000000..f84182ab3 --- /dev/null +++ b/primeseq/resources/etls/prime.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?> +<etl xmlns="http://labkey.org/etl/xml"> + <name>PRIME_Data</name> + <description>PRIMe Clinical/Demographics Data</description> + <transforms> + <transform id="demographics" type="TaskrefTransformStep"> + <taskref ref="org.labkey.di.steps.QueueJobTask"> + <settings> + <setting name="transformId" value="{primeseq}/prime-demographics"/> + </settings> + </taskref> + </transform> + + <transform id="parentage" type="TaskrefTransformStep"> + <taskref ref="org.labkey.di.steps.QueueJobTask"> + <settings> + <setting name="transformId" value="{primeseq}/prime-parentage"/> + </settings> + </taskref> + </transform> + + <transform id="weight" type="TaskrefTransformStep"> + <taskref ref="org.labkey.di.steps.QueueJobTask"> + <settings> + <setting name="transformId" value="{primeseq}/prime-weight"/> + </settings> + </taskref> + </transform> + + <transform id="blooddraws" type="TaskrefTransformStep"> + <taskref ref="org.labkey.di.steps.QueueJobTask"> + <settings> + <setting name="transformId" value="{primeseq}/prime-blooddraws"/> + </settings> + </taskref> + </transform> + + </transforms> + + <schedule> + <cron expression="0 0 3 * * ?"/> + </schedule> +</etl> From 0b475eff097ef74419af2a66408ea097be17b484 Mon Sep 17 00:00:00 2001 From: bbimber <bbimber@gmail.com> Date: Sat, 29 Apr 2023 04:22:46 -0700 Subject: [PATCH 14/17] Add default view to query --- .../queries/mGAP/releaseTracks/.qview.xml | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 mGAP/resources/queries/mGAP/releaseTracks/.qview.xml diff --git a/mGAP/resources/queries/mGAP/releaseTracks/.qview.xml b/mGAP/resources/queries/mGAP/releaseTracks/.qview.xml new file mode 100644 index 000000000..2462f2d16 --- /dev/null +++ b/mGAP/resources/queries/mGAP/releaseTracks/.qview.xml @@ -0,0 +1,23 @@ +<customView xmlns="http://labkey.org/data/xml/queryCustomView"> + <columns> + <column name="rowid"/> + <column name="trackName"/> + <column name="label"/> + <column name="source"/> + <column name="category"/> + <column name="url"/> + <column name="vcfId"/> + <column name="description"/> + <column name="isprimarytrack"/> + <column name="mergepriority"/> + <column name="skipvalidation"/> + <column name="vcfId/container/Name"> + <properties> + <property name="columnTitle" value="Workbook"/> + </properties> + </column> + </columns> + <sorts> + <sort column="trackName" descending="false"/> + </sorts> +</customView> \ No newline at end of file From 885c39d01b4a46fbc1cfca693df4d0ee9aff4ae6 Mon Sep 17 00:00:00 2001 From: bbimber <bbimber@gmail.com> Date: Sun, 30 Apr 2023 06:16:54 -0700 Subject: [PATCH 15/17] Add code to view summary of MCC transfers --- .../mcc/aggregatedDemographics.query.xml | 28 ++++++++++++++++++ .../queries/mcc/aggregatedDemographics.sql | 8 +++++ .../mcc/aggregatedDemographics/.qview.xml | 29 +++++++++++++++++++ .../Transfers.qview.xml | 29 +++++++++++++++++++ mcc/resources/views/mccColony.html | 3 ++ 5 files changed, 97 insertions(+) create mode 100644 mcc/resources/queries/mcc/aggregatedDemographics.query.xml create mode 100644 mcc/resources/queries/mcc/aggregatedDemographics/.qview.xml create mode 100644 mcc/resources/queries/mcc/aggregatedDemographics/Transfers.qview.xml diff --git a/mcc/resources/queries/mcc/aggregatedDemographics.query.xml b/mcc/resources/queries/mcc/aggregatedDemographics.query.xml new file mode 100644 index 000000000..a54e2b500 --- /dev/null +++ b/mcc/resources/queries/mcc/aggregatedDemographics.query.xml @@ -0,0 +1,28 @@ +<query xmlns="http://labkey.org/data/xml/query"> + <metadata> + <tables xmlns="http://labkey.org/data/xml"> + <table tableName="MCC Aggregated Demographics" tableDbType="TABLE"> + <columns> + <column columnName="Id"> + <columnTitle>MCC ID</columnTitle> + </column> + <column columnName="originalId"> + <columnTitle>Center Id</columnTitle> + </column> + <column columnName="dam"> + <columnTitle>Dam MCC Id</columnTitle> + </column> + <column columnName="originalDam"> + <columnTitle>Dam Center Id</columnTitle> + </column> + <column columnName="originalSire"> + <columnTitle>Sire Center Id</columnTitle> + </column> + <column columnName="sire"> + <columnTitle>Sire MCC Id</columnTitle> + </column> + </columns> + </table> + </tables> + </metadata> +</query> \ No newline at end of file diff --git a/mcc/resources/queries/mcc/aggregatedDemographics.sql b/mcc/resources/queries/mcc/aggregatedDemographics.sql index ef703373d..b3d1af05f 100644 --- a/mcc/resources/queries/mcc/aggregatedDemographics.sql +++ b/mcc/resources/queries/mcc/aggregatedDemographics.sql @@ -7,6 +7,7 @@ SELECT d.birth, d.death, d.colony, + d.source, d.damMccAlias.externalAlias as dam, d.sireMccAlias.externalAlias as sire, d.dam as originalDam, @@ -18,6 +19,7 @@ SELECT WHEN d.calculated_status = 'Alive' AND (SELECT COUNT(f.flag.value) as total FROM "/data/Colonies/SNPRC/".study.flags f WHERE f.Id = d.Id AND f.isActive = true) > 0 THEN true ELSE false END as u24_status, + d.Id.mostRecentDeparture.mostRecentDeparture, o.availability, o.current_housing_status, o.infant_history, @@ -50,6 +52,7 @@ SELECT d.birth, d.death, d.colony, + d.source, d.damMccAlias.externalAlias as dam, d.sireMccAlias.externalAlias as sire, d.dam as originalDam, @@ -61,6 +64,7 @@ SELECT WHEN d.calculated_status = 'Alive' AND (SELECT COUNT(f.flag.value) as total FROM "/data/Colonies/WNPRC/".study.flags f WHERE f.Id = d.Id AND f.isActive = true) > 0 THEN true ELSE false END as u24_status, + d.Id.mostRecentDeparture.mostRecentDeparture, o.availability, o.current_housing_status, o.infant_history, @@ -93,6 +97,7 @@ SELECT d.birth, d.death, d.colony, + d.source, d.damMccAlias.externalAlias as dam, d.sireMccAlias.externalAlias as sire, d.dam as originalDam, @@ -101,6 +106,7 @@ SELECT d.objectid, d.calculated_status, d.u24_status, + d.Id.mostRecentDeparture.mostRecentDeparture, o.availability, o.current_housing_status, o.infant_history, @@ -133,6 +139,7 @@ SELECT d.birth, d.death, d.colony, + d.source, d.damMccAlias.externalAlias as dam, d.sireMccAlias.externalAlias as sire, d.dam as originalDam, @@ -141,6 +148,7 @@ SELECT d.objectid, d.calculated_status, d.u24_status, + d.Id.mostRecentDeparture.mostRecentDeparture, o.availability, o.current_housing_status, o.infant_history, diff --git a/mcc/resources/queries/mcc/aggregatedDemographics/.qview.xml b/mcc/resources/queries/mcc/aggregatedDemographics/.qview.xml new file mode 100644 index 000000000..a5b17c161 --- /dev/null +++ b/mcc/resources/queries/mcc/aggregatedDemographics/.qview.xml @@ -0,0 +1,29 @@ +<customView xmlns="http://labkey.org/data/xml/queryCustomView" canOverride="false"> + <columns> + <column name="Id"/> + <column name="originalId"/> + <column name="species"/> + <column name="gender"/> + <column name="birth"/> + <column name="death"/> + <column name="colony"/> + <column name="source"/> + <column name="dam"/> + <column name="originalDam"/> + <column name="sire"/> + <column name="originalSire"/> + <column name="mostRecentWeight"/> + <column name="calculated_status"/> + <column name="u24_status"/> + <column name="mostRecentDeparture"/> + <column name="availability"/> + <column name="current_housing_status"/> + <column name="infant_history"/> + <column name="fertility_status"/> + <column name="medical_history"/> + <column name="date_of_observations"/> + </columns> + <sorts> + <sort column="Id" descending="true"/> + </sorts> +</customView> \ No newline at end of file diff --git a/mcc/resources/queries/mcc/aggregatedDemographics/Transfers.qview.xml b/mcc/resources/queries/mcc/aggregatedDemographics/Transfers.qview.xml new file mode 100644 index 000000000..a17c66c79 --- /dev/null +++ b/mcc/resources/queries/mcc/aggregatedDemographics/Transfers.qview.xml @@ -0,0 +1,29 @@ +<customView xmlns="http://labkey.org/data/xml/queryCustomView" canOverride="false" label="MCC Transfers"> + <columns> + <column name="Id"/> + <column name="originalId"/> + <column name="species"/> + <column name="colony"/> + <column name="mostRecentDeparture"/> + <column name="source"/> + <column name="gender"/> + <column name="birth"/> + <column name="death"/> + <column name="mostRecentWeight"/> + <column name="calculated_status"/> + <column name="u24_status"/> + <column name="date_of_observations"/> + <column name="medical_history"/> + <column name="availability"/> + <column name="current_housing_status"/> + <column name="infant_history"/> + <column name="fertility_status"/> + </columns> + <sorts> + <sort column="Id" descending="true"/> + </sorts> + <filters> + <filter column="mostRecentDeparture" operator="isnonblank" value=""/> + <filter column="source" operator="isnonblank" value=""/> + </filters> +</customView> \ No newline at end of file diff --git a/mcc/resources/views/mccColony.html b/mcc/resources/views/mccColony.html index 896712d19..a5456a030 100644 --- a/mcc/resources/views/mccColony.html +++ b/mcc/resources/views/mccColony.html @@ -41,6 +41,9 @@ },{ name: 'View Files', url: LABKEY.ActionURL.buildURL('filecontent', 'begin.view') + },{ + name: 'View All MCC Transfers', + url: LABKEY.ActionURL.buildURL('query', 'executeQuery.view', null, {schemaName: 'mcc', queryName: 'aggregatedDemographics', 'query.viewName': 'Transfers'}) }] },{ header: 'Configuration/Data Management', From a272ad47710dfbc2fb40fc14994e63d5e931eebf Mon Sep 17 00:00:00 2001 From: bbimber <bbimber@gmail.com> Date: Sun, 30 Apr 2023 07:05:19 -0700 Subject: [PATCH 16/17] Fix MCC table title --- mcc/resources/queries/mcc/aggregatedDemographics.query.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mcc/resources/queries/mcc/aggregatedDemographics.query.xml b/mcc/resources/queries/mcc/aggregatedDemographics.query.xml index a54e2b500..35dc16238 100644 --- a/mcc/resources/queries/mcc/aggregatedDemographics.query.xml +++ b/mcc/resources/queries/mcc/aggregatedDemographics.query.xml @@ -1,7 +1,8 @@ <query xmlns="http://labkey.org/data/xml/query"> <metadata> <tables xmlns="http://labkey.org/data/xml"> - <table tableName="MCC Aggregated Demographics" tableDbType="TABLE"> + <table tableName="" tableDbType="TABLE"> + <tableTitle>MCC Aggregated Demographics</tableTitle> <columns> <column columnName="Id"> <columnTitle>MCC ID</columnTitle> From 7ccf7f58493d0fe7f181a4e48ec9442d4e22b798 Mon Sep 17 00:00:00 2001 From: bbimber <bbimber@gmail.com> Date: Sun, 30 Apr 2023 14:03:14 -0700 Subject: [PATCH 17/17] Debug purchasing test (#107) * Debug purchasing test --- .../labpurchasing/LabPurchasingTest.java | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/LabPurchasing/test/src/org/labkey/test/tests/labpurchasing/LabPurchasingTest.java b/LabPurchasing/test/src/org/labkey/test/tests/labpurchasing/LabPurchasingTest.java index acbc0370f..0bb8ef0cb 100644 --- a/LabPurchasing/test/src/org/labkey/test/tests/labpurchasing/LabPurchasingTest.java +++ b/LabPurchasing/test/src/org/labkey/test/tests/labpurchasing/LabPurchasingTest.java @@ -11,16 +11,12 @@ import org.labkey.test.categories.External; import org.labkey.test.categories.LabModule; import org.labkey.test.components.ext4.Window; -import org.labkey.test.util.DataRegion; import org.labkey.test.util.DataRegionTable; import org.labkey.test.util.Ext4Helper; -import org.labkey.test.util.LogMethod; -import org.labkey.test.util.LoggedParam; import org.labkey.test.util.ext4cmp.Ext4ComboRef; import org.labkey.test.util.ext4cmp.Ext4FieldRef; import org.labkey.test.util.ext4cmp.Ext4GridRef; import org.openqa.selenium.WebElement; -import org.openqa.selenium.support.ui.ExpectedConditions; import java.util.Collections; import java.util.List; @@ -98,7 +94,26 @@ public void testLabPurchasingModule() // Adding the new vendor should have updated the combo: grid.clickTbarButton("Add New"); + checker().withScreenshot("LabPurchasingBeforeVendor"); grid.setGridCell(1, "vendorId", "New Vendor 1"); + try + { + Assert.assertTrue("Missing vendor cell", isElementPresent(Ext4GridRef.locateExt4GridCell("New Vendor 1"))); + } + catch (AssertionError e) + { + checker().withScreenshot("LabPurchasingVendor0"); + WebElement el = grid.startEditing(1, "vendorId"); + checker().withScreenshot("LabPurchasingVendor1"); + + setFormElementJS(el, ""); + el.sendKeys("New Vendor 1"); + sleep(1000); + + checker().withScreenshot("LabPurchasingVendor2"); + + throw e; + } // Try to save, expect error: click(Ext4Helper.Locators.ext4Button("Order Items"));