diff --git a/GenotypeAssays/src/org/labkey/genotypeassays/GenotypeAssaysManager.java b/GenotypeAssays/src/org/labkey/genotypeassays/GenotypeAssaysManager.java index faa9ff51..bf43c9f8 100644 --- a/GenotypeAssays/src/org/labkey/genotypeassays/GenotypeAssaysManager.java +++ b/GenotypeAssays/src/org/labkey/genotypeassays/GenotypeAssaysManager.java @@ -320,7 +320,7 @@ private void processSet(String assayType, Map> } catch (Exception e) { - _log.error(e); + _log.error(e.getMessage(), e); throw new IllegalArgumentException(e.getMessage()); } } diff --git a/SivStudies/resources/queries/study/assignment.query.xml b/SivStudies/resources/queries/study/assignment.query.xml index 00df5943..84b21728 100644 --- a/SivStudies/resources/queries/study/assignment.query.xml +++ b/SivStudies/resources/queries/study/assignment.query.xml @@ -33,7 +33,7 @@ studies studyCohorts rowId - labelOrName + studyAndCohort diff --git a/SivStudies/resources/queries/study/duplicatePVLs.query.xml b/SivStudies/resources/queries/study/duplicatePVLs.query.xml new file mode 100644 index 00000000..387e4f31 --- /dev/null +++ b/SivStudies/resources/queries/study/duplicatePVLs.query.xml @@ -0,0 +1,12 @@ + + + + + Duplicate PVLs + + + +
+
+
+
diff --git a/SivStudies/resources/queries/study/duplicatePVLs.sql b/SivStudies/resources/queries/study/duplicatePVLs.sql new file mode 100644 index 00000000..4cba4c0e --- /dev/null +++ b/SivStudies/resources/queries/study/duplicatePVLs.sql @@ -0,0 +1,21 @@ +SELECT + t.Id, + t.date, + t.sampleType, + t.assayType, + t.target, + t.result, + t.resultOORIndicator, + t.dataSource, + t.lsid, + t.created, + v.maxLsid, + CASE WHEN t.lsid = v.maxLsid THEN TRUE ELSE FALSE END as isMostRecent + +FROM study.viralLoads t + INNER JOIN ( + SELECT v.Id, v.date, v.sampleType, v.assayType, max(v.lsid) as maxLsid + FROM study.viralLoads v + GROUP BY v.Id, v.date, v.sampleType, v.assayType + HAVING count(*) > 1 +) v ON (v.Id = t.Id AND v.date = t.date AND v.sampleType = t.sampleType AND v.assayType = t.assayType) diff --git a/SivStudies/src/org/labkey/sivstudies/etl/PerformManualIdrStepsTask.java b/SivStudies/src/org/labkey/sivstudies/etl/PerformManualIdrStepsTask.java index c604e013..f3b976a1 100644 --- a/SivStudies/src/org/labkey/sivstudies/etl/PerformManualIdrStepsTask.java +++ b/SivStudies/src/org/labkey/sivstudies/etl/PerformManualIdrStepsTask.java @@ -95,6 +95,7 @@ private void pruneSivChallenges(PipelineJob pipelineJob) throws PipelineJobExcep private static final Pattern mir126_RE = Pattern.compile("miR[- ]{0,1}126", Pattern.CASE_INSENSITIVE); private static final Pattern mir142_RE = Pattern.compile("miR[- ]{0,1}142", Pattern.CASE_INSENSITIVE); private static final Pattern mir126_142_RE = Pattern.compile("miR[- ]{0,1}142[ ,-]{1,2}126", Pattern.CASE_INSENSITIVE); + private static final Pattern pp71_RE = Pattern.compile("pp71", Pattern.CASE_INSENSITIVE); private void updateVaccineInformation(PipelineJob pipelineJob) throws PipelineJobException { @@ -133,6 +134,10 @@ else if (treatment.contains("RhCMV") && treatment.contains("d186-189")) { updatedRow.put("backbone", "68-1 d186-189"); } + else if (treatment.contains("RhCMV") && treatment.contains("pp71")) + { + updatedRow.put("backbone", "68-1 delta-pp71"); + } } if (treatment.toUpperCase().contains("MOCK")) diff --git a/SivStudies/src/org/labkey/sivstudies/notification/SivStudiesDataValidationNotification.java b/SivStudies/src/org/labkey/sivstudies/notification/SivStudiesDataValidationNotification.java index d3109e27..70a79590 100644 --- a/SivStudies/src/org/labkey/sivstudies/notification/SivStudiesDataValidationNotification.java +++ b/SivStudies/src/org/labkey/sivstudies/notification/SivStudiesDataValidationNotification.java @@ -78,6 +78,7 @@ public String getEmailSubject(Container c) idsMissingFromDemographics(c, u, msg); missingArtRecord(c, u, msg); missingAnchorDates(c, u, msg); + duplicatePVLs(c, u, msg); if (!msg.isEmpty()) { @@ -128,7 +129,7 @@ private void genericQueryCheck(Container c, User u, StringBuilder msg, String sc if (count > 0) { msg.append("WARNING: There are ").append(count).append(" " + message + "
\n"); - msg.append("

Click here to view them
\n\n"); + msg.append("

Click here to view them
\n\n"); msg.append("


\n\n"); } } @@ -161,7 +162,7 @@ private void missingArtRecord(Container c, User u, StringBuilder msg) SimpleFilter filter = new SimpleFilter(FieldKey.fromString("projects/studyDescription"), "ART", CompareType.CONTAINS); filter.addCondition(FieldKey.fromString("projects/studyDescription"), "No ART", CompareType.DOES_NOT_CONTAIN); filter.addCondition(FieldKey.fromString("sivART/artInitiationDPI"), null, CompareType.ISBLANK); - genericQueryCheck(c, u, msg, "study", s.getSubjectNounSingular(), "IDs assigned to an ART study without a record of ART", filter); + genericQueryCheck(c, u, msg, "study", "demographics", "IDs assigned to an ART study without a record of ART", filter); } private void missingAnchorDates(Container c, User u, StringBuilder msg) @@ -175,6 +176,17 @@ private void missingAnchorDates(Container c, User u, StringBuilder msg) genericQueryCheck(c, u, msg, "study", "missingAnchorDates", "records missing from the anchor dates table"); } + private void duplicatePVLs(Container c, User u, StringBuilder msg) + { + Study s = StudyService.get().getStudy(getTargetContainer(c)); + if (s == null) + { + return; + } + + genericQueryCheck(c, u, msg, "study", "duplicatePVLs", "duplicate PVL records"); + } + protected Container getTargetContainer(Container c) { return c.isWorkbookOrTab() ? c.getParent() : c; diff --git a/mGAP/src/org/labkey/mgap/mGAPController.java b/mGAP/src/org/labkey/mgap/mGAPController.java index 042eea0a..49b60fcb 100644 --- a/mGAP/src/org/labkey/mgap/mGAPController.java +++ b/mGAP/src/org/labkey/mgap/mGAPController.java @@ -877,7 +877,7 @@ public boolean handlePost(Object o, BindException errors) throws Exception } catch (Exception e) { - _log.error(e); + _log.error(e.getMessage(), e); throw e; } diff --git a/mcc/package-lock.json b/mcc/package-lock.json index 7550478d..411e5bc4 100644 --- a/mcc/package-lock.json +++ b/mcc/package-lock.json @@ -12,7 +12,7 @@ "@emotion/styled": "^11.14.0", "@labkey/api": "^1.39.0", "@mui/material": "^5.0.0", - "@mui/styles": "^5.0.0", + "@mui/system": "^5.0.0", "@mui/x-data-grid": "^6.0.0", "chart.js": "^4.4.8", "google-palette": "^1.1.1", @@ -2176,47 +2176,6 @@ } } }, - "node_modules/@mui/styles": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/@mui/styles/-/styles-5.17.1.tgz", - "integrity": "sha512-GxNtcD1jXjj1i81vyuaeNxCpph/ApxSxgJ+G8A2jUY5/bMOxXSmgUdupbB0JLexsDIqmaSqTePVN0jnMZc1iZQ==", - "deprecated": "Deprecated, check the migration instruction in https://mui.com/material-ui/migration/migrating-from-jss/", - "dependencies": { - "@babel/runtime": "^7.23.9", - "@emotion/hash": "^0.9.1", - "@mui/private-theming": "^5.17.1", - "@mui/types": "~7.2.15", - "@mui/utils": "^5.17.1", - "clsx": "^2.1.0", - "csstype": "^3.1.3", - "hoist-non-react-statics": "^3.3.2", - "jss": "^10.10.0", - "jss-plugin-camel-case": "^10.10.0", - "jss-plugin-default-unit": "^10.10.0", - "jss-plugin-global": "^10.10.0", - "jss-plugin-nested": "^10.10.0", - "jss-plugin-props-sort": "^10.10.0", - "jss-plugin-rule-value-function": "^10.10.0", - "jss-plugin-vendor-prefixer": "^10.10.0", - "prop-types": "^15.8.1" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui-org" - }, - "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", - "react": "^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@mui/system": { "version": "5.17.1", "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.17.1.tgz", @@ -3525,23 +3484,23 @@ } }, "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", "dev": true, "dependencies": { - "bytes": "3.1.2", + "bytes": "~3.1.2", "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", "type-is": "~1.6.18", - "unpipe": "1.0.0" + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8", @@ -3557,12 +3516,41 @@ "ms": "2.0.0" } }, + "node_modules/body-parser/node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "dev": true, + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, + "node_modules/body-parser/node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/bonjour-service": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", @@ -4168,15 +4156,6 @@ "url": "https://github.com/sponsors/fb55" } }, - "node_modules/css-vendor": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.8.tgz", - "integrity": "sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ==", - "dependencies": { - "@babel/runtime": "^7.8.3", - "is-in-browser": "^1.0.2" - } - }, "node_modules/css-what": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", @@ -4688,39 +4667,40 @@ } }, "node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", "dev": true, + "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", "debug": "2.6.9", "depd": "2.0.0", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", "merge-descriptors": "1.0.3", "methods": "~1.1.2", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", + "path-to-regexp": "~0.1.12", "proxy-addr": "~2.0.7", - "qs": "6.13.0", + "qs": "~6.14.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", + "send": "~0.19.0", + "serve-static": "~1.16.2", "setprototypeof": "1.2.0", - "statuses": "2.0.1", + "statuses": "~2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" @@ -5443,11 +5423,6 @@ "node": ">=10.18" } }, - "node_modules/hyphenate-style-name": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz", - "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==" - }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -5629,11 +5604,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-in-browser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz", - "integrity": "sha512-FeXIBgG/CPGd/WUxuEyvgGTEfwiG9Z4EKGxjNMRqviiIIfsmgrpnHLffEDdwUHqNva1VEW91o3xBT/m8Elgl9g==" - }, "node_modules/is-inside-container": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", @@ -5825,88 +5795,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/jss": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss/-/jss-10.10.0.tgz", - "integrity": "sha512-cqsOTS7jqPsPMjtKYDUpdFC0AbhYFLTcuGRqymgmdJIeQ8cH7+AgX7YSgQy79wXloZq2VvATYxUOUQEvS1V/Zw==", - "dependencies": { - "@babel/runtime": "^7.3.1", - "csstype": "^3.0.2", - "is-in-browser": "^1.1.3", - "tiny-warning": "^1.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/jss" - } - }, - "node_modules/jss-plugin-camel-case": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.10.0.tgz", - "integrity": "sha512-z+HETfj5IYgFxh1wJnUAU8jByI48ED+v0fuTuhKrPR+pRBYS2EDwbusU8aFOpCdYhtRc9zhN+PJ7iNE8pAWyPw==", - "dependencies": { - "@babel/runtime": "^7.3.1", - "hyphenate-style-name": "^1.0.3", - "jss": "10.10.0" - } - }, - "node_modules/jss-plugin-default-unit": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.10.0.tgz", - "integrity": "sha512-SvpajxIECi4JDUbGLefvNckmI+c2VWmP43qnEy/0eiwzRUsafg5DVSIWSzZe4d2vFX1u9nRDP46WCFV/PXVBGQ==", - "dependencies": { - "@babel/runtime": "^7.3.1", - "jss": "10.10.0" - } - }, - "node_modules/jss-plugin-global": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.10.0.tgz", - "integrity": "sha512-icXEYbMufiNuWfuazLeN+BNJO16Ge88OcXU5ZDC2vLqElmMybA31Wi7lZ3lf+vgufRocvPj8443irhYRgWxP+A==", - "dependencies": { - "@babel/runtime": "^7.3.1", - "jss": "10.10.0" - } - }, - "node_modules/jss-plugin-nested": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.10.0.tgz", - "integrity": "sha512-9R4JHxxGgiZhurDo3q7LdIiDEgtA1bTGzAbhSPyIOWb7ZubrjQe8acwhEQ6OEKydzpl8XHMtTnEwHXCARLYqYA==", - "dependencies": { - "@babel/runtime": "^7.3.1", - "jss": "10.10.0", - "tiny-warning": "^1.0.2" - } - }, - "node_modules/jss-plugin-props-sort": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.10.0.tgz", - "integrity": "sha512-5VNJvQJbnq/vRfje6uZLe/FyaOpzP/IH1LP+0fr88QamVrGJa0hpRRyAa0ea4U/3LcorJfBFVyC4yN2QC73lJg==", - "dependencies": { - "@babel/runtime": "^7.3.1", - "jss": "10.10.0" - } - }, - "node_modules/jss-plugin-rule-value-function": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.10.0.tgz", - "integrity": "sha512-uEFJFgaCtkXeIPgki8ICw3Y7VMkL9GEan6SqmT9tqpwM+/t+hxfMUdU4wQ0MtOiMNWhwnckBV0IebrKcZM9C0g==", - "dependencies": { - "@babel/runtime": "^7.3.1", - "jss": "10.10.0", - "tiny-warning": "^1.0.2" - } - }, - "node_modules/jss-plugin-vendor-prefixer": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.10.0.tgz", - "integrity": "sha512-UY/41WumgjW8r1qMCO8l1ARg7NHnfRVWRhZ2E2m0DMYsr2DD91qIXLyNhiX83hHswR7Wm4D+oDYNC1zWCJWtqg==", - "dependencies": { - "@babel/runtime": "^7.3.1", - "css-vendor": "^2.0.8", - "jss": "10.10.0" - } - }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -6892,12 +6780,12 @@ } }, "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", + "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", "dev": true, "dependencies": { - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" }, "engines": { "node": ">=0.6" @@ -6925,20 +6813,49 @@ } }, "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", "dev": true, "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8" } }, + "node_modules/raw-body/node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "dev": true, + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/raw-body/node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -8105,11 +8022,6 @@ "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "dev": true }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, "node_modules/tinyglobby": { "version": "0.2.15", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", diff --git a/mcc/package.json b/mcc/package.json index acd54889..75bab068 100644 --- a/mcc/package.json +++ b/mcc/package.json @@ -14,7 +14,7 @@ "@emotion/styled": "^11.14.0", "@labkey/api": "^1.39.0", "@mui/material": "^5.0.0", - "@mui/styles": "^5.0.0", + "@mui/system": "^5.0.0", "@mui/x-data-grid": "^6.0.0", "chart.js": "^4.4.8", "react": "^17.0.0", diff --git a/mcc/src/client/AnimalRequest/saving-overlay.tsx b/mcc/src/client/AnimalRequest/saving-overlay.tsx index ae1bdea0..d271101a 100644 --- a/mcc/src/client/AnimalRequest/saving-overlay.tsx +++ b/mcc/src/client/AnimalRequest/saving-overlay.tsx @@ -1,6 +1,6 @@ import React from 'react' -export default function SavingOverlay(props) { +export default function SavingOverlay(props: {display: boolean}) { if(props.display === false) { return ( <> diff --git a/mcc/src/client/RequestReview/components/FinalReviewForm.tsx b/mcc/src/client/RequestReview/components/FinalReviewForm.tsx index 0bf27f92..b14ee81d 100644 --- a/mcc/src/client/RequestReview/components/FinalReviewForm.tsx +++ b/mcc/src/client/RequestReview/components/FinalReviewForm.tsx @@ -3,7 +3,7 @@ import { ActionURL, Filter, Query } from '@labkey/api'; import { Box, Button, Table, TableBody, TableCell, TableHead, TableRow, TextField } from '@mui/material'; import { AnimalRequestModel } from '../../components/RequestUtils'; import SavingOverlay from '../../AnimalRequest/saving-overlay'; -import { styled } from '@mui/styles'; +import { styled } from '@mui/material/styles'; const StyledTableHead = styled(TableCell)(({ theme }) => ({ fontWeight: "bold", @@ -158,18 +158,18 @@ export default function FinalReviewForm(props: {requestData: AnimalRequestModel} - + - +
- - + + diff --git a/mcc/src/client/RequestReview/components/RabReviewForm.tsx b/mcc/src/client/RequestReview/components/RabReviewForm.tsx index 8874b55d..66b5d846 100644 --- a/mcc/src/client/RequestReview/components/RabReviewForm.tsx +++ b/mcc/src/client/RequestReview/components/RabReviewForm.tsx @@ -125,7 +125,7 @@ export default function RabReviewForm(props: {requestId: string}) { Review - Not Decided I recommend this proposal I recommend this proposal with conditions diff --git a/mcc/src/client/RequestReview/components/ReadOnlyRequest.tsx b/mcc/src/client/RequestReview/components/ReadOnlyRequest.tsx index b492f30c..898d021a 100644 --- a/mcc/src/client/RequestReview/components/ReadOnlyRequest.tsx +++ b/mcc/src/client/RequestReview/components/ReadOnlyRequest.tsx @@ -8,7 +8,7 @@ import { } from '../../AnimalRequest/components/values'; import { Box, Button, Grid, Table, TableBody, TableCell, TableHead, TableRow, Typography } from '@mui/material'; import { ActionURL } from '@labkey/api'; -import { styled } from '@mui/styles'; +import { styled } from '@mui/material/styles'; function formatPIName(request: AnimalRequestProps) { return(formatName(request.lastname, request.firstname, request.middleinitial)) diff --git a/mcc/src/client/RequestReview/components/ResourceAssessmentForm.tsx b/mcc/src/client/RequestReview/components/ResourceAssessmentForm.tsx index 6a2baa9a..ae8a2caa 100644 --- a/mcc/src/client/RequestReview/components/ResourceAssessmentForm.tsx +++ b/mcc/src/client/RequestReview/components/ResourceAssessmentForm.tsx @@ -3,7 +3,7 @@ import { ActionURL, Filter, Query } from '@labkey/api'; import { Box, Button, Table, TableBody, TableCell, TableHead, TableRow, TextField } from '@mui/material'; import { AnimalRequestModel } from '../../components/RequestUtils'; import SavingOverlay from '../../AnimalRequest/saving-overlay'; -import { styled } from '@mui/styles'; +import { styled } from '@mui/material/styles'; const StyledTableHead = styled(TableCell)(({ theme }) => ({ fontWeight: "bold", @@ -156,14 +156,14 @@ export default function ResourceAssessmentForm(props: {requestData: AnimalReques - + - +
- + diff --git a/mcc/src/client/RequestReview/request-review.tsx b/mcc/src/client/RequestReview/request-review.tsx index 152df239..9eb6acc0 100644 --- a/mcc/src/client/RequestReview/request-review.tsx +++ b/mcc/src/client/RequestReview/request-review.tsx @@ -5,7 +5,7 @@ import Title from '../AnimalRequest/components/title'; import RabReviewForm from './components/RabReviewForm'; import InternalReviewForm from './components/InternalReviewForm'; -import { ThemeProvider } from '@mui/styles'; +import { ThemeProvider } from '@mui/material/styles'; import { createTheme } from '@mui/material/styles'; import '../labkeyOverrides.css'; import FinalReviewForm from './components/FinalReviewForm'; diff --git a/primeseq/src/org/labkey/primeseq/PrimeseqController.java b/primeseq/src/org/labkey/primeseq/PrimeseqController.java index cac4973a..7ed891d7 100644 --- a/primeseq/src/org/labkey/primeseq/PrimeseqController.java +++ b/primeseq/src/org/labkey/primeseq/PrimeseqController.java @@ -476,7 +476,7 @@ else if (!sf.lookupContainer().hasPermission(getUser(), ReadPermission.class)) catch (IOException | PipelineJobException e) { errors.reject(ERROR_MSG, "Unable to read pipeline JSON"); - _log.error(e); + _log.error(e.getMessage(), e); return null; } } diff --git a/primeseq/src/org/labkey/primeseq/pipeline/ClusterMaintenanceTask.java b/primeseq/src/org/labkey/primeseq/pipeline/ClusterMaintenanceTask.java index f1a00f5e..edf0ddd5 100644 --- a/primeseq/src/org/labkey/primeseq/pipeline/ClusterMaintenanceTask.java +++ b/primeseq/src/org/labkey/primeseq/pipeline/ClusterMaintenanceTask.java @@ -93,13 +93,13 @@ public void run(Logger log) { RemoteWorkTask task = new RemoteWorkTask(jobGuids); PipeRoot pr = PipelineService.get().getPipelineRootSetting(ContainerManager.getHomeContainer()); - File subdir = new File(pr.getRootPath(), "clusterMaintenance"); + File subdir = FileUtil.appendName(pr.getRootPath(), "clusterMaintenance"); if (!subdir.exists()) { subdir.mkdirs(); } - File logFile = new File(subdir, "Maintenance-" + engine.getType() + "." + FileUtil.getTimestamp() + ".log"); + File logFile = FileUtil.appendName(subdir, "Maintenance-" + engine.getType() + "." + FileUtil.getTimestamp() + ".log"); jr.execute(new Job() { @@ -113,7 +113,7 @@ public void run() } catch (PipelineValidationException e) { - _log.error(e); + _log.error(e.getMessage(), e); } } }); @@ -209,7 +209,7 @@ private void inspectFolder(Logger log, File workDirBase) } catch (IOException e) { - _log.error(e); + _log.error(e.getMessage(), e); continue; } diff --git a/tcrdb/resources/queries/tcrdb/clone_responses/.qview.xml b/tcrdb/resources/queries/tcrdb/clone_responses/.qview.xml index d07972bd..0ac2d820 100644 --- a/tcrdb/resources/queries/tcrdb/clone_responses/.qview.xml +++ b/tcrdb/resources/queries/tcrdb/clone_responses/.qview.xml @@ -4,6 +4,7 @@ + diff --git a/tcrdb/resources/queries/tcrdb/clone_responses/Cohort Info.qview.xml b/tcrdb/resources/queries/tcrdb/clone_responses/Cohort Info.qview.xml index 4e7d72c8..192d7585 100644 --- a/tcrdb/resources/queries/tcrdb/clone_responses/Cohort Info.qview.xml +++ b/tcrdb/resources/queries/tcrdb/clone_responses/Cohort Info.qview.xml @@ -4,6 +4,7 @@ + diff --git a/tcrdb/resources/queries/tcrdb/stims/.qview.xml b/tcrdb/resources/queries/tcrdb/stims/.qview.xml index e00aaa91..8b57918f 100644 --- a/tcrdb/resources/queries/tcrdb/stims/.qview.xml +++ b/tcrdb/resources/queries/tcrdb/stims/.qview.xml @@ -13,6 +13,7 @@ + diff --git a/tcrdb/resources/queries/tcrdb/stims/Cohort Info.qview.xml b/tcrdb/resources/queries/tcrdb/stims/Cohort Info.qview.xml index 2cf6da76..a3b931eb 100644 --- a/tcrdb/resources/queries/tcrdb/stims/Cohort Info.qview.xml +++ b/tcrdb/resources/queries/tcrdb/stims/Cohort Info.qview.xml @@ -13,6 +13,7 @@ + diff --git a/tcrdb/resources/schemas/dbscripts/postgresql/tcrdb-15.60-15.61.sql b/tcrdb/resources/schemas/dbscripts/postgresql/tcrdb-15.60-15.61.sql new file mode 100644 index 00000000..4e83bffa --- /dev/null +++ b/tcrdb/resources/schemas/dbscripts/postgresql/tcrdb-15.60-15.61.sql @@ -0,0 +1,2 @@ +ALTER TABLE tcrdb.clone_responses ADD COLUMN cloneName varchar(1000); +ALTER TABLE tcrdb.clone_responses ADD COLUMN cdr3WithSegments varchar(4000); \ No newline at end of file diff --git a/tcrdb/resources/schemas/dbscripts/postgresql/tcrdb-15.61-15.62.sql b/tcrdb/resources/schemas/dbscripts/postgresql/tcrdb-15.61-15.62.sql new file mode 100644 index 00000000..83305505 --- /dev/null +++ b/tcrdb/resources/schemas/dbscripts/postgresql/tcrdb-15.61-15.62.sql @@ -0,0 +1 @@ +ALTER TABLE tcrdb.stims ADD COLUMN status varchar(1000); \ No newline at end of file diff --git a/tcrdb/resources/schemas/dbscripts/sqlserver/tcrdb-15.60-15.61.sql b/tcrdb/resources/schemas/dbscripts/sqlserver/tcrdb-15.60-15.61.sql new file mode 100644 index 00000000..86194a51 --- /dev/null +++ b/tcrdb/resources/schemas/dbscripts/sqlserver/tcrdb-15.60-15.61.sql @@ -0,0 +1,2 @@ +ALTER TABLE tcrdb.clone_responses ADD cloneName varchar(1000); +ALTER TABLE tcrdb.clone_responses ADD cdr3WithSegments varchar(4000); \ No newline at end of file diff --git a/tcrdb/resources/schemas/dbscripts/sqlserver/tcrdb-15.61-15.62.sql b/tcrdb/resources/schemas/dbscripts/sqlserver/tcrdb-15.61-15.62.sql new file mode 100644 index 00000000..cd4a8ac7 --- /dev/null +++ b/tcrdb/resources/schemas/dbscripts/sqlserver/tcrdb-15.61-15.62.sql @@ -0,0 +1 @@ +ALTER TABLE tcrdb.stims ADD status varchar(1000); \ No newline at end of file diff --git a/tcrdb/resources/schemas/tcrdb.xml b/tcrdb/resources/schemas/tcrdb.xml index 34d61439..0a81bc9d 100644 --- a/tcrdb/resources/schemas/tcrdb.xml +++ b/tcrdb/resources/schemas/tcrdb.xml @@ -158,6 +158,12 @@ Enrichment (FDR) + + Clone Name + + + CDR3 With Segments + @@ -325,6 +331,9 @@ + + + true diff --git a/tcrdb/src/org/labkey/tcrdb/TCRdbModule.java b/tcrdb/src/org/labkey/tcrdb/TCRdbModule.java index 39fca648..93c758e8 100644 --- a/tcrdb/src/org/labkey/tcrdb/TCRdbModule.java +++ b/tcrdb/src/org/labkey/tcrdb/TCRdbModule.java @@ -46,7 +46,7 @@ public String getName() @Override public Double getSchemaVersion() { - return 15.60; + return 15.62; } @Override