Skip to content

Commit

Permalink
Added county charts to his deployment
Browse files Browse the repository at this point in the history
  • Loading branch information
cbrianbet committed Jun 12, 2024
1 parent a8d5d4e commit 128e691
Show file tree
Hide file tree
Showing 11 changed files with 452 additions and 2 deletions.
34 changes: 34 additions & 0 deletions src/actions/RR/hisFacilityByInfrastructureCountyActions.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import moment from 'moment';
import { CACHING, PAGES } from '../../constants';
import * as actionTypes from '../types';
import { getAll } from '../../views/Shared/Api';

export const loadHisFacilityByInfrastructureCountyActions = () => async (dispatch, getState) => {
const diffInMinutes = moment().diff(
moment(getState().hisFacilityByInfrastructure.lastFetch),
'minutes'
);
if (getState().ui.currentPage !== PAGES.rr) {
return;
}
else if ((diffInMinutes < CACHING.LONG) && getState().filters.filtered === false) {
return;
} else {
await dispatch(fetchHisFacilityByInfrastructure());
}
}

export const fetchHisFacilityByInfrastructure = () => async (dispatch, getState) => {
dispatch({ type: actionTypes.HIS_FACILITY_BY_INFRASTRUCTURE_COUNTY_REQUEST });
const params = {
county: getState().filters.counties,
subCounty: getState().filters.subCounties,
facility: getState().filters.facilities,
partner: getState().filters.partners,
agency: getState().filters.agencies,
year: getState().filters.fromDate ? moment(getState().filters.fromDate, "MMM YYYY").format("YYYY") : '',
month: getState().filters.fromDate ? moment(getState().filters.fromDate, "MMM YYYY").format("MM") : '',
};
const response = await getAll('common/facilityByInfrastructureCounty', params);
dispatch({ type: actionTypes.HIS_FACILITY_BY_INFRASTRUCTURE_COUNTY_FETCH, payload: { filtered: getState().filters.filtered, list: response }});
};
32 changes: 32 additions & 0 deletions src/actions/RR/hisFacilityStatusByCountyActions.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import moment from 'moment';
import { CACHING, PAGES } from '../../constants';
import * as actionTypes from '../types';
import { getAll } from '../../views/Shared/Api';

export const loadHisFacilityStatusByCountyAction = () => async (dispatch, getState) => {
const diffInMinutes = moment().diff(
moment(getState().hisFacilityStatusByPartner.lastFetch),
'minutes'
);
if (getState().ui.currentPage !== PAGES.rr) {
return;
}
else if ((diffInMinutes < CACHING.LONG) && getState().filters.filtered === false) {
return;
} else {
await dispatch(fetchHisFacilityStatusByPartner());
}
}

export const fetchHisFacilityStatusByPartner = () => async (dispatch, getState) => {
dispatch({ type: actionTypes.HIS_FACILITY_STATUS_BY_COUNTY_REQUEST });
const params = {
county: getState().filters.counties,
subCounty: getState().filters.subCounties,
facility: getState().filters.facilities,
partner: getState().filters.partners,
agency: getState().filters.agencies,
};
const response = await getAll('common/facilityStatusByCounty', params);
dispatch({ type: actionTypes.HIS_FACILITY_STATUS_BY_COUNTY_FETCH, payload: { filtered: getState().filters.filtered, list: response }});
};
8 changes: 8 additions & 0 deletions src/actions/types.js
Original file line number Diff line number Diff line change
Expand Up @@ -519,6 +519,10 @@ export const HIS_FACILITY_STATUS_BY_PARTNER_REQUEST = 'HIS_FACILITY_STATUS_BY_PA
export const HIS_FACILITY_STATUS_BY_PARTNER_FETCH = 'HIS_FACILITY_STATUS_BY_PARTNER_FETCH'
export const HIS_FACILITY_STATUS_BY_PARTNER_FAILED = 'HIS_FACILITY_STATUS_BY_PARTNER_FAILED'

export const HIS_FACILITY_STATUS_BY_COUNTY_REQUEST = 'HIS_FACILITY_STATUS_BY_COUNTY_REQUEST'
export const HIS_FACILITY_STATUS_BY_COUNTY_FETCH = 'HIS_FACILITY_STATUS_BY_COUNTY_FETCH'
export const HIS_FACILITY_STATUS_BY_COUNTY_FAILED = 'HIS_FACILITY_STATUS_BY_COUNTY_FAILED'

export const HIS_FACILITY_LEVEL_BY_PARTNER_REQUEST = 'HIS_FACILITY_LEVEL_BY_PARTNER_REQUEST'
export const HIS_FACILITY_LEVEL_BY_PARTNER_FETCH = 'HIS_FACILITY_LEVEL_BY_PARTNER_FETCH'
export const HIS_FACILITY_LEVEL_BY_PARTNER_FAILED = 'HIS_FACILITY_LEVEL_BY_PARTNER_FAILED'
Expand All @@ -531,6 +535,10 @@ export const HIS_FACILITY_BY_INFRASTRUCTURE_REQUEST = 'HIS_FACILITY_BY_INFRASTRU
export const HIS_FACILITY_BY_INFRASTRUCTURE_FETCH = 'HIS_FACILITY_BY_INFRASTRUCTURE_FETCH'
export const HIS_FACILITY_BY_INFRASTRUCTURE_FAILED = 'HIS_FACILITY_BY_INFRASTRUCTURE_FAILED'

export const HIS_FACILITY_BY_INFRASTRUCTURE_COUNTY_REQUEST = 'HIS_FACILITY_BY_INFRASTRUCTURE_COUNTY_REQUEST'
export const HIS_FACILITY_BY_INFRASTRUCTURE_COUNTY_FETCH = 'HIS_FACILITY_BY_INFRASTRUCTURE_COUNTY_FETCH'
export const HIS_FACILITY_BY_INFRASTRUCTURE_COUNTY_FAILED = 'HIS_FACILITY_BY_INFRASTRUCTURE_COUNTY_FAILED'

export const HIS_FACILITY_LINELIST_REQUEST = 'HIS_FACILITY_LINELIST_REQUEST'
export const HIS_FACILITY_LINELIST_FETCH = 'HIS_FACILITY_LINELIST_FETCH'
export const HIS_FACILITY_LINELIST_FAILED = 'HIS_FACILITY_LINELIST_FAILED'
Expand Down
31 changes: 31 additions & 0 deletions src/reducers/RR/hisFacilityByInfrastructureCounty.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import * as actionTypes from "../../actions/types";

const initialState = {
lastFetch: null,
loading: false,
listUnfiltered: [],
listFiltered: [],
};

export default (state = initialState, action) => {
let newState = { ...state };
switch (action.type) {
case actionTypes.HIS_FACILITY_BY_INFRASTRUCTURE_COUNTY_REQUEST:
newState.loading = true;
return newState;
case actionTypes.HIS_FACILITY_BY_INFRASTRUCTURE_COUNTY_FETCH:
if (action.payload.filtered === true) {
newState.listFiltered = action.payload.list;
} else {
newState.listUnfiltered = action.payload.list;
newState.lastFetch = Date.now();
}
newState.loading = false;
return newState;
case actionTypes.HIS_FACILITY_BY_INFRASTRUCTURE_COUNTY_FAILED:
newState.loading = false;
return newState;
default:
return state;
}
}
31 changes: 31 additions & 0 deletions src/reducers/RR/hisFacilityStatusByCounty.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import * as actionTypes from "../../actions/types";

const initialState = {
lastFetch: null,
loading: false,
listUnfiltered: [],
listFiltered: [],
};

export default (state = initialState, action) => {
let newState = { ...state };
switch (action.type) {
case actionTypes.HIS_FACILITY_STATUS_BY_COUNTY_REQUEST:
newState.loading = true;
return newState;
case actionTypes.HIS_FACILITY_STATUS_BY_COUNTY_FETCH:
if (action.payload.filtered === true) {
newState.listFiltered = action.payload.list;
} else {
newState.listUnfiltered = action.payload.list;
newState.lastFetch = Date.now();
}
newState.loading = false;
return newState;
case actionTypes.HIS_FACILITY_STATUS_BY_COUNTY_FAILED:
newState.loading = false;
return newState;
default:
return state;
}
}
4 changes: 4 additions & 0 deletions src/reducers/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -331,6 +331,8 @@ import hisFacilityStatus from './RR/hisFacilityStatus';
import hisFacilityStatusByPartner from './RR/hisFacilityStatusByPartner';
import hisFacilityLevelByPartner from './RR/hisFacilityLevelByPartner';
import hisFacilityTxcurr from './RR/hisFacilityTxcurr';
import hisFacilityByInfrastructureCounty from './RR/hisFacilityByInfrastructureCounty';
import hisFacilityStatusByCounty from './RR/hisFacilityStatusByCounty';

import missedInfantProphylaxis from './PMTCTRRI/MissedInfantProphylaxis/missedInfantProphylaxis';

Expand Down Expand Up @@ -662,4 +664,6 @@ export default combineReducers({
hisFacilityStatus,
hisFacilityStatusByPartner,
hisFacilityTxcurr,
hisFacilityByInfrastructureCounty,
hisFacilityStatusByCounty
});
80 changes: 79 additions & 1 deletion src/selectors/RR/HisDeploymentsSelector.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ const filtered = state => state.filters.filtered;
const listStatusByPartnerUnfiltered = state => state.hisFacilityStatusByPartner.listUnfiltered;
const listStatusByPartnerFiltered = state => state.hisFacilityStatusByPartner.listFiltered;

const listStatusByCountyUnfiltered = state => state.hisFacilityStatusByCounty.listUnfiltered;
const listStatusByCountyFiltered = state => state.hisFacilityStatusByCounty.listFiltered;

const listLevelByPartnerUnfiltered = state => state.hisFacilityLevelByPartner.listUnfiltered;
const listLevelByPartnerFiltered = state => state.hisFacilityLevelByPartner.listFiltered;

Expand All @@ -16,6 +19,9 @@ const listLevelByCountyFiltered = state => state.hisFacilityLevelByCounty.listFi
const listByInfrastructureUnfiltered = state => state.hisFacilityByInfrastructure.listUnfiltered;
const listByInfrastructureFiltered = state => state.hisFacilityByInfrastructure.listFiltered;

const listByInfrastructureCountyUnfiltered = state => state.hisFacilityByInfrastructureCounty.listUnfiltered;
const listByInfrastructureCountyFiltered = state => state.hisFacilityByInfrastructureCounty.listFiltered;

const listLinelistUnfiltered = state => state.hisFacilityLinelist.listUnfiltered;
const listLinelistFiltered = state => state.hisFacilityLinelist.listFiltered;
const listLinelistLoading = state => state.hisFacilityLinelist.loading;
Expand Down Expand Up @@ -73,6 +79,44 @@ export const getFacilityStatusByPartner = createSelector(
}
);

export const getFacilityStatusByCounty = createSelector(
[listStatusByCountyUnfiltered, listStatusByCountyFiltered, filtered],
(listUnfiltered, listFiltered, filtered) => {
const list = filtered ? listFiltered : listUnfiltered;
let data = list.reduce((acc, curr) => {
const { facilities, EMR_Status, County } = curr
if(!acc[County]) {
acc[County] = {
"County": County,
"Active": 0,
"Discontinued": 0,
"Inactive/Stalled": 0,
"Total": 0
}
}

const statusKey = (EMR_Status === "Stalled/Inactive" || EMR_Status === "Inactive") ? "Inactive/Stalled" : EMR_Status;

acc[County][statusKey] += parseInt(facilities);
acc[County].Total += parseInt(facilities);
return acc
}, {});
let formattedResult = Object.values(data);
formattedResult.sort((a, b) => b.Active - a.Active);
formattedResult = formattedResult.map(partner => {
partner.activePerc = partner.Total ? (partner.Active/partner.Total)*100 : 0
return partner
}).sort((a, b) => b.activePerc - a.activePerc)

const counties = formattedResult.map(i => i.County?.toUpperCase())
const actives = formattedResult.map(i => i.Active)
const discontinueds = formattedResult.map(i => i.Discontinued)
const inactives = formattedResult.map(i => i["Inactive/Stalled"])

return { counties, actives, discontinueds, inactives }
}
);

export const getFacilityByInfrastructure = createSelector(
[listByInfrastructureUnfiltered, listByInfrastructureFiltered, filtered],
(listUnfiltered, listFiltered, filtered) => {
Expand Down Expand Up @@ -107,6 +151,40 @@ export const getFacilityByInfrastructure = createSelector(
}
);

export const getFacilityByInfrastructureCounty = createSelector(
[listByInfrastructureCountyUnfiltered, listByInfrastructureCountyFiltered, filtered],
(listUnfiltered, listFiltered, filtered) => {
const list = filtered ? listFiltered : listUnfiltered;
let data = list.reduce((acc, curr) => {
const { facilities, InfrastructureType, County } = curr
if(!acc[County]) {
acc[County] = {
"County": County,
"On Premises": 0,
"On Cloud": 0,
"Total": 0
}
}

acc[County][InfrastructureType] += parseInt(facilities);
acc[County].Total += parseInt(facilities);
return acc
}, {});
let formattedResult = Object.values(data);
formattedResult.sort((a, b) => b["On Premises"] - a["On Premises"]);
formattedResult = formattedResult.map(partner => {
partner.onPremPerc = partner.Total ? (partner["On Premises"]/partner.Total)*100 : 0
return partner
}).sort((a, b) => b.onPremPerc - a.onPremPerc)

const counties = formattedResult.map(i => i.County?.toUpperCase())
const onPremises = formattedResult.map(i => i["On Premises"])
const onCloud = formattedResult.map(i => i["On Cloud"])

return { counties, onPremises, onCloud }
}
);

export const getFacilityLevelByPartner = createSelector(
[listLevelByPartnerUnfiltered, listLevelByPartnerFiltered, filtered],
(listUnfiltered, listFiltered, filtered) => {
Expand Down Expand Up @@ -205,7 +283,7 @@ export const getFacilityTxCurr = createSelector(
(listUnfiltered, listFiltered, filtered, loading) => {
const list = filtered ? listFiltered : listUnfiltered;

let data = list.map((d) => d.KEPH_Level === null ? {...d, 'KEPH_Level': 'Missing' } : { ...d })
let data = list.map((d) => d.KEPH_Level === null ? {...d, 'KEPH_Level': 'Missing' } : d)

return { 'list': data, loading };
}
Expand Down
10 changes: 10 additions & 0 deletions src/views/RR/HisDeployments.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,12 @@ import { loadHisFacilityLevelByCountyAction } from '../../actions/RR/hisFacility
import { loadHisFacilityLevelByPartnerAction } from '../../actions/RR/hisFacilityLevelByPartnerActions';
import { loadHisFacilityStatusAction } from '../../actions/RR/hisFacilityStatusActions';
import { loadHisFacilityTxcurrAction } from '../../actions/RR/hisFacilityTxcurrActions';
import { loadHisFacilityStatusByCountyAction } from '../../actions/RR/hisFacilityStatusByCountyActions';
import {
loadHisFacilityByInfrastructureCountyActions
} from '../../actions/RR/hisFacilityByInfrastructureCountyActions';
import HisDeploymentsEMRStatusByCounty from './HisDeploymentsEMRStatusByCounty';
import HisDeploymentsFacilityByInfrastructureCounty from './HisDeploymentsFacilityByInfrastructureCounty';

const HisDeployments = () =>{
const dispatch = useDispatch();
Expand All @@ -31,6 +37,8 @@ const HisDeployments = () =>{
dispatch(loadHisFacilityByInfrastructureActions());
dispatch(loadHisFacilityLinelistAction());
dispatch(loadHisFacilityTxcurrAction());
dispatch(loadHisFacilityStatusByCountyAction());
dispatch(loadHisFacilityByInfrastructureCountyActions());
}, [dispatch])
const onVisibilityChange = (isVisible) => {
if (isVisible) {
Expand All @@ -46,9 +54,11 @@ const HisDeployments = () =>{
<UniversalFilter/>
</VisibilitySensor>
<HisDeploymentsOverview />
<HisDeploymentsEMRStatusByCounty/>
<HisDeploymentsEMRStatusByPartner />
<HisDeploymentsFacilityLevelByOwnershipCounty />
<HisDeploymentsFacilityLevelByOwnershipPartner />
<HisDeploymentsFacilityByInfrastructureCounty />
<HisDeploymentsFacilityByInfrastructure />
<HisDeploymentsLinelist />
<HisDeploymentsTxCurr />
Expand Down
Loading

0 comments on commit 128e691

Please sign in to comment.