diff --git a/src/buq/Routing.jsx b/src/buq/Routing.jsx index a3e91928..bf83016a 100644 --- a/src/buq/Routing.jsx +++ b/src/buq/Routing.jsx @@ -25,8 +25,10 @@ import MohApproveFacilityDemandingForecasting from './components/MOHApproval/Moh import MOHApprovalDistrictBuq from './components/MOHApproval/MOHApprovalDistrictBuq'; import MOHApproveRegionBuq from './components/MOHApproval/MOHApproveRegionBuq'; import MOHApprovalFacilityBuq from './components/MOHApproval/MOHApprovalFacilityBuq'; +import MohForFinalApproval from './components/MOHApproval/MohForFinalApproval'; import useLocalStorage from "../react-hooks/useLocalStorage"; + const Routing = ({ loadingModalService, facilityService, @@ -56,6 +58,10 @@ const Routing = ({ path: '/buq/national-approve', breadcrumb: 'Pending Approvals' }, + { + path: '/buq/national-approval', + breadcrumb: 'Pending Approvals' + }, { path: '/buq/national-approve/:districtId', breadcrumb: 'District Summary' @@ -147,6 +153,14 @@ const Routing = ({ orderableService={orderableService} /> + + + diff --git a/src/buq/buq.routes.js b/src/buq/buq.routes.js index 622e7dc4..c7c31218 100644 --- a/src/buq/buq.routes.js +++ b/src/buq/buq.routes.js @@ -145,7 +145,7 @@ .state('openlmis.buq.MOHPORALGApprovals', { label: 'buq.MOHPORALGApprovals', url: '/national-approve', - showInNavigation: true, + showInNavigation: false, priority: 10, accessRights: [BUQ_RIGHTS.MOH_APPROVAL, BUQ_RIGHTS.PORALG_APPROVAL], resolve: createResolve(false) @@ -172,6 +172,14 @@ showInNavigation: false, accessRights: [BUQ_RIGHTS.MOH_APPROVAL, BUQ_RIGHTS.PORALG_APPROVAL], resolve: createResolve(false) + }) + .state('openlmis.buq.MOHPORALGForFinalApproval', { + label: 'buq.MOHPORALGApprovals', + url: '/national-approval', + showInNavigation: true, + priority: 10, + accessRights: [BUQ_RIGHTS.MOH_APPROVAL, BUQ_RIGHTS.PORALG_APPROVAL], + resolve: createResolve(false) }); } diff --git a/src/buq/buq.service.js b/src/buq/buq.service.js index 247458b4..043db149 100644 --- a/src/buq/buq.service.js +++ b/src/buq/buq.service.js @@ -118,6 +118,11 @@ '?processingPeriodId=:ppId&programId=:pId&geographicZoneId=:gzId'), method: 'POST', isArray: true + }, + forFinalApproval: { + url: openlmisUrlFactory('/api/bottomUpQuantifications/forFinalApproval' + + '?processingPeriodId=:ppId&programId=:pId&geographicZoneId=:gzId'), + method: 'GET' } }); @@ -141,6 +146,7 @@ this.getMostRecentRejection = getMostRecentRejection; this.userHasBUQProgram = userHasBUQProgram; this.doesSupportBUQProgram = doesSupportBUQProgram; + this.forFinalApproval = forFinalApproval; function getBuqs(facilityId) { var queryParams = {}; @@ -258,6 +264,14 @@ }, payload).$promise; } + function forFinalApproval(programId, processingPeriodId, geoZoneId) { + return resource.forFinalApproval({ + pId: programId, + ppId: processingPeriodId, + gzId: geoZoneId + }).$promise; + } + function getMostRecentRejection(buqId) { return resource.getMostRecentRejection({ id: buqId diff --git a/src/buq/components/MOHApproval/MOHApproveRegionBuq.jsx b/src/buq/components/MOHApproval/MOHApproveRegionBuq.jsx index 3deed96c..3ed7393a 100644 --- a/src/buq/components/MOHApproval/MOHApproveRegionBuq.jsx +++ b/src/buq/components/MOHApproval/MOHApproveRegionBuq.jsx @@ -200,6 +200,7 @@ const MOHApproveRegionBuq = ({ loadingModalService }) => { accessor: 'id', Cell: ({ row }) => { const { values } = row; + console.log(values); handleSaveInLocalStorage(STORAGE_MOH_APPROVAL_PARAMS, { forecastingPeriodId, programId, diff --git a/src/buq/components/MOHApproval/MOHFinalApprovalTable.jsx b/src/buq/components/MOHApproval/MOHFinalApprovalTable.jsx new file mode 100644 index 00000000..b4c317b2 --- /dev/null +++ b/src/buq/components/MOHApproval/MOHFinalApprovalTable.jsx @@ -0,0 +1,103 @@ +import React, { useMemo } from "react"; +import Table from "../../../react-components/table/table"; +import WebTooltip from "../../../react-components/modals/web-tooltip"; +import { Link } from "react-router-dom"; +import ResponsiveButton from "../../../react-components/buttons/responsive-button"; +import useLocalStorage from "../../../react-hooks/useLocalStorage"; +import {STORAGE_MOH_APPROVAL_PARAMS} from "../../utils/constants"; +import { addThousandsSeparatorsForStrings } from '../../utils/helpers'; + +const MOHApprovalTable = ({ data, redirectUrl, districtLvl = false }) => { + const { storedItems: { mohApprovalParams }, handleSaveInLocalStorage } = useLocalStorage(); + + const columns = useMemo( + () => [ + { + Header: () => ( +
+
Status
+ + + +
+ ), + accessor: "status", + Cell: () => ( +
+ +
+ ), + }, + { + Header: `${districtLvl ? "District" : "Facility Name"}`, + accessor: `${districtLvl ? "district" : "facilityName"}`, + }, + { + Header: "Facility Type", + accessor: "facilityType", + }, + { + Header: "Pharmaceuticals", + accessor: "pharmaceuticals", + Cell: ({ value }) => addThousandsSeparatorsForStrings(value), + }, + { + Header: "Medical supplies & Equipment", + accessor: "medicalSupplies", + Cell: ({ value }) => addThousandsSeparatorsForStrings(value), + }, + { + Header: "Radiology (x-rays consumables)", + accessor: "radiology", + Cell: ({ value }) => addThousandsSeparatorsForStrings(value), + }, + { + Header: "Diagnostics supplies & Equipment", + accessor: "diagnosticsSupplies", + Cell: ({ value }) => addThousandsSeparatorsForStrings(value), + }, + { + Header: "Dental supplies & Equipment", + accessor: "dentalSupplies", + Cell: ({ value }) => addThousandsSeparatorsForStrings(value), + }, + { + Header: "Actions", + accessor: "id", + Cell: ({ row: { values } }) => { + if (districtLvl) { + handleSaveInLocalStorage(STORAGE_MOH_APPROVAL_PARAMS, { + forecastingPeriodId: mohApprovalParams?.forecastingPeriodId, + programId: mohApprovalParams?.programId, + region: mohApprovalParams?.region, + district: values.district + }) + } + return ( + + + View + + + ) + }, + }, + ], + [] + ); + + return ( + + ); +}; + +export default MOHApprovalTable; diff --git a/src/buq/components/MOHApproval/MohForFinalApproval.jsx b/src/buq/components/MOHApproval/MohForFinalApproval.jsx new file mode 100644 index 00000000..d78dfea3 --- /dev/null +++ b/src/buq/components/MOHApproval/MohForFinalApproval.jsx @@ -0,0 +1,157 @@ +import React, { useState, useMemo, useEffect } from 'react'; +import { toast } from 'react-toastify'; +import InputWithSuggestionsAndValidation from '../../../react-components/inputs/input-with-suggestions-and-validation'; +import useBuqCommonFuncs from '../../../react-hooks/useBuqCommonFunctions'; +import Table from '../../../react-components/table/table'; +import ResponsiveButton from '../../../react-components/buttons/responsive-button'; +import Checkbox from '../../../react-components/inputs/checkbox'; +import ActionBar from '../../../react-components/ActionBar'; +import Modal from '../../../admin-buq/components/Modal/Modal'; +import ConfirmModalBody from '../../../react-components/ConfirmModalBody'; +import { Link } from 'react-router-dom'; +import { STORAGE_MOH_APPROVAL_PARAMS } from '../../utils/constants'; +import WebTooltip from '../../../react-components/modals/web-tooltip'; +import useGeographicZoneGroup from '../../../react-hooks/useGeographicZoneGroup'; +import useServerService from '../../../react-hooks/useServerService'; +import useLocalStorage from '../../../react-hooks/useLocalStorage'; +import useCostCalculationRegion from '../../../react-hooks/useCostCalculationRegion'; +import ModalErrorMessage from '../../../react-components/ModalErrorMessage'; +import { addThousandsSeparatorsForStrings } from '../../utils/helpers'; +import MOHApprovalTable from "./MOHApprovalTable"; +import useCostCalculationDistrictOrFacility from "../../../react-hooks/useCostCalculationDistrictOrFacility"; +import MOHFinalApprovalTable from "./MOHFinalApprovalTable"; + +const MohForFinalApproval = ({ loadingModalService, facilityService }) => { + const { forecastingPeriodsParams } = useBuqCommonFuncs(); + const { geographicZoneParams } = useGeographicZoneGroup(); + + const [noneSelectedGroup, setNoneSelectedGroup] = useState(false); + const [noneSelectedForecastingPeriod, setNoneSelectedForecastingPeriod] = + useState(false); + const [group, setGroup] = useState(); + const [forecastingPeriodId, setForecastingPeriodId] = useState(); + const [data, setData] = useState([]); + + const buqService = useServerService('buqService'); + + const { regionData, programId, fetchRegionData } = useCostCalculationRegion( + group, + forecastingPeriodId, + loadingModalService + ); + + useEffect(() => { + const groupValues = geographicZoneParams[0]; + if (group === undefined) { + setGroup(groupValues) + } + }, [geographicZoneParams]) + + const fetchBuqForFinalApproval = () => { + console.log(programId, forecastingPeriodId, group); + + const elo = buqService.forFinalApproval(programId, forecastingPeriodId, group.value).then(function(response) { + console.log(response); + + setData(response.content); + }); + }; + + const handleSearchButton = () => { + if (!group) { + setNoneSelectedGroup(true); + } + if (!forecastingPeriodId) { + setNoneSelectedForecastingPeriod(true); + } + if (group && forecastingPeriodId) { + fetchBuqForFinalApproval(); + // fetchRegionData(); + } + }; + + return ( + <> +

Consolidated Summary

+
+
+
+
+

Group

+ { + setGroup(value); + setNoneSelectedGroup(false); + }} + isInvalid={noneSelectedGroup} + displayInformation={true} + /> +
+
+

Forecasting period

+ { + setForecastingPeriodId(value); + setNoneSelectedForecastingPeriod(false); + }} + isInvalid={noneSelectedForecastingPeriod} + displayInformation={true} + /> +
+
+
+ +
+
+
+ +
+
+ {/* setDisplayFinalApproveModal(false)}*/} + {/* confirmButtonText={'Approve'}*/} + {/* />,*/} + {/* ]}*/} + {/* sourceOfFundStyle={true}*/} + {/*/>*/} + {/* setDisplayFinalApproveErrorModal(false)}*/} + {/*/>*/} + {/* setDisplayFinalApproveModal(true)}*/} + {/* finalApproveButton={true}*/} + {/* cancelButton={false}*/} + {/* totalCostInformation={false}*/} + {/* sourceOfFundButton={false}*/} + {/*/>*/} + + ); +}; + +export default MohForFinalApproval;