diff --git a/snprc_ehr/src/client/BirthRecordReport/styles/birthRecordReport.scss b/snprc_ehr/src/client/BirthRecordReport/styles/birthRecordReport.scss index a3e1f9060..2380102ad 100644 --- a/snprc_ehr/src/client/BirthRecordReport/styles/birthRecordReport.scss +++ b/snprc_ehr/src/client/BirthRecordReport/styles/birthRecordReport.scss @@ -4,3 +4,12 @@ @import "../../shared/styles/formatting/panels"; @import "../../Shared/styles/components/infoPanel"; @import "../../Shared/styles/components/summaryGridPanel"; + + +.right-panel { + flex: 1; + padding-left: 1rem; + flex-direction: column; + height: $m-panel; + max-width: $m-panel-width; +} \ No newline at end of file diff --git a/snprc_ehr/src/client/NewAnimalPage/NewAnimalPage.jsx b/snprc_ehr/src/client/NewAnimalPage/NewAnimalPage.jsx index 49cdcd324..91f39cc04 100644 --- a/snprc_ehr/src/client/NewAnimalPage/NewAnimalPage.jsx +++ b/snprc_ehr/src/client/NewAnimalPage/NewAnimalPage.jsx @@ -96,6 +96,12 @@ export default class NewAnimalPage extends React.Component { )) }).catch(error => { console.log(`Error in loadLists: ${error}`) + this.setState(prevState => ( + { + ...prevState, + errorMessage: error.message + } + )) }) } @@ -125,6 +131,12 @@ export default class NewAnimalPage extends React.Component { )) }).catch(error => { console.log(`Error in handleSpeciesChange: ${error}`) + this.setState(prevState => ( + { + ...prevState, + errorMessage: error.message + } + )) }) } @@ -155,7 +167,8 @@ export default class NewAnimalPage extends React.Component { } handleSpeciesChange = selectedSpecies => { - if (this.state.newAnimalData.species !== undefined) { + // ignore sub-species change + if (this.state.newAnimalData.species !== undefined && this.state.newAnimalData.species.arcSpeciesCode !== selectedSpecies.arcSpeciesCode) { this.selectedSpecies = selectedSpecies this.setState(prevState => ( { @@ -369,6 +382,7 @@ export default class NewAnimalPage extends React.Component { { ...initialState, isLoading: false, + selectedOption: prevState.selectedOption, speciesList: [ ...prevState.speciesList ], @@ -389,7 +403,8 @@ export default class NewAnimalPage extends React.Component { ], newAnimalData: { ...initialState.newAnimalData, - species: this.selectedSpecies + species: this.selectedSpecies, + selectedOption: prevState.newAnimalData.selectedOption } } ), this.loadListsForSpecies(this.selectedSpecies)) @@ -408,11 +423,12 @@ export default class NewAnimalPage extends React.Component { } print = id => { - // const newAnimalData = this.state.summaryData.find(o => o.id === id) const reportPath = getReportPath('BirthRecord') const fullPath = `${reportPath}&rc:Parameters=Collapsed&TargetID=${id}` // &rs:Format=PDF // uncomment to print to PDF - window.open(fullPath) + const left = window.screenX + 20 + + window.open(fullPath, '_blank', `location=yes,height=850,width=768,status=yes, left=${left}`) } render() { diff --git a/snprc_ehr/src/client/NewAnimalPage/api/fetchLocations.js b/snprc_ehr/src/client/NewAnimalPage/api/fetchLocations.js index 9f9e749b6..65a70aca4 100644 --- a/snprc_ehr/src/client/NewAnimalPage/api/fetchLocations.js +++ b/snprc_ehr/src/client/NewAnimalPage/api/fetchLocations.js @@ -1,5 +1,4 @@ -import { Filter } from '@labkey/api' -import { request } from '../../Shared/api/api' +import { executeSql } from '../../Shared/api/api' const parse = rows => { return rows.map(({ data }, key) => { @@ -8,16 +7,29 @@ const parse = rows => { } const fetchLocations = species => { + const sql = `SELECT h.species AS species, + r.room AS room, + r.maxCages AS maxCages, + r.rowId AS rowId + FROM ehr_lookups.rooms r + LEFT OUTER JOIN ( + SELECT DISTINCT d.species.arc_species_code as species, d2.room AS room + FROM study.housing AS d2 + INNER join study.demographics d on d2.id = d.id + WHERE d2.enddate IS NULL + AND d2.qcstate.publicdata = true + ) AS h ON r.room = h.room + WHERE r.dateDisabled is NULL + AND CAST(r.room as FLOAT) BETWEEN 1.00 AND 799.99 + AND (h.species = '${species}' OR h.species is NULL)` + return new Promise((resolve, reject) => { - request({ + if (!species || species.length !== 2) reject(new Error('Invalid species format detected')) + + executeSql({ schemaName: 'snprc_ehr', - queryName: 'ActiveLocationsAll', - columns: ['species', 'room', 'maxCages', 'rowId'], - sort: '-species, room', - filterArray: [ - // Filter.create('species', species, Filter.Types.EQUAL) - Filter.create('species', `${species}; null`, Filter.Types.IN) - ] + sql, + sort: '-species, room' }).then(({ rows }) => { resolve(parse(rows)) }).catch(error => { diff --git a/snprc_ehr/src/client/NewAnimalPage/components/SpeciesPanel.jsx b/snprc_ehr/src/client/NewAnimalPage/components/SpeciesPanel.jsx index f341b6a48..a9495e7f5 100644 --- a/snprc_ehr/src/client/NewAnimalPage/components/SpeciesPanel.jsx +++ b/snprc_ehr/src/client/NewAnimalPage/components/SpeciesPanel.jsx @@ -50,7 +50,6 @@ export default class SpeciesPanel extends React.Component { className="shared-dropdown shared-dropdown__species_width" classNamePrefix="shared-select" id="species-select" - isClearable isDisabled={ this.props.disabled } isLoading={ !this.props.speciesList } onChange={ this.handleSpeciesChange } diff --git a/snprc_ehr/src/client/NewAnimalPage/styles/newAnimalPage.scss b/snprc_ehr/src/client/NewAnimalPage/styles/newAnimalPage.scss index 8ac945232..ef68d647a 100644 --- a/snprc_ehr/src/client/NewAnimalPage/styles/newAnimalPage.scss +++ b/snprc_ehr/src/client/NewAnimalPage/styles/newAnimalPage.scss @@ -1,6 +1,6 @@ @import "../../Shared/styles/style"; -@import "../../shared/styles/formatting/wizard"; -@import "../../shared/styles/formatting/panels"; +@import "../../Shared/styles/formatting/wizard"; +@import "../../Shared/styles/formatting/panels"; @import "../../Shared/styles/components/wrappedDatePicker"; @import "../../Shared/styles//components/modal"; @import "../../Shared/styles/components/shared"; @@ -10,3 +10,16 @@ @import "./components/locationPanel"; @import "./components/dietPanel"; @import "./components/summaryPanel"; + +.right-panel { + flex: 1; + padding-left: 1rem; + flex-direction: column; + min-height: $l-panel; +} + +.table-scroll { + overflow-y: auto; + height:$l-panel; + padding: 0, .1rem !important; +} \ No newline at end of file diff --git a/snprc_ehr/src/client/NewAnimalPage/tests/components/__snapshots__/SpeciesPanel.test.jsx.snap b/snprc_ehr/src/client/NewAnimalPage/tests/components/__snapshots__/SpeciesPanel.test.jsx.snap index 4c003bc5d..302e2fe2b 100644 --- a/snprc_ehr/src/client/NewAnimalPage/tests/components/__snapshots__/SpeciesPanel.test.jsx.snap +++ b/snprc_ehr/src/client/NewAnimalPage/tests/components/__snapshots__/SpeciesPanel.test.jsx.snap @@ -63,7 +63,6 @@ exports[`Should render the SpeciesPanel 1`] = ` defaultMenuIsOpen={false} defaultValue={null} id="species-select" - isClearable={true} isDisabled={false} isLoading={false} onChange={[Function]} diff --git a/snprc_ehr/src/client/Shared/api/__mocks__/api.js b/snprc_ehr/src/client/Shared/api/__mocks__/api.js index bca9c007c..7920c35f6 100644 --- a/snprc_ehr/src/client/Shared/api/__mocks__/api.js +++ b/snprc_ehr/src/client/Shared/api/__mocks__/api.js @@ -1,55 +1,62 @@ /* eslint-disable no-unused-vars, camelcase */ import { NewAnimalData } from '../../../BirthRecordReport/tests/fixtures/apiTestData' -import { CurrentSpeciesLookup, AccountLookup, validInstitutions, ValidDiet, AcquisitionTypesLookup, +import { + CurrentSpeciesLookup, AccountLookup, validInstitutions, ValidDiet, AcquisitionTypesLookup, valid_bd_status, PotentialDams, PotentialSires, ActiveLocationsAll, colonyGroups, - ProtocolLookup, pedigreeGroups } from '../../../NewAnimalPage/tests/fixtures/apiTestData' + ProtocolLookup, pedigreeGroups +} from '../../../NewAnimalPage/tests/fixtures/apiTestData' export const request = ({ schemaName, queryName, viewName = '', sort = '', columns = [], filterArray = [] }) => { // console.log(`loading list: ${queryName}`); return new Promise(resolve => { switch (queryName) { - case 'CurrentSpeciesLookup': - resolve(CurrentSpeciesLookup) - break - case 'AccountLookup': - resolve(AccountLookup) - break - case 'validInstitutions': - resolve(validInstitutions) - break - case 'ValidDiet': - resolve(ValidDiet) - break - case 'AcquisitionTypesLookup': - resolve(AcquisitionTypesLookup) - break - case 'PotentialDams': - resolve(PotentialDams) - break - case 'PotentialSires': - resolve(PotentialSires) - break - case 'ActiveLocationsAll': - resolve(ActiveLocationsAll) - break - case 'colonyGroups': - resolve(colonyGroups) - break - case 'ProtocolLookup': - resolve(ProtocolLookup) - break - case 'pedigreeGroups': - resolve(pedigreeGroups) - break - case 'valid_bd_status': - resolve(valid_bd_status) - break - case 'NewAnimalData': - resolve(NewAnimalData) - break - default: - break + case 'CurrentSpeciesLookup': + resolve(CurrentSpeciesLookup) + break + case 'AccountLookup': + resolve(AccountLookup) + break + case 'validInstitutions': + resolve(validInstitutions) + break + case 'ValidDiet': + resolve(ValidDiet) + break + case 'AcquisitionTypesLookup': + resolve(AcquisitionTypesLookup) + break + case 'PotentialDams': + resolve(PotentialDams) + break + case 'PotentialSires': + resolve(PotentialSires) + break + case 'colonyGroups': + resolve(colonyGroups) + break + case 'ProtocolLookup': + resolve(ProtocolLookup) + break + case 'pedigreeGroups': + resolve(pedigreeGroups) + break + case 'valid_bd_status': + resolve(valid_bd_status) + break + case 'NewAnimalData': + resolve(NewAnimalData) + break + default: + break + } + }) +} + +export const executeSql = ({ schemaName, sql, sort = '' }) => { + return new Promise(resolve => { + if (sql.indexOf('FROM ehr_lookups.rooms') > 0) { + resolve(ActiveLocationsAll) } }) } diff --git a/snprc_ehr/src/client/Shared/api/api.js b/snprc_ehr/src/client/Shared/api/api.js index bb6afa4d6..cac39c5fe 100644 --- a/snprc_ehr/src/client/Shared/api/api.js +++ b/snprc_ehr/src/client/Shared/api/api.js @@ -21,3 +21,22 @@ export const request = ({ schemaName, queryName, viewName = '', sort = '', colum }) }) } + +export const executeSql = ({ schemaName, sql, sort = '' }) => { + return new Promise((resolve, reject) => { + const success = response => { + resolve(response) + } + const failure = error => { + reject(error) + } + Query.executeSql({ + requiredVersion: 19.2, + schemaName, + sql, + sort, + success, + failure + }) + }) +} diff --git a/snprc_ehr/src/client/Shared/styles/components/_summaryGridPanel.scss b/snprc_ehr/src/client/Shared/styles/components/_summaryGridPanel.scss index f56d79ed3..2f7bced88 100644 --- a/snprc_ehr/src/client/Shared/styles/components/_summaryGridPanel.scss +++ b/snprc_ehr/src/client/Shared/styles/components/_summaryGridPanel.scss @@ -1,8 +1,7 @@ .table-scroll { overflow-y: auto; - height:$m-panel; - padding: 0, .1rem !important; - + min-height:$m-panel; + padding: 0, 0.1rem !important; } .table-bordered > thead > tr > th { diff --git a/snprc_ehr/src/client/Shared/styles/formatting/_panels.scss b/snprc_ehr/src/client/Shared/styles/formatting/_panels.scss index 6ec6a0faf..f59b4faee 100644 --- a/snprc_ehr/src/client/Shared/styles/formatting/_panels.scss +++ b/snprc_ehr/src/client/Shared/styles/formatting/_panels.scss @@ -6,9 +6,6 @@ .right-panel { flex: 1; padding-left: 1rem; - flex-direction: column; - height: $m-panel; - max-width: $m-panel-width; } .parent-panel { display: flex; diff --git a/snprc_ehr/src/client/Shared/styles/settings.scss b/snprc_ehr/src/client/Shared/styles/settings.scss index e02bce58b..830512976 100644 --- a/snprc_ehr/src/client/Shared/styles/settings.scss +++ b/snprc_ehr/src/client/Shared/styles/settings.scss @@ -2,7 +2,7 @@ $dark-gray: #333333; $light-gray: #999; $gray: #666; -$disabled-gray: #f5f5f5; //eeee; +$disabled-gray: #eeee; //#f5f5f5; $button-blue: #282aa5; $dark-blue: #364051; $off-white: #f7f7f7;