diff --git a/web/src/components/MyEMS/CombinedEquipment/CombinedEquipmentEfficiency.js b/web/src/components/MyEMS/CombinedEquipment/CombinedEquipmentEfficiency.js index b3957c1a..414f58fe 100644 --- a/web/src/components/MyEMS/CombinedEquipment/CombinedEquipmentEfficiency.js +++ b/web/src/components/MyEMS/CombinedEquipment/CombinedEquipmentEfficiency.js @@ -12,7 +12,8 @@ import { FormGroup, Input, Label, - CustomInput + CustomInput, + Spinner, } from 'reactstrap'; import CountUp from 'react-countup'; import Datetime from 'react-datetime'; @@ -25,6 +26,7 @@ import { getCookieValue, createCookie } from '../../../helpers/utils'; import withRedirect from '../../../hoc/withRedirect'; import { withTranslation } from 'react-i18next'; import { toast } from 'react-toastify'; +import ButtonIcon from '../../common/ButtonIcon'; import { APIBaseURL } from '../../../config'; import { periodTypeOptions } from '../common/PeriodTypeOptions'; import { comparisonTypeOptions } from '../common/ComparisonTypeOptions'; @@ -67,7 +69,11 @@ const CombinedEquipmentEfficiency = ({ setRedirect, setRedirectUrl, t }) => { const [reportingPeriodBeginsDatetime, setReportingPeriodBeginsDatetime] = useState(current_moment.clone().startOf('month')); const [reportingPeriodEndsDatetime, setReportingPeriodEndsDatetime] = useState(current_moment); const [cascaderOptions, setCascaderOptions] = useState(undefined); - const [isDisabled, setIsDisabled] = useState(true); + + // buttons + const [submitButtonDisabled, setSubmitButtonDisabled] = useState(true); + const [spinnerHidden, setSpinnerHidden] = useState(true); + const [exportButtonHidden, setExportButtonHidden] = useState(true); //Results const [cardSummaryList, setCardSummaryList] = useState([]); @@ -81,6 +87,7 @@ const CombinedEquipmentEfficiency = ({ setRedirect, setRedirectUrl, t }) => { const [detailedDataTableData, setDetailedDataTableData] = useState([]); const [detailedDataTableColumns, setDetailedDataTableColumns] = useState([{dataField: 'startdatetime', text: t('Datetime'), sort: true}]); + const [excelBytesBase64, setExcelBytesBase64] = useState(undefined); useEffect(() => { let isResponseOK = false; @@ -130,10 +137,12 @@ const CombinedEquipmentEfficiency = ({ setRedirect, setRedirectUrl, t }) => { setCombinedEquipmentList(json[0]); if (json[0].length > 0) { setSelectedCombinedEquipment(json[0][0].value); - setIsDisabled(false); + // enable submit button + setSubmitButtonDisabled(false); } else { setSelectedCombinedEquipment(undefined); - setIsDisabled(true); + // disable submit button + setSubmitButtonDisabled(true); } } else { toast.error(json.description) @@ -180,11 +189,16 @@ const CombinedEquipmentEfficiency = ({ setRedirect, setRedirectUrl, t }) => { setCombinedEquipmentList(json[0]); if (json[0].length > 0) { setSelectedCombinedEquipment(json[0][0].value); - setIsDisabled(false); + // enable submit button + setSubmitButtonDisabled(false); } else { setSelectedCombinedEquipment(undefined); - setIsDisabled(true); + // disable submit button + setSubmitButtonDisabled(true); } + + // hide export buttion + setExportButtonHidden(true) } else { toast.error(json.description) } @@ -271,6 +285,13 @@ const CombinedEquipmentEfficiency = ({ setRedirect, setRedirectUrl, t }) => { console.log(basePeriodEndsDatetime != null ? basePeriodEndsDatetime.format('YYYY-MM-DDTHH:mm:ss') : undefined); console.log(reportingPeriodBeginsDatetime.format('YYYY-MM-DDTHH:mm:ss')); console.log(reportingPeriodEndsDatetime.format('YYYY-MM-DDTHH:mm:ss')); + + // disable submit button + setSubmitButtonDisabled(true); + // show spinner + setSpinnerHidden(false); + // hide export buttion + setExportButtonHidden(true) // Reinitialize tables setDetailedDataTableData([]); @@ -392,6 +413,16 @@ const CombinedEquipmentEfficiency = ({ setRedirect, setRedirectUrl, t }) => { }) }); setDetailedDataTableColumns(detailed_column_list); + + setExcelBytesBase64(json['excel_bytes_base64']); + + // enable submit button + setSubmitButtonDisabled(false); + // hide spinner + setSpinnerHidden(true); + // show export buttion + setExportButtonHidden(false); + } else { toast.error(json.description) } @@ -399,6 +430,24 @@ const CombinedEquipmentEfficiency = ({ setRedirect, setRedirectUrl, t }) => { console.log(err); }); }; + + const handleExport = e => { + e.preventDefault(); + const mimeType='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' + const fileName = 'combinedequipmentefficiency.xlsx' + var fileUrl = "data:" + mimeType + ";base64," + excelBytesBase64; + fetch(fileUrl) + .then(response => response.blob()) + .then(blob => { + var link = window.document.createElement("a"); + link.href = window.URL.createObjectURL(blob, { type: mimeType }); + link.download = fileName; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + }); + }; + return ( @@ -526,10 +575,24 @@ const CombinedEquipmentEfficiency = ({ setRedirect, setRedirectUrl, t }) => {

- +
+ + +

+
+ + +

+ + diff --git a/web/src/components/MyEMS/Equipment/EquipmentEfficiency.js b/web/src/components/MyEMS/Equipment/EquipmentEfficiency.js index 21963fec..e112a29e 100644 --- a/web/src/components/MyEMS/Equipment/EquipmentEfficiency.js +++ b/web/src/components/MyEMS/Equipment/EquipmentEfficiency.js @@ -12,7 +12,8 @@ import { FormGroup, Input, Label, - CustomInput + CustomInput, + Spinner, } from 'reactstrap'; import CountUp from 'react-countup'; import Datetime from 'react-datetime'; @@ -25,6 +26,7 @@ import { getCookieValue, createCookie } from '../../../helpers/utils'; import withRedirect from '../../../hoc/withRedirect'; import { withTranslation } from 'react-i18next'; import { toast } from 'react-toastify'; +import ButtonIcon from '../../common/ButtonIcon'; import { APIBaseURL } from '../../../config'; import { periodTypeOptions } from '../common/PeriodTypeOptions'; import { comparisonTypeOptions } from '../common/ComparisonTypeOptions'; @@ -67,7 +69,11 @@ const EquipmentEfficiency = ({ setRedirect, setRedirectUrl, t }) => { const [reportingPeriodBeginsDatetime, setReportingPeriodBeginsDatetime] = useState(current_moment.clone().startOf('month')); const [reportingPeriodEndsDatetime, setReportingPeriodEndsDatetime] = useState(current_moment); const [cascaderOptions, setCascaderOptions] = useState(undefined); - const [isDisabled, setIsDisabled] = useState(true); + + // buttons + const [submitButtonDisabled, setSubmitButtonDisabled] = useState(true); + const [spinnerHidden, setSpinnerHidden] = useState(true); + const [exportButtonHidden, setExportButtonHidden] = useState(true); //Results const [cardSummaryList, setCardSummaryList] = useState([]); @@ -81,6 +87,7 @@ const EquipmentEfficiency = ({ setRedirect, setRedirectUrl, t }) => { const [detailedDataTableData, setDetailedDataTableData] = useState([]); const [detailedDataTableColumns, setDetailedDataTableColumns] = useState([{dataField: 'startdatetime', text: t('Datetime'), sort: true}]); + const [excelBytesBase64, setExcelBytesBase64] = useState(undefined); useEffect(() => { let isResponseOK = false; @@ -130,10 +137,12 @@ const EquipmentEfficiency = ({ setRedirect, setRedirectUrl, t }) => { setEquipmentList(json[0]); if (json[0].length > 0) { setSelectedEquipment(json[0][0].value); - setIsDisabled(false); + // enable submit button + setSubmitButtonDisabled(false); } else { setSelectedEquipment(undefined); - setIsDisabled(true); + // disable submit button + setSubmitButtonDisabled(true); } } else { toast.error(json.description) @@ -180,11 +189,16 @@ const EquipmentEfficiency = ({ setRedirect, setRedirectUrl, t }) => { setEquipmentList(json[0]); if (json[0].length > 0) { setSelectedEquipment(json[0][0].value); - setIsDisabled(false); + // enable submit button + setSubmitButtonDisabled(false); } else { setSelectedEquipment(undefined); - setIsDisabled(true); + // disable submit button + setSubmitButtonDisabled(true); } + + // hide export buttion + setExportButtonHidden(true) } else { toast.error(json.description) } @@ -271,6 +285,13 @@ const EquipmentEfficiency = ({ setRedirect, setRedirectUrl, t }) => { console.log(basePeriodEndsDatetime != null ? basePeriodEndsDatetime.format('YYYY-MM-DDTHH:mm:ss') : undefined); console.log(reportingPeriodBeginsDatetime.format('YYYY-MM-DDTHH:mm:ss')); console.log(reportingPeriodEndsDatetime.format('YYYY-MM-DDTHH:mm:ss')); + + // disable submit button + setSubmitButtonDisabled(true); + // show spinner + setSpinnerHidden(false); + // hide export buttion + setExportButtonHidden(true) // Reinitialize tables setDetailedDataTableData([]); @@ -392,6 +413,16 @@ const EquipmentEfficiency = ({ setRedirect, setRedirectUrl, t }) => { }) }); setDetailedDataTableColumns(detailed_column_list); + + setExcelBytesBase64(json['excel_bytes_base64']); + + // enable submit button + setSubmitButtonDisabled(false); + // hide spinner + setSpinnerHidden(true); + // show export buttion + setExportButtonHidden(false); + } else { toast.error(json.description) } @@ -399,6 +430,24 @@ const EquipmentEfficiency = ({ setRedirect, setRedirectUrl, t }) => { console.log(err); }); }; + + const handleExport = e => { + e.preventDefault(); + const mimeType='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' + const fileName = 'equipmentefficiency.xlsx' + var fileUrl = "data:" + mimeType + ";base64," + excelBytesBase64; + fetch(fileUrl) + .then(response => response.blob()) + .then(blob => { + var link = window.document.createElement("a"); + link.href = window.URL.createObjectURL(blob, { type: mimeType }); + link.download = fileName; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + }); + }; + return ( @@ -526,10 +575,24 @@ const EquipmentEfficiency = ({ setRedirect, setRedirectUrl, t }) => {

- +
+ + +

+
+ + +

+ +