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: () => (
+
+ ),
+ 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;