{"version":3,"sources":["reportWebVitals.js","utils/http.js","apiService.js","i18n.js","components/NavBar/Navbar.js","components/Home/PieChartEnergySource/PieChartEnergySource.js","components/Home/PieChartSystem/PieChartSystem.js","utils/dateFormatter.js","components/Home/LineChartBuildingPowerConsumption/LineChartBuildingPowerConsumption.js","components/Home/BarChartSystemPowerConsumption/BarChartSystemPowerConsumption.js","utils/tooltipHandler.js","utils/colorConverter.js","utils/numberFormatter.js","components/Home/Home.js","components/Building/BarChartSystemPowerConsumption/BarChartSystemPowerConsumption.js","components/Login/Login.js","components/Building/PieChartSystem/PieChartSystem.js","utils/csv.js","components/Building/MixedChartBillCompare/MixedChartBillCompare.js","components/Dashboard/LineChartBuildingPowerConsumption/LineChartBuildingPowerConsumption.js","components/Dashboard/BarChartSystemPowerConsumption/BarChartSystemPowerConsumption.js","components/Dashboard/BarChartElectricityBill/BarChartElectricityBill.js","components/Dashboard/MixedChartBillCompareDate/MixedChartBillCompareDate.js","components/Dashboard/MixedChartBillCompare/MixedChartBillCompare.js","components/Dashboard/MixedChartKwTempHumi/MixedChartKwTempHumi.js","components/Dashboard/Dashboard.js","components/Building/Building.js","components/Dashboard/PieChartEnergySource/PieChartEnergySource.js","components/Dashboard/PieChartSystem/PieChartSystem.js","components/Report/EnergyUsageReport/EnergyUsageReport.js","components/Report/ElectricityBillReport/ElectricityBillReport.js","components/Report/AcPowerCompareTempHumiReport/AcPowerCompareTempHumiReport.js","components/Report/EnergyUsagePerCapitaReport/EnergyUsagePerCapitaReport.js","components/Report/Report.js","components/Meter/Meter.js","components/Footer/Footer.js","ScrollToTop.js","components/User/SetTarget/MixedChartBillCompare/MixedChartBillCompare.js","components/User/SetTarget/BarChartBillCompare/BarChartBillCompare.js","components/User/SetTarget/LineChartUsagePerCapita/LineChartUsagePerCapita.js","components/User/SetTarget/MixedChartEnergyCompare/MixedChartEnergyCompare.js","components/User/SetTarget/BarChartEnergyCompare/BarChartEnergyCompare.js","components/ForgotPassword/ForgotPassword.js","components/Register/Register.js","components/User/EditProfile/EditProfile.js","components/User/SetTarget/SetTarget.js","components/User/DeviceManager/DeviceManager.js","components/User/ActivityLog/ActivityLog.js","components/User/UserManagement/UserManagement.js","components/User/SetPermission/SetPermission.js","App.js","index.js","utils/months.js"],"names":["reportWebVitals","onPerfEntry","Function","then","getCLS","getFID","getFCP","getLCP","getTTFB","instance","axios","create","baseURL","process","interceptors","request","use","config","withCredentials","error","Promise","reject","response","resp","err","status","window","location","pathname","data","alert","localStorage","clear","http","get","post","subjectPowerMeterData","BehaviorSubject","subjectIaqData","subjectSolarData","apiService","updatePowerMeterData","dateStart","dateEnd","a","today","Date","getFullYear","getMonth","getDate","payload","start","end","dataPower","next","console","log","updateIaqData","setDate","dataIaq","updateSolarData","dataSolar","resources","en","translation","th","i18n","initReactI18next","init","lng","options","fallbackLng","keySeparator","interpolation","escapeValue","subscriberIaqData","lsDay","NavBar","props","state","isOpen","isUserDropdownOpen","isLinkDropdownOpen","currentTime","toLocaleString","hour","minute","hour12","replace","username","lsPermission","unauthenticatedPathnames","temperature","humidity","energy","isFetchingPermissions","profileImage","isModalShareOpen","email","toggleCollapse","bind","toggleUserDropdown","toggleLinkDropdown","toggleModalShare","handleInputChange","logout","getUserPermissions","getUserInfo","getUsername","share","getEnergy","this","includes","intervalTime","setInterval","setState","getItem","getTime","unlisten","history","listen","undefined","value","subscribe","length","latestData","latestDate","data_datetime","parseFloat","toFixed","intervalIaq","unsubscribe","clearInterval","prevState","e","target","name","push","setItem","JSON","stringify","profile_image","validator","isEmail","diff","isDisplayNavbar","t","style","height","className","backgroundColor","light","expand","NavbarBrand","href","src","alt","NavbarToggler","onClick","Collapse","navbar","Nav","NavItem","exact","tag","Link","to","activeClassName","pushState","size","margin","find","p","label","Dropdown","nav","toggle","textAlign","width","opacity","DropdownToggle","paddingTop","fontWeight","caret","DropdownMenu","DropdownItem","divider","padding","right","color","Row","justifyContent","Math","abs","alignItems","round","toString","substring","getDay","lsMonthFull","language","marginLeft","fontSize","Modal","ModalHeader","ModalBody","Label","for","Input","type","id","onChange","ModalFooter","Button","React","Component","withTranslation","withRouter","COLORS","RADIAN","PI","renderCustomizedLabel","cx","cy","midAngle","innerRadius","outerRadius","percent","radius","index","x","cos","y","sin","fill","textAnchor","dominantBaseline","PieChartEnergySource","mea","solar","ResponsiveContainer","PieChart","Pie","isAnimationActive","labelLine","dataKey","map","entry","Cell","PureComponent","numberWithCommas","getLine2","building","ac","others","totalEnergyConsumption","getLine3","percentAC","getLine4","percentOthers","CustomTooltip","active","borderRadius","marginBottom","PieChartSystem","prevProps","Tooltip","position","content","lineChart","barChart","dateFormatter","mmyyyy","date","offset","getTimezoneOffset","mm","yyyy","ddmmyyyy","dd","ddmmyyyy_noOffset","ddmmyyyyhhmm","hh","getHours","min","getMinutes","yyyymmddhhmmss","ss","getSeconds","ddmmmyyyy","mmm","toDateTimeString","toISOString","toDateTimeString_noOffset","ddmmyyyyhhmm_noOffset","ddmmmyyyyhhmm_noOffset","yyyymmddhhmmss_noOffset","yyyymmdd_noOffset","yyyymmdd_input","hhmm","tooltipHandler","tooltipHandlerRight_100_top_100","context","chart","tooltip","tooltipEl","canvas","parentNode","querySelector","document","createElement","background","transform","transition","zIndex","table","appendChild","getOrCreateTooltip","body","titleLines","title","bodyLines","b","lines","tableHead","forEach","tr","borderWidth","text","createTextNode","tableBody","i","colors","labelColors","span","borderColor","marginRight","display","td","tableRoot","firstChild","remove","positionX","offsetLeft","positionY","offsetTop","left","caretX","top","caretY","font","bodyFont","string","LineChartBuildingPowerConsumption","buildChart","dt","parse","opt","plugins","zoom","limits","max","enabled","external","datasets","ds","getElementById","innerHTML","ctx","getContext","Chart","xMin","lsBuilding","lsSelectedBuildingPrev","componentShouldUpdate","currentLanguage","responsive","animation","maintainAspectRatio","interaction","intersect","axis","mode","scales","xAxis","time","displayFormats","millisecond","second","grid","yAxis","align","weight","bottom","legend","pan","wheel","pinch","speed","handleDoubleClick","register","registerables","zoomPlugin","nextProps","lsKw_system_building","lsSelectedBuilding","Object","values","assign","slice","keys","labels","yMax","lsKw_system","color_code","dataset","spanGaps","pointRadius","prevDatetime","logKwMain","datetime","kw","d","entries","resetZoom","onDoubleClick","BarChartSystemPowerConsumption","callbacks","stacked","usePointStyle","titleColor","bodyColor","titleFont","building_lsKwMain","building_lsKwAc","lsKwMain","lsKwAc","logKwAc","lengthDiff","concat","Array","lsKwOthers","kwMain","idx","kwAc","datasetAc","datasetOthers","Color","r","g","set","clamp","angle","multiply","matrix","newR","newG","newB","linear","slope","intercept","h","s","l","Solver","baseColor","targetHSL","hsl","reusedColor","result","solveNarrow","solveWide","loss","filter","css","best","Infinity","spsa","wide","A","A1","c","iters","bestLoss","deltas","highArgs","lowArgs","k","ck","pow","random","lossDiff","ak","fix","filters","invert","sepia","saturate","hueRotate","brightness","contrast","colorHSL","fmt","multiplier","hex","colorConverter","getFilterFromHex","rgb","m","exec","parseInt","hexToRgb","solver","solve","pickHex","color1","color2","ratio","ceil","subscriberPowerMeterData","subscriberSolarData","numberFormatter","withCommas","Home","lsSystem","tariff_building","kwh_system_building","bill_building","targetBill_building","monthKwh_system_building","kwhSolar","kwhSolarMonth","buildingPath","origin","propsPath","isDisplayBill","visitors","getAllSystem","getAllTargetByMonthYear","getAllBuilding","onClickBuilding","getPowerUsedCurrentMonthBuilding","getSolarCurrentMonth","toggleDisplayBill","onDoubleClickBuilding","getVisitors","lsDeviceFirst","lsDeviceLast","reverse","device","kwh","system","floor","intervalApi","month","year","lsTarget","tariff","bill","electricity_bill","kwhMainMonthTotal","kwhAcMonthTotal","billMonthTotal","monthKwh_system","kwhMonth_system","targetBill","lsBuildingData","totalKwh","kwhPercentage","percentColor","toLowerCase","fluid","Col","sm","marginTop","textTransform","paddingLeft","textDecoration","paddingRight","paddingBottom","Progress","direction","border","checked","kwhColor","afterInjection","wrapper","alignSelf","verticalAlign","Container","Login","showPassword","password","isCredentialsIncorrect","isUsernameEmpty","isPasswordEmpty","errorMessage","toggleShowPassword","submitLogin","redirect","qs","search","ignoreQueryPrefix","postLogin","Form","FormGroup","row","check","dateFrom","dateTo","lsLogKw_system","sys","lsLog","lsKw","findIndex","_","disabled","mixedChart","csv","exportFile","fileName","dataRows","csvContent","join","encodedUri","encodeURI","link","setAttribute","click","MixedChartBillCompare","billData_month","compareTo","dataMonth","unshift","latest","compareData","average","lastYear","monthIdx","lsMonth","getBillDataMonth","exportData","building_id","dataMonthCompare","rows","lsMonthName","Building","setHours","displayDateFrom","displayDateTo","isSystemDropdownOpen","currentBuildingLabel","kwh_system_floor","kwh_month","updateData","handleInputDateChange","toggleSystem","changeSystem","getData","getBuildingTargetRange","onClickApply","onClickCompareTo","exportBarChartSystemPowerConsumption","buildingID","bld","date_from","date_to","lsData","month_from","year_from","month_to","year_to","currentTarget","textContent","buildingLabel","lsLogKwMain","lsLogKwAc","lsLogKwOthers","logKwOthers","estimatedPeople","amount_people","isPieChartDisabled","kwhTotal","kwhAc","kwhOthers","kwh_system","kwhPerCapita","class","placeholder","floors","isProgressBarDisabled","kwhFloorMain","kwhFloorAc","kwhFloorOthers","multi","bar","float","getLine1","BarChartElectricityBill","datalabels","anchor","formatter","ChartDataLabels","indexAxis","ticks","autoSkip","billTotal","lsColor","bill_building_sorted","sort","reduce","acc","key","MixedChartBillCompareDate","bill_building_strDate","currDate","currYear","currMonth","currDay","strDate","day","billData_date","bodySpacing","getBillDataDate","bill_building_date","dataLatest","dataCompare","MixedChartKwTempHumi","yTemp","yHumi","yKw","lsTempHumi","lsTemp","lsHumi","datasetMain","yAxisID","datasetTemp","datasetHumi","dataTemp","dataHumi","dataKw","Dashboard","isLoadingData","getDataIaqByDatetime","onClickAllBuilding","exportPieCharts","exportLineChartPower","exportBarChartPower","exportBarChartElectricityBill","Main","kwhMainTotal","kwhAcTotal","lsLogKwMain_clean","lsLogKwAc_clean","lsLogKwOthers_clean","setFullYear","Font","family","fonts","fontStyle","styles","StyleSheet","page","fontFamily","header","borderBottom","flexDirection","stamp","logo","section","line","flexWrap","lineCenter","pieChart","column","EnergyUsageReport","bill_system_building","b64PieChartBuildingEnergyUsage","kwhOthersTotal","source","red","tableRow","tableColHeader","borderStyle","borderTopWidth","tableColHeader15","borderLeftWidth","tableColHeader30","tableColHeader40","tableColHeader42_5","tableCol15","tableCol30","tableCol40","tableCol42_5","tableCellHeader","tableCellHeaderRed","tableCell","tableCellRed","tableCellTotal","tableCellTotalRed","ElectricityBillReport","bill_building_month_year","b64BarChartBuildingElectricityBill","monthDiff","count","bill_building_month","Number","isInteger","tableColHeader85","borderRightWidth","tableCol85","AcPowerCompareTempHumiReport","b64LineChartTempKw_building","b64LineChartHumiKw_building","tableColHeader25","tableColHeader35","tableCol25","tableCol35","EnergyUsagePerCapitaReport","b64BarChartBuildingEnergyUsage","b64BarChartBuildingEnergyUsagePerCapita","capitaTotal","capita","Report","isEnergyUsageReportSelected","isElectricityBillReportSelected","isAcPowerCompareTempHumiReportSelected","isEnergyUsagePerCapitaReportSelected","toggleEnergyUsageReport","toggleElectricityBillReport","toggleAcPowerCompareTempHumiReport","toggleEnergyUsagePerCapitaReport","getKwhSystemBuilding","getKwhSolar","getElectricityBillBuilding","getAllTargetBuildingPeriod","getElectricityBillBuildingMonthYear","getAcPowerIaqBuilding","generateReports","getB64PieChartBuildingEnergyUsage","getB64BarChartBuildingElectricityBill","getB64LineChartTempBuilding","getB64LineChartHumiBuilding","getB64BarChartBuildingEnergyUsage","getB64BarChartBuildingEnergyUsagePerCapita","lsBuildingID","ls_building_id","pdf","toBlob","blob","saveAs","lsLogAcKwIaq","layout","dataTotal","dataIndex","toBase64Image","datasetIndex","sum","b64_building","datasetKw","temp","humi","Meter","isMapMode","isDiagramMode","lsDevice","searchText","isOverall","isModalOpen","modalDeviceID","interval","setMapMode","setDiagramMode","setBuilding","toggleSortByMeterID","toggleSortByStatus","toggleModalOpen","getAllDevice","getAllDeviceLatestLog","getExportData","exportTable","exportMeter","intervalDeviceLog","isSortByMeterIDAsc","isSortByMeterIDDesc","isSortByStatusActive","isSortByStatusInactive","deviceID","setMinutes","setSeconds","device_id","tableRows","querySelectorAll","cols","j","innerText","kw_total","kva_total","pf","voltage_l1_N","voltage_l2_N","voltage_l3_N","voltage_l1_l2","voltage_l2_l3","voltage_l3_l1","kvar_l1","kvar_l2","kvar_l3","current_l1","current_l2","current_l3","kw_l1","kw_l2","k2_l3","kva_l1","kva_l2","kva_l3","hz","lsDeviceDisplay","is_active","site","brandModel","brand_model","activated_datetime","latestTime","kw_building","kwTotal","modalDevice","modalLog","Table","toTimeString","split","kw_l3","Footer","children","useEffect","scrollTo","ForgotPassword","submitForgotPassword","postForgotPassword","Register","confirmPassword","userTypeLabel","isEmailEmpty","isEmailValid","isPasswordsMatch","isUserTypeSelected","loading","handleInputChangeSelect","submitRegister","setLoading","getAllUserType","lsUserType","userType","userTypeID","postRegister","user_type_id","splice","EditProfile","currentUsername","currentUserType","prevUsername","prevEmail","dateActivated","dateLastLogin","prevProfileImage","isUserTypeApproved","isDeactivated","isEditUsernameMode","isEditEmailMode","isModalConfirmUsernameOpen","isModalConfirmEmailOpen","isModalConfirmChangePasswordOpen","isModalConfirmDeactivateOpen","isModalConfirmActivateOpen","isModalConfirmApproveOpen","formatDate","toggleEditUsername","toggleEditEmail","submitUsername","submitEmail","toggleModalConfirmUsername","toggleModalConfirmEmail","toggleModalConfirmChangePassword","toggleModalConfirmDeactivate","toggleModalConfirmActivate","toggleModalConfirmApprove","uploadImage","changePassword","deactivate","activate","approve","paramsUsername","match","params","userInfo","user_type","activated_timestamp","last_login_timestamp","is_user_type_approved","is_deactivated","prev_username","reload","image","extensions","dims","minWidth","maxWidth","minHeight","maxHeight","base64","onError","scope","getDataByLanguage","displayYear","mth","BarChartBillCompare","parsed","drawBorder","tick","LineChartUsagePerCapita","kwh_building_month","kwh_building","MixedChartEnergyCompare","energyData_month","BarChartEnergyCompare","SetTarget","lsTargetDisplay","lastMonthTarget_bill","lastMonthActual_bill","lastYearTarget_bill","lastYearActual_bill","monthAverage_bill","yearAverage_bill","lastMonthTarget_usage","lastMonthActual_usage","lastYearTarget_usage","lastYearActual_usage","monthAverage_usage","yearAverage_usage","monthDisplay","yearDisplay","electricityBill","energyUsage","amountPeople","compareToBill","compareToUsage","onClickCompareToBill","onClickCompareToUsage","setTarget","getTarget_monthYear","getTarget_monthYear_display","getTargetPresets","getEnergyDataMonth","getEnergyMonthPastYear","exportCharts","classList","add","energy_usage","presets","dataEnergy","energyData","currentYear","lsYear","autoComplete","list","DeviceManager","isSortByDeviceIDAsc","isSortByDeviceIDDesc","isSortByDateActivatedAsc","isSortByDateActivatedDesc","isModalAddMeterOpen","isModalConfirmAddMeterOpen","isModalConfirmEditMeterOpen","isModalConfirmDeleteMeterOpen","deviceIDEdit","deviceIDDelete","isActive","activatedDate","toggleSortByDeviceID","toggleSortByDateActivated","toggleModalAddMeter","toggleModalConfirmAddMeter","toggleModalConfirmDeleteMeter","toggleModalConfirmEditMeter","addMeter","editMeter","deleteMeter","setMeterEditMode","ActivityLog","lsActivity","isSortByTimestampAsc","handleChangeDateTo","handleChangeDateFrom","toggleSortByTimestamp","getActivity","from","lsActivityDisplay","activity","action","act","UserManagement","lsUser","isSortByUsernameAsc","isSortByUsernameDesc","isSortByDateLastLoginAsc","isSortByDateLastLoginDesc","getAllUser","toggleSortByUsername","toggleSortByActivatedDate","toggleSortByLastLoginDate","navigateToUserProfile","navigateToActivityLog","stopPropagation","lsUserDisplay","user","SetPermission","lsUserTypePermission","getAllPermission","getAllUserTypePermission","updateUserTypePermission","permissionID","permission_id","permission","userTypePermission","App","changeLanguage","path","component","ReactDOM","render","module","exports"],"mappings":"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","file":"static/js/main.94dd21ad.chunk.js","sourcesContent":["const reportWebVitals = onPerfEntry => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import axios from \"axios\";\n\nconst instance = axios.create({ baseURL: process.env.REACT_APP_API_BASE_URL });\n\ninstance.interceptors.request.use(\n\tfunction (config) {\n\t\tconfig.withCredentials = true;\n\n\t\treturn config;\n\t},\n\tfunction (error) {\n\t\treturn Promise.reject(error);\n\t}\n);\n\ninstance.interceptors.response.use(\n\t(resp) => {\n\t\treturn resp;\n\t},\n\t(err) => {\n\t\tlet resp = err.response;\n\t\tif (!resp) {\n\t\t\tlocalStorage.clear();\n\n\t\t\tif (window.location.pathname !== \"/login\") {\n\t\t\t\twindow.location.pathname = \"/login\";\n\t\t\t\talert(\n\t\t\t\t\t\"Unable to connect to the server at this moment. Please try again.\"\n\t\t\t\t);\n\t\t\t}\n\t\t} else if (resp.status === 401 && window.location.pathname !== \"/login\") {\n\t\t\twindow.location.pathname = \"/login\";\n\t\t} else if (resp.status === 403) {\n\t\t\tif (resp.data) alert(resp.data);\n\t\t\telse alert(\"Permission Denied!\");\n\n\t\t\tif (window.location.pathname !== \"/register\") {\n\t\t\t\twindow.location.pathname = \"/\";\n\t\t\t}\n\t\t}\n\n\t\treturn Promise.reject(err);\n\t}\n);\n\nconst http = {\n\tget: instance.get,\n\tpost: instance.post,\n};\n\nexport default http;\n","import http from \"./utils/http\";\nimport { BehaviorSubject } from \"rxjs\";\n\nconst subjectPowerMeterData = new BehaviorSubject();\nconst subjectIaqData = new BehaviorSubject();\nconst subjectSolarData = new BehaviorSubject();\n\nconst apiService = {\n\tupdatePowerMeterData: async function (dateStart, dateEnd) {\n\t\ttry {\n\t\t\tlet today = new Date();\n\n\t\t\tif (!dateStart || !dateEnd) {\n\t\t\t\tdateStart = new Date(\n\t\t\t\t\ttoday.getFullYear(),\n\t\t\t\t\ttoday.getMonth(),\n\t\t\t\t\ttoday.getDate(),\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\t0\n\t\t\t\t);\n\t\t\t\tdateEnd = today;\n\t\t\t}\n\n\t\t\tlet payload = {\n\t\t\t\tstart: dateStart,\n\t\t\t\tend: dateEnd,\n\t\t\t};\n\n\t\t\tlet resp = await http.post(\"/api/power/datetime\", payload);\n\n\t\t\tlet dataPower = resp.data;\n\n\t\t\tsubjectPowerMeterData.next(dataPower);\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\treturn err.response;\n\t\t}\n\t},\n\n\tupdateIaqData: async function (dateStart, dateEnd) {\n\t\ttry {\n\t\t\tlet today = new Date();\n\n\t\t\tif (!dateStart || !dateEnd) {\n\t\t\t\tdateStart = new Date().setDate(today.getDate() - 1);\n\t\t\t\tdateEnd = today;\n\t\t\t}\n\n\t\t\tlet payload = {\n\t\t\t\tstart: dateStart,\n\t\t\t\tend: dateEnd,\n\t\t\t};\n\n\t\t\tlet resp = await http.post(\"/api/iaq/datetime\", payload);\n\n\t\t\tlet dataIaq = resp.data;\n\n\t\t\tsubjectIaqData.next(dataIaq);\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\treturn err.response;\n\t\t}\n\t},\n\n\tupdateSolarData: async function (dateStart, dateEnd) {\n\t\ttry {\n\t\t\tlet today = new Date();\n\n\t\t\tif (!dateStart || !dateEnd) {\n\t\t\t\tdateStart = new Date().setDate(today.getDate() - 1);\n\t\t\t\tdateEnd = today;\n\t\t\t}\n\n\t\t\tlet payload = {\n\t\t\t\tstart: dateStart,\n\t\t\t\tend: dateEnd,\n\t\t\t};\n\n\t\t\tlet resp = await http.post(\"/api/solar/datetime\", payload);\n\n\t\t\tlet dataSolar = resp.data;\n\n\t\t\tsubjectSolarData.next(dataSolar);\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\treturn err.response;\n\t\t}\n\t},\n};\n\nexport { subjectPowerMeterData, subjectIaqData, subjectSolarData, apiService };\n","import i18n from \"i18next\";\nimport { initReactI18next } from \"react-i18next\";\n\nimport translationEN from \"./locales/en/translation.json\";\nimport translationTH from \"./locales/th/translation.json\";\n\n// translations\nconst resources = {\n\ten: {\n\t\ttranslation: translationEN,\n\t},\n\tth: {\n\t\ttranslation: translationTH,\n\t},\n};\n\ni18n.use(initReactI18next).init({\n\tresources,\n\tlng: i18n.options.lng,\n\tfallbackLng: \"en\",\n\n\tkeySeparator: false,\n\n\tinterpolation: {\n\t\tescapeValue: false,\n\t},\n});\n\nexport default i18n;\n","import React from \"react\";\n\nimport \"./Navbar.css\";\nimport {\n Collapse,\n Navbar,\n NavbarToggler,\n NavbarBrand,\n Nav,\n NavItem,\n Row,\n Dropdown,\n DropdownToggle,\n DropdownMenu,\n DropdownItem,\n Modal,\n ModalHeader,\n ModalBody,\n ModalFooter,\n Button,\n Input,\n Label,\n} from \"reactstrap\";\nimport { Link, NavLink, withRouter } from \"react-router-dom\";\nimport \"bootstrap/dist/css/bootstrap.css\";\nimport { BsFillHouseDoorFill, BsBuilding } from \"react-icons/bs\";\nimport {\n FaChartLine,\n FaTachometerAlt,\n FaTemperatureLow,\n FaUserCircle,\n} from \"react-icons/fa\";\nimport { AiFillFile } from \"react-icons/ai\";\nimport { IoIosWater, IoMdShare } from \"react-icons/io\";\nimport { BiLinkExternal } from \"react-icons/bi\";\nimport { GoTriangleUp, GoTriangleDown } from \"react-icons/go\";\n\nimport http from \"../../utils/http\";\nimport validator from \"validator\";\n\nimport { subjectIaqData, apiService } from \"../../apiService\";\n\nimport { withTranslation } from \"react-i18next\";\nimport i18n from \"../../i18n\";\n\nimport { lsMonthFull } from \"../../utils/months\";\n\nconst lsDay = [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n];\n\nlet subscriberIaqData;\n\nclass NavBar extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n isOpen: false,\n isUserDropdownOpen: false,\n isLinkDropdownOpen: false,\n currentTime: new Date()\n .toLocaleString([], {\n hour: \"2-digit\",\n minute: \"2-digit\",\n hour12: false,\n })\n .replace(\"24:\", \"00:\"),\n username: \"\",\n lsPermission: [],\n unauthenticatedPathnames: [\"/login\", \"/forgot-password\", \"/register\"],\n temperature: \"\",\n humidity: \"\",\n energy: \"\",\n isFetchingPermissions: false,\n profileImage: \"\",\n isModalShareOpen: false,\n email: \"\",\n };\n\n this.toggleCollapse = this.toggleCollapse.bind(this);\n this.toggleUserDropdown = this.toggleUserDropdown.bind(this);\n this.toggleLinkDropdown = this.toggleLinkDropdown.bind(this);\n this.toggleModalShare = this.toggleModalShare.bind(this);\n\n this.handleInputChange = this.handleInputChange.bind(this);\n\n this.logout = this.logout.bind(this);\n this.getUserPermissions = this.getUserPermissions.bind(this);\n this.getUserInfo = this.getUserInfo.bind(this);\n this.getUsername = this.getUsername.bind(this);\n this.share = this.share.bind(this);\n this.getEnergy = this.getEnergy.bind(this);\n }\n\n async componentDidMount() {\n let { unauthenticatedPathnames } = this.state;\n let { pathname } = this.props.location;\n\n if (!unauthenticatedPathnames.includes(pathname)) {\n await this.getUserPermissions();\n }\n\n this.intervalTime = setInterval(\n () =>\n this.setState({\n currentTime: new Date()\n .toLocaleString([], {\n hour: \"2-digit\",\n minute: \"2-digit\",\n hour12: false,\n })\n .replace(\"24:\", \"00:\"),\n }),\n 500\n );\n\n let username = localStorage.getItem(\"current_username\");\n\n if (username && username !== \"\") {\n this.setState({ username: localStorage.getItem(\"current_username\") });\n }\n\n let start = new Date(new Date().getTime() - 15 * 60 * 1000);\n let end = new Date();\n\n this.unlisten = this.props.history.listen(async () => {\n if (!unauthenticatedPathnames.includes(pathname)) {\n if (this.state.username === \"\" || this.state.username === null) {\n username = localStorage.getItem(\"current_username\");\n if (username === null) await this.getUsername();\n\n this.setState({ username: username });\n }\n\n if (this.state.energy === \"\") {\n this.getEnergy();\n }\n\n if (dataIaq === undefined) {\n await apiService.updateIaqData(start, end);\n }\n }\n });\n\n let dataIaq = subjectIaqData.value;\n\n subscriberIaqData = subjectIaqData.subscribe(async (dataIaq) => {\n if (!dataIaq) return;\n if (dataIaq.length === 0) return;\n\n let latestData = dataIaq[dataIaq.length - 1];\n let latestDate = new Date(latestData.data_datetime);\n\n if (new Date().getTime() - latestDate.getTime() > 900000) {\n start = new Date(dataIaq[0].data_datetime);\n end = new Date();\n\n if (!unauthenticatedPathnames.includes(pathname)) {\n await apiService.updateIaqData(start, end);\n }\n return;\n }\n\n this.setState({\n temperature: parseFloat(latestData.temperature).toFixed(1),\n humidity: parseFloat(latestData.humidity).toFixed(1),\n });\n });\n\n this.intervalIaq = setInterval(async () => {\n dataIaq = subjectIaqData.value;\n\n if (!dataIaq) return;\n if (dataIaq.length === 0) {\n let start = new Date(new Date().getTime() - 15 * 60 * 1000);\n let end = new Date();\n\n if (!unauthenticatedPathnames.includes(pathname)) {\n await apiService.updateIaqData(start, end);\n }\n return;\n }\n\n let latestData = dataIaq[dataIaq.length - 1];\n let latestDate = new Date(latestData.data_datetime);\n\n if (new Date().getTime() - latestDate.getTime() > 900000) {\n start = new Date(dataIaq[0].data_datetime);\n end = new Date();\n\n await apiService.updateIaqData(start, end);\n return;\n }\n }, 900000);\n }\n\n async componentDidUpdate() {\n let {\n username,\n unauthenticatedPathnames,\n lsPermission,\n isFetchingPermissions,\n } = this.state;\n let pathname = this.props.history.location.pathname;\n\n if (!unauthenticatedPathnames.includes(pathname)) {\n if (username === \"\" || username === null) {\n username = localStorage.getItem(\"current_username\");\n if (username === null) await this.getUsername();\n this.getUserInfo();\n\n this.setState({ username: username });\n }\n\n if (this.state.energy === \"\") {\n this.getEnergy();\n }\n\n let dataIaq = subjectIaqData.value;\n if (dataIaq === undefined) {\n let start = new Date(new Date().getTime() - 15 * 60 * 1000);\n let end = new Date();\n await apiService.updateIaqData(start, end);\n }\n\n if (lsPermission.length === 0 && !isFetchingPermissions) {\n this.setState({ isFetchingPermissions: true }, () =>\n this.getUserPermissions()\n );\n }\n }\n }\n\n componentWillUnmount() {\n if (subscriberIaqData) subscriberIaqData.unsubscribe();\n clearInterval(this.intervalTime);\n clearInterval(this.intervalIaq);\n this.unlisten();\n }\n\n toggleCollapse() {\n this.setState((prevState) => ({\n isOpen: !prevState.isOpen,\n }));\n }\n\n toggleUserDropdown() {\n this.setState((prevState) => ({\n isUserDropdownOpen: !prevState.isUserDropdownOpen,\n }));\n }\n\n toggleLinkDropdown() {\n this.setState((prevState) => ({\n isLinkDropdownOpen: !prevState.isLinkDropdownOpen,\n }));\n }\n\n toggleModalShare() {\n this.setState((prevState) => ({\n isModalShareOpen: !prevState.isModalShareOpen,\n }));\n }\n\n handleInputChange(e) {\n this.setState({ [e.target.name]: e.target.value });\n }\n\n logout() {\n http.get(\"/auth/logout\");\n\n this.setState({ username: \"\", lsPermission: [] });\n localStorage.clear();\n\n this.props.history.push({\n pathname: \"/login\",\n });\n }\n\n async getUserPermissions() {\n try {\n let resp = await http.get(\"/permission/\");\n\n this.setState({ lsPermission: resp.data, isFetchingPermissions: false });\n localStorage.setItem(\"lsPermission\", JSON.stringify(resp.data));\n } catch (err) {\n console.log(err);\n return err.response;\n }\n }\n\n async getUsername() {\n try {\n let resp = await http.get(\"/user/username/\");\n\n this.setState({ username: resp.data });\n localStorage.setItem(\"current_username\", resp.data);\n } catch (err) {\n console.log(err);\n return err.response;\n }\n }\n\n async getUserInfo() {\n try {\n let resp = await http.get(\"/user/info\");\n\n this.setState({\n profileImage:\n resp.data.profile_image === null ? \"\" : resp.data.profile_image,\n });\n } catch (err) {\n console.log(err);\n return err.response;\n }\n }\n\n async share() {\n try {\n let email = this.state.email;\n\n if (!validator.isEmail(email)) {\n alert(\"Please enter a valid email address\");\n return;\n }\n\n await http.post(\"/etc/share\", { email: this.state.email });\n\n this.toggleModalShare();\n } catch (err) {\n console.log(err);\n return err.response;\n }\n }\n\n async getEnergy() {\n try {\n let resp = await http.get(\"/api/energy\");\n\n this.setState({\n energy: resp.data.energy,\n diff: resp.data.diff,\n });\n } catch (err) {\n console.log(err);\n return err.response;\n }\n }\n\n render() {\n let {\n isUserDropdownOpen,\n isLinkDropdownOpen,\n currentTime,\n username,\n temperature,\n humidity,\n lsPermission,\n profileImage,\n isModalShareOpen,\n email,\n energy,\n diff,\n } = this.state;\n\n let { location } = this.props;\n\n if (!username) username = \"\";\n\n let today = new Date();\n\n let isDisplayNavbar =\n location.pathname !== \"/login\" &&\n location.pathname !== \"/forgot-password\" &&\n location.pathname !== \"/register\";\n\n const { t } = this.props;\n\n return (\n \n {!isDisplayNavbar ? (\n
\n ) : (\n \n \n \"logo\"\n \n \n \n \n \n \n \n \n
\n 0 ? \"green\" : \"red\",\n }}\n >\n \n {Math.abs(energy) > 10\n ? parseFloat(energy).toFixed(1)\n : parseFloat(energy).toFixed(2)}\n %\n \n \n {energy >= 0 ? : }\n \n
\n \n \n {t(\"Energy\")}\n \n \n {Math.abs(diff) > 1000\n ? Math.round(diff)\n .toString()\n .substring(0, Math.round(diff).toString().length - 3) +\n \"k \"\n : Math.round(diff) + \" \"}\n {t(\"kWh\")}\n \n \n \n \n {t(\"Temperature\")}\n \n \n \n {temperature.length > 0 ? temperature : \"N/A \"}°C\n \n \n
\n \n {t(\"Humidity\")}\n \n \n \n {humidity.length > 0 ? humidity : \"N/A \"}%\n \n
\n \n \n \n {t(`${lsDay[today.getDay()]}`)}\n \n \n \n {today.getDate() + \" \"}\n {t(`${lsMonthFull[today.getMonth()]}`)}\n {\" \" +\n (i18n.language === \"th\"\n ? today.getFullYear() + 543\n : today.getFullYear())}\n \n \n
\n \n {currentTime}\n \n
\n \n
\n )}\n \n \n {t(\"Share to\")}...\n \n \n \n \n \n \n {\" \"}\n \n \n \n \n );\n }\n}\n\nexport default withTranslation()(withRouter(NavBar));\n","import React, { PureComponent } from \"react\";\nimport { PieChart, Pie, Cell, ResponsiveContainer } from \"recharts\";\n\nconst COLORS = [\"#696665\", \"#ff9233\"];\n\nconst RADIAN = Math.PI / 180;\nconst renderCustomizedLabel = ({\n\tcx,\n\tcy,\n\tmidAngle,\n\tinnerRadius,\n\touterRadius,\n\tpercent,\n\tindex,\n}) => {\n\tconst radius = innerRadius + (outerRadius - innerRadius) * 0.2;\n\tconst x = cx + radius * Math.cos(-midAngle * RADIAN);\n\tconst y = cy + radius * Math.sin(-midAngle * RADIAN);\n\n\treturn (\n\t\t cx ? \"start\" : \"end\"}\n\t\t\tdominantBaseline=\"central\"\n\t\t\tfontWeight=\"600\"\n\t\t>\n\t\t\t{`${(percent * 100).toFixed(0)}%`}\n\t\t\n\t);\n};\n\nexport default class PieChartEnergySource extends PureComponent {\n\trender() {\n\t\tlet data = [\n\t\t\t{ name: \"MEA\", value: Math.abs(this.props.mea) },\n\t\t\t{ name: \"Solar Cells\", value: Math.abs(this.props.solar) },\n\t\t];\n\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{data.map((entry, index) => (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t))}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t);\n\t}\n}\n","import React, { PureComponent } from \"react\";\nimport { PieChart, Pie, Cell, Tooltip, ResponsiveContainer } from \"recharts\";\nimport \"./PieChartSystem.css\";\n\nimport i18n from \"../../../i18n\";\n\nconst COLORS = [\"#3c67be\", \"#FDD865\"];\n\nconst numberWithCommas = (x) => {\n return x.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n};\n\nconst RADIAN = Math.PI / 180;\nconst renderCustomizedLabel = ({\n cx,\n cy,\n midAngle,\n innerRadius,\n outerRadius,\n percent,\n}) => {\n const radius = innerRadius + (outerRadius - innerRadius) * 0.2;\n const x = cx + radius * Math.cos(-midAngle * RADIAN);\n const y = cy + radius * Math.sin(-midAngle * RADIAN);\n\n return (\n cx ? \"start\" : \"end\"}\n dominantBaseline=\"central\"\n fontWeight=\"600\"\n >\n {`${(percent * 100).toFixed(0)}%`}\n \n );\n};\n\nconst getLine1 = () => {\n return i18n.t(\"home.Month to Date\");\n};\n\nconst getLine2 = (building, ac, others) => {\n let totalEnergyConsumption = ac + others;\n\n return (\n building +\n \" \" +\n numberWithCommas(Math.round(totalEnergyConsumption)) +\n \" \" +\n i18n.t(\"kWh\")\n );\n};\n\nconst getLine3 = (ac, others) => {\n let percentAC = Math.round((ac / (ac + others)) * 100);\n\n return (\n i18n.t(\"Air Conditioner\") +\n \" \" +\n percentAC +\n \"% \" +\n numberWithCommas(Math.round(ac)) +\n \" \" +\n i18n.t(\"kWh\")\n );\n};\n\nconst getLine4 = (ac, others) => {\n let percentOthers = Math.round((others / (ac + others)) * 100);\n\n return (\n i18n.t(\"Others\") +\n \" \" +\n percentOthers +\n \"% \" +\n numberWithCommas(Math.round(others)) +\n \" \" +\n i18n.t(\"kWh\")\n );\n};\n\nconst CustomTooltip = ({ active, label, ...props }) => {\n if (active) {\n let building = props.building;\n let ac = props.ac;\n let others = props.others;\n\n return (\n \n

{getLine1()}

\n

\n {getLine2(building, ac, others)}\n

\n \n {getLine3(ac, others)}\n

\n \n {getLine4(ac, others)}\n

\n \n );\n }\n\n return null;\n};\n\nclass PieChartSystem extends PureComponent {\n constructor(props) {\n super(props);\n this.state = {\n ac: 0,\n others: 0,\n };\n }\n\n componentDidUpdate(prevProps) {\n if (\n this.props.ac === prevProps.ac &&\n this.props.others === prevProps.others\n )\n return;\n\n this.setState({\n ac: this.props.ac,\n others: this.props.others,\n });\n }\n\n render() {\n let { ac, others } = this.state;\n\n const data = [\n { name: \"Air Conditioner\", value: ac },\n { name: \"Others\", value: others },\n ];\n\n return (\n \n \n \n {data.map((entry, index) => (\n \n ))}\n \n \n }\n />\n \n \n );\n }\n}\n\nexport default PieChartSystem;\n","import { lsMonthFull } from \"./months\";\nimport i18n from \"../i18n\";\n\nfunction mmyyyy(date) {\n if (date instanceof Date) {\n const offset = date.getTimezoneOffset();\n date = new Date(date.getTime() - offset * 60 * 1000);\n\n let mm = date.getMonth() + 1;\n let yyyy = date.getFullYear();\n\n if (mm < 10) {\n mm = \"0\" + mm;\n }\n\n return mm + \"/\" + (i18n.language === \"th\" ? yyyy + 543 : yyyy);\n }\n}\n\nfunction ddmmyyyy(date) {\n if (date instanceof Date) {\n const offset = date.getTimezoneOffset();\n date = new Date(date.getTime() - offset * 60 * 1000);\n\n let dd = date.getDate();\n let mm = date.getMonth() + 1;\n let yyyy = date.getFullYear();\n\n if (dd < 10) {\n dd = \"0\" + dd;\n }\n\n if (mm < 10) {\n mm = \"0\" + mm;\n }\n\n return dd + \"/\" + mm + \"/\" + (i18n.language === \"th\" ? yyyy + 543 : yyyy);\n }\n}\n\nfunction ddmmyyyy_noOffset(date) {\n if (date instanceof Date) {\n let dd = date.getDate();\n let mm = date.getMonth() + 1;\n let yyyy = date.getFullYear();\n\n if (dd < 10) {\n dd = \"0\" + dd;\n }\n\n if (mm < 10) {\n mm = \"0\" + mm;\n }\n\n return dd + \"/\" + mm + \"/\" + (i18n.language === \"th\" ? yyyy + 543 : yyyy);\n }\n}\n\nfunction ddmmyyyyhhmm(date) {\n if (date instanceof Date) {\n const offset = date.getTimezoneOffset();\n date = new Date(date.getTime() - offset * 60 * 1000);\n\n let dd = date.getDate();\n let mm = date.getMonth() + 1;\n let yyyy = date.getFullYear();\n let hh = date.getHours();\n let min = date.getMinutes();\n\n if (dd < 10) {\n dd = \"0\" + dd;\n }\n\n if (mm < 10) {\n mm = \"0\" + mm;\n }\n\n if (hh < 10) {\n hh = \"0\" + hh;\n }\n\n if (min < 10) {\n min = \"0\" + min;\n }\n\n return (\n dd +\n \"/\" +\n mm +\n \"/\" +\n (i18n.language === \"th\" ? yyyy + 543 : yyyy) +\n \" \" +\n (hh === \"24\" ? \"00\" : hh) +\n \":\" +\n min\n );\n }\n}\n\nfunction yyyymmddhhmmss(date) {\n if (date instanceof Date) {\n const offset = date.getTimezoneOffset();\n date = new Date(date.getTime() - offset * 60 * 1000);\n\n let dd = date.getDate();\n let mm = date.getMonth() + 1;\n let yyyy = date.getFullYear();\n let hh = date.getHours();\n let min = date.getMinutes();\n let ss = date.getSeconds();\n\n if (dd < 10) {\n dd = \"0\" + dd;\n }\n\n if (mm < 10) {\n mm = \"0\" + mm;\n }\n\n if (hh < 10) {\n hh = \"0\" + hh;\n }\n\n if (min < 10) {\n min = \"0\" + min;\n }\n\n if (ss < 10) {\n ss = \"0\" + ss;\n }\n\n return (\n (i18n.language === \"th\" ? yyyy + 543 : yyyy) +\n \"-\" +\n mm +\n \"-\" +\n dd +\n \" \" +\n (hh === \"24\" ? \"00\" : hh) +\n \":\" +\n min +\n \":\" +\n ss\n );\n }\n}\n\nfunction ddmmmyyyy(date) {\n if (date instanceof Date) {\n const offset = date.getTimezoneOffset();\n date = new Date(date.getTime() - offset * 60 * 1000);\n\n let dd = date.getDate();\n let mmm = i18n.t(lsMonthFull[date.getMonth()]);\n let yyyy = date.getFullYear();\n\n return dd + \" \" + mmm + \" \" + (i18n.language === \"th\" ? yyyy + 543 : yyyy);\n }\n}\n\nfunction toDateTimeString(date) {\n if (date instanceof Date) {\n const offset = date.getTimezoneOffset();\n date = new Date(date.getTime() - offset * 60 * 1000);\n\n return date.toISOString().substring(0, 16);\n }\n}\n\nfunction toDateTimeString_noOffset(date) {\n if (date instanceof Date) {\n return date.toISOString().substring(0, 16);\n }\n}\n\nfunction ddmmyyyyhhmm_noOffset(date) {\n if (date instanceof Date) {\n let dd = date.getDate();\n let mm = date.getMonth() + 1;\n let yyyy = date.getFullYear();\n let hh = date.getHours();\n let min = date.getMinutes();\n\n if (dd < 10) {\n dd = \"0\" + dd;\n }\n\n if (mm < 10) {\n mm = \"0\" + mm;\n }\n\n if (hh < 10) {\n hh = \"0\" + hh;\n }\n\n if (min < 10) {\n min = \"0\" + min;\n }\n\n return (\n dd +\n \"/\" +\n mm +\n \"/\" +\n (i18n.language === \"th\" ? yyyy + 543 : yyyy) +\n \" \" +\n (hh === \"24\" ? \"00\" : hh) +\n \":\" +\n min\n );\n }\n}\n\nfunction ddmmmyyyyhhmm_noOffset(date) {\n if (date instanceof Date) {\n let dd = date.getDate();\n let mmm = i18n.t(lsMonthFull[date.getMonth()]);\n let yyyy = date.getFullYear();\n let hh = date.getHours();\n let min = date.getMinutes();\n\n if (hh < 10) {\n hh = \"0\" + hh;\n }\n\n if (min < 10) {\n min = \"0\" + min;\n }\n\n return (\n dd +\n \" \" +\n mmm +\n \" \" +\n (i18n.language === \"th\" ? yyyy + 543 : yyyy) +\n \", \" +\n (hh === \"24\" ? \"00\" : hh) +\n \":\" +\n min\n );\n }\n}\n\nfunction yyyymmddhhmmss_noOffset(date) {\n if (date instanceof Date) {\n let dd = date.getDate();\n let mm = date.getMonth() + 1;\n let yyyy = date.getFullYear();\n let hh = date.getHours();\n let min = date.getMinutes();\n let ss = date.getSeconds();\n\n if (dd < 10) {\n dd = \"0\" + dd;\n }\n\n if (mm < 10) {\n mm = \"0\" + mm;\n }\n\n if (hh < 10) {\n hh = \"0\" + hh;\n }\n\n if (min < 10) {\n min = \"0\" + min;\n }\n\n if (ss < 10) {\n ss = \"0\" + ss;\n }\n\n return (\n (i18n.language === \"th\" ? yyyy + 543 : yyyy) +\n \"-\" +\n mm +\n \"-\" +\n dd +\n \" \" +\n (hh === \"24\" ? \"00\" : hh) +\n \":\" +\n min +\n \":\" +\n ss\n );\n }\n}\n\nfunction yyyymmdd_noOffset(date) {\n if (date instanceof Date) {\n let dd = date.getDate();\n let mm = date.getMonth() + 1;\n let yyyy = date.getFullYear();\n\n if (dd < 10) {\n dd = \"0\" + dd;\n }\n\n if (mm < 10) {\n mm = \"0\" + mm;\n }\n\n return (i18n.language === \"th\" ? yyyy + 543 : yyyy) + \"-\" + mm + \"-\" + dd;\n }\n}\n\nfunction yyyymmdd_input(date) {\n if (date instanceof Date) {\n let dd = date.getDate();\n let mm = date.getMonth() + 1;\n let yyyy = date.getFullYear();\n\n if (dd < 10) {\n dd = \"0\" + dd;\n }\n\n if (mm < 10) {\n mm = \"0\" + mm;\n }\n\n return (i18n.language === \"th\" ? yyyy + 543 : yyyy) + \"-\" + mm + \"-\" + dd;\n }\n}\n\nfunction hhmm(date) {\n if (date instanceof Date) {\n let hh = date.getHours();\n let min = date.getMinutes();\n\n if (hh < 10) {\n hh = \"0\" + hh;\n }\n\n if (min < 10) {\n min = \"0\" + min;\n }\n\n return (hh === \"24\" ? \"00\" : hh) + \":\" + min;\n }\n}\n\nconst dateFormatter = {\n mmyyyy,\n ddmmyyyy,\n ddmmyyyy_noOffset,\n ddmmyyyyhhmm,\n yyyymmddhhmmss,\n ddmmmyyyy,\n toDateTimeString,\n toDateTimeString_noOffset,\n ddmmyyyyhhmm_noOffset,\n ddmmmyyyyhhmm_noOffset,\n yyyymmddhhmmss_noOffset,\n yyyymmdd_noOffset,\n yyyymmdd_input,\n hhmm,\n};\n\nexport default dateFormatter;\n","import React from \"react\";\nimport \"./LineChartBuildingPowerConsumption.css\";\n\nimport { Chart, registerables } from \"chart.js\";\nimport zoomPlugin from \"chartjs-plugin-zoom\";\nimport \"chartjs-adapter-moment\";\n\nimport tooltipHandler from \"../../../utils/tooltipHandler\";\n\nimport { withTranslation } from \"react-i18next\";\nimport i18n from \"../../../i18n\";\n\nlet lineChart;\n\nclass LineChartBuildingPowerConsumption extends React.Component {\n constructor(props) {\n super(props);\n\n let today = new Date();\n let xMin = new Date(\n today.getFullYear(),\n today.getMonth(),\n today.getDate(),\n 0,\n 0,\n 0,\n 0\n );\n\n this.state = {\n lsBuilding: this.props.lsBuilding,\n lsSelectedBuildingPrev: [],\n componentShouldUpdate: true,\n currentLanguage: i18n.language,\n\n // Chart details\n data: {},\n options: {\n responsive: true,\n animation: false,\n maintainAspectRatio: false,\n interaction: {\n intersect: false,\n axis: \"x\",\n mode: \"index\",\n },\n scales: {\n xAxis: {\n type: \"time\",\n time: {\n displayFormats: {\n millisecond: \"HH:mm:ss.SSS\",\n second: \"HH:mm:ss\",\n minute: \"HH:mm\",\n hour: \"HH:mm\",\n },\n },\n grid: {\n display: false,\n },\n },\n yAxis: {\n min: 0,\n max: 100,\n display: true,\n grid: {\n display: false,\n },\n },\n },\n plugins: {\n title: {\n display: true,\n text: \"Power Demand by Building (kW)\",\n align: \"start\",\n font: { weight: \"bold\", size: 14 },\n padding: {\n bottom: 10,\n },\n },\n legend: {\n display: false,\n },\n tooltip: {\n enabled: false,\n external: tooltipHandler.tooltipHandlerRight_100_top_100,\n },\n zoom: {\n pan: {\n enabled: true,\n mode: \"xy\",\n },\n zoom: {\n wheel: { enabled: true },\n pinch: { enabled: true },\n mode: \"xy\",\n speed: 2,\n },\n limits: {\n x: { min: xMin, max: today },\n y: { min: \"original\", max: \"original\" },\n },\n },\n },\n },\n };\n\n this.handleDoubleClick = this.handleDoubleClick.bind(this);\n }\n\n buildChart = () => {\n let { data, options } = this.state;\n let dt = JSON.parse(JSON.stringify(data));\n let opt = JSON.parse(JSON.stringify(options));\n\n opt.plugins.zoom.limits.x.min = new Date(opt.plugins.zoom.limits.x.min);\n opt.plugins.zoom.limits.x.max = new Date(opt.plugins.zoom.limits.x.max);\n\n opt.plugins.title.text = i18n.t(opt.plugins.title.text);\n opt.plugins.tooltip = {\n enabled: false,\n external: tooltipHandler.tooltipHandlerRight_100_top_100,\n };\n\n dt.datasets.forEach((ds) => (ds.label = i18n.t(ds.label)));\n\n document.getElementById(\"lc-building-power\").remove();\n document.getElementById(\n \"wrapper-lc-building-power\"\n ).innerHTML = ``;\n\n let ctx = document.getElementById(\"lc-building-power\").getContext(\"2d\");\n\n lineChart = new Chart(ctx, {\n type: \"line\",\n data: dt,\n options: opt,\n });\n };\n\n componentDidMount() {\n Chart.register(...registerables);\n Chart.register(zoomPlugin);\n }\n\n componentWillReceiveProps(nextProps) {\n let { data, options, lsSelectedBuildingPrev, currentLanguage } = this.state;\n\n if (currentLanguage !== i18n.language) {\n this.setState({ currentLanguage: i18n.language }, () =>\n this.buildChart()\n );\n }\n\n if (\n JSON.stringify(this.props.lsKw_system_building) ===\n JSON.stringify(nextProps.lsKw_system_building) &&\n JSON.stringify(lsSelectedBuildingPrev) ===\n JSON.stringify(nextProps.lsSelectedBuilding) &&\n Object.values(data).length > 0\n ) {\n return;\n }\n\n let lsKw_system_building = {};\n Object.assign(lsKw_system_building, nextProps.lsKw_system_building);\n\n let lsSelectedBuilding = nextProps.lsSelectedBuilding.slice();\n let lsBuilding = nextProps.lsBuilding;\n\n if (Object.keys(lsKw_system_building).length <= 1) return;\n\n let labels = [];\n let datasets = [];\n\n let yMax = 1;\n\n for (let [building, lsKw_system] of Object.entries(lsKw_system_building)) {\n let color = lsBuilding.find((b) => b.label === building).color_code;\n\n let dataset = {\n label: building,\n fill: false,\n borderColor: color,\n backgroundColor: color,\n borderWidth: 2,\n spanGaps: true,\n pointRadius: 2,\n };\n\n let data = [];\n let prevDatetime;\n\n for (let logKwMain of lsKw_system[\"Main\"]) {\n let datetime = new Date(logKwMain.datetime);\n let kw = logKwMain.kw;\n\n if (datasets.length === 0) {\n if (!labels.find((d) => d.getTime() === datetime.getTime())) {\n labels.push(new Date(datetime));\n }\n }\n\n if (!lsSelectedBuilding.includes(building)) {\n prevDatetime = datetime;\n continue;\n }\n\n if (prevDatetime) {\n if (datetime.getTime() === prevDatetime.getTime()) {\n data[data.length - 1] += kw;\n\n if (data[data.length - 1] > yMax) yMax = data[data.length - 1];\n } else data.push(kw);\n } else data.push(kw);\n\n if (kw > yMax) yMax = kw;\n\n prevDatetime = datetime;\n }\n\n dataset.data = data;\n\n if (!lsSelectedBuilding.includes(building)) dataset = {};\n\n datasets.push(dataset);\n }\n\n data.labels = labels;\n data.datasets = datasets;\n\n options.scales.xAxis.min = labels[0];\n options.scales.xAxis.max = labels[labels.length - 1];\n options.scales.yAxis.max = yMax + 10;\n\n this.setState({\n data: data,\n options: options,\n componentShouldUpdate: true,\n lsSelectedBuildingPrev: lsSelectedBuilding,\n });\n\n this.buildChart();\n }\n\n shouldComponentUpdate() {\n return this.state.componentShouldUpdate;\n }\n\n componentDidUpdate() {\n this.setState({ componentShouldUpdate: false });\n }\n\n handleDoubleClick() {\n if (lineChart) lineChart.resetZoom();\n }\n\n render() {\n return (\n \n \n \n );\n }\n}\n\nexport default withTranslation()(LineChartBuildingPowerConsumption);\n","import React from \"react\";\nimport \"./BarChartSystemPowerConsumption.css\";\n\nimport { Chart, registerables } from \"chart.js\";\nimport zoomPlugin from \"chartjs-plugin-zoom\";\nimport \"chartjs-adapter-moment\";\n\nimport dateFormatter from \"../../../utils/dateFormatter\";\nimport i18n from \"../../../i18n\";\n\nlet barChart;\n\nclass BarChartSystemPowerConsumption extends React.Component {\n constructor(props) {\n super(props);\n\n let today = new Date();\n let xMin = new Date(\n today.getFullYear(),\n today.getMonth(),\n today.getDate(),\n 0,\n 0,\n 0,\n 0\n );\n\n this.state = {\n lsBuilding: this.props.lsBuilding,\n lsSelectedBuildingPrev: [],\n componentShouldUpdate: true,\n currentLanguage: i18n.language,\n\n // Chart details\n data: {},\n options: {\n responsive: true,\n animation: false,\n maintainAspectRatio: false,\n interaction: {\n intersect: false,\n axis: \"xy\",\n mode: \"index\",\n },\n scales: {\n xAxis: {\n type: \"time\",\n time: {\n displayFormats: {\n millisecond: \"HH:mm:ss.SSS\",\n second: \"HH:mm:ss\",\n minute: \"HH:mm\",\n hour: \"HH:mm\",\n },\n },\n grid: {\n display: false,\n },\n stacked: true,\n },\n yAxis: {\n min: 0,\n max: 100,\n display: true,\n grid: {\n display: false,\n },\n stacked: true,\n },\n },\n plugins: {\n title: {\n display: true,\n text: \"Air Conditioner vs Other Systems (kW)\",\n align: \"start\",\n font: { weight: \"bold\", size: 14 },\n padding: {\n bottom: 10,\n },\n },\n legend: {\n display: true,\n position: \"top\",\n labels: { usePointStyle: true },\n },\n tooltip: {\n enabled: true,\n padding: 14,\n backgroundColor: \"#F2F2F2\",\n titleColor: \"#000\",\n bodyColor: \"#000\",\n titleFont: { size: 18 },\n bodyFont: { size: 16 },\n },\n zoom: {\n pan: {\n enabled: true,\n mode: \"xy\",\n },\n zoom: {\n wheel: { enabled: true },\n pinch: { enabled: true },\n mode: \"xy\",\n speed: 2,\n },\n limits: {\n x: { min: xMin, max: today },\n y: { min: \"original\", max: \"original\" },\n },\n },\n },\n },\n };\n\n this.handleDoubleClick = this.handleDoubleClick.bind(this);\n }\n\n buildChart = () => {\n let { data, options } = this.state;\n let dt = JSON.parse(JSON.stringify(data));\n let opt = JSON.parse(JSON.stringify(options));\n\n opt.plugins.zoom.limits.x.min = new Date(opt.plugins.zoom.limits.x.min);\n opt.plugins.zoom.limits.x.max = new Date(opt.plugins.zoom.limits.x.max);\n\n opt.plugins.title.text = i18n.t(opt.plugins.title.text);\n opt.plugins.tooltip.callbacks = {\n title: function (context) {\n return dateFormatter.ddmmmyyyyhhmm_noOffset(new Date(context[0].label));\n },\n };\n\n dt.datasets.forEach((ds) => (ds.label = i18n.t(ds.label)));\n\n document.getElementById(\"bc-system-power\").remove();\n document.getElementById(\n \"wrapper-bc-system-power\"\n ).innerHTML = ``;\n\n let ctx = document.getElementById(\"bc-system-power\").getContext(\"2d\");\n\n barChart = new Chart(ctx, {\n type: \"bar\",\n data: dt,\n options: opt,\n });\n };\n\n componentDidMount() {\n Chart.register(...registerables);\n Chart.register(zoomPlugin);\n }\n\n componentWillReceiveProps(nextProps) {\n let { data, options, lsSelectedBuildingPrev, currentLanguage } = this.state;\n\n if (currentLanguage !== i18n.language) {\n this.setState({ currentLanguage: i18n.language }, () =>\n this.buildChart()\n );\n }\n\n if (\n JSON.stringify(this.props.lsKw_system_building) ===\n JSON.stringify(nextProps.lsKw_system_building) &&\n JSON.stringify(lsSelectedBuildingPrev) ===\n JSON.stringify(nextProps.lsSelectedBuilding) &&\n Object.values(data).length > 0\n ) {\n return;\n }\n\n let lsKw_system_building = {};\n Object.assign(lsKw_system_building, nextProps.lsKw_system_building);\n\n let lsSelectedBuilding = nextProps.lsSelectedBuilding.slice();\n\n if (Object.keys(lsKw_system_building).length <= 1) return;\n\n let labels = [];\n let datasets = [];\n\n let building_lsKwMain = {};\n let building_lsKwAc = {};\n\n for (let [building, lsKw_system] of Object.entries(lsKw_system_building)) {\n if (!lsSelectedBuilding.includes(building)) continue;\n\n if (!building_lsKwMain[building]) building_lsKwMain[building] = [];\n if (!building_lsKwAc[building]) building_lsKwAc[building] = [];\n\n let lsKwMain = building_lsKwMain[building];\n let lsKwAc = building_lsKwAc[building];\n\n let prevDatetime;\n for (let logKwMain of lsKw_system[\"Main\"]) {\n let datetime = new Date(logKwMain.datetime);\n let kw = logKwMain.kw;\n\n if (!labels.find((d) => d.getTime() === datetime.getTime())) {\n labels.push(new Date(datetime));\n }\n\n if (!lsSelectedBuilding.includes(building)) {\n prevDatetime = datetime;\n continue;\n }\n\n if (prevDatetime) {\n if (datetime.getTime() === prevDatetime.getTime()) {\n lsKwMain[lsKwMain.length - 1] += kw;\n } else lsKwMain.push(kw);\n } else lsKwMain.push(kw);\n\n prevDatetime = datetime;\n }\n\n // Fill AC array with zeroes if no AC kw readings\n if (!lsKw_system[\"Air Conditioner\"]) {\n let lengthDiff = lsKwMain.length - lsKwAc.length;\n building_lsKwAc[building] = lsKwAc.concat(Array(lengthDiff).fill(0));\n continue;\n }\n\n for (let logKwAc of lsKw_system[\"Air Conditioner\"]) {\n let datetime = new Date(logKwAc.datetime);\n let kw = logKwAc.kw;\n\n if (prevDatetime) {\n if (datetime.getTime() === prevDatetime.getTime()) {\n lsKwAc[lsKwAc.length - 1] += kw;\n } else lsKwAc.push(kw);\n } else lsKwAc.push(kw);\n\n prevDatetime = datetime;\n }\n }\n\n let lsKwOthers = [];\n let lsKwAc = [];\n\n let yMax = 0;\n for (let [building, lsKwMain] of Object.entries(building_lsKwMain)) {\n lsKwMain.forEach((kwMain, idx) => {\n if (!lsKwOthers[idx]) lsKwOthers[idx] = 0;\n lsKwOthers[idx] += kwMain;\n\n if (lsKwOthers[idx] > yMax) yMax = lsKwOthers[idx];\n });\n\n building_lsKwAc[building].forEach((kwAc, idx) => {\n if (!lsKwAc[idx]) lsKwAc[idx] = 0;\n lsKwAc[idx] += kwAc;\n });\n }\n\n lsKwAc.forEach(\n (kwAc, idx) => (lsKwOthers[idx] = Math.abs(lsKwOthers[idx] - kwAc))\n );\n\n let datasetAc = {\n label: \"Air Conditioner\",\n backgroundColor: \"#4672C6\",\n borderColor: \"#4672C6\",\n data: lsKwAc,\n };\n\n let datasetOthers = {\n label: \"Others\",\n backgroundColor: \"#FDD764\",\n borderColor: \"#FDD764\",\n data: lsKwOthers,\n };\n\n datasets.push(datasetAc, datasetOthers);\n\n data.labels = labels;\n data.datasets = datasets;\n\n options.scales.xAxis.min = labels[0];\n options.scales.xAxis.max = labels[labels.length - 1];\n options.scales.yAxis.max = yMax;\n\n this.setState({\n data: data,\n options: options,\n componentShouldUpdate: true,\n lsSelectedBuildingPrev: lsSelectedBuilding,\n });\n\n this.buildChart();\n }\n\n shouldComponentUpdate() {\n return this.state.componentShouldUpdate;\n }\n\n componentDidUpdate() {\n this.setState({ componentShouldUpdate: false });\n }\n\n handleDoubleClick() {\n if (barChart) barChart.resetZoom();\n }\n\n render() {\n return (\n
\n \n
\n );\n }\n}\n\nexport default BarChartSystemPowerConsumption;\n","import dateFormatter from \"./dateFormatter\";\n\n//Custom Tooltip\nconst getOrCreateTooltip = (chart) => {\n\tlet tooltipEl = chart.canvas.parentNode.querySelector(\"div\");\n\n\tif (!tooltipEl) {\n\t\ttooltipEl = document.createElement(\"div\");\n\t\ttooltipEl.style.background = \"#F2F2F2\";\n\t\ttooltipEl.style.borderRadius = \"3px\";\n\t\ttooltipEl.style.color = \"black\";\n\t\ttooltipEl.style.opacity = 1;\n\t\ttooltipEl.style.position = \"absolute\";\n\t\ttooltipEl.style.transform = \"translate(20%, -50%)\";\n\t\ttooltipEl.style.transition = \"all .1s ease\";\n\t\ttooltipEl.style.zIndex = \"99999\";\n\n\t\tconst table = document.createElement(\"table\");\n\t\ttable.style.margin = \"0px\";\n\n\t\ttooltipEl.appendChild(table);\n\t\tchart.canvas.parentNode.appendChild(tooltipEl);\n\t}\n\n\treturn tooltipEl;\n};\n\nconst tooltipHandlerRight_100_top_100 = (context) => {\n\t// Tooltip Element\n\tconst { chart, tooltip } = context;\n\tconst tooltipEl = getOrCreateTooltip(chart);\n\n\t// Hide if no tooltip\n\tif (tooltip.opacity === 0) {\n\t\ttooltipEl.style.opacity = 0;\n\t\treturn;\n\t}\n\n\t// Set Text\n\tif (tooltip.body) {\n\t\tconst titleLines = tooltip.title || [];\n\t\tconst bodyLines = tooltip.body.map((b) => b.lines);\n\n\t\tconst tableHead = document.createElement(\"thead\");\n\t\ttableHead.style.fontSize = 18;\n\n\t\ttitleLines.forEach((title) => {\n\t\t\tconst tr = document.createElement(\"tr\");\n\t\t\ttr.style.borderWidth = 0;\n\n\t\t\tconst th = document.createElement(\"th\");\n\t\t\tth.style.borderWidth = 0;\n\t\t\tconst text = document.createTextNode(\n\t\t\t\tdateFormatter.ddmmmyyyyhhmm_noOffset(new Date(title))\n\t\t\t);\n\n\t\t\tth.appendChild(text);\n\t\t\ttr.appendChild(th);\n\t\t\ttableHead.appendChild(tr);\n\t\t});\n\n\t\tconst tableBody = document.createElement(\"tbody\");\n\t\tbodyLines.forEach((body, i) => {\n\t\t\tconst colors = tooltip.labelColors[i];\n\n\t\t\tconst span = document.createElement(\"span\");\n\t\t\tspan.style.background = colors.backgroundColor;\n\t\t\tspan.style.borderColor = colors.borderColor;\n\t\t\tspan.style.borderWidth = \"2px\";\n\t\t\tspan.style.marginRight = \"10px\";\n\t\t\tspan.style.height = \"16px\";\n\t\t\tspan.style.width = \"16px\";\n\t\t\tspan.style.display = \"inline-block\";\n\n\t\t\tconst tr = document.createElement(\"tr\");\n\t\t\ttr.style.backgroundColor = \"inherit\";\n\t\t\ttr.style.borderWidth = 0;\n\n\t\t\tconst td = document.createElement(\"td\");\n\t\t\ttd.style.borderWidth = 0;\n\t\t\ttd.style.fontSize = 16;\n\n\t\t\tconst text = document.createTextNode(body);\n\n\t\t\ttd.appendChild(span);\n\t\t\ttd.appendChild(text);\n\t\t\ttr.appendChild(td);\n\t\t\ttableBody.appendChild(tr);\n\t\t});\n\n\t\tconst tableRoot = tooltipEl.querySelector(\"table\");\n\n\t\t// Remove old children\n\t\twhile (tableRoot.firstChild) {\n\t\t\ttableRoot.firstChild.remove();\n\t\t}\n\n\t\t// Add new children\n\t\ttableRoot.appendChild(tableHead);\n\t\ttableRoot.appendChild(tableBody);\n\t}\n\n\tconst { offsetLeft: positionX, offsetTop: positionY } = chart.canvas;\n\n\t// Display, position, and set styles for font\n\ttooltipEl.style.opacity = 1;\n\ttooltipEl.style.left = positionX + (tooltip.caretX + 100) + \"px\";\n\ttooltipEl.style.top = positionY + (tooltip.caretY - 100) + \"px\";\n\ttooltipEl.style.font = tooltip.options.bodyFont.string;\n\ttooltipEl.style.padding =\n\t\ttooltip.options.padding + \"px \" + tooltip.options.padding + \"px\";\n\ttooltipEl.style.width = \"fit-content\";\n};\n\nconst tooltipHandler = {\n\ttooltipHandlerRight_100_top_100,\n};\n\nexport default tooltipHandler;\n","class Color {\n\tconstructor(r, g, b) {\n\t\tthis.set(r, g, b);\n\t}\n\n\ttoString() {\n\t\treturn `rgb(${Math.round(this.r)}, ${Math.round(this.g)}, ${Math.round(\n\t\t\tthis.b\n\t\t)})`;\n\t}\n\n\tset(r, g, b) {\n\t\tthis.r = this.clamp(r);\n\t\tthis.g = this.clamp(g);\n\t\tthis.b = this.clamp(b);\n\t}\n\n\thueRotate(angle = 0) {\n\t\tangle = (angle / 180) * Math.PI;\n\t\tconst sin = Math.sin(angle);\n\t\tconst cos = Math.cos(angle);\n\n\t\tthis.multiply([\n\t\t\t0.213 + cos * 0.787 - sin * 0.213,\n\t\t\t0.715 - cos * 0.715 - sin * 0.715,\n\t\t\t0.072 - cos * 0.072 + sin * 0.928,\n\t\t\t0.213 - cos * 0.213 + sin * 0.143,\n\t\t\t0.715 + cos * 0.285 + sin * 0.14,\n\t\t\t0.072 - cos * 0.072 - sin * 0.283,\n\t\t\t0.213 - cos * 0.213 - sin * 0.787,\n\t\t\t0.715 - cos * 0.715 + sin * 0.715,\n\t\t\t0.072 + cos * 0.928 + sin * 0.072,\n\t\t]);\n\t}\n\n\tgrayscale(value = 1) {\n\t\tthis.multiply([\n\t\t\t0.2126 + 0.7874 * (1 - value),\n\t\t\t0.7152 - 0.7152 * (1 - value),\n\t\t\t0.0722 - 0.0722 * (1 - value),\n\t\t\t0.2126 - 0.2126 * (1 - value),\n\t\t\t0.7152 + 0.2848 * (1 - value),\n\t\t\t0.0722 - 0.0722 * (1 - value),\n\t\t\t0.2126 - 0.2126 * (1 - value),\n\t\t\t0.7152 - 0.7152 * (1 - value),\n\t\t\t0.0722 + 0.9278 * (1 - value),\n\t\t]);\n\t}\n\n\tsepia(value = 1) {\n\t\tthis.multiply([\n\t\t\t0.393 + 0.607 * (1 - value),\n\t\t\t0.769 - 0.769 * (1 - value),\n\t\t\t0.189 - 0.189 * (1 - value),\n\t\t\t0.349 - 0.349 * (1 - value),\n\t\t\t0.686 + 0.314 * (1 - value),\n\t\t\t0.168 - 0.168 * (1 - value),\n\t\t\t0.272 - 0.272 * (1 - value),\n\t\t\t0.534 - 0.534 * (1 - value),\n\t\t\t0.131 + 0.869 * (1 - value),\n\t\t]);\n\t}\n\n\tsaturate(value = 1) {\n\t\tthis.multiply([\n\t\t\t0.213 + 0.787 * value,\n\t\t\t0.715 - 0.715 * value,\n\t\t\t0.072 - 0.072 * value,\n\t\t\t0.213 - 0.213 * value,\n\t\t\t0.715 + 0.285 * value,\n\t\t\t0.072 - 0.072 * value,\n\t\t\t0.213 - 0.213 * value,\n\t\t\t0.715 - 0.715 * value,\n\t\t\t0.072 + 0.928 * value,\n\t\t]);\n\t}\n\n\tmultiply(matrix) {\n\t\tconst newR = this.clamp(\n\t\t\tthis.r * matrix[0] + this.g * matrix[1] + this.b * matrix[2]\n\t\t);\n\t\tconst newG = this.clamp(\n\t\t\tthis.r * matrix[3] + this.g * matrix[4] + this.b * matrix[5]\n\t\t);\n\t\tconst newB = this.clamp(\n\t\t\tthis.r * matrix[6] + this.g * matrix[7] + this.b * matrix[8]\n\t\t);\n\t\tthis.r = newR;\n\t\tthis.g = newG;\n\t\tthis.b = newB;\n\t}\n\n\tbrightness(value = 1) {\n\t\tthis.linear(value);\n\t}\n\tcontrast(value = 1) {\n\t\tthis.linear(value, -(0.5 * value) + 0.5);\n\t}\n\n\tlinear(slope = 1, intercept = 0) {\n\t\tthis.r = this.clamp(this.r * slope + intercept * 255);\n\t\tthis.g = this.clamp(this.g * slope + intercept * 255);\n\t\tthis.b = this.clamp(this.b * slope + intercept * 255);\n\t}\n\n\tinvert(value = 1) {\n\t\tthis.r = this.clamp((value + (this.r / 255) * (1 - 2 * value)) * 255);\n\t\tthis.g = this.clamp((value + (this.g / 255) * (1 - 2 * value)) * 255);\n\t\tthis.b = this.clamp((value + (this.b / 255) * (1 - 2 * value)) * 255);\n\t}\n\n\thsl() {\n\t\t// Code taken from https://stackoverflow.com/a/9493060/2688027, licensed under CC BY-SA.\n\t\tconst r = this.r / 255;\n\t\tconst g = this.g / 255;\n\t\tconst b = this.b / 255;\n\t\tconst max = Math.max(r, g, b);\n\t\tconst min = Math.min(r, g, b);\n\t\tlet h,\n\t\t\ts,\n\t\t\tl = (max + min) / 2;\n\n\t\tif (max === min) {\n\t\t\th = s = 0;\n\t\t} else {\n\t\t\tconst d = max - min;\n\t\t\ts = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\t\t\tswitch (max) {\n\t\t\t\tcase r:\n\t\t\t\t\th = (g - b) / d + (g < b ? 6 : 0);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase g:\n\t\t\t\t\th = (b - r) / d + 2;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase b:\n\t\t\t\t\th = (r - g) / d + 4;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\th /= 6;\n\t\t}\n\n\t\treturn {\n\t\t\th: h * 100,\n\t\t\ts: s * 100,\n\t\t\tl: l * 100,\n\t\t};\n\t}\n\n\tclamp(value) {\n\t\tif (value > 255) {\n\t\t\tvalue = 255;\n\t\t} else if (value < 0) {\n\t\t\tvalue = 0;\n\t\t}\n\t\treturn value;\n\t}\n}\n\nclass Solver {\n\tconstructor(target, baseColor) {\n\t\tthis.target = target;\n\t\tthis.targetHSL = target.hsl();\n\t\tthis.reusedColor = new Color(0, 0, 0);\n\t}\n\n\tsolve() {\n\t\tconst result = this.solveNarrow(this.solveWide());\n\t\treturn {\n\t\t\tvalues: result.values,\n\t\t\tloss: result.loss,\n\t\t\tfilter: this.css(result.values),\n\t\t};\n\t}\n\n\tsolveWide() {\n\t\tconst A = 5;\n\t\tconst c = 15;\n\t\tconst a = [60, 180, 18000, 600, 1.2, 1.2];\n\n\t\tlet best = { loss: Infinity };\n\t\tfor (let i = 0; best.loss > 25 && i < 3; i++) {\n\t\t\tconst initial = [50, 20, 3750, 50, 100, 100];\n\t\t\tconst result = this.spsa(A, a, c, initial, 1000);\n\t\t\tif (result.loss < best.loss) {\n\t\t\t\tbest = result;\n\t\t\t}\n\t\t}\n\t\treturn best;\n\t}\n\n\tsolveNarrow(wide) {\n\t\tconst A = wide.loss;\n\t\tconst c = 2;\n\t\tconst A1 = A + 1;\n\t\tconst a = [0.25 * A1, 0.25 * A1, A1, 0.25 * A1, 0.2 * A1, 0.2 * A1];\n\t\treturn this.spsa(A, a, c, wide.values, 500);\n\t}\n\n\tspsa(A, a, c, values, iters) {\n\t\tconst alpha = 1;\n\t\tconst gamma = 0.16666666666666666;\n\n\t\tlet best = null;\n\t\tlet bestLoss = Infinity;\n\t\tconst deltas = new Array(6);\n\t\tconst highArgs = new Array(6);\n\t\tconst lowArgs = new Array(6);\n\n\t\tfor (let k = 0; k < iters; k++) {\n\t\t\tconst ck = c / Math.pow(k + 1, gamma);\n\t\t\tfor (let i = 0; i < 6; i++) {\n\t\t\t\tdeltas[i] = Math.random() > 0.5 ? 1 : -1;\n\t\t\t\thighArgs[i] = values[i] + ck * deltas[i];\n\t\t\t\tlowArgs[i] = values[i] - ck * deltas[i];\n\t\t\t}\n\n\t\t\tconst lossDiff = this.loss(highArgs) - this.loss(lowArgs);\n\t\t\tfor (let i = 0; i < 6; i++) {\n\t\t\t\tconst g = (lossDiff / (2 * ck)) * deltas[i];\n\t\t\t\tconst ak = a[i] / Math.pow(A + k + 1, alpha);\n\t\t\t\tvalues[i] = fix(values[i] - ak * g, i);\n\t\t\t}\n\n\t\t\tconst loss = this.loss(values);\n\t\t\tif (loss < bestLoss) {\n\t\t\t\tbest = values.slice(0);\n\t\t\t\tbestLoss = loss;\n\t\t\t}\n\t\t}\n\t\treturn { values: best, loss: bestLoss };\n\n\t\tfunction fix(value, idx) {\n\t\t\tlet max = 100;\n\t\t\tif (idx === 2 /* saturate */) {\n\t\t\t\tmax = 7500;\n\t\t\t} else if (idx === 4 /* brightness */ || idx === 5 /* contrast */) {\n\t\t\t\tmax = 200;\n\t\t\t}\n\n\t\t\tif (idx === 3 /* hue-rotate */) {\n\t\t\t\tif (value > max) {\n\t\t\t\t\tvalue %= max;\n\t\t\t\t} else if (value < 0) {\n\t\t\t\t\tvalue = max + (value % max);\n\t\t\t\t}\n\t\t\t} else if (value < 0) {\n\t\t\t\tvalue = 0;\n\t\t\t} else if (value > max) {\n\t\t\t\tvalue = max;\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\t}\n\n\tloss(filters) {\n\t\t// Argument is array of percentages.\n\t\tconst color = this.reusedColor;\n\t\tcolor.set(0, 0, 0);\n\n\t\tcolor.invert(filters[0] / 100);\n\t\tcolor.sepia(filters[1] / 100);\n\t\tcolor.saturate(filters[2] / 100);\n\t\tcolor.hueRotate(filters[3] * 3.6);\n\t\tcolor.brightness(filters[4] / 100);\n\t\tcolor.contrast(filters[5] / 100);\n\n\t\tconst colorHSL = color.hsl();\n\t\treturn (\n\t\t\tMath.abs(color.r - this.target.r) +\n\t\t\tMath.abs(color.g - this.target.g) +\n\t\t\tMath.abs(color.b - this.target.b) +\n\t\t\tMath.abs(colorHSL.h - this.targetHSL.h) +\n\t\t\tMath.abs(colorHSL.s - this.targetHSL.s) +\n\t\t\tMath.abs(colorHSL.l - this.targetHSL.l)\n\t\t);\n\t}\n\n\tcss(filters) {\n\t\tfunction fmt(idx, multiplier = 1) {\n\t\t\treturn Math.round(filters[idx] * multiplier);\n\t\t}\n\t\treturn `invert(${fmt(0)}%) sepia(${fmt(1)}%) saturate(${fmt(\n\t\t\t2\n\t\t)}%) hue-rotate(${fmt(3, 3.6)}deg) brightness(${fmt(4)}%) contrast(${fmt(\n\t\t\t5\n\t\t)}%);`;\n\t}\n}\n\nfunction hexToRgb(hex) {\n\t// Expand shorthand form (e.g. \"03F\") to full form (e.g. \"0033FF\")\n\tconst shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n\thex = hex.replace(shorthandRegex, (m, r, g, b) => {\n\t\treturn r + r + g + g + b + b;\n\t});\n\n\tconst result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n\treturn result\n\t\t? [\n\t\t\t\tparseInt(result[1], 16),\n\t\t\t\tparseInt(result[2], 16),\n\t\t\t\tparseInt(result[3], 16),\n\t\t ]\n\t\t: \"\";\n}\n\nfunction getFilterFromHex(hex) {\n\tlet rgb = hexToRgb(hex);\n\tif (rgb.length !== 3) return;\n\n\tlet color = new Color(rgb[0], rgb[1], rgb[2]);\n\tlet solver = new Solver(color);\n\n\tlet loss = 1000;\n\tlet result;\n\tfor (let i = 0; i <= 10; i++) {\n\t\tresult = solver.solve();\n\t\tloss = result.loss;\n\n\t\tif (loss <= 2) break;\n\t}\n\n\tif (loss <= 2) return result.filter;\n\n\treturn;\n}\n\nfunction pickHex(color1, color2, ratio) {\n\tlet r = Math.ceil(\n\t\tparseInt(color1.substring(0, 2), 16) * ratio +\n\t\t\tparseInt(color2.substring(0, 2), 16) * (1 - ratio)\n\t);\n\tlet g = Math.ceil(\n\t\tparseInt(color1.substring(2, 4), 16) * ratio +\n\t\t\tparseInt(color2.substring(2, 4), 16) * (1 - ratio)\n\t);\n\tlet b = Math.ceil(\n\t\tparseInt(color1.substring(4, 6), 16) * ratio +\n\t\t\tparseInt(color2.substring(4, 6), 16) * (1 - ratio)\n\t);\n\n\treturn hex(r) + hex(g) + hex(b);\n}\n\nfunction hex(x) {\n\tx = x.toString(16);\n\treturn x.length === 1 ? \"0\" + x : x;\n}\n\nconst colorConverter = { getFilterFromHex, pickHex };\n\nexport default colorConverter;\n","function withCommas(x) {\n\treturn x.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n}\n\nconst numberFormatter = {\n\twithCommas,\n};\n\nexport default numberFormatter;\n","import React from \"react\";\n\n// API Service\nimport {\n subjectPowerMeterData,\n subjectSolarData,\n apiService,\n} from \"../../apiService\";\n\n// Charts and Diagrams\nimport PieChartEnergySource from \"./PieChartEnergySource/PieChartEnergySource\";\nimport PieChartSystem from \"./PieChartSystem/PieChartSystem\";\nimport LineChartBuildingPowerConsumption from \"./LineChartBuildingPowerConsumption/LineChartBuildingPowerConsumption\";\nimport BarChartSystemPowerConsumption from \"./BarChartSystemPowerConsumption/BarChartSystemPowerConsumption\";\n\n// Styling and Media\nimport \"./Home.css\";\nimport { Container, Row, Col, Progress } from \"reactstrap\";\nimport { IoMdPeople } from \"react-icons/io\";\nimport { ReactSVG } from \"react-svg\";\n\n// Utils\nimport http from \"../../utils/http\";\nimport colorConverter from \"../../utils/colorConverter\";\nimport numberFormatter from \"../../utils/numberFormatter\";\n\nimport { withTranslation } from \"react-i18next\";\n\nlet subscriberPowerMeterData;\nlet subscriberSolarData;\n\nclass Home extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n lsSelectedBuilding: [],\n lsSystem: [],\n tariff_building: {},\n kwh_system_building: {},\n lsKw_system_building: {},\n bill_building: {},\n targetBill_building: {},\n monthKwh_system_building: {},\n kwhSolar: 0,\n kwhSolarMonth: 0,\n lsBuilding: [],\n currentTime: new Date()\n .toLocaleString([], {\n hour: \"2-digit\",\n minute: \"2-digit\",\n hour12: false,\n })\n .replace(\"24:\", \"00:\"),\n buildingPath: window.location.origin + \"/building/\", // For Building Images\n propsPath: window.location.origin + \"/props/\", // For Props Images\n isDisplayBill: false,\n visitors: 0,\n };\n\n this.getAllSystem = this.getAllSystem.bind(this);\n this.getAllTargetByMonthYear = this.getAllTargetByMonthYear.bind(this);\n this.getAllBuilding = this.getAllBuilding.bind(this);\n this.onClickBuilding = this.onClickBuilding.bind(this);\n this.getPowerUsedCurrentMonthBuilding =\n this.getPowerUsedCurrentMonthBuilding.bind(this);\n this.getSolarCurrentMonth = this.getSolarCurrentMonth.bind(this);\n this.toggleDisplayBill = this.toggleDisplayBill.bind(this);\n this.onDoubleClickBuilding = this.onDoubleClickBuilding.bind(this);\n this.getVisitors = this.getVisitors.bind(this);\n }\n\n async componentDidMount() {\n await this.getAllSystem();\n await this.getAllTargetByMonthYear();\n await this.getPowerUsedCurrentMonthBuilding();\n await this.getAllBuilding();\n await this.getSolarCurrentMonth();\n await this.getVisitors();\n\n let today = new Date();\n let dateStart = new Date(\n today.getFullYear(),\n today.getMonth(),\n today.getDate(),\n 0,\n 0,\n 0\n );\n let dateEnd = new Date();\n\n apiService.updatePowerMeterData(dateStart, dateEnd);\n apiService.updateSolarData(dateStart, dateEnd);\n\n subscriberPowerMeterData = subjectPowerMeterData.subscribe((dataPower) => {\n let { tariff_building } = this.state;\n let kwh_system_building = {};\n let lsKw_system_building = {};\n let bill_building = {};\n\n if (!dataPower) return;\n\n let lsDeviceFirst = [];\n let lsDeviceLast = [];\n\n for (let data of dataPower.slice().reverse()) {\n let building = data.building;\n let device = data.device;\n let kwh = Math.round((data.kwh * 100) / 100);\n let system = data.system;\n let floor = data.floor;\n\n if (system === \"Main\" && floor !== null) continue;\n\n if (!lsDeviceLast.find((d) => d === device) && kwh !== 0) {\n lsDeviceLast.push(device);\n } else continue;\n\n if (kwh_system_building[building] === undefined)\n kwh_system_building[building] = {};\n\n if (kwh_system_building[building][system] === undefined)\n kwh_system_building[building][system] = 0;\n\n kwh_system_building[building][system] += kwh;\n }\n\n for (let data of dataPower) {\n let datetime = new Date(data.data_datetime);\n let building = data.building;\n let device = data.device;\n let kwh = Math.round((data.kwh * 100) / 100);\n let kw = Math.round((data.kw * 100) / 100);\n let system = data.system;\n let floor = data.floor;\n\n if (system === \"Main\" && floor !== null) continue;\n\n if (lsKw_system_building[building] === undefined)\n lsKw_system_building[building] = {};\n\n if (lsKw_system_building[building][system] === undefined) {\n lsKw_system_building[building][system] = [];\n }\n\n lsKw_system_building[building][system].push({\n datetime: datetime,\n kw: kw,\n });\n\n if (!lsDeviceFirst.find((d) => d === device) && kwh !== 0)\n lsDeviceFirst.push(device);\n else continue;\n\n kwh_system_building[building][system] -= kwh;\n }\n\n // for (let [building, kwh_system] of Object.entries(kwh_system_building)) {\n // let tariff = 4;\n // if (tariff_building[building] !== undefined) {\n // if (tariff_building[building] !== null) {\n // tariff = tariff_building[building];\n // }\n // }\n\n // if (bill_building[building]) bill_building[building] = 0;\n // bill_building[building] = kwh_system.Main * tariff;\n // }\n\n this.setState({\n kwh_system_building: kwh_system_building,\n lsKw_system_building: lsKw_system_building,\n bill_building: bill_building,\n });\n });\n\n subscriberSolarData = subjectSolarData.subscribe((dataSolar) => {\n if (!dataSolar) return;\n if (dataSolar.length === 0) return;\n\n let kwhSolar = dataSolar[dataSolar.length - 1].kwh - dataSolar[0].kwh;\n\n this.setState({\n kwhSolar: kwhSolar,\n });\n });\n\n this.intervalTime = setInterval(\n () =>\n this.setState({\n currentTime: new Date()\n .toLocaleString([], {\n hour: \"2-digit\",\n minute: \"2-digit\",\n hour12: false,\n })\n .replace(\"24:\", \"00:\"),\n }),\n 500\n );\n\n this.intervalApi = setInterval(() => {\n apiService.updatePowerMeterData();\n apiService.updateSolarData();\n }, 300000);\n }\n\n componentWillUnmount() {\n if (subscriberPowerMeterData) subscriberPowerMeterData.unsubscribe();\n if (subscriberSolarData) subscriberSolarData.unsubscribe();\n clearInterval(this.intervalTime);\n clearInterval(this.intervalApi);\n }\n\n async getAllSystem() {\n try {\n let resp = await http.get(\"/system/all\");\n\n this.setState({ lsSystem: resp.data });\n } catch (err) {\n console.log(err);\n return err.response;\n }\n }\n\n async getAllTargetByMonthYear() {\n try {\n let today = new Date();\n let payload = {\n month: today.getMonth(),\n year: today.getFullYear(),\n };\n\n let resp = await http.post(\"/target/monthyear\", payload);\n let lsTarget = resp.data;\n\n let tariff_building = {};\n let targetBill_building = {};\n for (let target of lsTarget) {\n let building = target.building;\n let tariff = target.tariff;\n let bill = target.electricity_bill;\n\n tariff_building[building] = tariff;\n targetBill_building[building] = bill;\n }\n\n this.setState({\n tariff_building: tariff_building,\n targetBill_building: targetBill_building,\n });\n } catch (err) {\n console.log(err);\n return err.response;\n }\n }\n\n async getAllBuilding() {\n try {\n let resp = await http.get(\"/building/all\");\n\n this.setState({ lsBuilding: resp.data });\n } catch (err) {\n console.log(err);\n return err.response;\n }\n }\n\n async getPowerUsedCurrentMonthBuilding() {\n try {\n let month = new Date().getMonth();\n\n let payload = {\n month: month,\n };\n\n let resp = await http.post(\"/api/power/month\", payload);\n\n this.setState({ monthKwh_system_building: resp.data });\n } catch (err) {\n console.log(err);\n return err.response;\n }\n }\n\n async getSolarCurrentMonth() {\n try {\n let month = new Date().getMonth();\n\n let payload = {\n month: month,\n };\n\n let resp = await http.post(\"/api/solar/month\", payload);\n\n this.setState({ kwhSolarMonth: resp.data.kwhSolar });\n } catch (err) {\n console.log(err);\n return err.response;\n }\n }\n\n async getVisitors() {\n try {\n let resp = await http.get(\"/etc/visitors\");\n\n this.setState({\n visitors: resp.data,\n });\n } catch (err) {\n console.log(err);\n return err.response;\n }\n }\n\n onClickBuilding(building) {\n let { lsSelectedBuilding, lsBuilding } = this.state;\n\n if (lsSelectedBuilding.length === lsBuilding.length) {\n lsSelectedBuilding = [building];\n } else if (!lsSelectedBuilding.includes(building)) {\n lsSelectedBuilding.push(building);\n this.setState({ lsSelectedBuilding: lsSelectedBuilding });\n } else {\n lsSelectedBuilding = lsSelectedBuilding.filter((b) => b !== building);\n }\n\n this.setState({ lsSelectedBuilding: lsSelectedBuilding });\n }\n\n onDoubleClickBuilding(building) {\n this.props.history.push({ pathname: \"building/\", building: building });\n }\n\n toggleDisplayBill() {\n this.setState((prevState) => ({\n isDisplayBill: !prevState.isDisplayBill,\n }));\n }\n\n render() {\n let {\n currentTime,\n propsPath,\n buildingPath,\n lsBuilding,\n lsSelectedBuilding,\n kwh_system_building,\n lsKw_system_building,\n kwhSolar,\n kwhSolarMonth,\n bill_building,\n targetBill_building,\n monthKwh_system_building,\n tariff_building,\n isDisplayBill,\n visitors,\n } = this.state;\n\n let kwhMainTotal = 0;\n let kwhAcTotal = 0;\n\n if (lsSelectedBuilding.length === 0) {\n lsSelectedBuilding = lsBuilding.map((building) => building.label);\n }\n\n for (let building of lsSelectedBuilding) {\n if (kwh_system_building[building]) {\n if (kwh_system_building[building][\"Main\"])\n kwhMainTotal += kwh_system_building[building][\"Main\"];\n\n if (kwh_system_building[building][\"Air Conditioner\"])\n kwhAcTotal += kwh_system_building[building][\"Air Conditioner\"];\n }\n }\n\n let kwhMainMonthTotal = 0;\n let kwhAcMonthTotal = 0;\n let billMonthTotal = 0;\n bill_building = {};\n for (let [building, monthKwh_system] of Object.entries(\n monthKwh_system_building\n )) {\n let tariff = 4;\n if (tariff_building[building] !== undefined) {\n if (tariff_building[building] !== null) {\n tariff = tariff_building[building];\n }\n }\n\n if (bill_building[building]) bill_building[building] = 0;\n bill_building[building] = monthKwh_system[\"Main\"] * tariff;\n }\n\n for (let [building, kwhMonth_system] of Object.entries(\n monthKwh_system_building\n )) {\n if (!lsSelectedBuilding.includes(building)) continue;\n\n kwhMainMonthTotal += kwhMonth_system[\"Main\"];\n\n if (kwhMonth_system[\"Air Conditioner\"]) {\n kwhAcMonthTotal += kwhMonth_system[\"Air Conditioner\"];\n }\n\n let tariff = 4;\n if (tariff_building[building]) tariff = tariff_building[building];\n\n let bill = kwhMonth_system[\"Main\"] * tariff;\n\n billMonthTotal += bill;\n }\n\n let target;\n for (let [building, targetBill] of Object.entries(targetBill_building)) {\n if (!lsSelectedBuilding.includes(building)) continue;\n if (!target) target = 0;\n target += targetBill;\n }\n\n let lsBuildingData = [];\n if (Object.values(monthKwh_system_building).length > 0) {\n let totalKwh = 0;\n Object.values(monthKwh_system_building).forEach(\n (monthKwh_system) => (totalKwh += monthKwh_system[\"Main\"])\n );\n for (let building of lsBuilding) {\n let kwh = 0;\n if (monthKwh_system_building[building.label]) {\n kwh = monthKwh_system_building[building.label][\"Main\"];\n }\n\n let kwhPercentage = parseFloat((kwh / totalKwh) * 100).toFixed(2);\n let percentColor = \"#000\";\n if (lsSelectedBuilding.includes(building.label)) {\n percentColor =\n \"#\" +\n colorConverter.pickHex(\n \"d10909\",\n \"d1dbde\",\n parseFloat(kwhPercentage / 100).toFixed(2)\n );\n }\n\n lsBuildingData.push({\n building: building.label,\n color: building.color_code,\n kwh: kwh,\n kwhPercentage: kwhPercentage,\n percentColor: percentColor,\n });\n }\n }\n\n const { t } = this.props;\n\n if (!lsSelectedBuilding.includes(\"Navamin\")) {\n kwhSolar = 0;\n kwhSolarMonth = 0;\n }\n\n return (\n
\n {/* ****************************** Building Map Styles ******************************** */}\n {lsBuilding.map((building) => (\n \n ))}\n 0 ? \"flex\" : \"\",\n }}\n fluid\n >\n \n {/* ******************************** LEFT COLUMN ******************************** */}\n \n
\n {/* ******************************** ENERGY CONSUMPTION PANE ******************************** */}\n
\n \n {t(\"home.Total\")}\n \n {t(\"home.EnergyConsumption\")}\n \n \n\n \n \n {t(\"home.Month to Date\")}\n \n \n {numberFormatter.withCommas(\n Math.round(kwhMainMonthTotal)\n )}\n \n \n {t(\"kWh\")}\n \n \n\n \n \n {t(\"From\")}\n \n \n \n {t(\"MEA\")}\n \n \n \n {t(\"Solar Cells\")}\n \n\n \n {t(\"Used in\")}\n \n \n \n {`${t(\"Air Conditioner\")}`}\n \n \n \n {t(\"Others\")}\n \n \n\n \n \n \n \n \n \n \n \n \n \n {t(\"Note\")}\n \n \n {t(\n \"Air Conditioner System from Ratchaphruek and Naradhip only.\"\n )}\n \n \n
\n {/* ******************************** ELECTRICITY BILL PANE ******************************** */}\n
\n \n \n \n {t(\"Electricity Bill\")}\n \n \n {t(\"home.Month to Date\")}\n \n \n \n \n {t(\"Estimate Bill\")}\n \n \n ฿\n {numberFormatter.withCommas(\n parseFloat(\n billMonthTotal + kwhSolarMonth * 4\n ).toFixed(2)\n )}\n \n \n \n \n \n {t(\"home.Saved From Solar\")}\n \n \n % {t(\"home.Electricity Used\")}\n \n \n {t(\"home.Target\")}\n \n \n \n \n \n \n {target\n ? parseFloat((billMonthTotal / target) * 100).toFixed(\n 2\n )\n : \"N/A\"}\n %\n \n \n \n \n ฿ {target ? numberFormatter.withCommas(target) : \"N/A\"}\n \n \n \n \n \n \n \n {numberFormatter.withCommas(\n Math.abs(parseFloat(kwhSolarMonth * 4).toFixed(2))\n )}{\" \"}\n ฿ -\n \n \n \n \n target ? \"danger\" : \"success\"}\n value={\n (billMonthTotal / (target === 0 ? 1 : target)) * 100\n }\n style={{\n backgroundColor: \"white\",\n border: \"solid 1px\",\n borderRadius: \"0\",\n height: \"20px\",\n fontWeight: \"bold\",\n }}\n >\n ฿{\" \"}\n {numberFormatter.withCommas(\n parseFloat(billMonthTotal).toFixed(2)\n )}\n \n \n \n \n
\n
\n\n
\n {/* ******************************** BUILDING POWER CONSUMPTION PANE ******************************** */}\n
\n \n
\n {/* ******************************** ELECTRICAL SYSTEM POWER CONSUMPTION PANE ******************************** */}\n
\n \n
\n
\n \n\n {/* ******************************** RIGHT COLUMN ******************************** */}\n \n \n \n \n \n \n \n \n {visitors}\n \n \n\n
\n {lsBuilding.map((building) => (\n
\n {lsBuildingData.length > 0 ? (\n \n {isDisplayBill ? (\n
\n ฿{\" \"}\n {numberFormatter.withCommas(\n Math.round(bill_building[building.label])\n )}\n
\n ) : (\n \"\"\n )}\n 0\n ? parseFloat(\n lsBuildingData.find(\n (data) =>\n data.building === building.label\n ).kwhPercentage / 100\n ).toFixed(2)\n : \"d1dbde\"\n )\n : lsSelectedBuilding.includes(building.label)\n ? building.color_code.replace(\"#\", \"\")\n : \"d1dbde\"\n }`,\n color:\n lsSelectedBuilding.length === lsBuilding.length\n ? \"black\"\n : lsSelectedBuilding.includes(building.label)\n ? \"white\"\n : \"black\",\n }}\n onClick={() => this.onClickBuilding(building.label)}\n onDoubleClick={() =>\n this.onDoubleClickBuilding(building.label)\n }\n >\n {t(`${building.label}`)}\n
\n data.building === building.label\n ).kwhColor,\n }}\n >\n {numberFormatter.withCommas(\n Math.round(\n lsBuildingData.find(\n (data) => data.building === building.label\n ).kwh\n )\n )}{\" \"}\n {t(\"kWh\")}\n
\n data.building === building.label\n ).percentColor\n : lsSelectedBuilding.includes(building.label)\n ? \"black\"\n : \"#d1dbde\",\n }}\n >\n {\n lsBuildingData.find(\n (data) => data.building === building.label\n ).kwhPercentage\n }\n %\n
\n \n ) : (\n \"\"\n )}\n \n ))}\n \n\n
\n \n \n \n \n \n \n {lsBuilding.map((building) => (\n {\n if (error) {\n console.log(error);\n return;\n }\n }}\n id={\"img-\" + building.label.toLowerCase().replace(\" \", \"-\")}\n className={\"img-building\"}\n src={\n buildingPath +\n building.label +\n \"/\" +\n building.label +\n \".svg\"\n }\n wrapper=\"div\"\n />\n ))}\n
\n\n {/* ******************************* Map Footer ******************************** */}\n
\n \n \n \n *{t(\"Note\")}:\n \n \n {t(\"Electricity bill is estimated\")}\n \n \n \n \n {t(\"Color Legend\")}\n \n \n *{t(\"From Total Energy\")}\n \n \n \n \n \n
\n
\n \n
\n
\n \n
\n
\n
\n \n
\n
\n \n 0%\n 30%\n 60%\n 100%\n \n \n \n
\n \n \n \n \n );\n }\n}\n\nexport default withTranslation()(Home);\n","import React from \"react\";\nimport \"./BarChartSystemPowerConsumption.css\";\n\nimport { Chart, registerables } from \"chart.js\";\nimport zoomPlugin from \"chartjs-plugin-zoom\";\nimport \"chartjs-adapter-moment\";\n\nimport i18n from \"../../../i18n\";\nimport dateFormatter from \"../../../utils/dateFormatter\";\n\nlet barChart;\n\nclass BarChartSystemPowerConsumption extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tcurrentLanguage: i18n.language,\n\t\t\t// Chart details\n\t\t\tdata: {},\n\t\t\toptions: {\n\t\t\t\tresponsive: true,\n\t\t\t\tanimation: false,\n\t\t\t\tmaintainAspectRatio: false,\n\t\t\t\tinteraction: {\n\t\t\t\t\tintersect: false,\n\t\t\t\t\taxis: \"xy\",\n\t\t\t\t\tmode: \"index\",\n\t\t\t\t},\n\t\t\t\tscales: {\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\ttype: \"time\",\n\t\t\t\t\t\ttime: {\n\t\t\t\t\t\t\tdisplayFormats: {\n\t\t\t\t\t\t\t\tmillisecond: \"HH:mm:ss.SSS\",\n\t\t\t\t\t\t\t\tsecond: \"HH:mm:ss\",\n\t\t\t\t\t\t\t\tminute: \"HH:mm\",\n\t\t\t\t\t\t\t\thour: \"HH:mm\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgrid: {\n\t\t\t\t\t\t\tdisplay: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tyAxis: {\n\t\t\t\t\t\tmin: 0,\n\t\t\t\t\t\tmax: 100,\n\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\tgrid: {\n\t\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tplugins: {\n\t\t\t\t\ttitle: {\n\t\t\t\t\t\tdisplay: false,\n\t\t\t\t\t},\n\t\t\t\t\tlegend: {\n\t\t\t\t\t\tdisplay: false,\n\t\t\t\t\t},\n\t\t\t\t\ttooltip: {\n\t\t\t\t\t\tenabled: true,\n\t\t\t\t\t\tpadding: 14,\n\t\t\t\t\t\tbackgroundColor: \"#F2F2F2\",\n\t\t\t\t\t\ttitleColor: \"#000\",\n\t\t\t\t\t\tbodyColor: \"#000\",\n\t\t\t\t\t\ttitleFont: { size: 18 },\n\t\t\t\t\t\tbodyFont: { size: 16 },\n\t\t\t\t\t\tcallbacks: {\n\t\t\t\t\t\t\ttitle: function (context) {\n\t\t\t\t\t\t\t\treturn dateFormatter.ddmmmyyyyhhmm_noOffset(\n\t\t\t\t\t\t\t\t\tnew Date(context[0].label)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tzoom: {\n\t\t\t\t\t\tpan: {\n\t\t\t\t\t\t\tenabled: true,\n\t\t\t\t\t\t\tmode: \"xy\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tzoom: {\n\t\t\t\t\t\t\twheel: { enabled: true },\n\t\t\t\t\t\t\tpinch: { enabled: true },\n\t\t\t\t\t\t\tmode: \"xy\",\n\t\t\t\t\t\t\tspeed: 100,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlimits: {\n\t\t\t\t\t\t\tx: { min: this.props.dateFrom, max: this.props.dateTo },\n\t\t\t\t\t\t\ty: { min: \"original\", max: \"original\" },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tthis.handleDoubleClick = this.handleDoubleClick.bind(this);\n\t}\n\n\tbuildChart = () => {\n\t\tlet { data, options } = this.state;\n\t\tlet dt = JSON.parse(JSON.stringify(data));\n\n\t\tif (dt.datasets === undefined) return;\n\t\tdt.datasets.forEach((ds) => (ds.label = i18n.t(ds.label)));\n\n\t\tdocument.getElementById(\"bc-system-power\").remove();\n\t\tdocument.getElementById(\n\t\t\t\"wrapper-bc-system-power\"\n\t\t).innerHTML = ``;\n\n\t\tlet ctx = document.getElementById(\"bc-system-power\").getContext(\"2d\");\n\n\t\tbarChart = new Chart(ctx, {\n\t\t\ttype: \"bar\",\n\t\t\tdata: dt,\n\t\t\toptions: options,\n\t\t});\n\t};\n\n\tcomponentDidMount() {\n\t\tChart.register(...registerables);\n\t\tChart.register(zoomPlugin);\n\t}\n\n\tcomponentWillReceiveProps(nextProps) {\n\t\tlet { data, options, currentLanguage } = this.state;\n\n\t\tif (currentLanguage !== i18n.language) {\n\t\t\tthis.setState({ currentLanguage: i18n.language }, () =>\n\t\t\t\tthis.buildChart()\n\t\t\t);\n\t\t}\n\n\t\tlet lsLogKw_system = nextProps.lsLogKw_system;\n\t\tif (lsLogKw_system === undefined) return;\n\t\tif (\n\t\t\tJSON.stringify(this.props.lsLogKw_system) ===\n\t\t\t\tJSON.stringify(nextProps.lsLogKw_system) &&\n\t\t\tthis.props.system === nextProps.system\n\t\t)\n\t\t\treturn;\n\n\t\tlet system = nextProps.system;\n\t\tlet color = nextProps.color;\n\n\t\tlet datasets = [];\n\n\t\tlet labels = [];\n\t\tlet lsKw_system = {};\n\t\tlet yMax = 0;\n\n\t\tlet prevDatetime;\n\t\tfor (let [sys, lsLog] of Object.entries(lsLogKw_system)) {\n\t\t\tif (lsKw_system[sys] === undefined) lsKw_system[sys] = [];\n\t\t\tlet lsKw = lsKw_system[sys];\n\n\t\t\tfor (let log of lsLog) {\n\t\t\t\tlet datetime = new Date(log.datetime);\n\t\t\t\tlet kw = log.kw;\n\n\t\t\t\tif (\n\t\t\t\t\tlabels.findIndex((d) => d.getTime() === datetime.getTime()) === -1\n\t\t\t\t) {\n\t\t\t\t\tlabels.push(new Date(datetime));\n\t\t\t\t}\n\n\t\t\t\tif (prevDatetime) {\n\t\t\t\t\tif (datetime.getTime() === prevDatetime.getTime()) {\n\t\t\t\t\t\tlsKw[lsKw.length - 1] += kw;\n\n\t\t\t\t\t\tif (lsKw[lsKw.length - 1] > yMax) yMax = lsKw[lsKw.length - 1];\n\t\t\t\t\t} else lsKw.push(kw);\n\t\t\t\t} else lsKw.push(kw);\n\n\t\t\t\tif (kw > yMax) yMax = kw;\n\n\t\t\t\tprevDatetime = datetime;\n\t\t\t}\n\t\t}\n\n\t\tlet lsKw = [];\n\t\tif (lsKw_system[\"Main\"] !== undefined) lsKw = lsKw_system[\"Main\"];\n\n\t\tif (system === \"Air Conditioner\" || system === \"ระบบปรับอากาศ\")\n\t\t\tlsKw = lsKw_system[\"Air Conditioner\"];\n\t\telse if (system === \"Others\" || system === \"อื่นๆ\") {\n\t\t\tif (lsKw_system[\"Air Conditioner\"] !== undefined) {\n\t\t\t\tlsKw.forEach((_, idx) => {\n\t\t\t\t\tlsKw[idx] -= lsKw_system[\"Air Conditioner\"][idx];\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tlet dataset = {\n\t\t\tlabel: system,\n\t\t\tbackgroundColor: color,\n\t\t\tborderColor: color,\n\t\t\tdata: lsKw,\n\t\t};\n\n\t\tdatasets.push(dataset);\n\n\t\tdata.labels = labels;\n\t\tdata.datasets = datasets;\n\n\t\toptions.scales.xAxis.min = labels[labels.length - 1];\n\t\toptions.scales.xAxis.max = labels[0];\n\t\toptions.scales.yAxis.max = yMax;\n\n\t\toptions.plugins.zoom.limits.x.min = labels[labels.length - 1];\n\t\toptions.plugins.zoom.limits.x.max = labels[0];\n\n\t\tthis.setState({\n\t\t\tdata: data,\n\t\t\toptions: options,\n\t\t});\n\n\t\tthis.buildChart();\n\t}\n\n\thandleDoubleClick() {\n\t\tif (barChart) barChart.resetZoom();\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t);\n\t}\n}\n\nexport default BarChartSystemPowerConsumption;\n","import React from \"react\";\n\nimport \"./Login.css\";\nimport {\n Row,\n Col,\n Container,\n Button,\n Form,\n FormGroup,\n Label,\n Input,\n} from \"reactstrap\";\nimport { Link } from \"react-router-dom\";\nimport qs from \"qs\";\n\nimport http from \"../../utils/http\";\n\nimport { withTranslation } from \"react-i18next\";\n\nclass Login extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n showPassword: false,\n username: \"\",\n password: \"\",\n isCredentialsIncorrect: false,\n isUsernameEmpty: false,\n isPasswordEmpty: false,\n errorMessage: \"\",\n };\n\n this.toggleShowPassword = this.toggleShowPassword.bind(this);\n this.handleInputChange = this.handleInputChange.bind(this);\n this.submitLogin = this.submitLogin.bind(this);\n }\n\n toggleShowPassword() {\n this.setState({ showPassword: !this.state.showPassword });\n }\n\n handleInputChange(e) {\n this.setState({ [e.target.name]: e.target.value });\n }\n\n async submitLogin() {\n let { username, password } = this.state;\n\n this.setState({ isCredentialsIncorrect: false });\n\n if (username.length === 0) {\n this.setState({ isUsernameEmpty: true });\n return;\n } else {\n this.setState({ isUsernameEmpty: false });\n }\n\n if (password.length === 0) {\n this.setState({ isPasswordEmpty: true });\n return;\n } else {\n this.setState({ isPasswordEmpty: false });\n }\n\n let redirect = qs.parse(this.props.location.search, {\n ignoreQueryPrefix: true,\n }).redirect;\n\n let resp = await this.postLogin(username, password, redirect);\n\n if (resp) {\n if (resp.status === 200) {\n if (redirect) {\n window.location.assign(\"http://\" + redirect);\n }\n\n localStorage.setItem(\"current_username\", username);\n\n this.props.history.push({\n pathname: \"/\",\n });\n } else if (resp.status === 500 || resp.status === 403) {\n if (resp.data.length > 0) {\n alert(resp.data);\n } else {\n alert(\"Could not perform login. Please try again\");\n }\n } else {\n this.setState({\n isCredentialsIncorrect: true,\n errorMessage: resp.data,\n });\n }\n } else {\n alert(\"Could not perform login. Please try again\");\n }\n }\n\n async postLogin(username, password, redirect) {\n try {\n let payload = {\n username: username,\n password: password,\n };\n\n if (redirect) payload.redirect = \"http://\" + redirect;\n\n return await http.post(\"/auth/login\", payload);\n } catch (err) {\n console.log(err);\n return err.response;\n }\n }\n\n render() {\n let {\n showPassword,\n username,\n password,\n isCredentialsIncorrect,\n isUsernameEmpty,\n isPasswordEmpty,\n errorMessage,\n } = this.state;\n\n const { t } = this.props;\n\n return (\n
\n \n
\n \n \"logo\"\n \n NIDA SMART ENERGY\n
\n\n \n {t(\"Login\")}\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {t(\"Log In\")}\n \n \n
\n
\n {isCredentialsIncorrect ? (\n {errorMessage}\n ) : (\n \"\"\n )}\n {isUsernameEmpty ? (\n \n {t(\"Please fill in your username.\")}\n \n ) : (\n \"\"\n )}\n {isPasswordEmpty ? (\n \n {t(\"Please fill in your password.\")}\n \n ) : (\n \"\"\n )}\n\n \n \n {t(\"Forgot password\")}\n \n \n \n \n {t(\"Register\")}\n \n \n
\n
\n\n
{t(\"address\")}
\n
\n );\n }\n}\n\nexport default withTranslation()(Login);\n","import React, { PureComponent } from \"react\";\nimport { PieChart, Pie, Cell, Tooltip, ResponsiveContainer } from \"recharts\";\nimport \"./PieChartSystem.css\";\nimport numberFormatter from \"../../../utils/numberFormatter\";\n\nconst COLORS = [\"#3c67be\", \"#FDD865\"];\n\nconst RADIAN = Math.PI / 180;\nconst renderCustomizedLabel = ({\n cx,\n cy,\n midAngle,\n innerRadius,\n outerRadius,\n percent,\n}) => {\n const radius = innerRadius + (outerRadius - innerRadius) * 0.2;\n const x = cx + radius * Math.cos(-midAngle * RADIAN);\n const y = cy + radius * Math.sin(-midAngle * RADIAN);\n\n return (\n cx ? \"start\" : \"end\"}\n dominantBaseline=\"central\"\n fontWeight=\"600\"\n >\n {`${(percent * 100).toFixed(0)}%`}\n \n );\n};\n\nconst getLine1 = () => {\n return (\n \"TODAY 00:00 - \" +\n new Date().toLocaleString([], {\n hour: \"2-digit\",\n minute: \"2-digit\",\n hour12: false,\n })\n );\n};\n\nconst getLine2 = (building, ac, others) => {\n let totalEnergyConsumption = ac + others;\n\n return (\n building +\n \" \" +\n numberFormatter.withCommas(Math.round(totalEnergyConsumption)) +\n \" kWh\"\n );\n};\n\nconst getLine3 = (ac, others) => {\n let percentAC = Math.round((ac / (ac + others)) * 100);\n\n return (\n \"Air Conditioner \" +\n percentAC +\n \"% \" +\n numberFormatter.withCommas(Math.round(ac)) +\n \" kWh\"\n );\n};\n\nconst getLine4 = (ac, others) => {\n let percentOthers = Math.round((others / (ac + others)) * 100);\n\n return (\n \"Others \" +\n percentOthers +\n \"% \" +\n numberFormatter.withCommas(Math.round(others)) +\n \" kWh\"\n );\n};\n\nconst CustomTooltip = ({ active, label, ...props }) => {\n if (active) {\n let building = props.building;\n let ac = props.ac;\n let others = props.others;\n\n return (\n \n

{getLine1()}

\n

\n {getLine2(building, ac, others)}\n

\n \n {getLine3(ac, others)}\n

\n \n {getLine4(ac, others)}\n

\n \n );\n }\n\n return null;\n};\n\nclass PieChartSystem extends PureComponent {\n constructor(props) {\n super(props);\n this.state = {\n ac: 0,\n others: 0,\n };\n }\n\n componentDidUpdate(prevProps) {\n if (\n this.props.ac === prevProps.ac &&\n this.props.others === prevProps.others\n )\n return;\n\n this.setState({\n ac: this.props.ac,\n others: this.props.others,\n disabled: this.props.disabled,\n });\n }\n\n render() {\n let { ac, others, disabled } = this.state;\n\n let data = [\n { name: \"Air Conditioner\", value: ac },\n { name: \"Others\", value: others },\n ];\n\n if (disabled) {\n data = [{ name: \"\", value: 100 }];\n }\n\n return (\n \n \n \n {data.map((entry, index) => (\n \n ))}\n \n {disabled ? (\n \"\"\n ) : (\n \n }\n />\n )}\n \n \n );\n }\n}\n\nexport default PieChartSystem;\n","function exportFile(fileName, dataRows) {\n\tlet csvContent =\n\t\t\"data:text/csv;charset=utf-8,\" +\n\t\tdataRows.map((e) => e.join(\",\")).join(\"\\n\");\n\n\tlet encodedUri = encodeURI(csvContent);\n\tlet link = document.createElement(\"a\");\n\tlink.setAttribute(\"href\", encodedUri);\n\tlink.setAttribute(\"download\", `${fileName}.csv`);\n\tdocument.body.appendChild(link); // Required for FF\n\n\tlink.click(); // This will download the data file named \"my_data.csv\".\n}\n\nconst csv = {\n\texportFile,\n};\n\nexport default csv;\n","import React from \"react\";\nimport \"./MixedChartBillCompare.css\";\n\nimport { Chart, registerables } from \"chart.js\";\nimport zoomPlugin from \"chartjs-plugin-zoom\";\nimport \"chartjs-adapter-moment\";\n\nimport { Col } from \"reactstrap\";\nimport { RiFileExcel2Fill } from \"react-icons/ri\";\n\nimport http from \"../../../utils/http\";\nimport csv from \"../../../utils/csv\";\n\nimport i18n from \"../../../i18n\";\n\nimport { lsMonth } from \"../../../utils/months\";\n\nlet mixedChart;\n\nclass MixedChartBillCompare extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n building: {},\n compareTo: \"Target\",\n billData_month: {},\n compareData: [],\n lsPermission: JSON.parse(localStorage.getItem(\"lsPermission\")),\n currentLanguage: i18n.language,\n\n // Chart details\n data: {},\n options: {\n responsive: true,\n animation: false,\n maintainAspectRatio: false,\n interaction: {\n intersect: false,\n axis: \"xy\",\n mode: \"index\",\n },\n scales: {\n xAxis: {\n grid: {\n display: false,\n },\n },\n yAxis: {\n min: 0,\n max: 100,\n display: true,\n grid: {\n display: false,\n },\n title: {\n display: true,\n text: \"Baht\",\n font: {\n size: 14,\n weight: \"600\",\n },\n },\n },\n },\n plugins: {\n title: {\n display: false,\n },\n legend: {\n display: false,\n },\n tooltip: {\n enabled: true,\n padding: 14,\n backgroundColor: \"#F2F2F2\",\n titleColor: \"#000\",\n bodyColor: \"#000\",\n titleFont: { size: 18 },\n bodyFont: { size: 16 },\n },\n zoom: {\n pan: {\n enabled: true,\n mode: \"xy\",\n },\n zoom: {\n wheel: { enabled: true },\n pinch: { enabled: true },\n mode: \"xy\",\n speed: 100,\n },\n limits: {\n x: { min: \"original\", max: \"original\" },\n y: { min: \"original\", max: \"original\" },\n },\n },\n },\n },\n };\n\n this.getBillDataMonth = this.getBillDataMonth.bind(this);\n this.handleDoubleClick = this.handleDoubleClick.bind(this);\n this.exportData = this.exportData.bind(this);\n }\n\n buildChart = () => {\n let { data, options, billData_month, compareTo } = this.state;\n\n let datasets = [\n {\n label: \"Latest\",\n backgroundColor: \"#FFB800\",\n borderColor: \"#FFB800\",\n data: [],\n type: \"bar\",\n },\n {\n label: compareTo,\n backgroundColor: \"#E2E2E2\",\n borderColor: \"#E2E2E2\",\n fill: \"origin\",\n borderWidth: 2,\n pointRadius: 2,\n data: [],\n type: \"line\",\n },\n ];\n\n let yMax = 0;\n let month = new Date().getMonth();\n for (let i = 0; i < 12; i++) {\n if (month < 0) month += 12;\n\n let dataMonth = billData_month[month];\n\n datasets[0].data.unshift(dataMonth.latest);\n\n let compareData = datasets[1].data;\n if (compareTo === \"Target\") compareData.unshift(dataMonth.target);\n else if (compareTo === \"Average\") compareData.unshift(dataMonth.average);\n else if (compareTo === \"Last Year\")\n compareData.unshift(dataMonth.lastYear);\n\n for (let bill of Object.values(billData_month[month])) {\n if (bill > yMax) yMax = bill;\n }\n\n month--;\n }\n\n let labels = [];\n for (let monthIdx = new Date().getMonth(); labels.length < 12; monthIdx--) {\n if (monthIdx < 0) monthIdx += 12;\n labels.unshift(i18n.t(lsMonth[monthIdx % 12]));\n }\n\n data.labels = labels;\n\n datasets.forEach((ds) => (ds.label = i18n.t(ds.label)));\n data.datasets = datasets;\n\n options.scales.yAxis.max = Math.ceil(yMax);\n options.scales.yAxis.title.text = i18n.t(options.scales.yAxis.title.text);\n\n document.getElementById(\"mc-bill-compare\").remove();\n document.getElementById(\n \"wrapper-mc-bill-compare\"\n ).innerHTML = ``;\n\n let ctx = document.getElementById(\"mc-bill-compare\").getContext(\"2d\");\n\n mixedChart = new Chart(ctx, {\n type: \"bar\",\n data: data,\n options: options,\n });\n\n this.setState({\n data: data,\n });\n };\n\n componentDidMount() {\n Chart.register(...registerables);\n Chart.register(zoomPlugin);\n }\n\n componentWillReceiveProps(nextProps) {\n let { data, currentLanguage } = this.state;\n\n let building = nextProps.building;\n let compareTo = nextProps.compareTo;\n\n if (currentLanguage !== i18n.language) {\n if (data.datasets) {\n data.datasets.forEach((ds) => (ds.label = i18n.t(ds.label)));\n }\n\n if (data.labels) {\n data.labels.forEach((month, idx) => (data.labels[idx] = i18n.t(month)));\n }\n\n this.setState({ currentLanguage: i18n.language, data: data }, () =>\n this.buildChart()\n );\n }\n\n if (\n (building === undefined || this.props.building === nextProps.building) &&\n this.props.compareTo === nextProps.compareTo\n ) {\n return;\n } else if (\n building !== undefined &&\n this.props.building !== nextProps.building\n ) {\n this.setState(\n {\n building: building,\n },\n () => this.getBillDataMonth()\n );\n } else {\n this.setState(\n {\n compareTo: compareTo,\n },\n () => this.buildChart()\n );\n }\n }\n\n async getBillDataMonth() {\n try {\n let { building } = this.state;\n\n let payload = {\n building_id: building.id,\n };\n\n let resp = await http.post(\"/building/bill/compare\", payload);\n\n this.setState(\n {\n billData_month: resp.data,\n },\n () => this.buildChart()\n );\n } catch (err) {\n console.log(err);\n return err.response;\n }\n }\n\n exportData() {\n let { data, compareTo } = this.state;\n\n let labels = data.labels;\n let dataMonth = data.datasets[0].data;\n let dataMonthCompare = data.datasets[1].data;\n\n let rows = [[]];\n rows[0].push(\"Month\", \"Bill\", compareTo);\n\n dataMonth.forEach((d, idx) => {\n if (!rows[idx + 1]) rows[idx + 1] = [];\n rows[idx + 1].push(labels[idx], d, dataMonthCompare[idx]);\n });\n\n csv.exportFile(`Bill Compare to ${compareTo}`, rows);\n }\n\n handleDoubleClick() {\n if (mixedChart) mixedChart.resetZoom();\n }\n\n render() {\n let { lsPermission } = this.state;\n return (\n \n {lsPermission.find((p) => p.label === \"Export Information\") ? (\n \n ) : (\n <>\n )}\n \n \n \n \n );\n }\n}\n\nexport default MixedChartBillCompare;\n","import React from \"react\";\nimport \"./LineChartBuildingPowerConsumption.css\";\n\nimport { Chart, registerables } from \"chart.js\";\nimport zoomPlugin from \"chartjs-plugin-zoom\";\nimport \"chartjs-adapter-moment\";\n\nimport tooltipHandler from \"../../../utils/tooltipHandler\";\n\nimport i18n from \"../.../../../../i18n\";\n\nlet lineChart;\n\nclass LineChartBuildingPowerConsumption extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n lsBuilding: this.props.lsBuilding,\n lsSelectedBuildingPrev: [],\n componentShouldUpdate: true,\n currentLanguage: i18n.language,\n\n // Chart details\n data: {},\n options: {\n responsive: true,\n animation: false,\n maintainAspectRatio: false,\n interaction: {\n intersect: false,\n axis: \"x\",\n mode: \"index\",\n },\n scales: {\n xAxis: {\n type: \"time\",\n time: {\n displayFormats: {\n millisecond: \"HH:mm:ss.SSS\",\n second: \"HH:mm:ss\",\n minute: \"HH:mm\",\n hour: \"HH:mm\",\n },\n },\n grid: {\n display: false,\n },\n },\n yAxis: {\n min: 0,\n max: 100,\n display: true,\n grid: {\n display: false,\n },\n },\n },\n plugins: {\n title: {\n display: true,\n text: \"Power Demand by Building (kW)\",\n align: \"start\",\n font: { weight: \"bold\", size: 14 },\n padding: {\n bottom: 10,\n },\n },\n legend: {\n display: false,\n },\n tooltip: {\n enabled: false,\n external: tooltipHandler.tooltipHandlerRight_100_top_100,\n },\n zoom: {\n pan: {\n enabled: true,\n mode: \"xy\",\n },\n zoom: {\n wheel: { enabled: true },\n pinch: { enabled: true },\n mode: \"xy\",\n speed: 2,\n },\n limits: {\n x: { min: this.props.dateFrom, max: this.props.dateTo },\n y: { min: \"original\", max: \"original\" },\n },\n },\n },\n },\n };\n\n this.handleDoubleClick = this.handleDoubleClick.bind(this);\n }\n\n buildChart = () => {\n let { data, options } = this.state;\n let dt = JSON.parse(JSON.stringify(data));\n let opt = JSON.parse(JSON.stringify(options));\n\n opt.plugins.zoom.limits.x.min = new Date(opt.plugins.zoom.limits.x.min);\n opt.plugins.zoom.limits.x.max = new Date(opt.plugins.zoom.limits.x.max);\n\n opt.plugins.title.text = i18n.t(opt.plugins.title.text);\n opt.plugins.tooltip = {\n enabled: false,\n external: tooltipHandler.tooltipHandlerRight_100_top_100,\n };\n\n if (dt.datasets) {\n dt.datasets.forEach((ds) => (ds.label = i18n.t(ds.label)));\n }\n\n document.getElementById(\"lc-building-power\").remove();\n document.getElementById(\n \"wrapper-lc-building-power\"\n ).innerHTML = ``;\n\n let ctx = document.getElementById(\"lc-building-power\").getContext(\"2d\");\n\n lineChart = new Chart(ctx, {\n type: \"line\",\n data: dt,\n options: opt,\n });\n };\n\n componentDidMount() {\n Chart.register(...registerables);\n Chart.register(zoomPlugin);\n }\n\n componentWillReceiveProps(nextProps) {\n let { data, options, lsSelectedBuildingPrev, currentLanguage } = this.state;\n\n if (currentLanguage !== i18n.language) {\n this.setState({ currentLanguage: i18n.language }, () =>\n this.buildChart()\n );\n }\n\n if (\n JSON.stringify(this.props.lsKw_system_building) ===\n JSON.stringify(nextProps.lsKw_system_building) &&\n JSON.stringify(lsSelectedBuildingPrev) ===\n JSON.stringify(nextProps.lsSelectedBuilding) &&\n Object.values(data).length > 0\n ) {\n return;\n }\n\n let lsKw_system_building = {};\n Object.assign(lsKw_system_building, nextProps.lsKw_system_building);\n\n let lsSelectedBuilding = nextProps.lsSelectedBuilding.slice();\n let lsBuilding = nextProps.lsBuilding;\n\n if (Object.keys(lsKw_system_building).length <= 1) return;\n\n let labels = [];\n let datasets = [];\n\n let yMax = 1;\n\n for (let [building, lsKw_system] of Object.entries(lsKw_system_building)) {\n let color = lsBuilding.find((b) => b.label === building).color_code;\n\n let dataset = {\n label: building,\n fill: false,\n borderColor: color,\n backgroundColor: color,\n borderWidth: 2,\n spanGaps: true,\n pointRadius: 2,\n };\n\n let data = [];\n let prevDatetime;\n\n for (let logKwMain of lsKw_system[\"Main\"]) {\n let datetime = new Date(logKwMain.datetime);\n let kw = logKwMain.kw;\n\n if (datasets.length === 0) {\n if (!labels.find((d) => d.getTime() === datetime.getTime())) {\n labels.push(new Date(datetime));\n }\n }\n\n if (!lsSelectedBuilding.includes(building)) {\n prevDatetime = datetime;\n continue;\n }\n\n if (prevDatetime) {\n if (datetime.getTime() === prevDatetime.getTime()) {\n data[data.length - 1] += kw;\n\n if (data[data.length - 1] > yMax) yMax = data[data.length - 1];\n } else data.push(kw);\n } else data.push(kw);\n\n if (kw > yMax) yMax = kw;\n\n prevDatetime = datetime;\n }\n\n dataset.data = data;\n\n if (!lsSelectedBuilding.includes(building)) dataset = {};\n\n datasets.push(dataset);\n }\n\n data.labels = labels;\n data.datasets = datasets;\n\n options.scales.xAxis.min = labels[0];\n options.scales.xAxis.max = labels[labels.length - 1];\n options.scales.yAxis.max = yMax + 10;\n\n options.plugins.zoom.limits.x.min = labels[0];\n options.plugins.zoom.limits.x.max = labels[labels.length - 1];\n\n this.setState({\n data: data,\n options: options,\n componentShouldUpdate: true,\n lsSelectedBuildingPrev: lsSelectedBuilding,\n });\n\n this.buildChart();\n }\n\n shouldComponentUpdate() {\n return this.state.componentShouldUpdate;\n }\n\n componentDidUpdate() {\n this.setState({ componentShouldUpdate: false });\n }\n\n handleDoubleClick() {\n if (lineChart) lineChart.resetZoom();\n }\n\n render() {\n return (\n \n \n \n );\n }\n}\n\nexport default LineChartBuildingPowerConsumption;\n","import React from \"react\";\nimport \"./BarChartSystemPowerConsumption.css\";\n\nimport { Chart, registerables } from \"chart.js\";\nimport zoomPlugin from \"chartjs-plugin-zoom\";\nimport \"chartjs-adapter-moment\";\n\nimport i18n from \"../../../i18n\";\nimport dateFormatter from \"../../../utils/dateFormatter\";\n\nlet barChart;\n\nclass BarChartSystemPowerConsumption extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n lsBuilding: this.props.lsBuilding,\n lsSelectedBuildingPrev: [],\n componentShouldUpdate: true,\n currentLanguage: i18n.language,\n\n // Chart details\n data: {},\n options: {\n responsive: true,\n animation: false,\n maintainAspectRatio: false,\n interaction: {\n intersect: false,\n axis: \"x\",\n mode: \"index\",\n },\n scales: {\n xAxis: {\n type: \"time\",\n time: {\n displayFormats: {\n millisecond: \"HH:mm:ss.SSS\",\n second: \"HH:mm:ss\",\n minute: \"HH:mm\",\n hour: \"HH:mm\",\n },\n },\n grid: {\n display: false,\n },\n stacked: true,\n },\n yAxis: {\n min: 0,\n max: 100,\n display: true,\n grid: {\n display: false,\n },\n stacked: true,\n },\n },\n plugins: {\n title: {\n display: true,\n text: \"Air Conditioner vs Other Systems (kW)\",\n align: \"start\",\n font: { weight: \"bold\", size: 14 },\n padding: {\n bottom: 10,\n },\n },\n legend: {\n display: true,\n position: \"top\",\n labels: { usePointStyle: true },\n },\n tooltip: {\n enabled: true,\n padding: 14,\n backgroundColor: \"#F2F2F2\",\n titleColor: \"#000\",\n bodyColor: \"#000\",\n titleFont: { size: 18 },\n bodyFont: { size: 16 },\n callbacks: {\n title: function (context) {\n return dateFormatter.ddmmmyyyyhhmm_noOffset(\n new Date(context[0].label)\n );\n },\n },\n },\n zoom: {\n pan: {\n enabled: true,\n mode: \"xy\",\n },\n zoom: {\n wheel: { enabled: true },\n pinch: { enabled: true },\n mode: \"xy\",\n speed: 2,\n },\n limits: {\n x: { min: this.props.dateFrom, max: this.props.dateTo },\n y: { min: \"original\", max: \"original\" },\n },\n },\n },\n },\n };\n\n this.handleDoubleClick = this.handleDoubleClick.bind(this);\n }\n\n buildChart = () => {\n let { data, options } = this.state;\n let dt = JSON.parse(JSON.stringify(data));\n let opt = JSON.parse(JSON.stringify(options));\n\n if (dt.datasets) {\n dt.datasets.forEach((ds) => (ds.label = i18n.t(ds.label)));\n }\n\n opt.plugins.title.text = i18n.t(opt.plugins.title.text);\n\n document.getElementById(\"bc-system-power\").remove();\n document.getElementById(\n \"wrapper-bc-system-power\"\n ).innerHTML = ``;\n\n let ctx = document.getElementById(\"bc-system-power\").getContext(\"2d\");\n\n barChart = new Chart(ctx, {\n type: \"bar\",\n data: dt,\n options: opt,\n });\n };\n\n componentDidMount() {\n Chart.register(...registerables);\n Chart.register(zoomPlugin);\n }\n\n componentWillReceiveProps(nextProps) {\n let { data, options, lsSelectedBuildingPrev, currentLanguage } = this.state;\n\n if (currentLanguage !== i18n.language) {\n this.setState({ currentLanguage: i18n.language }, () =>\n this.buildChart()\n );\n }\n\n if (\n JSON.stringify(this.props.lsKw_system_building) ===\n JSON.stringify(nextProps.lsKw_system_building) &&\n JSON.stringify(lsSelectedBuildingPrev) ===\n JSON.stringify(nextProps.lsSelectedBuilding) &&\n Object.values(data).length > 0\n ) {\n return;\n }\n\n let lsKw_system_building = {};\n Object.assign(lsKw_system_building, nextProps.lsKw_system_building);\n\n let lsSelectedBuilding = nextProps.lsSelectedBuilding.slice();\n\n if (Object.keys(lsKw_system_building).length <= 1) return;\n\n let labels = [];\n let datasets = [];\n\n let building_lsKwMain = {};\n let building_lsKwAc = {};\n\n for (let [building, lsKw_system] of Object.entries(lsKw_system_building)) {\n if (!lsSelectedBuilding.includes(building)) continue;\n\n if (!building_lsKwMain[building]) building_lsKwMain[building] = [];\n if (!building_lsKwAc[building]) building_lsKwAc[building] = [];\n\n let lsKwMain = building_lsKwMain[building];\n let lsKwAc = building_lsKwAc[building];\n\n let prevDatetime;\n for (let logKwMain of lsKw_system[\"Main\"]) {\n let datetime = new Date(logKwMain.datetime);\n let kw = logKwMain.kw;\n\n if (!labels.find((d) => d.getTime() === datetime.getTime())) {\n labels.push(new Date(datetime));\n }\n\n if (!lsSelectedBuilding.includes(building)) {\n prevDatetime = datetime;\n continue;\n }\n\n if (prevDatetime) {\n if (datetime.getTime() === prevDatetime.getTime()) {\n lsKwMain[lsKwMain.length - 1] += kw;\n } else lsKwMain.push(kw);\n } else lsKwMain.push(kw);\n\n prevDatetime = datetime;\n }\n\n // Fill AC array with zeroes if no AC kw readings\n if (!lsKw_system[\"Air Conditioner\"]) {\n let lengthDiff = lsKwMain.length - lsKwAc.length;\n building_lsKwAc[building] = lsKwAc.concat(Array(lengthDiff).fill(0));\n continue;\n }\n\n for (let logKwAc of lsKw_system[\"Air Conditioner\"]) {\n let datetime = new Date(logKwAc.datetime);\n let kw = logKwAc.kw;\n\n if (prevDatetime) {\n if (datetime.getTime() === prevDatetime.getTime()) {\n lsKwAc[lsKwAc.length - 1] += kw;\n } else lsKwAc.push(kw);\n } else lsKwAc.push(kw);\n\n prevDatetime = datetime;\n }\n }\n\n let lsKwOthers = [];\n let lsKwAc = [];\n\n let yMax = 0;\n for (let [building, lsKwMain] of Object.entries(building_lsKwMain)) {\n lsKwMain.forEach((kwMain, idx) => {\n if (!lsKwOthers[idx]) lsKwOthers[idx] = 0;\n lsKwOthers[idx] += kwMain;\n\n if (lsKwOthers[idx] > yMax) yMax = lsKwOthers[idx];\n });\n\n building_lsKwAc[building].forEach((kwAc, idx) => {\n if (!lsKwAc[idx]) lsKwAc[idx] = 0;\n lsKwAc[idx] += kwAc;\n });\n }\n\n lsKwAc.forEach(\n (kwAc, idx) => (lsKwOthers[idx] = Math.abs(lsKwOthers[idx] - kwAc))\n );\n\n let datasetAc = {\n label: \"Air Conditioner\",\n backgroundColor: \"#4672C6\",\n borderColor: \"#4672C6\",\n data: lsKwAc,\n };\n\n let datasetOthers = {\n label: \"Others\",\n backgroundColor: \"#FDD764\",\n borderColor: \"#FDD764\",\n data: lsKwOthers,\n };\n\n datasets.push(datasetAc, datasetOthers);\n\n data.labels = labels;\n data.datasets = datasets;\n\n options.scales.xAxis.min = labels[0];\n options.scales.xAxis.max = labels[labels.length - 1];\n options.scales.yAxis.max = yMax;\n\n options.plugins.zoom.limits.x.min = labels[0];\n options.plugins.zoom.limits.x.max = labels[labels.length - 1];\n\n this.setState({\n data: data,\n options: options,\n componentShouldUpdate: true,\n lsSelectedBuildingPrev: lsSelectedBuilding,\n });\n\n this.buildChart();\n }\n\n shouldComponentUpdate() {\n return this.state.componentShouldUpdate;\n }\n\n componentDidUpdate() {\n this.setState({ componentShouldUpdate: false });\n }\n\n handleDoubleClick() {\n if (barChart) barChart.resetZoom();\n }\n\n render() {\n return (\n
\n \n
\n );\n }\n}\n\nexport default BarChartSystemPowerConsumption;\n","import React from \"react\";\nimport \"./BarChartElectricityBill.css\";\n\nimport colorConverter from \"../../../utils/colorConverter\";\nimport numberFormatter from \"../../../utils/numberFormatter\";\n\nimport { Chart, registerables } from \"chart.js\";\nimport ChartDataLabels from \"chartjs-plugin-datalabels\";\n\nimport i18n from \"../../../i18n\";\n\nlet barChart;\n\nclass BarChartElectricityBill extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tlsBuilding: this.props.lsBuilding,\n\t\t\tlsSelectedBuildingPrev: [],\n\t\t\tcurrentLanguage: i18n.language,\n\n\t\t\t// Chart details\n\t\t\tdata: {},\n\t\t\toptions: {\n\t\t\t\tindexAxis: \"y\",\n\t\t\t\tresponsive: true,\n\t\t\t\tanimation: false,\n\t\t\t\tmaintainAspectRatio: false,\n\t\t\t\tinteraction: {\n\t\t\t\t\tintersect: false,\n\t\t\t\t\taxis: \"xy\",\n\t\t\t\t\tmode: \"index\",\n\t\t\t\t},\n\t\t\t\tscales: {\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tdisplay: false,\n\t\t\t\t\t\tgrid: {\n\t\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tyAxis: {\n\t\t\t\t\t\tticks: {\n\t\t\t\t\t\t\tfont: {\n\t\t\t\t\t\t\t\tweight: \"500\",\n\t\t\t\t\t\t\t\tsize: 16,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tautoSkip: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgrid: {\n\t\t\t\t\t\t\tdisplay: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tplugins: {\n\t\t\t\t\ttitle: {\n\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\ttext:\n\t\t\t\t\t\t\ti18n.language === \"th\"\n\t\t\t\t\t\t\t\t? \"ค่าไฟฟ้า (บาท)\"\n\t\t\t\t\t\t\t\t: \"Electricity Bill (THB)\",\n\t\t\t\t\t\talign: \"start\",\n\t\t\t\t\t\tfont: { weight: \"bold\", size: 20 },\n\t\t\t\t\t\tpadding: {\n\t\t\t\t\t\t\tbottom: 10,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tlegend: {\n\t\t\t\t\t\tdisplay: false,\n\t\t\t\t\t},\n\t\t\t\t\ttooltip: {\n\t\t\t\t\t\tenabled: false,\n\t\t\t\t\t},\n\t\t\t\t\tdatalabels: {\n\t\t\t\t\t\tanchor: \"end\",\n\t\t\t\t\t\talign: \"end\",\n\t\t\t\t\t\toffset: 8,\n\t\t\t\t\t\tformatter: function (value) {\n\t\t\t\t\t\t\treturn `฿ ${numberFormatter.withCommas(value)}`;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfont: { weight: \"500\", size: 16 },\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tthis.handleDoubleClick = this.handleDoubleClick.bind(this);\n\t}\n\n\tbuildChart = () => {\n\t\tlet { data, options } = this.state;\n\t\tlet dt = JSON.parse(JSON.stringify(data));\n\t\tlet opt = JSON.parse(JSON.stringify(options));\n\n\t\topt.plugins.title.text = i18n.t(opt.plugins.title.text);\n\n\t\tdt.labels.forEach((bld, idx) => (dt.labels[idx] = i18n.t(bld)));\n\t\tdt.datasets.forEach((ds) => (ds.label = i18n.t(ds.label)));\n\n\t\tlet max = 1;\n\t\tdt.datasets[0].data.forEach((d) => {\n\t\t\tif (d > max) max = d;\n\t\t});\n\t\tmax *= 1.4;\n\n\t\topt.scales.xAxis.max = max;\n\t\topt.plugins.datalabels = {\n\t\t\tanchor: \"end\",\n\t\t\talign: \"end\",\n\t\t\toffset: 8,\n\t\t\tformatter: function (value) {\n\t\t\t\treturn `฿ ${numberFormatter.withCommas(value)}`;\n\t\t\t},\n\t\t\tfont: { weight: \"500\", size: 16 },\n\t\t};\n\n\t\tdocument.getElementById(\"bc-electricity-bill\").remove();\n\t\tdocument.getElementById(\n\t\t\t\"wrapper-bc-electricity-bill\"\n\t\t).innerHTML = ``;\n\n\t\tlet ctx = document.getElementById(\"bc-electricity-bill\").getContext(\"2d\");\n\n\t\tbarChart = new Chart(ctx, {\n\t\t\ttype: \"bar\",\n\t\t\tdata: dt,\n\t\t\toptions: opt,\n\t\t\tplugins: [ChartDataLabels],\n\t\t});\n\t};\n\n\tcomponentDidMount() {\n\t\tChart.register(...registerables);\n\t}\n\n\tcomponentWillReceiveProps(nextProps) {\n\t\tlet { data, options, lsSelectedBuildingPrev, currentLanguage } = this.state;\n\n\t\tif (currentLanguage !== i18n.language) {\n\t\t\tthis.setState({ currentLanguage: i18n.language }, () =>\n\t\t\t\tthis.buildChart()\n\t\t\t);\n\t\t}\n\n\t\tif (\n\t\t\tJSON.stringify(this.props.bill_building) ===\n\t\t\t\tJSON.stringify(nextProps.bill_building) &&\n\t\t\tJSON.stringify(lsSelectedBuildingPrev) ===\n\t\t\t\tJSON.stringify(nextProps.lsSelectedBuilding) &&\n\t\t\tObject.values(data).length > 0\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet bill_building = {};\n\t\tObject.assign(bill_building, nextProps.bill_building);\n\n\t\tlet lsSelectedBuilding = nextProps.lsSelectedBuilding.slice();\n\n\t\tlet billTotal = 0;\n\t\tObject.entries(bill_building).forEach(([building, bill]) => {\n\t\t\tif (lsSelectedBuilding.includes(building)) billTotal += bill;\n\t\t});\n\n\t\tlet labels = [];\n\t\tlet lsData = [];\n\t\tlet lsColor = [];\n\n\t\tlet bill_building_sorted = Object.keys(bill_building)\n\t\t\t.sort()\n\t\t\t.reduce(\n\t\t\t\t(acc, key) => ({\n\t\t\t\t\t...acc,\n\t\t\t\t\t[key]: bill_building[key],\n\t\t\t\t}),\n\t\t\t\t{}\n\t\t\t);\n\n\t\tfor (let [building, bill] of Object.entries(bill_building_sorted)) {\n\t\t\tif (!lsSelectedBuilding.includes(building)) continue;\n\n\t\t\tlabels.push(building);\n\t\t\tlsData.push(bill);\n\t\t\tlsColor.push(\n\t\t\t\t\"#\" +\n\t\t\t\t\tcolorConverter.pickHex(\n\t\t\t\t\t\t\"d10909\",\n\t\t\t\t\t\t\"d1dbde\",\n\t\t\t\t\t\tparseFloat(bill / billTotal).toFixed(2)\n\t\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tlet datasets = [\n\t\t\t{\n\t\t\t\tlabel: \"Electricity Bill\",\n\t\t\t\tbackgroundColor: lsColor,\n\t\t\t\tborderColor: lsColor,\n\t\t\t\tdata: lsData,\n\t\t\t},\n\t\t];\n\n\t\tdata.labels = labels;\n\t\tdata.datasets = datasets;\n\n\t\tthis.setState({\n\t\t\tdata: data,\n\t\t\toptions: options,\n\t\t\tlsSelectedBuildingPrev: lsSelectedBuilding,\n\t\t});\n\n\t\tthis.buildChart();\n\t}\n\n\thandleDoubleClick() {\n\t\tif (barChart) barChart.resetZoom();\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t);\n\t}\n}\n\nexport default BarChartElectricityBill;\n","import React from \"react\";\nimport \"./MixedChartBillCompareDate.css\";\n\nimport { Chart, registerables } from \"chart.js\";\nimport zoomPlugin from \"chartjs-plugin-zoom\";\nimport \"chartjs-adapter-moment\";\n\nimport { Col } from \"reactstrap\";\nimport { RiFileExcel2Fill } from \"react-icons/ri\";\n\nimport http from \"../../../utils/http\";\nimport csv from \"../../../utils/csv\";\nimport dateFormatter from \"../../../utils/dateFormatter\";\n\nimport i18n from \"../../../i18n\";\n\nlet mixedChart;\n\nclass MixedChartBillCompareDate extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tlet dateFrom = this.props.dateFrom;\n\t\tlet dateTo = this.props.dateTo;\n\n\t\tthis.state = {\n\t\t\tlsSelectedBuilding: {},\n\t\t\tcompareTo: \"Target\",\n\t\t\tbillData_date: {},\n\t\t\tcompareData: [],\n\t\t\tlsPermission: JSON.parse(localStorage.getItem(\"lsPermission\")),\n\t\t\tcurrentLanguage: i18n.language,\n\n\t\t\t// Chart details\n\t\t\tdata: {},\n\t\t\toptions: {\n\t\t\t\tresponsive: true,\n\t\t\t\tanimation: false,\n\t\t\t\tmaintainAspectRatio: false,\n\t\t\t\tinteraction: {\n\t\t\t\t\tintersect: false,\n\t\t\t\t\taxis: \"x\",\n\t\t\t\t\tmode: \"index\",\n\t\t\t\t},\n\t\t\t\tscales: {\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tgrid: {\n\t\t\t\t\t\t\tdisplay: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tyAxis: {\n\t\t\t\t\t\tmin: 0,\n\t\t\t\t\t\tmax: 100,\n\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\tgrid: {\n\t\t\t\t\t\t\tdisplay: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tplugins: {\n\t\t\t\t\ttitle: {\n\t\t\t\t\t\tdisplay: false,\n\t\t\t\t\t},\n\t\t\t\t\tlegend: {\n\t\t\t\t\t\tdisplay: false,\n\t\t\t\t\t},\n\t\t\t\t\ttooltip: {\n\t\t\t\t\t\tenabled: true,\n\t\t\t\t\t\tpadding: 8,\n\t\t\t\t\t\tbackgroundColor: \"#F2F2F2\",\n\t\t\t\t\t\ttitleColor: \"#000\",\n\t\t\t\t\t\tbodyColor: \"#000\",\n\t\t\t\t\t\ttitleFont: { size: 16 },\n\t\t\t\t\t\tbodyFont: { size: 14 },\n\t\t\t\t\t\tbodySpacing: 10,\n\t\t\t\t\t},\n\t\t\t\t\tzoom: {\n\t\t\t\t\t\tpan: {\n\t\t\t\t\t\t\tenabled: true,\n\t\t\t\t\t\t\tmode: \"xy\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tzoom: {\n\t\t\t\t\t\t\twheel: { enabled: true },\n\t\t\t\t\t\t\tpinch: { enabled: true },\n\t\t\t\t\t\t\tmode: \"xy\",\n\t\t\t\t\t\t\tspeed: 100,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlimits: {\n\t\t\t\t\t\t\tx: { min: dateFrom, max: dateTo },\n\t\t\t\t\t\t\ty: { min: \"original\", max: \"original\" },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tthis.getBillDataDate = this.getBillDataDate.bind(this);\n\t\tthis.handleDoubleClick = this.handleDoubleClick.bind(this);\n\t\tthis.exportData = this.exportData.bind(this);\n\t}\n\n\tbuildChart = () => {\n\t\tlet {\n\t\t\tdata,\n\t\t\toptions,\n\t\t\tbill_building_strDate,\n\t\t\tcompareTo,\n\t\t\tlsSelectedBuilding,\n\t\t\tlsTarget,\n\t\t} = this.state;\n\n\t\tif (bill_building_strDate === undefined) return;\n\n\t\tlet labels = Object.keys(bill_building_strDate).sort(\n\t\t\t(a, b) => new Date(a).getTime() - new Date(b).getTime()\n\t\t);\n\n\t\tlet datasets = [\n\t\t\t{\n\t\t\t\tlabel: \"Latest\",\n\t\t\t\tbackgroundColor: \"#FFB800\",\n\t\t\t\tborderColor: \"#FFB800\",\n\t\t\t\tdata: [],\n\t\t\t\ttype: \"bar\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: compareTo,\n\t\t\t\tbackgroundColor: \"#E2E2E2\",\n\t\t\t\tborderColor: \"#E2E2E2\",\n\t\t\t\tfill: \"origin\",\n\t\t\t\tborderWidth: 2,\n\t\t\t\tpointRadius: 2,\n\t\t\t\tdata: [],\n\t\t\t\ttype: \"line\",\n\t\t\t},\n\t\t];\n\n\t\tlet latest = [];\n\t\tlet compareData = [];\n\n\t\tlet yMax = 0;\n\t\tlet idx = 0;\n\t\tfor (let date of labels) {\n\t\t\tlet currDate = new Date(date);\n\t\t\tlet currYear = currDate.getFullYear();\n\t\t\tlet currMonth = currDate.getMonth();\n\t\t\tlet currDay = currDate.getDate();\n\n\t\t\tfor (let [strDate, bill_building] of Object.entries(\n\t\t\t\tbill_building_strDate\n\t\t\t)) {\n\t\t\t\tlet date = new Date(strDate);\n\t\t\t\tlet year = date.getFullYear();\n\t\t\t\tlet month = date.getMonth();\n\t\t\t\tlet day = date.getDate();\n\n\t\t\t\tif (currMonth !== month || currDay !== day) continue;\n\n\t\t\t\tfor (let [building, bill] of Object.entries(bill_building)) {\n\t\t\t\t\tif (!lsSelectedBuilding.includes(building)) continue;\n\n\t\t\t\t\tif (year === currYear) {\n\t\t\t\t\t\tif (latest[idx] === undefined) latest[idx] = 0;\n\t\t\t\t\t\tlatest[idx] += Math.round(bill);\n\n\t\t\t\t\t\tif (latest[idx] > yMax) yMax = latest[idx];\n\t\t\t\t\t}\n\n\t\t\t\t\tif (compareData[idx] === undefined) compareData[idx] = 0;\n\n\t\t\t\t\tif (compareTo === \"Target\") {\n\t\t\t\t\t\tlet target = lsTarget.find(\n\t\t\t\t\t\t\t(target) =>\n\t\t\t\t\t\t\t\ttarget.month === month &&\n\t\t\t\t\t\t\t\ttarget.year === year &&\n\t\t\t\t\t\t\t\ttarget.building === building\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif (target !== undefined) {\n\t\t\t\t\t\t\tif (target.electricity_bill !== null) {\n\t\t\t\t\t\t\t\tcompareData[idx] += Math.round(target.electricity_bill / 30);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (compareTo === \"Average\") {\n\t\t\t\t\t\tif (year < currYear) compareData[idx] += bill;\n\t\t\t\t\t} else if (compareTo === \"Last Year\") {\n\t\t\t\t\t\tif (year === currYear - 1) compareData[idx] += bill;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (compareData[idx] > yMax) yMax = compareData[idx];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tidx++;\n\t\t}\n\n\t\tif (compareTo === \"Average\") {\n\t\t\tcompareData.forEach((_, idx) => compareData[(idx /= 3)]);\n\t\t}\n\n\t\tdatasets[0].data = latest;\n\t\tdatasets[1].data = compareData;\n\n\t\tdata.labels = labels.map((strDate) => {\n\t\t\treturn dateFormatter.ddmmyyyy(new Date(strDate));\n\t\t});\n\t\tdata.datasets = datasets;\n\n\t\toptions.scales.yAxis.max = Math.ceil(yMax);\n\t\toptions.plugins.zoom.limits.x.min = labels[0];\n\t\toptions.plugins.zoom.limits.x.max = labels[labels.length - 1];\n\n\t\tdata.datasets.forEach((ds) => (ds.label = i18n.t(ds.label)));\n\n\t\tdocument.getElementById(\"mc-bill-compare\").remove();\n\t\tdocument.getElementById(\n\t\t\t\"wrapper-mc-bill-compare\"\n\t\t).innerHTML = ``;\n\n\t\tlet ctx = document.getElementById(\"mc-bill-compare\").getContext(\"2d\");\n\t\tmixedChart = new Chart(ctx, {\n\t\t\ttype: \"bar\",\n\t\t\tdata: data,\n\t\t\toptions: options,\n\t\t});\n\t\tthis.setState({\n\t\t\tdata: data,\n\t\t});\n\t};\n\n\tcomponentDidMount() {\n\t\tChart.register(...registerables);\n\t\tChart.register(zoomPlugin);\n\t}\n\n\tcomponentWillReceiveProps(nextProps) {\n\t\tlet {\n\t\t\tlsSelectedBuilding,\n\t\t\tdateTo,\n\t\t\tdateFrom,\n\t\t\tcompareTo,\n\t\t\tdata,\n\t\t\tcurrentLanguage,\n\t\t} = this.state;\n\n\t\tif (currentLanguage !== i18n.language) {\n\t\t\tthis.setState({ currentLanguage: i18n.language }, () =>\n\t\t\t\tthis.buildChart()\n\t\t\t);\n\t\t}\n\n\t\tif (dateTo === undefined || dateFrom === undefined) {\n\t\t\tthis.setState(\n\t\t\t\t{\n\t\t\t\t\tlsSelectedBuilding: nextProps.lsSelectedBuilding,\n\t\t\t\t\tdateFrom: nextProps.dateFrom,\n\t\t\t\t\tdateTo: nextProps.dateTo,\n\t\t\t\t\tcompareTo: nextProps.compareTo,\n\t\t\t\t},\n\t\t\t\t() => this.getBillDataDate()\n\t\t\t);\n\t\t} else if (\n\t\t\t(lsSelectedBuilding === undefined ||\n\t\t\t\tnextProps.lsSelectedBuilding.length === lsSelectedBuilding.length) &&\n\t\t\tnextProps.compareTo === compareTo &&\n\t\t\tnextProps.dateFrom.getTime() === dateFrom.getTime() &&\n\t\t\tnextProps.dateTo.getTime() === dateTo.getTime() &&\n\t\t\tnextProps.compareTo === compareTo\n\t\t) {\n\t\t\treturn;\n\t\t} else if (\n\t\t\t(lsSelectedBuilding !== undefined &&\n\t\t\t\tnextProps.lsSelectedBuilding.length !==\n\t\t\t\t\tnextProps.lsSelectedBuilding.length) ||\n\t\t\tnextProps.dateFrom.getTime() !== dateFrom.getTime() ||\n\t\t\tnextProps.dateTo.getTime() !== dateTo.getTime()\n\t\t) {\n\t\t\tthis.setState(\n\t\t\t\t{\n\t\t\t\t\tlsSelectedBuilding: nextProps.lsSelectedBuilding,\n\t\t\t\t\tdateFrom: nextProps.dateFrom,\n\t\t\t\t\tdateTo: nextProps.dateTo,\n\t\t\t\t\tcompareTo: nextProps.compareTo,\n\t\t\t\t},\n\t\t\t\t() => this.getBillDataDate()\n\t\t\t);\n\t\t} else {\n\t\t\tthis.setState(\n\t\t\t\t{\n\t\t\t\t\tcompareTo: nextProps.compareTo,\n\t\t\t\t},\n\t\t\t\t() => this.buildChart()\n\t\t\t);\n\t\t}\n\t}\n\n\tasync getBillDataDate() {\n\t\ttry {\n\t\t\tlet { dateFrom, dateTo } = this.state;\n\n\t\t\tlet payload = {\n\t\t\t\tdate_from: dateFrom,\n\t\t\t\tdate_to: dateTo,\n\t\t\t};\n\n\t\t\tlet resp = await http.post(\"/api/bill/compare\", payload);\n\n\t\t\tthis.setState(\n\t\t\t\t{\n\t\t\t\t\tbill_building_strDate: resp.data.bill_building_date,\n\t\t\t\t\tlsTarget: resp.data.lsTarget,\n\t\t\t\t},\n\t\t\t\t() => this.buildChart()\n\t\t\t);\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\texportData() {\n\t\tlet { data, compareTo } = this.state;\n\n\t\tlet labels = data.labels;\n\t\tlet dataLatest = data.datasets[0].data;\n\t\tlet dataCompare = data.datasets[1].data;\n\n\t\tlet rows = [[]];\n\t\trows[0].push(\"Date\", \"Bill\", compareTo);\n\n\t\tlabels.forEach((d, idx) => {\n\t\t\tif (!rows[idx + 1]) rows[idx + 1] = [];\n\t\t\trows[idx + 1].push(\n\t\t\t\tdateFormatter.yyyymmddhhmmss_noOffset(d),\n\t\t\t\tdataLatest[idx],\n\t\t\t\tdataCompare[idx]\n\t\t\t);\n\t\t});\n\n\t\tcsv.exportFile(i18n.t(`Compare to`), rows);\n\t}\n\n\thandleDoubleClick() {\n\t\tif (mixedChart) mixedChart.resetZoom();\n\t}\n\n\trender() {\n\t\tlet { lsPermission } = this.state;\n\t\treturn (\n\t\t\t\n\t\t\t\t{lsPermission.find((p) => p.label === \"Export Information\") ? (\n\t\t\t\t\t\n\t\t\t\t) : (\n\t\t\t\t\t<>\n\t\t\t\t)}\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t);\n\t}\n}\n\nexport default MixedChartBillCompareDate;\n","import React from \"react\";\nimport \"./MixedChartBillCompare.css\";\n\nimport { Chart, registerables } from \"chart.js\";\nimport zoomPlugin from \"chartjs-plugin-zoom\";\nimport \"chartjs-adapter-moment\";\n\nimport { Col } from \"reactstrap\";\nimport { RiFileExcel2Fill } from \"react-icons/ri\";\n\nimport http from \"../../../utils/http\";\nimport csv from \"../../../utils/csv\";\n\nimport i18n from \"../../../i18n\";\n\nimport { lsMonth } from \"../../../utils/months\";\n\nlet mixedChart;\n\nclass MixedChartBillCompare extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n building: {},\n compareTo: \"Target\",\n billData_month: {},\n compareData: [],\n lsBuilding: [],\n lsPermission: JSON.parse(localStorage.getItem(\"lsPermission\")),\n currentLanguage: i18n.language,\n\n // Chart details\n data: {},\n options: {\n responsive: true,\n animation: false,\n maintainAspectRatio: false,\n interaction: {\n intersect: false,\n axis: \"x\",\n mode: \"index\",\n },\n scales: {\n xAxis: {\n grid: {\n display: false,\n },\n },\n yAxis: {\n min: 0,\n max: 100,\n display: true,\n grid: {\n display: false,\n },\n title: {\n display: true,\n text: \"Baht\",\n font: {\n weight: \"600\",\n },\n },\n },\n },\n plugins: {\n title: {\n display: false,\n },\n legend: {\n display: false,\n },\n tooltip: {\n enabled: true,\n padding: 8,\n backgroundColor: \"#F2F2F2\",\n titleColor: \"#000\",\n bodyColor: \"#000\",\n titleFont: { size: 16 },\n bodyFont: { size: 14 },\n bodySpacing: 10,\n },\n zoom: {\n pan: {\n enabled: true,\n mode: \"xy\",\n },\n zoom: {\n wheel: { enabled: true },\n pinch: { enabled: true },\n mode: \"xy\",\n speed: 100,\n },\n limits: {\n x: { min: \"original\", max: \"original\" },\n y: { min: \"original\", max: \"original\" },\n },\n },\n },\n },\n };\n\n this.getBillDataMonth = this.getBillDataMonth.bind(this);\n this.handleDoubleClick = this.handleDoubleClick.bind(this);\n this.exportData = this.exportData.bind(this);\n }\n\n buildChart = () => {\n let { data, options, billData_month, compareTo } = this.state;\n\n if (Object.keys(billData_month).length === 0) return;\n\n let datasets = [\n {\n label: \"Latest\",\n backgroundColor: \"#FFB800\",\n borderColor: \"#FFB800\",\n data: [],\n type: \"bar\",\n },\n {\n label: compareTo,\n backgroundColor: \"#E2E2E2\",\n borderColor: \"#E2E2E2\",\n fill: \"origin\",\n borderWidth: 2,\n pointRadius: 2,\n data: [],\n type: \"line\",\n },\n ];\n\n let yMax = 0;\n let month = new Date().getMonth();\n for (let i = 0; i < 12; i++) {\n if (month < 0) month += 12;\n\n let dataMonth = billData_month[month];\n\n datasets[0].data.unshift(dataMonth.latest);\n\n let compareData = datasets[1].data;\n if (compareTo === \"Target\") compareData.unshift(dataMonth.target);\n else if (compareTo === \"Average\") compareData.unshift(dataMonth.average);\n else if (compareTo === \"Last Year\")\n compareData.unshift(dataMonth.lastYear);\n\n for (let bill of Object.values(billData_month[month])) {\n if (bill > yMax) yMax = bill;\n }\n\n month--;\n }\n\n let labels = [];\n for (let monthIdx = new Date().getMonth(); labels.length < 12; monthIdx--) {\n if (monthIdx < 0) monthIdx += 12;\n labels.unshift(i18n.t(lsMonth[monthIdx % 12]));\n }\n\n data.labels = labels;\n data.datasets = datasets;\n options.scales.yAxis.max = Math.ceil(yMax);\n options.scales.yAxis.title.text = i18n.t(options.scales.yAxis.title.text);\n\n data.datasets.forEach((ds) => (ds.label = i18n.t(ds.label)));\n\n document.getElementById(\"mc-bill-compare\").remove();\n document.getElementById(\n \"wrapper-mc-bill-compare\"\n ).innerHTML = ``;\n\n let ctx = document.getElementById(\"mc-bill-compare\").getContext(\"2d\");\n\n mixedChart = new Chart(ctx, {\n type: \"bar\",\n data: data,\n options: options,\n });\n\n this.setState({\n data: data,\n });\n };\n\n componentDidMount() {\n Chart.register(...registerables);\n Chart.register(zoomPlugin);\n }\n\n componentWillReceiveProps(nextProps) {\n let { currentLanguage } = this.state;\n\n if (currentLanguage !== i18n.language) {\n this.setState({ currentLanguage: i18n.language });\n }\n\n let lsBuilding = nextProps.lsBuilding;\n let compareTo = nextProps.compareTo;\n let billData_month = nextProps.billData_month;\n\n if (\n (lsBuilding === undefined ||\n this.props.lsBuilding.length === lsBuilding.length) &&\n this.props.compareTo === compareTo &&\n Object.keys(billData_month).length > 0\n ) {\n this.setState(\n {\n lsBuilding: lsBuilding,\n billData_month: billData_month,\n },\n () => this.buildChart()\n );\n } else if (\n lsBuilding !== undefined &&\n this.props.lsBuilding.length !== nextProps.lsBuilding.length &&\n Object.keys(billData_month).length > 0\n ) {\n this.setState(\n {\n lsBuilding: lsBuilding,\n billData_month: billData_month,\n },\n () => this.buildChart()\n );\n } else {\n this.setState(\n {\n compareTo: compareTo,\n },\n () => this.buildChart()\n );\n }\n }\n\n async getBillDataMonth() {\n try {\n let { lsBuilding } = this.state;\n\n let payload = {\n building_id: lsBuilding.map(function (building) {\n return building.id;\n }),\n };\n\n let resp = await http.post(\"/building/bill/compare\", payload);\n\n this.setState(\n {\n billData_month: resp.data,\n },\n () => this.buildChart()\n );\n } catch (err) {\n console.log(err);\n return err.response;\n }\n }\n\n exportData() {\n let { data, compareTo } = this.state;\n\n let labels = data.labels;\n let dataMonth = data.datasets[0].data;\n let dataMonthCompare = data.datasets[1].data;\n\n let rows = [[]];\n rows[0].push(\"Month\", \"Bill\", compareTo);\n\n dataMonth.forEach((d, idx) => {\n if (!rows[idx + 1]) rows[idx + 1] = [];\n rows[idx + 1].push(labels[idx], d, dataMonthCompare[idx]);\n });\n\n csv.exportFile(i18n.t(`Compare to`), rows);\n }\n\n handleDoubleClick() {\n if (mixedChart) mixedChart.resetZoom();\n }\n\n render() {\n let { lsPermission } = this.state;\n return (\n \n {lsPermission.find((p) => p.label === \"Export Information\") ? (\n \n ) : (\n <>\n )}\n \n \n \n \n );\n }\n}\n\nexport default MixedChartBillCompare;\n","import React from \"react\";\nimport \"./MixedChartKwTempHumi.css\";\n\nimport { Chart, registerables } from \"chart.js\";\nimport zoomPlugin from \"chartjs-plugin-zoom\";\nimport \"chartjs-adapter-moment\";\n\nimport { RiFileExcel2Fill } from \"react-icons/ri\";\n\nimport csv from \"../../../utils/csv\";\nimport dateFormatter from \"../../../utils/dateFormatter\";\n\nimport i18n from \"../../../i18n\";\n\nlet mixedChart;\n\nclass MixedChartKwTempHumi extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n lsBuilding: this.props.lsBuilding,\n lsSelectedBuildingPrev: [],\n lsPermission: JSON.parse(localStorage.getItem(\"lsPermission\")),\n currentLanguage: i18n.language,\n\n // Chart details\n data: {},\n options: {\n responsive: true,\n animation: false,\n maintainAspectRatio: false,\n interaction: {\n intersect: false,\n axis: \"x\",\n mode: \"index\",\n },\n scales: {\n xAxis: {\n type: \"time\",\n time: {\n displayFormats: {\n millisecond: \"HH:mm:ss.SSS\",\n second: \"HH:mm:ss\",\n minute: \"HH:mm\",\n hour: \"HH:mm\",\n },\n },\n grid: {\n display: false,\n },\n },\n yTemp: {\n display: true,\n position: \"left\",\n grid: { display: false },\n title: {\n display: true,\n text: \"Temperature\",\n font: {\n size: 16,\n weight: \"600\",\n },\n },\n },\n yHumi: {\n display: true,\n position: \"right\",\n grid: { display: false },\n title: {\n display: true,\n text: \"Humidity\",\n font: {\n size: 16,\n weight: \"600\",\n },\n },\n },\n yKw: {\n display: true,\n position: \"left\",\n grid: { display: false },\n title: {\n display: true,\n text: \"kW\",\n font: {\n weight: \"600\",\n },\n },\n },\n },\n plugins: {\n title: {\n display: true,\n text: \"Air Conditioner Power vs. Temperature vs. Humidity\",\n align: \"start\",\n font: { weight: \"bold\", size: 20 },\n padding: {\n bottom: 10,\n },\n },\n legend: {\n display: true,\n position: \"top\",\n labels: { usePointStyle: true },\n },\n tooltip: {\n enabled: true,\n padding: 8,\n backgroundColor: \"#F2F2F2\",\n titleColor: \"#000\",\n bodyColor: \"#000\",\n titleFont: { size: 16 },\n bodyFont: { size: 14 },\n bodySpacing: 10,\n },\n zoom: {\n pan: {\n enabled: true,\n mode: \"xy\",\n },\n zoom: {\n wheel: { enabled: true },\n pinch: { enabled: true },\n mode: \"xy\",\n speed: 100,\n },\n limits: {\n x: { min: this.props.dateFrom, max: this.props.dateTo },\n y: { min: \"original\", max: \"original\" },\n },\n },\n },\n },\n };\n\n this.handleDoubleClick = this.handleDoubleClick.bind(this);\n this.exportData = this.exportData.bind(this);\n }\n\n buildChart = () => {\n let { data, options } = this.state;\n let dt = JSON.parse(JSON.stringify(data));\n let opt = JSON.parse(JSON.stringify(options));\n\n opt.plugins.zoom.limits.x.min = new Date(opt.plugins.zoom.limits.x.min);\n opt.plugins.zoom.limits.x.max = new Date(opt.plugins.zoom.limits.x.max);\n\n opt.plugins.title.text = i18n.t(opt.plugins.title.text);\n opt.scales.yTemp.title.text = i18n.t(opt.scales.yTemp.title.text);\n opt.scales.yHumi.title.text = i18n.t(opt.scales.yHumi.title.text);\n opt.plugins.tooltip.callbacks = {\n title: function (context) {\n return dateFormatter.ddmmmyyyyhhmm_noOffset(new Date(context[0].label));\n },\n };\n\n dt.datasets.forEach((ds) => (ds.label = i18n.t(ds.label)));\n\n document.getElementById(\"mc-kw-temp-humi\").remove();\n document.getElementById(\n \"wrapper-mc-kw-temp-humi\"\n ).innerHTML = ``;\n\n let ctx = document.getElementById(\"mc-kw-temp-humi\").getContext(\"2d\");\n\n mixedChart = new Chart(ctx, {\n type: \"bar\",\n data: dt,\n options: opt,\n });\n };\n\n componentDidMount() {\n Chart.register(...registerables);\n Chart.register(zoomPlugin);\n }\n\n componentWillReceiveProps(nextProps) {\n let { data, options, lsSelectedBuildingPrev, currentLanguage } = this.state;\n\n if (currentLanguage !== i18n.language) {\n this.setState({ currentLanguage: i18n.language }, () =>\n this.buildChart()\n );\n }\n\n if (\n JSON.stringify(this.props.lsKw_system_building) ===\n JSON.stringify(nextProps.lsKw_system_building) &&\n JSON.stringify(lsSelectedBuildingPrev) ===\n JSON.stringify(nextProps.lsSelectedBuilding) &&\n JSON.stringify(this.props.lsTempHumi) ===\n JSON.stringify(nextProps.lsTempHumi) &&\n Object.values(data).length > 0\n ) {\n return;\n }\n\n let lsKw_system_building = {};\n Object.assign(lsKw_system_building, nextProps.lsKw_system_building);\n\n let lsTempHumi = [];\n Object.assign(lsTempHumi, nextProps.lsTempHumi);\n\n let lsSelectedBuilding = nextProps.lsSelectedBuilding.slice();\n\n if (Object.keys(lsKw_system_building).length <= 1) return;\n\n let labels = [];\n let datasets = [];\n\n let building_lsKwMain = {};\n\n for (let [building, lsKw_system] of Object.entries(lsKw_system_building)) {\n if (!lsSelectedBuilding.includes(building)) continue;\n\n if (!building_lsKwMain[building]) building_lsKwMain[building] = [];\n\n let lsKwMain = building_lsKwMain[building];\n\n let prevDatetime;\n for (let logKwMain of lsKw_system[\"Main\"]) {\n let datetime = new Date(logKwMain.datetime);\n let kw = logKwMain.kw;\n\n if (!labels.find((d) => d.getTime() === datetime.getTime())) {\n labels.push(new Date(datetime));\n }\n\n if (!lsSelectedBuilding.includes(building)) {\n prevDatetime = datetime;\n continue;\n }\n\n if (prevDatetime) {\n if (datetime.getTime() === prevDatetime.getTime()) {\n lsKwMain[lsKwMain.length - 1] += kw;\n } else lsKwMain.push(kw);\n } else lsKwMain.push(kw);\n\n prevDatetime = datetime;\n }\n }\n\n let lsKwMain = [];\n\n for (let lsKw of Object.values(building_lsKwMain)) {\n lsKw.forEach((kwMain, idx) => {\n if (!lsKwMain[idx]) lsKwMain[idx] = 0;\n lsKwMain[idx] += kwMain;\n });\n }\n\n let lsTemp = [];\n let lsHumi = [];\n for (let date of labels) {\n let log = lsTempHumi.find(\n (d) =>\n Math.abs(new Date(d.data_datetime).getTime() - date.getTime()) <= 1000\n );\n if (log === undefined) {\n lsTemp.push(0);\n lsHumi.push(0);\n continue;\n }\n\n let humidity = parseFloat(log.humidity).toFixed(2);\n let temperature = parseFloat(log.temperature).toFixed(2);\n\n lsTemp.push(temperature);\n lsHumi.push(humidity);\n }\n\n let datasetMain = {\n label: \"kW\",\n backgroundColor: \"#FFB800\",\n borderColor: \"#FFB800\",\n data: lsKwMain,\n type: \"bar\",\n yAxisID: \"yKw\",\n };\n\n let datasetTemp = {\n label: \"Temperature\",\n backgroundColor: \"rgb(251, 233, 221, 0.5)\",\n borderColor: \"#FBE9DD\",\n fill: \"origin\",\n borderWidth: 2,\n pointRadius: 1,\n data: lsTemp,\n type: \"line\",\n yAxisID: \"yTemp\",\n };\n\n let datasetHumi = {\n label: \"Humidity\",\n backgroundColor: \"rgb(212, 222, 231, 0.5)\",\n borderColor: \"#D4DEE7\",\n fill: \"origin\",\n borderWidth: 2,\n pointRadius: 1,\n data: lsHumi,\n type: \"line\",\n yAxisID: \"yHumi\",\n };\n\n datasets.push(datasetTemp, datasetHumi, datasetMain);\n\n data.labels = labels;\n data.datasets = datasets;\n\n options.scales.xAxis.min = labels[0];\n options.scales.xAxis.max = labels[labels.length - 1];\n\n options.plugins.zoom.limits.x.min = labels[0];\n options.plugins.zoom.limits.x.max = labels[labels.length - 1];\n\n this.setState({\n data: data,\n options: options,\n componentShouldUpdate: true,\n lsSelectedBuildingPrev: lsSelectedBuilding,\n });\n\n this.buildChart();\n }\n\n exportData() {\n let { data, compareTo } = this.state;\n\n let labels = data.labels;\n let dataTemp = data.datasets[0].data;\n let dataHumi = data.datasets[1].data;\n let dataKw = data.datasets[2].data;\n\n let rows = [[]];\n rows[0].push(\"Datetime\", \"kW\", \"Temperature\", \"Humidity\", compareTo);\n\n labels.forEach((d, idx) => {\n if (!rows[idx + 1]) rows[idx + 1] = [];\n rows[idx + 1].push(\n dateFormatter.yyyymmddhhmmss_noOffset(d),\n dataKw[idx],\n dataTemp[idx],\n dataHumi[idx]\n );\n });\n\n csv.exportFile(\n i18n.t(`Air Conditioner Power vs. Temperature vs. Humidity`),\n rows\n );\n }\n\n handleDoubleClick() {\n if (mixedChart) mixedChart.resetZoom();\n }\n\n render() {\n let { lsPermission } = this.state;\n return (\n <>\n {lsPermission.find((p) => p.label === \"Export Information\") ? (\n \n ) : (\n <>\n )}\n \n \n \n \n );\n }\n}\n\nexport default MixedChartKwTempHumi;\n","import React from \"react\";\n\n// Styling and Graphics\nimport \"./Dashboard.css\";\nimport { Row, Col, Label, Input, Button, Form, FormGroup } from \"reactstrap\";\nimport { RiFileExcel2Fill } from \"react-icons/ri\";\n\n// Charts and Diagrams\nimport PieChartEnergySource from \"./PieChartEnergySource/PieChartEnergySource\";\nimport PieChartSystem from \"./PieChartSystem/PieChartSystem\";\nimport LineChartBuildingPowerConsumption from \"./LineChartBuildingPowerConsumption/LineChartBuildingPowerConsumption\";\nimport BarChartSystemPowerConsumption from \"./BarChartSystemPowerConsumption/BarChartSystemPowerConsumption\";\nimport BarChartElectricityBill from \"./BarChartElectricityBill/BarChartElectricityBill\";\nimport MixedChartBillCompareDate from \"./MixedChartBillCompareDate/MixedChartBillCompareDate\";\nimport MixedChartBillCompare from \"./MixedChartBillCompare/MixedChartBillCompare\";\n\n// Utils\nimport http from \"../../utils/http\";\nimport dateFormatter from \"../../utils/dateFormatter\";\nimport numberFormatter from \"../../utils/numberFormatter\";\n\n// API Service\nimport {\n subjectPowerMeterData,\n subjectSolarData,\n apiService,\n} from \"../../apiService\";\nimport csv from \"../../utils/csv\";\nimport MixedChartKwTempHumi from \"./MixedChartKwTempHumi/MixedChartKwTempHumi\";\n\nimport { withTranslation } from \"react-i18next\";\nimport i18n from \"../../i18n\";\n\nimport { lsMonthFull } from \"../../utils/months\";\n\nlet subscriberPowerMeterData;\nlet subscriberSolarData;\n\nclass Dashboard extends React.Component {\n constructor(props) {\n super(props);\n\n let dateFrom = new Date(new Date().setHours(0, 0, 0, 0));\n let dateTo = new Date();\n\n this.state = {\n dateFrom: dateFrom,\n dateTo: dateTo,\n displayDateFrom: dateFrom,\n displayDateTo: dateTo,\n lsBuilding: [],\n lsSelectedBuilding: [],\n kwh_system_building: {},\n lsKw_system_building: {},\n bill_building: {},\n tariff_building: {},\n targetBill_building: {},\n kwhSolar: 0,\n compareTo: \"Target\",\n lsTempHumi: [],\n billData_month: {},\n lsPermission: JSON.parse(localStorage.getItem(\"lsPermission\")),\n isLoadingData: false,\n };\n\n this.updateData = this.updateData.bind(this);\n\n this.getAllBuilding = this.getAllBuilding.bind(this);\n this.getAllSystem = this.getAllSystem.bind(this);\n this.getAllTargetByMonthYear = this.getAllTargetByMonthYear.bind(this);\n this.getSolarCurrentMonth = this.getSolarCurrentMonth.bind(this);\n this.getDataIaqByDatetime = this.getDataIaqByDatetime.bind(this);\n this.getBillDataMonth = this.getBillDataMonth.bind(this);\n\n this.handleInputDateChange = this.handleInputDateChange.bind(this);\n this.onClickApply = this.onClickApply.bind(this);\n this.onClickBuilding = this.onClickBuilding.bind(this);\n this.onClickAllBuilding = this.onClickAllBuilding.bind(this);\n this.onClickCompareTo = this.onClickCompareTo.bind(this);\n\n this.exportPieCharts = this.exportPieCharts.bind(this);\n this.exportLineChartPower = this.exportLineChartPower.bind(this);\n this.exportBarChartPower = this.exportBarChartPower.bind(this);\n this.exportBarChartElectricityBill =\n this.exportBarChartElectricityBill.bind(this);\n }\n\n async componentDidMount() {\n await this.getAllBuilding();\n await this.updateData();\n\n subscriberPowerMeterData = subjectPowerMeterData.subscribe((dataPower) => {\n let { tariff_building } = this.state;\n let kwh_system_building = {};\n let lsKw_system_building = {};\n let bill_building = {};\n\n if (!dataPower) return;\n\n let lsDeviceFirst = [];\n let lsDeviceLast = [];\n\n for (let data of dataPower.slice().reverse()) {\n let building = data.building;\n let device = data.device;\n let kwh = Math.round((data.kwh * 100) / 100);\n let system = data.system;\n let floor = data.floor;\n\n if (system === \"Main\" && floor !== null) continue;\n\n if (!lsDeviceLast.find((d) => d === device) && kwh !== 0) {\n lsDeviceLast.push(device);\n } else continue;\n\n if (kwh_system_building[building] === undefined)\n kwh_system_building[building] = {};\n\n if (kwh_system_building[building][system] === undefined)\n kwh_system_building[building][system] = 0;\n\n kwh_system_building[building][system] += kwh;\n }\n\n for (let data of dataPower) {\n let datetime = new Date(data.data_datetime);\n let building = data.building;\n let device = data.device;\n let kwh = Math.round((data.kwh * 100) / 100);\n let kw = Math.round((data.kw * 100) / 100);\n let system = data.system;\n let floor = data.floor;\n\n if (system === \"Main\" && floor !== null) continue;\n\n if (lsKw_system_building[building] === undefined)\n lsKw_system_building[building] = {};\n\n if (lsKw_system_building[building][system] === undefined) {\n lsKw_system_building[building][system] = [];\n }\n\n lsKw_system_building[building][system].push({\n datetime: datetime,\n kw: kw,\n });\n\n if (!lsDeviceFirst.find((d) => d === device) && kwh !== 0)\n lsDeviceFirst.push(device);\n else continue;\n\n kwh_system_building[building][system] -= kwh;\n }\n\n for (let [building, kwh_system] of Object.entries(kwh_system_building)) {\n let tariff = 4;\n if (tariff_building[building] !== undefined) {\n if (tariff_building[building] !== null) {\n tariff = tariff_building[building];\n }\n }\n\n if (bill_building[building]) bill_building[building] = 0;\n bill_building[building] = kwh_system.Main * tariff;\n }\n\n this.setState({\n kwh_system_building: kwh_system_building,\n lsKw_system_building: lsKw_system_building,\n bill_building: bill_building,\n isLoadingData: false,\n });\n });\n\n subscriberSolarData = subjectSolarData.subscribe((dataSolar) => {\n if (!dataSolar) return;\n if (dataSolar.length === 0) return;\n\n let kwhSolar = dataSolar[dataSolar.length - 1].kwh - dataSolar[0].kwh;\n\n this.setState({\n kwhSolar: kwhSolar,\n });\n });\n }\n\n componentWillUnmount() {\n if (subscriberPowerMeterData) subscriberPowerMeterData.unsubscribe();\n if (subscriberSolarData) subscriberSolarData.unsubscribe();\n clearInterval(this.intervalTime);\n clearInterval(this.intervalApi);\n }\n\n async updateData() {\n let { dateFrom, dateTo } = this.state;\n\n apiService.updatePowerMeterData(dateFrom, dateTo);\n apiService.updateSolarData(dateFrom, dateTo);\n this.getDataIaqByDatetime(dateFrom, dateTo);\n\n this.setState({\n displayDateFrom: dateFrom,\n displayDateTo: dateTo,\n isLoadingData: true,\n });\n }\n\n async getAllBuilding() {\n try {\n let resp = await http.get(\"/building/all\");\n\n this.setState({ lsBuilding: resp.data }, () => this.getBillDataMonth());\n } catch (err) {\n console.log(err);\n return err.response;\n }\n }\n\n async getAllSystem() {\n try {\n let resp = await http.get(\"/system/all\");\n\n this.setState({ lsSystem: resp.data });\n } catch (err) {\n console.log(err);\n return err.response;\n }\n }\n\n async getAllTargetByMonthYear() {\n try {\n let today = new Date();\n let payload = {\n month: today.getMonth(),\n year: today.getFullYear(),\n };\n\n let resp = await http.post(\"/target/monthyear\", payload);\n let lsTarget = resp.data;\n\n let tariff_building = {};\n let targetBill_building = {};\n for (let target of lsTarget) {\n let building = target.building;\n let tariff = target.tariff;\n let bill = target.electricity_bill;\n\n tariff_building[building] = tariff;\n targetBill_building[building] = bill;\n }\n\n this.setState({\n tariff_building: tariff_building,\n targetBill_building: targetBill_building,\n });\n } catch (err) {\n console.log(err);\n return err.response;\n }\n }\n\n async getSolarCurrentMonth() {\n try {\n let month = new Date().getMonth();\n\n let payload = {\n month: month,\n };\n\n let resp = await http.post(\"/api/solar/month\", payload);\n\n this.setState({ kwhSolarMonth: resp.data.kwhSolar });\n } catch (err) {\n console.log(err);\n return err.response;\n }\n }\n\n async getDataIaqByDatetime(dateStart, dateEnd) {\n try {\n let payload = {\n start: dateStart,\n end: dateEnd,\n };\n\n let resp = await http.post(\"/api/iaq/datetime\", payload);\n\n this.setState({\n lsTempHumi: resp.data,\n });\n } catch (err) {\n console.log(err);\n return err.response;\n }\n }\n\n async getBillDataMonth() {\n try {\n let { lsBuilding } = this.state;\n\n let payload = {\n building_id: lsBuilding.map(function (building) {\n return building.id;\n }),\n };\n\n let resp = await http.post(\"/building/bill/compare\", payload);\n\n this.setState({\n billData_month: resp.data,\n });\n } catch (err) {\n console.log(err);\n return err.response;\n }\n }\n\n handleInputDateChange(e) {\n this.setState({ [e.target.name]: new Date(e.target.value) });\n }\n\n onClickApply() {\n this.updateData();\n }\n\n onClickBuilding(building) {\n let { lsSelectedBuilding, lsBuilding } = this.state;\n\n if (lsSelectedBuilding.length === lsBuilding.length) {\n lsSelectedBuilding = [building];\n } else if (!lsSelectedBuilding.includes(building)) {\n lsSelectedBuilding.push(building);\n this.setState({ lsSelectedBuilding: lsSelectedBuilding });\n } else {\n lsSelectedBuilding = lsSelectedBuilding.filter((b) => b !== building);\n }\n\n this.setState({ lsSelectedBuilding: lsSelectedBuilding });\n }\n\n onClickAllBuilding() {\n let { lsSelectedBuilding, lsBuilding } = this.state;\n lsSelectedBuilding = lsBuilding.map((building) => building.label);\n this.setState({ lsSelectedBuilding: lsSelectedBuilding });\n }\n\n onClickCompareTo(compareTo) {\n this.setState({\n compareTo: compareTo,\n });\n }\n\n exportPieCharts() {\n let { lsBuilding, lsSelectedBuilding, kwh_system_building, kwhSolar } =\n this.state;\n\n let kwhMainTotal = 0;\n let kwhAcTotal = 0;\n\n if (lsSelectedBuilding.length === 0) {\n lsSelectedBuilding = lsBuilding.map((building) => building.label);\n }\n\n for (let building of lsSelectedBuilding) {\n if (kwh_system_building[building]) {\n if (kwh_system_building[building][\"Main\"])\n kwhMainTotal += kwh_system_building[building][\"Main\"];\n\n if (kwh_system_building[building][\"Air Conditioner\"])\n kwhAcTotal += kwh_system_building[building][\"Air Conditioner\"];\n }\n }\n\n let rows = [[]];\n\n rows[0].push(\"MEA\", \"Solar Cells\");\n rows[1] = [kwhMainTotal, kwhSolar];\n rows[2] = [\"\", \"\"];\n rows[3] = [\"Air Conditioner\", \"Others\"];\n rows[4] = [kwhAcTotal, kwhMainTotal - kwhAcTotal];\n\n csv.exportFile(i18n.t(`Dashboard Pie Charts`), rows);\n }\n\n exportLineChartPower() {\n let { lsKw_system_building } = this.state;\n\n let rows = [[]];\n rows[0].push(\"Datetime\");\n\n for (let [building, lsKw_system] of Object.entries(lsKw_system_building)) {\n rows[0].push(building);\n\n let lsLogKwMain = [];\n if (lsKw_system[\"Main\"]) {\n lsKw_system[\"Main\"].forEach((log) => lsLogKwMain.push(log));\n }\n\n let lsLogKwMain_clean = [];\n lsLogKwMain.forEach(function (log) {\n if (!this[log.datetime]) {\n this[log.datetime] = { datetime: log.datetime, kw: 0 };\n lsLogKwMain_clean.push(this[log.datetime]);\n }\n this[log.datetime].kw += log.kw;\n }, Object.create(null));\n\n lsLogKwMain_clean.forEach((log, idx) => {\n if (!rows[idx + 1]) {\n rows[idx + 1] = [];\n rows[idx + 1].push(\n dateFormatter.yyyymmddhhmmss_noOffset(log.datetime)\n );\n }\n rows[idx + 1].push(log.kw);\n });\n }\n\n csv.exportFile(`${i18n.t(`Power`)} (kW)`, rows);\n }\n\n exportBarChartPower() {\n let { lsKw_system_building } = this.state;\n\n let lsLogKwMain = [];\n let lsLogKwAc = [];\n\n let lsLogKwMain_clean = [];\n let lsLogKwAc_clean = [];\n let lsLogKwOthers_clean = [];\n\n for (let [_, lsKw_system] of Object.entries(lsKw_system_building)) {\n if (lsKw_system[\"Main\"]) {\n lsKw_system[\"Main\"].forEach((log) => lsLogKwMain.push(log));\n }\n\n if (lsKw_system[\"Air Conditioner\"]) {\n lsKw_system[\"Air Conditioner\"].forEach((log) => lsLogKwAc.push(log));\n }\n }\n\n lsLogKwMain.slice().forEach(function (log) {\n if (!this[log.datetime]) {\n this[log.datetime] = { datetime: log.datetime, kw: 0 };\n lsLogKwMain_clean.push(this[log.datetime]);\n }\n this[log.datetime].kw += log.kw;\n }, Object.create(null));\n\n lsLogKwAc.slice().forEach(function (log) {\n if (!this[log.datetime]) {\n this[log.datetime] = { datetime: log.datetime, kw: 0 };\n lsLogKwAc_clean.push(this[log.datetime]);\n }\n this[log.datetime].kw += log.kw;\n }, Object.create(null));\n\n lsLogKwMain_clean.forEach((logKwMain, idx) => {\n if (lsLogKwAc[idx]) {\n lsLogKwOthers_clean.push({\n datetime: logKwMain.datetime,\n kw: logKwMain.kw - lsLogKwAc[idx].kw,\n });\n } else lsLogKwOthers_clean.push(logKwMain);\n });\n\n let rows = [[]];\n rows[0].push(\"Datetime\", \"kW - Air Conditioner\", \"kW - Others\");\n\n lsLogKwAc_clean.forEach((logKwAc, idx) => {\n if (!rows[idx + 1]) rows[idx + 1] = [];\n rows[idx + 1].push(\n dateFormatter.yyyymmddhhmmss_noOffset(logKwAc.datetime),\n logKwAc.kw,\n lsLogKwOthers_clean[idx].kw\n );\n });\n\n csv.exportFile(`${i18n.t(`Power`)} (kW)`, rows);\n }\n\n exportBarChartElectricityBill() {\n let { bill_building } = this.state;\n let rows = [[]];\n rows[0].push(\"Building\", \"Bill (THB)\");\n\n Object.entries(bill_building).forEach(([building, bill]) => {\n rows.push([building, bill]);\n });\n\n csv.exportFile(i18n.t(`Electricity Bill`), rows);\n }\n\n render() {\n let {\n dateFrom,\n dateTo,\n displayDateFrom,\n displayDateTo,\n lsBuilding,\n lsSelectedBuilding,\n kwh_system_building,\n lsKw_system_building,\n bill_building,\n kwhSolar,\n compareTo,\n lsTempHumi,\n billData_month,\n lsPermission,\n isLoadingData,\n } = this.state;\n\n let kwhMainTotal = 0;\n let kwhAcTotal = 0;\n\n if (lsSelectedBuilding.length === 0) {\n lsSelectedBuilding = lsBuilding.map((building) => building.label);\n }\n\n for (let building of lsSelectedBuilding) {\n if (kwh_system_building[building]) {\n if (kwh_system_building[building][\"Main\"])\n kwhMainTotal += kwh_system_building[building][\"Main\"];\n\n if (kwh_system_building[building][\"Air Conditioner\"])\n kwhAcTotal += kwh_system_building[building][\"Air Conditioner\"];\n }\n }\n\n const { t } = this.props;\n\n if (!lsSelectedBuilding.includes(\"Navamin\")) {\n kwhSolar = 0;\n }\n\n return (\n
\n
\n {/* ******************************** Filter Pane *****************************/}\n
\n
{t(\"Filter\")}
\n\n {/* ****************************** Filter Form **************************** */}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n {/* ****************************** Building Section **************************** */}\n
\n

{t(\"Building\")}

\n \n \n \n \n ({t(\"All\")})\n \n {lsBuilding.map((bld) => (\n
\n \n \n this.onClickBuilding(bld.label)}\n checked={lsSelectedBuilding.includes(bld.label)}\n />\n \n \n
\n \n {t(`${bld.label}`)}\n \n
\n ))}\n
\n\n {/* ****************************** Footer Note **************************** */}\n
\n *{t(\"Note\")}{\" \"}\n {t(\"Electricity bill is estimated\")}\n
\n
\n
\n {/* ******************************** Center Section *****************************/}\n
\n {/* ****************************** Date Row *****************************/}\n
\n {displayDateFrom.getDate() + \" \"}\n {t(`${lsMonthFull[displayDateFrom.getMonth()]}`)}\n {\" \" +\n (i18n.language === \"th\"\n ? displayDateFrom.getFullYear() + 543\n : displayDateFrom.getFullYear()) +\n \" \"}\n {dateFormatter.hhmm(displayDateFrom) + \" - \"}\n {displayDateTo.getDate() + \" \"}\n {t(`${lsMonthFull[displayDateTo.getMonth()]}`)}\n {\" \" +\n (i18n.language === \"th\"\n ? displayDateTo.getFullYear() + 543\n : displayDateTo.getFullYear()) +\n \" \"}\n {dateFormatter.hhmm(displayDateTo)}\n\n {isLoadingData ? (\n {t(\"Loading\")}...\n ) : (\n <>\n )}\n
\n\n {/* ****************************** Total Energy Consumption Pane *****************************/}\n
\n
\n {lsPermission.find((p) => p.label === \"Export Information\") ? (\n \n ) : (\n <>\n )}\n
\n
\n \n {t(\"Total Energy Consumption\")}\n \n \n {numberFormatter.withCommas(Math.round(kwhMainTotal))}\n \n {t(\"kWh\")}\n
\n
\n
\n
{t(\"From\")}
\n
\n {t(\"MEA\")}\n
\n
\n {\" \"}\n {t(\"Solar Cells\")}\n
\n
\n
\n \n
\n
\n
{t(\"Used in\")}
\n
\n {\" \"}\n {t(\"Air Conditioner\")}\n
\n
\n {t(\"Others\")}\n
\n
\n
\n \n
\n
\n
\n\n {/* ****************************** Power (kW) Charts *****************************/}\n
\n
\n {lsPermission.find((p) => p.label === \"Export Information\") ? (\n \n ) : (\n <>\n )}\n \n
\n
\n {lsPermission.find((p) => p.label === \"Export Information\") ? (\n \n ) : (\n <>\n )}\n \n
\n
\n
\n\n {/* ******************************** Right Section *****************************/}\n
\n
\n {lsPermission.find((p) => p.label === \"Export Information\") ? (\n \n ) : (\n <>\n )}\n \n
\n
\n \n \n
\n \n {t(\"Electricity Bill\")} {t(\"Compare to\")}\n \n \n \n \n \n \n \n \n \n \n
\n \n {displayDateFrom.getDate() === displayDateTo.getDate() ? (\n \n ) : (\n \n )}\n
\n
\n
\n \n
\n
\n \n );\n }\n}\n\nexport default withTranslation()(Dashboard);\n","import React from \"react\";\n\n// Charts and Diagrams\nimport BarChartSystemPowerConsumption from \"./BarChartSystemPowerConsumption/BarChartSystemPowerConsumption\";\nimport PieChartSystem from \"./PieChartSystem/PieChartSystem\";\nimport MixedChartBillCompare from \"./MixedChartBillCompare/MixedChartBillCompare\";\n\n// Styling and Graphics\nimport \"./Building.css\";\nimport { MdPeople } from \"react-icons/md\";\nimport { RiFileExcel2Fill } from \"react-icons/ri\";\nimport { FaUser } from \"react-icons/fa\";\nimport {\n\tContainer,\n\tRow,\n\tCol,\n\tLabel,\n\tInput,\n\tDropdown,\n\tDropdownToggle,\n\tDropdownMenu,\n\tDropdownItem,\n\tButton,\n\tForm,\n\tFormGroup,\n\tProgress,\n} from \"reactstrap\";\nimport { ReactSVG } from \"react-svg\";\n\n// Utils\nimport http from \"../../utils/http\";\nimport dateFormatter from \"../../utils/dateFormatter\";\nimport numberFormatter from \"../../utils/numberFormatter\";\nimport colorConverter from \"../../utils/colorConverter\";\nimport csv from \"../../utils/csv\";\n\nimport { withTranslation } from \"react-i18next\";\nimport i18n from \"../../i18n\";\n\nconst lsMonthName = [\n\t\"January\",\n\t\"February\",\n\t\"March\",\n\t\"April\",\n\t\"May\",\n\t\"June\",\n\t\"July\",\n\t\"August\",\n\t\"September\",\n\t\"October\",\n\t\"November\",\n\t\"December\",\n];\n\nclass Building extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tlet dateFrom = new Date(new Date().setHours(0, 0, 0, 0));\n\t\tlet dateTo = new Date();\n\n\t\tthis.state = {\n\t\t\tlsBuilding: [],\n\t\t\tlsTarget: [],\n\t\t\tdateFrom: dateFrom,\n\t\t\tdateTo: dateTo,\n\t\t\tdisplayDateFrom: dateFrom,\n\t\t\tdisplayDateTo: dateTo,\n\t\t\tisSystemDropdownOpen: false,\n\t\t\tsystem: \"Overall\",\n\t\t\tcurrentBuildingLabel: \"\",\n\t\t\tkwh_system_floor: {},\n\t\t\tkwh_month: {},\n\t\t\tlsLogKw_system: {},\n\t\t\tcompareTo: \"Target\",\n\t\t\tbuildingPath: window.location.origin + \"/building/\", // For Building Images\n\t\t\tlsPermission: JSON.parse(localStorage.getItem(\"lsPermission\")),\n\t\t};\n\n\t\tlet currentBuildingLabel = this.props.location.building;\n\n\t\tcurrentBuildingLabel === undefined\n\t\t\t? (this.state.currentBuildingLabel = \"Auditorium\")\n\t\t\t: (this.state.currentBuildingLabel = currentBuildingLabel);\n\n\t\tthis.updateData = this.updateData.bind(this);\n\t\tthis.handleInputDateChange = this.handleInputDateChange.bind(this);\n\t\tthis.toggleSystem = this.toggleSystem.bind(this);\n\t\tthis.changeSystem = this.changeSystem.bind(this);\n\t\tthis.getAllBuilding = this.getAllBuilding.bind(this);\n\t\tthis.getData = this.getData.bind(this);\n\t\tthis.getBuildingTargetRange = this.getBuildingTargetRange.bind(this);\n\t\tthis.onClickBuilding = this.onClickBuilding.bind(this);\n\t\tthis.onClickApply = this.onClickApply.bind(this);\n\t\tthis.onClickCompareTo = this.onClickCompareTo.bind(this);\n\t\tthis.exportBarChartSystemPowerConsumption =\n\t\t\tthis.exportBarChartSystemPowerConsumption.bind(this);\n\t}\n\n\tasync updateData() {\n\t\tawait this.getData();\n\t\tawait this.getBuildingTargetRange();\n\n\t\tlet { dateFrom, dateTo } = this.state;\n\n\t\tthis.setState({\n\t\t\tdisplayDateFrom: dateFrom,\n\t\t\tdisplayDateTo: dateTo,\n\t\t});\n\t}\n\n\tasync componentDidMount() {\n\t\tawait this.getAllBuilding();\n\t\tawait this.updateData();\n\t}\n\n\tasync getAllBuilding() {\n\t\ttry {\n\t\t\tlet resp = await http.get(\"/building/all\");\n\n\t\t\tthis.setState({ lsBuilding: resp.data });\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\tasync getData() {\n\t\ttry {\n\t\t\tlet { lsBuilding, currentBuildingLabel, dateFrom, dateTo } = this.state;\n\n\t\t\tlet buildingID = lsBuilding.find(\n\t\t\t\t(bld) => bld.label === currentBuildingLabel\n\t\t\t).id;\n\n\t\t\tlet payload = {\n\t\t\t\tbuilding_id: buildingID,\n\t\t\t\tdate_from: dateFrom,\n\t\t\t\tdate_to: dateTo,\n\t\t\t};\n\n\t\t\tlet resp = await http.post(\"/building/data\", payload);\n\n\t\t\tlet lsData = resp.data;\n\n\t\t\tlet lsDeviceFirst = [];\n\t\t\tlet lsDeviceLast = [];\n\n\t\t\tlet lsLogKw_system = {};\n\t\t\tlet kwh_system_floor = {};\n\t\t\tlet kwh_month = {};\n\t\t\tfor (let data of lsData.slice().reverse()) {\n\t\t\t\tlet floor = data.floor;\n\t\t\t\tlet device = data.device;\n\t\t\t\tlet datetime = new Date(data.data_datetime);\n\t\t\t\tlet kw = Math.round((data.kw * 100) / 100);\n\t\t\t\tlet kwh = Math.round((data.kwh * 100) / 100);\n\t\t\t\tlet system = data.system;\n\n\t\t\t\tif (lsLogKw_system[system] === undefined) lsLogKw_system[system] = [];\n\n\t\t\t\tlsLogKw_system[system].push({\n\t\t\t\t\tdatetime: datetime,\n\t\t\t\t\tkw: kw,\n\t\t\t\t});\n\n\t\t\t\tif (!lsDeviceLast.find((d) => d === device)) {\n\t\t\t\t\tlsDeviceLast.push(device);\n\t\t\t\t} else continue;\n\n\t\t\t\tif (kwh_system_floor[floor] === undefined) {\n\t\t\t\t\tkwh_system_floor[floor] = {};\n\t\t\t\t}\n\n\t\t\t\tif (kwh_system_floor[floor][system] === undefined) {\n\t\t\t\t\tkwh_system_floor[floor][system] = 0;\n\t\t\t\t}\n\n\t\t\t\tkwh_system_floor[floor][system] += kwh;\n\n\t\t\t\tlet month = datetime.getMonth();\n\t\t\t\tif (kwh_month[month] === undefined) kwh_month[month] = 0;\n\t\t\t\tkwh_month[month] += kwh;\n\t\t\t}\n\n\t\t\tfor (let data of lsData) {\n\t\t\t\tlet floor = data.floor;\n\t\t\t\tlet device = data.device;\n\t\t\t\tlet kwh = Math.round((data.kwh * 100) / 100);\n\t\t\t\tlet system = data.system;\n\n\t\t\t\tif (!lsDeviceFirst.find((d) => d === device))\n\t\t\t\t\tlsDeviceFirst.push(device);\n\t\t\t\telse break;\n\n\t\t\t\tkwh_system_floor[floor][system] -= kwh;\n\n\t\t\t\tlet datetime = new Date(data.data_datetime);\n\t\t\t\tlet month = datetime.getMonth();\n\t\t\t\tkwh_month[month] -= kwh;\n\t\t\t}\n\n\t\t\tthis.setState({\n\t\t\t\tkwh_system_floor: kwh_system_floor,\n\t\t\t\tkwh_month: kwh_month,\n\t\t\t\tlsLogKw_system: lsLogKw_system,\n\t\t\t});\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\tasync getBuildingTargetRange() {\n\t\ttry {\n\t\t\tlet { dateFrom, dateTo, currentBuildingLabel, lsBuilding } = this.state;\n\n\t\t\tif (dateFrom.length === 0 || dateTo.length === 0) {\n\t\t\t\talert(\"Please select a valid datetime range.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet payload = {\n\t\t\t\tmonth_from: dateFrom.getMonth(),\n\t\t\t\tyear_from: dateFrom.getFullYear(),\n\t\t\t\tmonth_to: dateTo.getMonth(),\n\t\t\t\tyear_to: dateTo.getFullYear(),\n\t\t\t\tbuilding_id: lsBuilding.find(\n\t\t\t\t\t(building) => building.label === currentBuildingLabel\n\t\t\t\t).id,\n\t\t\t};\n\n\t\t\tlet resp = await http.post(\"/target/building\", payload);\n\n\t\t\tthis.setState({\n\t\t\t\tlsTarget: resp.data,\n\t\t\t});\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\thandleInputDateChange(e) {\n\t\tthis.setState({ [e.target.name]: new Date(e.target.value) });\n\t}\n\n\ttoggleSystem() {\n\t\tthis.setState((prevState) => ({\n\t\t\tisSystemDropdownOpen: !prevState.isSystemDropdownOpen,\n\t\t}));\n\t}\n\n\tchangeSystem(e) {\n\t\tthis.setState({\n\t\t\tsystem: e.currentTarget.textContent,\n\t\t});\n\t}\n\n\tonClickApply() {\n\t\tthis.updateData();\n\t}\n\n\tonClickBuilding(buildingLabel) {\n\t\tthis.setState({ currentBuildingLabel: buildingLabel }, () => {\n\t\t\tthis.updateData();\n\t\t});\n\t}\n\n\tonClickCompareTo(compareTo) {\n\t\tthis.setState({\n\t\t\tcompareTo: compareTo,\n\t\t});\n\t}\n\n\texportBarChartSystemPowerConsumption() {\n\t\tlet { lsLogKw_system, system } = this.state;\n\n\t\tlet lsLogKwMain = [];\n\t\tlet lsLogKwAc = [];\n\t\tlet lsLogKwOthers = [];\n\n\t\tif (lsLogKw_system[\"Main\"]) {\n\t\t\tlsLogKw_system[\"Main\"].slice().forEach(function (log) {\n\t\t\t\tif (!this[log.datetime]) {\n\t\t\t\t\tthis[log.datetime] = { datetime: log.datetime, kw: 0 };\n\t\t\t\t\tlsLogKwMain.push(this[log.datetime]);\n\t\t\t\t}\n\t\t\t\tthis[log.datetime].kw += log.kw;\n\t\t\t}, Object.create(null));\n\t\t}\n\n\t\tif (lsLogKw_system[\"Air Conditioner\"]) {\n\t\t\tlsLogKw_system[\"Air Conditioner\"].slice().forEach(function (log) {\n\t\t\t\tif (!this[log.datetime]) {\n\t\t\t\t\tthis[log.datetime] = { datetime: log.datetime, kw: 0 };\n\t\t\t\t\tlsLogKwAc.push(this[log.datetime]);\n\t\t\t\t}\n\t\t\t\tthis[log.datetime].kw += log.kw;\n\t\t\t}, Object.create(null));\n\t\t}\n\n\t\tif (system === \"Others\") {\n\t\t\tlsLogKwMain.forEach((logKwMain, idx) => {\n\t\t\t\tif (lsLogKwAc[idx]) {\n\t\t\t\t\tlsLogKwOthers.push({\n\t\t\t\t\t\tdatetime: logKwMain.datetime,\n\t\t\t\t\t\tkw: logKwMain.kw - lsLogKwAc[idx].kw,\n\t\t\t\t\t});\n\t\t\t\t} else lsLogKwOthers.push(logKwMain);\n\t\t\t});\n\t\t}\n\n\t\tlet rows = [[]];\n\t\trows[0].push(\"Datetime\", \"kW\");\n\n\t\tif (system === \"Overall\") {\n\t\t\tlsLogKwMain.forEach((logKwMain, idx) => {\n\t\t\t\tif (!rows[idx + 1]) rows[idx + 1] = [];\n\t\t\t\trows[idx + 1].push(\n\t\t\t\t\tdateFormatter.yyyymmddhhmmss_noOffset(logKwMain.datetime),\n\t\t\t\t\tlogKwMain.kw\n\t\t\t\t);\n\t\t\t});\n\t\t} else if (system === \"Air Conditioner\") {\n\t\t\tlsLogKwAc.forEach((logKwAc, idx) => {\n\t\t\t\tif (!rows[idx + 1]) rows[idx + 1] = [];\n\t\t\t\trows[idx + 1].push(\n\t\t\t\t\tdateFormatter.yyyymmddhhmmss_noOffset(logKwAc.datetime),\n\t\t\t\t\tlogKwAc.kw\n\t\t\t\t);\n\t\t\t});\n\t\t} else if (system === \"Others\") {\n\t\t\tlsLogKwOthers.forEach((logKwOthers, idx) => {\n\t\t\t\tif (!rows[idx + 1]) rows[idx + 1] = [];\n\t\t\t\trows[idx + 1].push(\n\t\t\t\t\tdateFormatter.yyyymmddhhmmss_noOffset(logKwOthers.datetime),\n\t\t\t\t\tlogKwOthers.kw\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\n\t\tcsv.exportFile(`${i18n.t(\"Power\")} - ${i18n.t(system)}`, rows);\n\t}\n\n\trender() {\n\t\tlet {\n\t\t\tlsBuilding,\n\t\t\tlsTarget,\n\t\t\tcurrentBuildingLabel,\n\t\t\tdateFrom,\n\t\t\tdateTo,\n\t\t\tdisplayDateFrom,\n\t\t\tdisplayDateTo,\n\t\t\tisSystemDropdownOpen,\n\t\t\tsystem,\n\t\t\tkwh_system_floor,\n\t\t\tkwh_month,\n\t\t\tlsLogKw_system,\n\t\t\tcompareTo,\n\t\t\tbuildingPath,\n\t\t\tlsPermission,\n\t\t} = this.state;\n\n\t\t// Calculate Estimated People\n\t\tlet estimatedPeople = \"N/A\";\n\t\tfor (let target of lsTarget) {\n\t\t\tif (estimatedPeople === \"N/A\") estimatedPeople = 0;\n\t\t\testimatedPeople += target.amount_people;\n\t\t}\n\n\t\t// Calculate Bill\n\t\tlet bill = 0;\n\t\tfor (let [month, kwh] of Object.entries(kwh_month)) {\n\t\t\tlet tariff = 4;\n\n\t\t\tlet target = lsTarget.find((target) => target.month === month);\n\t\t\tif (target !== undefined) {\n\t\t\t\tif (target.tariff !== null) tariff = target.tariff;\n\t\t\t}\n\n\t\t\tbill += kwh * tariff;\n\t\t}\n\n\t\t// Check Pie Chart disabled\n\t\tlet isPieChartDisabled = true;\n\t\t// Calculate Total Energy Consumption, Pie Chart data\n\t\tlet kwhTotal = 0;\n\t\tlet kwhAc = 0;\n\t\tlet kwhOthers = 0;\n\t\tfor (let [floor, kwh_system] of Object.entries(kwh_system_floor)) {\n\t\t\tfor (let [system, kwh] of Object.entries(kwh_system)) {\n\t\t\t\tkwhTotal += kwh;\n\n\t\t\t\tif (system === \"Main\") kwhOthers += kwh;\n\t\t\t\telse if (system === \"Air Conditioner\") kwhAc += kwh;\n\n\t\t\t\tif (floor !== null && system === \"Air Conditioner\") {\n\t\t\t\t\tisPieChartDisabled = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tkwhOthers -= kwhAc;\n\n\t\t// Calculate Electricity Use per Capita\n\t\tlet kwhPerCapita = \"N/A\";\n\t\tif (estimatedPeople !== \"N/A\" && estimatedPeople !== 0)\n\t\t\tkwhPerCapita = parseFloat(kwhTotal / estimatedPeople).toFixed(2);\n\n\t\tlet color = lsBuilding.find((bld) => bld.label === currentBuildingLabel)\n\t\t\t? lsBuilding.find((bld) => bld.label === currentBuildingLabel).color_code\n\t\t\t: \"black\";\n\n\t\tlet floor = 1; // Some buildings have basement levels\n\t\tif (currentBuildingLabel === \"Navamin\") floor = -2;\n\n\t\tconst { t } = this.props;\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{/* ******************************** Left Pane ******************************** */}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t

{t(\"Building\")}

\n\t\t\t\t\t\t\t\t{lsBuilding.map((bld) => (\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t this.onClickBuilding(bld.label)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{t(`${bld.label}`)}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t{/* ******************************** Main Section ******************************** */}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{/* ******************************** Left ******************************** */}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{t(`${currentBuildingLabel}`)}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t\t{t(\"building.Estimated\")}{\" \"}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t{numberFormatter.withCommas(estimatedPeople)}\n\t\t\t\t\t\t\t\t\t\t\t{\" \"}\n\t\t\t\t\t\t\t\t\t\t\t{t(\"people\")}{\" \"}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{displayDateFrom.getDate() + \" \"}\n\t\t\t\t\t\t\t\t\t\t{t(`${lsMonthName[displayDateFrom.getMonth()]}`)}\n\t\t\t\t\t\t\t\t\t\t{\" \" +\n\t\t\t\t\t\t\t\t\t\t\t(i18n.language === \"th\"\n\t\t\t\t\t\t\t\t\t\t\t\t? displayDateFrom.getFullYear() + 543\n\t\t\t\t\t\t\t\t\t\t\t\t: displayDateFrom.getFullYear()) +\n\t\t\t\t\t\t\t\t\t\t\t\" \"}\n\t\t\t\t\t\t\t\t\t\t{dateFormatter.hhmm(displayDateFrom) + \" - \"}\n\t\t\t\t\t\t\t\t\t\t{displayDateTo.getDate() + \" \"}\n\t\t\t\t\t\t\t\t\t\t{t(`${lsMonthName[displayDateTo.getMonth()]}`)}\n\t\t\t\t\t\t\t\t\t\t{\" \" +\n\t\t\t\t\t\t\t\t\t\t\t(i18n.language === \"th\"\n\t\t\t\t\t\t\t\t\t\t\t\t? displayDateTo.getFullYear() + 543\n\t\t\t\t\t\t\t\t\t\t\t\t: displayDateTo.getFullYear()) +\n\t\t\t\t\t\t\t\t\t\t\t\" \"}\n\t\t\t\t\t\t\t\t\t\t{dateFormatter.hhmm(displayDateTo)}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{t(\"building.Total Energy Consumption\")}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{numberFormatter.withCommas(kwhTotal)}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{t(\"kWh\")}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{t(\"Electricity Bill\")}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{numberFormatter.withCommas(bill)}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{t(\"THB\")}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{t(\"Used in\")}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t{t(\"Air Conditioner\")}\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t{t(\"Others\")}\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{t(\"Energy Use per Capita\")}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{kwhPerCapita}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{t(\"kWh\")}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t{/* ******************************** Right ******************************** */}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t{/* ******************************** Right Part ******************************** */}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t{t(\"Power (kW)\")}\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{t(`${system}`)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{t(\"Overall\")}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{t(\"Air Conditioner\")}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{t(\"Others\")}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t{lsPermission.find(\n\t\t\t\t\t\t\t\t\t\t\t\t\t(p) => p.label === \"Export Information\"\n\t\t\t\t\t\t\t\t\t\t\t\t) ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t{t(\"Electricity Bill\")} {t(\"Compare to\")}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t bld.label === currentBuildingLabel\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\tcompareTo={compareTo}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t{/* ****************************** Floor Plan ******************************** */}\n\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t{t(\"Floor Plan\")}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
{t(\"Color Legend\")}
\n\t\t\t\t\t\t\t\t
*{t(\"From Total Energy\")}
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t{lsBuilding.length > 0 ? (\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{new Array(\n\t\t\t\t\t\t\t\tlsBuilding.find(\n\t\t\t\t\t\t\t\t\t(bld) => bld.label === currentBuildingLabel\n\t\t\t\t\t\t\t\t).floors\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.fill(0)\n\t\t\t\t\t\t\t\t.map((_, idx) => {\n\t\t\t\t\t\t\t\t\tif (idx > 0) floor++; // Skip first round\n\t\t\t\t\t\t\t\t\tif (floor === 0) floor++; // No Floor 0\n\n\t\t\t\t\t\t\t\t\t// Check Progress Bar disabled\n\t\t\t\t\t\t\t\t\tlet isProgressBarDisabled = false;\n\t\t\t\t\t\t\t\t\t// Every floor must contain both Main and Air Conditioner kWh values\n\t\t\t\t\t\t\t\t\tif (kwh_system_floor[floor] === undefined) {\n\t\t\t\t\t\t\t\t\t\tisProgressBarDisabled = true;\n\t\t\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\t\t\t!(\n\t\t\t\t\t\t\t\t\t\t\tObject.keys(kwh_system_floor[floor]).includes(\"Main\") &&\n\t\t\t\t\t\t\t\t\t\t\tObject.keys(kwh_system_floor[floor]).includes(\n\t\t\t\t\t\t\t\t\t\t\t\t\"Air Conditioner\"\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tisProgressBarDisabled = true;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tlet kwhFloorMain = 0;\n\t\t\t\t\t\t\t\t\tlet kwhFloorAc = 0;\n\t\t\t\t\t\t\t\t\tif (kwh_system_floor[floor]) {\n\t\t\t\t\t\t\t\t\t\tif (kwh_system_floor[floor][\"Main\"]) {\n\t\t\t\t\t\t\t\t\t\t\tkwhFloorMain = kwh_system_floor[floor][\"Main\"];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tif (kwh_system_floor[floor][\"Air Conditioner\"]) {\n\t\t\t\t\t\t\t\t\t\t\tkwhFloorAc = kwh_system_floor[floor][\"Air Conditioner\"];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tlet kwhFloorOthers = kwhFloorMain - kwhFloorAc;\n\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconsole.log(error);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\tid={`img-floor-${floor}`}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={\"img-floor\"}\n\t\t\t\t\t\t\t\t\t\t\t\tsrc={\n\t\t\t\t\t\t\t\t\t\t\t\t\tbuildingPath +\n\t\t\t\t\t\t\t\t\t\t\t\t\tlsBuilding.find(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(bld) => bld.label === currentBuildingLabel\n\t\t\t\t\t\t\t\t\t\t\t\t\t).label +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"/\" +\n\t\t\t\t\t\t\t\t\t\t\t\t\t`${floor}` +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\".svg\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\twrapper=\"span\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{t(\"Floor\")}{\" \"}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{floor < 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? floor.toString().slice().replace(\"-\", \"B\")\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: floor === 13\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? currentBuildingLabel === \"Navamin\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? \"12A\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: floor\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: floor}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{kwh_system_floor[floor]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? kwh_system_floor[floor][\"Main\"]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? parseFloat(kwhFloorMain / kwhTotal).toFixed(2)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: \"-\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: \"-\"}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t%\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{kwh_system_floor[floor]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? kwh_system_floor[floor][\"Main\"]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? numberFormatter.withCommas(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tparseFloat(kwhFloorMain).toFixed(2)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: \"-\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: \"-\"}{\" \"}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{t(\"kWh\")}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{isProgressBarDisabled ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{t(\"Air Con.\")}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{t(\"Others\")}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{isProgressBarDisabled\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? \"-\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: (kwhFloorAc / kwhFloorMain) * 100}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t%\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{isProgressBarDisabled\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? \"-\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: (kwhFloorOthers / kwhFloorMain) * 100}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t%\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{isProgressBarDisabled ? \"-\" : kwhFloorAc}{\" \"}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{t(\"kWh\")}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{isProgressBarDisabled ? \"-\" : kwhFloorOthers}{\" \"}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{t(\"kWh\")}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\n\t\t\t\t\t) : (\n\t\t\t\t\t\t\"\"\n\t\t\t\t\t)}\n\t\t\t\t
\n\t\t\t\n\t\t);\n\t}\n}\n\nexport default withTranslation()(Building);\n","import React, { PureComponent } from \"react\";\nimport { PieChart, Pie, Cell, ResponsiveContainer } from \"recharts\";\n\nconst COLORS = [\"#696665\", \"#ff9233\"];\n\nconst RADIAN = Math.PI / 180;\nconst renderCustomizedLabel = ({\n\tcx,\n\tcy,\n\tmidAngle,\n\tinnerRadius,\n\touterRadius,\n\tpercent,\n\tindex,\n}) => {\n\tconst radius = innerRadius + (outerRadius - innerRadius) * 0.2;\n\tconst x = cx + radius * Math.cos(-midAngle * RADIAN);\n\tconst y = cy + radius * Math.sin(-midAngle * RADIAN);\n\n\treturn (\n\t\t cx ? \"start\" : \"end\"}\n\t\t\tdominantBaseline=\"central\"\n\t\t\tfontWeight=\"600\"\n\t\t>\n\t\t\t{`${(percent * 100).toFixed(0)}%`}\n\t\t\n\t);\n};\n\nexport default class PieChartEnergySource extends PureComponent {\n\trender() {\n\t\tlet data = [\n\t\t\t{ name: \"MEA\", value: Math.abs(this.props.mea) },\n\t\t\t{ name: \"Solar Cells\", value: Math.abs(this.props.solar) },\n\t\t];\n\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{data.map((entry, index) => (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t))}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t);\n\t}\n}\n","import React, { PureComponent } from \"react\";\nimport { PieChart, Pie, Cell, Tooltip, ResponsiveContainer } from \"recharts\";\nimport \"./PieChartSystem.css\";\n\nimport numberFormatter from \"../../../utils/numberFormatter\";\n\nimport i18n from \"../../../i18n\";\n\nconst COLORS = [\"#3c67be\", \"#FDD865\"];\n\nconst RADIAN = Math.PI / 180;\nconst renderCustomizedLabel = ({\n cx,\n cy,\n midAngle,\n innerRadius,\n outerRadius,\n percent,\n}) => {\n const radius = innerRadius + (outerRadius - innerRadius) * 0.2;\n const x = cx + radius * Math.cos(-midAngle * RADIAN);\n const y = cy + radius * Math.sin(-midAngle * RADIAN);\n\n return (\n cx ? \"start\" : \"end\"}\n dominantBaseline=\"central\"\n fontWeight=\"600\"\n >\n {`${(percent * 100).toFixed(0)}%`}\n \n );\n};\n\nconst getLine1 = (building, ac, others) => {\n let totalEnergyConsumption = ac + others;\n\n return (\n building +\n \" \" +\n numberFormatter.withCommas(Math.round(totalEnergyConsumption)) +\n \" \" +\n i18n.t(\"kWh\")\n );\n};\n\nconst getLine2 = (ac, others) => {\n let percentAC = Math.round((ac / (ac + others)) * 100);\n\n return (\n i18n.t(\"Air Conditioner\") +\n \" \" +\n percentAC +\n \"% \" +\n numberFormatter.withCommas(Math.round(ac)) +\n \" \" +\n i18n.t(\"kWh\")\n );\n};\n\nconst getLine3 = (ac, others) => {\n let percentOthers = Math.round((others / (ac + others)) * 100);\n\n return (\n i18n.t(\"Others\") +\n \" \" +\n percentOthers +\n \"% \" +\n numberFormatter.withCommas(Math.round(others)) +\n \" \" +\n i18n.t(\"kWh\")\n );\n};\n\nconst CustomTooltip = ({ active, label, ...props }) => {\n if (active) {\n let building = props.building;\n let ac = props.ac;\n let others = props.others;\n\n return (\n \n

\n {getLine1(building, ac, others)}\n

\n \n {getLine2(ac, others)}\n

\n \n {getLine3(ac, others)}\n

\n \n );\n }\n\n return null;\n};\n\nclass PieChartSystem extends PureComponent {\n constructor(props) {\n super(props);\n this.state = {\n ac: 0,\n others: 0,\n };\n }\n\n componentDidUpdate(prevProps) {\n if (\n this.props.ac === prevProps.ac &&\n this.props.others === prevProps.others\n )\n return;\n\n this.setState({\n ac: this.props.ac,\n others: this.props.others,\n });\n }\n\n render() {\n let { ac, others } = this.state;\n\n const data = [\n { name: \"Air Conditioner\", value: ac },\n { name: \"Others\", value: others },\n ];\n\n return (\n \n \n \n {data.map((_, index) => (\n \n ))}\n \n \n }\n />\n \n \n );\n }\n}\n\nexport default PieChartSystem;\n","import React from \"react\";\n\nimport {\n Document,\n Page,\n View,\n Text,\n Image,\n StyleSheet,\n Font,\n Svg,\n Rect,\n} from \"@react-pdf/renderer\";\n\nimport dateFormatter from \"../../../utils/dateFormatter\";\n\nimport { withTranslation } from \"react-i18next\";\nimport numberFormatter from \"../../../utils/numberFormatter\";\n\nFont.register({\n family: \"THSarabunNew\",\n fonts: [\n { src: \"/THSarabunNew/THSarabunNew.ttf\" },\n { src: \"/THSarabunNew/THSarabunNew Bold.ttf\", fontWeight: \"bold\" },\n {\n src: \"/THSarabunNew/THSarabunNew Italic.ttf\",\n fontStyle: \"italic\",\n fontWeight: \"normal\",\n },\n {\n src: \"/THSarabunNew/THSarabunNew BoldItalic.ttf\",\n fontStyle: \"italic\",\n fontWeight: \"bold\",\n },\n ],\n});\n\nconst styles = StyleSheet.create({\n page: {\n fontFamily: \"THSarabunNew\",\n },\n header: {\n borderBottom: \"1px solid #000\",\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n margin: 30,\n marginTop: 20,\n marginBottom: 10,\n paddingBottom: 10,\n },\n title: { fontSize: 18, fontWeight: \"bold\" },\n stamp: {\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n date: { fontSize: 10, marginBottom: 3, fontWeight: \"bold\" },\n logo: { width: 90 },\n\n body: {\n display: \"flex\",\n flexDirection: \"column\",\n marginLeft: 30,\n marginRight: 30,\n marginBottom: 10,\n },\n section: {\n marginBottom: 15,\n },\n line: {\n display: \"flex\",\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n },\n // red: { color: \"red\" },\n lineCenter: {\n display: \"flex\",\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n justifyContent: \"center\",\n alignItems: \"center\",\n marginTop: 10,\n },\n pieChart: {\n height: 300,\n },\n column: {\n display: \"flex\",\n flexDirection: \"column\",\n marginLeft: 10,\n },\n});\n\nclass EnergyUsageReport extends React.PureComponent {\n constructor(props) {\n super(props);\n this.state = {\n dateFrom: this.props.dateFrom,\n dateTo: this.props.dateTo,\n lsSelectedBuilding: this.props.lsSelectedBuilding,\n lsBuilding: this.props.lsBuilding,\n kwh_system_building: this.props.kwh_system_building,\n kwhSolar: this.props.kwhSolar,\n bill_system_building: this.props.bill_system_building,\n b64PieChartBuildingEnergyUsage: this.props.b64PieChartBuildingEnergyUsage,\n };\n }\n\n render() {\n let {\n dateFrom,\n dateTo,\n lsSelectedBuilding,\n lsBuilding,\n kwh_system_building,\n kwhSolar,\n bill_system_building,\n b64PieChartBuildingEnergyUsage,\n } = this.state;\n\n const { t } = this.props;\n\n let kwhMainTotal = 0;\n let kwhAcTotal = 0;\n let kwhOthersTotal = 0;\n\n for (let kwh_system of Object.values(kwh_system_building)) {\n kwhMainTotal += kwh_system[\"Main\"];\n if (kwh_system[\"Air Conditioner\"]) {\n kwhAcTotal += kwh_system[\"Air Conditioner\"];\n }\n }\n\n kwhOthersTotal = kwhMainTotal - kwhAcTotal;\n\n let billTotal = 0;\n for (let bill_system of Object.values(bill_system_building)) {\n billTotal += bill_system[\"Main\"];\n }\n\n if (!lsSelectedBuilding.includes(\"Navamin\")) {\n kwhSolar = 0;\n }\n\n return (\n \n \n \n {t(\"Energy Usage Report\")}\n \n \n {t(\"Date\")}: {dateFormatter.ddmmyyyy_noOffset(new Date())}\n \n \n \n \n\n \n \n \n {t(\"From\")} \n \n {dateFormatter.ddmmyyyyhhmm_noOffset(dateFrom) + \" \"}\n \n {t(\"To\")} \n \n {dateFormatter.ddmmyyyyhhmm_noOffset(dateTo)}\n \n \n \n\n \n \n \n {t(\"Building\") + \" \"}\n {lsSelectedBuilding.length === lsBuilding.length ? (\n {t(\"All\")}\n ) : (\n \n {lsSelectedBuilding.map(\n (bld, idx) =>\n t(bld) +\n (idx === lsSelectedBuilding.length - 1 ? \"\" : \", \")\n )}\n \n )}\n \n \n \n {t(\"System\")} \n {t(\"All\")}\n \n \n\n \n \n {t(`NIDA's energy usage from`) + \" \"}\n \n {dateFormatter.ddmmyyyyhhmm_noOffset(dateFrom) + \" \"}\n \n {t(\"to\") + \" \"}\n \n {dateFormatter.ddmmyyyyhhmm_noOffset(dateTo)}\n \n \n \n {t(\"By building\") + \" \"}\n \n {lsSelectedBuilding.length === lsBuilding.length ? (\n {t(\"All\") + \" \"}\n ) : (\n \n {lsSelectedBuilding.map(\n (bld, idx) =>\n t(bld) +\n (idx === lsSelectedBuilding.length - 1 ? \"\" : \", \")\n )}\n \n \n )}\n \n {t(\"with total energy usage of\")}\n \n {\" \"}\n {numberFormatter.withCommas(\n parseFloat(kwhMainTotal - Math.abs(kwhSolar)).toFixed(2)\n )}\n \n {t(\"kWh\")}\n \n \n {t(\"used in\")} \n {t(\"Air Conditioning\")} \n \n {numberFormatter.withCommas(\n parseFloat(kwhAcTotal).toFixed(2)\n )}{\" \"}\n \n {t(\"kWh\")} \n {t(\"calculated as\")} \n \n {numberFormatter.withCommas(\n parseFloat((kwhAcTotal / kwhMainTotal) * 100).toFixed(2)\n )}\n %\n \n \n \n {t(\"and in\")} \n {t(\"Others\")} \n \n {numberFormatter.withCommas(\n parseFloat(kwhOthersTotal).toFixed(2)\n )}{\" \"}\n \n {t(\"kWh\")} \n {t(\"calculated as\")} \n \n {numberFormatter.withCommas(\n parseFloat((kwhOthersTotal / kwhMainTotal) * 100).toFixed(2)\n )}\n %\n \n \n \n\n \n \n {t(\"Energy sourced from (MEA)\")} \n \n {numberFormatter.withCommas(\n parseFloat(kwhMainTotal).toFixed(2)\n )}{\" \"}\n \n {t(\"kWh\")} \n {t(\"calculated as\")} \n \n {parseFloat(\n (kwhMainTotal / (kwhMainTotal + kwhSolar)) * 100\n ).toFixed(2)}\n %\n \n \n \n {t(\"and from Solar Cells (PV)\")} \n \n {numberFormatter.withCommas(parseFloat(kwhSolar).toFixed(2))}{\" \"}\n \n {t(\"kWh\")} \n {t(\"calculated as\")} \n \n {parseFloat(\n (kwhSolar / (kwhMainTotal + kwhSolar)) * 100\n ).toFixed(2)}\n %\n \n \n \n {t(\"Resulting in an electricity bill of\")} \n \n {numberFormatter.withCommas(parseFloat(billTotal).toFixed(2))}{\" \"}\n \n {t(\"Baht\")}\n \n \n\n \n \n \n {t(\n \"The percentage of each building's energy usage are described in the figure below.\"\n )}\n \n \n \n \n \n \n \n {lsSelectedBuilding.map((bld) => (\n \n \n b.label === bld).color_code\n }\n />\n \n {t(bld)} \n \n {numberFormatter.withCommas(\n Math.round(kwh_system_building[bld][\"Main\"])\n )}{\" \"}\n \n {t(\"kWh\")} \n \n (\n {parseFloat(\n (Math.round(kwh_system_building[bld][\"Main\"]) /\n kwhMainTotal) *\n 100\n ).toFixed(2)}\n %)\n \n \n ))}\n \n \n \n \n \n \n );\n }\n}\n\nexport default withTranslation()(EnergyUsageReport);\n","import React from \"react\";\n\nimport {\n Document,\n Page,\n View,\n Text,\n Image,\n StyleSheet,\n Font,\n Svg,\n Rect,\n} from \"@react-pdf/renderer\";\n\nimport dateFormatter from \"../../../utils/dateFormatter\";\nimport numberFormatter from \"../../../utils/numberFormatter\";\nimport { lsMonthFull } from \"../../../utils/months\";\n\nimport { withTranslation } from \"react-i18next\";\nimport i18n from \"../../../i18n\";\n\nFont.register({\n family: \"THSarabunNew\",\n fonts: [\n { src: \"/THSarabunNew/THSarabunNew.ttf\" },\n { src: \"/THSarabunNew/THSarabunNew Bold.ttf\", fontWeight: \"bold\" },\n {\n src: \"/THSarabunNew/THSarabunNew Italic.ttf\",\n fontStyle: \"italic\",\n fontWeight: \"normal\",\n },\n {\n src: \"/THSarabunNew/THSarabunNew BoldItalic.ttf\",\n fontStyle: \"italic\",\n fontWeight: \"bold\",\n },\n ],\n});\n\nconst styles = StyleSheet.create({\n page: {\n fontFamily: \"THSarabunNew\",\n },\n header: {\n borderBottom: \"1px solid #000\",\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n margin: 30,\n marginTop: 20,\n marginBottom: 10,\n paddingBottom: 10,\n },\n title: { fontSize: 18, fontWeight: \"bold\" },\n stamp: {\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n date: { fontSize: 10, marginBottom: 5, fontWeight: \"bold\" },\n logo: { width: 90 },\n\n body: {\n display: \"flex\",\n flexDirection: \"column\",\n marginLeft: 30,\n marginRight: 30,\n marginBottom: 10,\n },\n section: {\n marginBottom: 15,\n },\n line: {\n display: \"flex\",\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n },\n // red: { color: \"red\" },\n barChart: {\n height: 200,\n },\n column: {\n display: \"flex\",\n flexDirection: \"column\",\n marginLeft: 10,\n },\n\n table: {\n display: \"table\",\n margin: \"auto\",\n },\n tableRow: {\n width: \"100%\",\n display: \"flex\",\n flexDirection: \"row\",\n },\n tableColHeader: {\n width: \"100%\",\n borderStyle: \"solid\",\n borderColor: \"#000\",\n borderWidth: 0.5,\n borderTopWidth: 1.5,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n tableColHeader15: {\n width: \"15%\",\n borderStyle: \"solid\",\n borderColor: \"#000\",\n borderWidth: 0.5,\n borderLeftWidth: 1.5,\n borderTopWidth: 1.5,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n tableColHeader30: {\n width: \"30%\",\n borderStyle: \"solid\",\n borderColor: \"#000\",\n borderWidth: 0.5,\n textAlign: \"center\",\n },\n tableColHeader40: {\n width: \"40%\",\n borderStyle: \"solid\",\n borderColor: \"#000\",\n borderWidth: 0.5,\n textAlign: \"center\",\n },\n tableColHeader42_5: {\n width: \"42.5%\",\n borderStyle: \"solid\",\n borderColor: \"#000\",\n borderWidth: 0.5,\n },\n tableCol15: {\n width: \"15%\",\n borderStyle: \"solid\",\n borderColor: \"#000\",\n borderWidth: 0.5,\n borderLeftWidth: 1.5,\n textAlign: \"left\",\n paddingLeft: 2,\n },\n tableCol30: {\n width: \"30%\",\n borderStyle: \"solid\",\n borderColor: \"#000\",\n borderWidth: 0.5,\n textAlign: \"center\",\n },\n tableCol40: {\n width: \"40%\",\n borderStyle: \"solid\",\n borderColor: \"#000\",\n borderWidth: 0.5,\n textAlign: \"center\",\n },\n tableCol42_5: {\n width: \"42.5%\",\n borderStyle: \"solid\",\n borderColor: \"#000\",\n borderWidth: 0.5,\n },\n tableCellHeader: {\n fontSize: 16,\n fontWeight: 600,\n },\n tableCellHeaderRed: {\n fontSize: 16,\n fontWeight: 800,\n // color: \"red\",\n },\n tableCell: {\n fontSize: 16,\n },\n tableCellRed: {\n fontSize: 16,\n // color: \"red\",\n },\n\n tableCellTotal: {\n fontSize: 16,\n fontWeight: 600,\n backgroundColor: \"#FFF2CC\",\n },\n tableCellTotalRed: {\n fontSize: 16,\n fontWeight: 800,\n // color: \"red\",\n backgroundColor: \"#FFF2CC\",\n },\n});\n\nclass ElectricityBillReport extends React.PureComponent {\n constructor(props) {\n super(props);\n this.state = {\n dateFrom: this.props.dateFrom,\n dateTo: this.props.dateTo,\n lsSelectedBuilding: this.props.lsSelectedBuilding,\n lsBuilding: this.props.lsBuilding,\n bill_building_month_year: this.props.bill_building_month_year,\n lsTarget: this.props.lsTarget,\n b64BarChartBuildingElectricityBill:\n this.props.b64BarChartBuildingElectricityBill,\n };\n }\n\n render() {\n let {\n dateFrom,\n dateTo,\n lsSelectedBuilding,\n lsBuilding,\n lsTarget,\n bill_building_month_year,\n b64BarChartBuildingElectricityBill,\n } = this.state;\n\n const { t } = this.props;\n\n let monthDiff = (dateFrom.getFullYear() - dateTo.getFullYear()) * 12;\n monthDiff -= dateFrom.getMonth();\n monthDiff += dateTo.getMonth();\n if (monthDiff < 0) monthDiff = 0;\n\n let count = 0;\n\n return (\n \n \n \n {t(\"Electricity Bill Report\")}\n \n \n {t(\"Date\")}: {dateFormatter.ddmmyyyy(new Date())}\n \n \n \n \n\n \n \n \n {t(\"From\")} \n \n {dateFormatter.mmyyyy(dateFrom) + \" \"}\n \n {t(\"To\")} \n {dateFormatter.mmyyyy(dateTo)}\n \n \n\n \n \n \n {t(\"Building\") + \" \"}\n {lsSelectedBuilding.length === lsBuilding.length ? (\n {t(\"All\")}\n ) : (\n \n {lsSelectedBuilding.map(\n (bld, idx) =>\n t(bld) +\n (idx === lsSelectedBuilding.length - 1 ? \"\" : \", \")\n )}\n \n )}\n \n \n \n\n \n \n {t(\"NIDA's electricity bill from\")} \n \n {t(lsMonthFull[dateFrom.getMonth()])}{\" \"}\n \n \n {i18n.language === \"th\"\n ? dateFrom.getFullYear() + 543\n : dateFrom.getFullYear()}{\" \"}\n \n {t(\"to\")} \n \n {t(lsMonthFull[dateTo.getMonth()])}{\" \"}\n \n \n {i18n.language === \"th\"\n ? dateTo.getFullYear() + 543\n : dateTo.getFullYear()}\n \n \n \n {t(\"is shown below\")}\n \n \n \n \n {lsSelectedBuilding.map((bld) => (\n \n \n b.label === bld).color_code\n }\n />\n \n {t(bld)}\n \n ))}\n \n \n \n\n \n \n {t(\"Electricity Bill Table\")}\n \n\n \n \n \n {t(\"Building\")}\n \n {Object.keys(bill_building_month_year).map((year) => {\n let bill_building_month = bill_building_month_year[year];\n\n return Object.keys(bill_building_month).map((month) => {\n if (count >= 2) return;\n count++;\n\n return (\n \n \n \n \n {`${t(lsMonthFull[month])} ${\n i18n.language === \"th\" ? +year + 543 : year\n }`}\n \n \n \n \n \n \n {t(\"Bill (Baht)\")}\n \n \n \n \n {t(\"Target\")}\n \n \n \n \n {t(\"% Target\")}\n \n \n \n \n );\n });\n })}\n \n {lsSelectedBuilding.map((bld) => (\n \n \n {t(bld)}\n \n\n {Object.keys(bill_building_month_year).map((year) => {\n let bill_building_month = bill_building_month_year[year];\n count = 0;\n\n return Object.keys(bill_building_month).map((month) => {\n if (count >= 2) return;\n count++;\n\n return (\n \n \n \n \n {numberFormatter.withCommas(\n Math.round(bill_building_month[month][bld])\n )}\n \n \n \n \n {lsTarget.find(\n (t) =>\n t.year === +year &&\n t.month === +month &&\n t.building === bld\n )\n ? lsTarget.find(\n (t) =>\n t.year === +year &&\n t.month === +month &&\n t.building === bld\n ).electricity_bill !== null\n ? numberFormatter.withCommas(\n lsTarget.find(\n (t) =>\n t.year === +year &&\n t.month === +month &&\n t.building === bld\n ).electricity_bill\n )\n : \"-\"\n : \"-\"}\n \n \n \n \n {lsTarget.find(\n (t) =>\n t.year === +year &&\n t.month === +month &&\n t.building === bld\n )\n ? lsTarget.find(\n (t) =>\n t.year === +year &&\n t.month === +month &&\n t.building === bld\n ).electricity_bill !== null\n ? `${\n lsTarget.find(\n (t) =>\n t.year === +year &&\n t.month === +month &&\n t.building === bld\n ).electricity_bill >\n bill_building_month[month][bld]\n ? \"+\"\n : \"\"\n }${parseFloat(\n ((lsTarget.find(\n (t) =>\n t.year === +year &&\n t.month === +month &&\n t.building === bld\n ).electricity_bill -\n bill_building_month[month][bld]) /\n lsTarget.find(\n (t) =>\n t.year === +year &&\n t.month === +month &&\n t.building === bld\n ).electricity_bill) *\n 100\n ).toFixed(2)}%`\n : \"-\"\n : \"-\"}\n \n \n \n \n );\n });\n })}\n \n ))}\n \n \n {t(\"Total\")}\n \n {Object.keys(bill_building_month_year).map((year) => {\n let bill_building_month = bill_building_month_year[year];\n count = 0;\n\n return Object.keys(bill_building_month).map((month) => {\n if (count >= 2) return;\n count++;\n\n return (\n \n \n \n \n {numberFormatter.withCommas(\n Math.round(\n Object.values(\n bill_building_month[month]\n ).reduce((a, b) => a + b)\n )\n )}\n \n \n \n \n {numberFormatter.withCommas(\n Math.round(\n lsTarget.length > 0\n ? lsTarget.reduce(function (a, b) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return a + b.electricity_bill;\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n })\n : \"-\"\n )\n )}\n \n \n \n {lsTarget.length > 0 ? (\n \n {lsTarget.reduce(function (a, b) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return a + b.electricity_bill;\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill + b.electricity_bill\n );\n }\n\n return 0;\n }) -\n Math.round(\n Object.values(\n bill_building_month[month]\n ).reduce((a, b) => a + b)\n ) >\n 0\n ? \"+\"\n : \"\"}\n {numberFormatter.withCommas(\n parseFloat(\n ((lsTarget.reduce(function (a, b) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return a + b.electricity_bill;\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n }) -\n Math.round(\n Object.values(\n bill_building_month[month]\n ).reduce((a, b) => a + b)\n )) /\n lsTarget.reduce(function (a, b) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return a + b.electricity_bill;\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n })) *\n 100\n ).toFixed(2)\n )}\n %\n \n ) : (\n -\n )}\n \n \n \n );\n });\n })}\n \n \n \n \n \n\n {monthDiff > 1 ? (\n \n \n \n \n \n \n \n \n {t(\"Building\")}\n \n \n {Object.keys(bill_building_month_year).map((year) => {\n let bill_building_month = bill_building_month_year[year];\n if (count === 2) count = 0;\n\n return Object.keys(bill_building_month).map((month) => {\n if (count < 2) {\n count++;\n return;\n }\n\n if (count >= 4) return;\n count++;\n\n return (\n \n \n \n \n {`${t(lsMonthFull[month])} ${\n i18n.language === \"th\" ? +year + 543 : year\n }`}\n \n \n \n \n \n \n {t(\"Bill (Baht)\")}\n \n \n \n \n {t(\"Target\")}\n \n \n \n \n {t(\"% Target\")}\n \n \n \n \n );\n });\n })}\n \n {lsSelectedBuilding.map((bld) => (\n \n \n {t(bld)}\n \n\n {Object.keys(bill_building_month_year).map((year) => {\n let bill_building_month =\n bill_building_month_year[year];\n count = 0;\n\n return Object.keys(bill_building_month).map((month) => {\n if (count < 2) {\n count++;\n return;\n }\n\n if (count >= 4) return;\n count++;\n\n return (\n \n \n \n \n {numberFormatter.withCommas(\n Math.round(\n bill_building_month[month][bld]\n )\n )}\n \n \n \n \n {lsTarget.find(\n (t) =>\n t.year === +year &&\n t.month === +month &&\n t.building === bld\n )\n ? lsTarget.find(\n (t) =>\n t.year === +year &&\n t.month === +month &&\n t.building === bld\n ).electricity_bill !== null\n ? numberFormatter.withCommas(\n lsTarget.find(\n (t) =>\n t.year === +year &&\n t.month === +month &&\n t.building === bld\n ).electricity_bill\n )\n : \"-\"\n : \"-\"}\n \n \n \n {lsTarget.length > 0 ? (\n \n {lsTarget.reduce(function (a, b) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return a + b.electricity_bill;\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n }) -\n Math.round(\n Object.values(\n bill_building_month[month]\n ).reduce((a, b) => a + b)\n ) >\n 0\n ? \"+\"\n : \"\"}\n {numberFormatter.withCommas(\n parseFloat(\n ((lsTarget.reduce(function (a, b) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return a + b.electricity_bill;\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n }) -\n Math.round(\n Object.values(\n bill_building_month[month]\n ).reduce((a, b) => a + b)\n )) /\n lsTarget.reduce(function (a, b) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return a + b.electricity_bill;\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n })) *\n 100\n ).toFixed(2)\n )}\n %\n \n ) : (\n \n -\n \n )}\n \n \n \n );\n });\n })}\n \n ))}\n \n \n {t(\"Total\")}\n \n {Object.keys(bill_building_month_year).map((year) => {\n let bill_building_month = bill_building_month_year[year];\n count = 0;\n\n return Object.keys(bill_building_month).map((month) => {\n if (count < 2) {\n count++;\n return;\n }\n\n if (count >= 4) return;\n count++;\n\n return (\n \n \n \n \n {numberFormatter.withCommas(\n Math.round(\n Object.values(\n bill_building_month[month]\n ).reduce((a, b) => a + b)\n )\n )}\n \n \n \n \n {numberFormatter.withCommas(\n Math.round(\n lsTarget.length > 0\n ? lsTarget.reduce(function (a, b) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return a + b.electricity_bill;\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n })\n : \"-\"\n )\n )}\n \n \n \n {lsTarget.length > 0 ? (\n \n {lsTarget.reduce(function (a, b) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return a + b.electricity_bill;\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n }) -\n Math.round(\n Object.values(\n bill_building_month[month]\n ).reduce((a, b) => a + b)\n ) >\n 0\n ? \"+\"\n : \"\"}\n {numberFormatter.withCommas(\n parseFloat(\n ((lsTarget.reduce(function (a, b) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return a + b.electricity_bill;\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n }) -\n Math.round(\n Object.values(\n bill_building_month[month]\n ).reduce((a, b) => a + b)\n )) /\n lsTarget.reduce(function (a, b) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return a + b.electricity_bill;\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n })) *\n 100\n ).toFixed(2)\n )}\n %\n \n ) : (\n \n -\n \n )}\n \n \n \n );\n });\n })}\n \n \n \n\n {monthDiff > 3 ? (\n \n \n \n \n \n {t(\"Building\")}\n \n \n {Object.keys(bill_building_month_year).map((year) => {\n let bill_building_month =\n bill_building_month_year[year];\n if (count === 4) count = 0;\n\n return Object.keys(bill_building_month).map((month) => {\n if (count < 4) {\n count++;\n return;\n }\n\n if (count >= 6) return;\n count++;\n\n return (\n \n \n \n \n {`${t(lsMonthFull[month])} ${\n i18n.language === \"th\"\n ? +year + 543\n : year\n }`}\n \n \n \n \n \n \n {t(\"Bill (Baht)\")}\n \n \n \n \n {t(\"Target\")}\n \n \n \n \n {t(\"% Target\")}\n \n \n \n \n );\n });\n })}\n \n {lsSelectedBuilding.map((bld) => (\n \n \n \n {t(bld)}\n \n \n\n {Object.keys(bill_building_month_year).map((year) => {\n let bill_building_month =\n bill_building_month_year[year];\n count = 0;\n\n return Object.keys(bill_building_month).map(\n (month) => {\n if (count < 4) {\n count++;\n return;\n }\n\n if (count >= 6) return;\n count++;\n\n return (\n \n \n \n \n {numberFormatter.withCommas(\n Math.round(\n bill_building_month[month][bld]\n )\n )}\n \n \n \n \n {lsTarget.find(\n (t) =>\n t.year === +year &&\n t.month === +month &&\n t.building === bld\n )\n ? lsTarget.find(\n (t) =>\n t.year === +year &&\n t.month === +month &&\n t.building === bld\n ).electricity_bill !== null\n ? numberFormatter.withCommas(\n lsTarget.find(\n (t) =>\n t.year === +year &&\n t.month === +month &&\n t.building === bld\n ).electricity_bill\n )\n : \"-\"\n : \"-\"}\n \n \n \n {lsTarget.length > 0 ? (\n \n {lsTarget.reduce(function (a, b) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return a + b.electricity_bill;\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n }) -\n Math.round(\n Object.values(\n bill_building_month[month]\n ).reduce((a, b) => a + b)\n ) >\n 0\n ? \"+\"\n : \"\"}\n {numberFormatter.withCommas(\n parseFloat(\n ((lsTarget.reduce(function (\n a,\n b\n ) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return (\n a + b.electricity_bill\n );\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n }) -\n Math.round(\n Object.values(\n bill_building_month[month]\n ).reduce((a, b) => a + b)\n )) /\n lsTarget.reduce(function (\n a,\n b\n ) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return (\n a + b.electricity_bill\n );\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n })) *\n 100\n ).toFixed(2)\n )}\n %\n \n ) : (\n \n -\n \n )}\n \n \n \n );\n }\n );\n })}\n \n ))}\n \n \n {t(\"Total\")}\n \n {Object.keys(bill_building_month_year).map((year) => {\n let bill_building_month =\n bill_building_month_year[year];\n count = 0;\n\n return Object.keys(bill_building_month).map((month) => {\n if (count < 4) {\n count++;\n return;\n }\n\n if (count >= 6) return;\n count++;\n\n return (\n \n \n \n \n {numberFormatter.withCommas(\n Math.round(\n Object.values(\n bill_building_month[month]\n ).reduce((a, b) => a + b)\n )\n )}\n \n \n \n \n {numberFormatter.withCommas(\n Math.round(\n lsTarget.length > 0\n ? lsTarget.reduce(function (a, b) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return a + b.electricity_bill;\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n })\n : \"-\"\n )\n )}\n \n \n \n {lsTarget.length > 0 ? (\n \n {lsTarget.reduce(function (a, b) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return a + b.electricity_bill;\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n }) -\n Math.round(\n Object.values(\n bill_building_month[month]\n ).reduce((a, b) => a + b)\n ) >\n 0\n ? \"+\"\n : \"\"}\n {numberFormatter.withCommas(\n parseFloat(\n ((lsTarget.reduce(function (a, b) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return a + b.electricity_bill;\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n }) -\n Math.round(\n Object.values(\n bill_building_month[month]\n ).reduce((a, b) => a + b)\n )) /\n lsTarget.reduce(function (a, b) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return a + b.electricity_bill;\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n })) *\n 100\n ).toFixed(2)\n )}\n %\n \n ) : (\n \n -\n \n )}\n \n \n \n );\n });\n })}\n \n \n \n ) : (\n \n )}\n \n \n ) : (\n \n )}\n\n {monthDiff > 5 ? (\n \n \n \n \n \n \n \n \n {t(\"Building\")}\n \n \n {Object.keys(bill_building_month_year).map((year) => {\n let bill_building_month = bill_building_month_year[year];\n if (count === 6) count = 0;\n\n return Object.keys(bill_building_month).map((month) => {\n if (count < 6) {\n count++;\n return;\n }\n\n if (count >= 8) return;\n count++;\n\n return (\n \n \n \n \n {`${t(lsMonthFull[month])} ${\n i18n.language === \"th\" ? +year + 543 : year\n }`}\n \n \n \n \n \n \n {t(\"Bill (Baht)\")}\n \n \n \n \n {t(\"Target\")}\n \n \n \n \n {t(\"% Target\")}\n \n \n \n \n );\n });\n })}\n \n {lsSelectedBuilding.map((bld) => (\n \n \n {t(bld)}\n \n\n {Object.keys(bill_building_month_year).map((year) => {\n let bill_building_month =\n bill_building_month_year[year];\n count = 0;\n\n return Object.keys(bill_building_month).map((month) => {\n if (count < 6) {\n count++;\n return;\n }\n\n if (count >= 8) return;\n count++;\n\n return (\n \n \n \n \n {numberFormatter.withCommas(\n Math.round(\n bill_building_month[month][bld]\n )\n )}\n \n \n \n \n {lsTarget.find(\n (t) =>\n t.year === +year &&\n t.month === +month &&\n t.building === bld\n )\n ? lsTarget.find(\n (t) =>\n t.year === +year &&\n t.month === +month &&\n t.building === bld\n ).electricity_bill !== null\n ? numberFormatter.withCommas(\n lsTarget.find(\n (t) =>\n t.year === +year &&\n t.month === +month &&\n t.building === bld\n ).electricity_bill\n )\n : \"-\"\n : \"-\"}\n \n \n \n {lsTarget.length > 0 ? (\n \n {lsTarget.reduce(function (a, b) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return a + b.electricity_bill;\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n }) -\n Math.round(\n Object.values(\n bill_building_month[month]\n ).reduce((a, b) => a + b)\n ) >\n 0\n ? \"+\"\n : \"\"}\n {numberFormatter.withCommas(\n parseFloat(\n ((lsTarget.reduce(function (a, b) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return a + b.electricity_bill;\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n }) -\n Math.round(\n Object.values(\n bill_building_month[month]\n ).reduce((a, b) => a + b)\n )) /\n lsTarget.reduce(function (a, b) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return a + b.electricity_bill;\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n })) *\n 100\n ).toFixed(2)\n )}\n %\n \n ) : (\n \n -\n \n )}\n \n \n \n );\n });\n })}\n \n ))}\n \n \n {t(\"Total\")}\n \n {Object.keys(bill_building_month_year).map((year) => {\n let bill_building_month = bill_building_month_year[year];\n count = 0;\n\n return Object.keys(bill_building_month).map((month) => {\n if (count < 6) {\n count++;\n return;\n }\n\n if (count >= 8) return;\n count++;\n\n return (\n \n \n \n \n {numberFormatter.withCommas(\n Math.round(\n Object.values(\n bill_building_month[month]\n ).reduce((a, b) => a + b)\n )\n )}\n \n \n \n \n {numberFormatter.withCommas(\n Math.round(\n lsTarget.length > 0\n ? lsTarget.reduce(function (a, b) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return a + b.electricity_bill;\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n })\n : \"-\"\n )\n )}\n \n \n \n {lsTarget.length > 0 ? (\n \n {lsTarget.reduce(function (a, b) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return a + b.electricity_bill;\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n }) -\n Math.round(\n Object.values(\n bill_building_month[month]\n ).reduce((a, b) => a + b)\n ) >\n 0\n ? \"+\"\n : \"\"}\n {numberFormatter.withCommas(\n parseFloat(\n ((lsTarget.reduce(function (a, b) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return a + b.electricity_bill;\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n }) -\n Math.round(\n Object.values(\n bill_building_month[month]\n ).reduce((a, b) => a + b)\n )) /\n lsTarget.reduce(function (a, b) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return a + b.electricity_bill;\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n })) *\n 100\n ).toFixed(2)\n )}\n %\n \n ) : (\n \n -\n \n )}\n \n \n \n );\n });\n })}\n \n \n \n\n {monthDiff > 7 ? (\n \n \n \n \n \n {t(\"Building\")}\n \n \n {Object.keys(bill_building_month_year).map((year) => {\n let bill_building_month =\n bill_building_month_year[year];\n if (count === 8) count = 0;\n\n return Object.keys(bill_building_month).map((month) => {\n if (count < 8) {\n count++;\n return;\n }\n\n if (count >= 10) return;\n count++;\n\n return (\n \n \n \n \n {`${t(lsMonthFull[month])} ${\n i18n.language === \"th\"\n ? +year + 543\n : year\n }`}\n \n \n \n \n \n \n {t(\"Bill (Baht)\")}\n \n \n \n \n {t(\"Target\")}\n \n \n \n \n {t(\"% Target\")}\n \n \n \n \n );\n });\n })}\n \n {lsSelectedBuilding.map((bld) => (\n \n \n \n {t(bld)}\n \n \n\n {Object.keys(bill_building_month_year).map((year) => {\n let bill_building_month =\n bill_building_month_year[year];\n count = 0;\n\n return Object.keys(bill_building_month).map(\n (month) => {\n if (count < 8) {\n count++;\n return;\n }\n\n if (count >= 10) return;\n count++;\n\n return (\n \n \n \n \n {numberFormatter.withCommas(\n Math.round(\n bill_building_month[month][bld]\n )\n )}\n \n \n \n \n {lsTarget.find(\n (t) =>\n t.year === +year &&\n t.month === +month &&\n t.building === bld\n )\n ? lsTarget.find(\n (t) =>\n t.year === +year &&\n t.month === +month &&\n t.building === bld\n ).electricity_bill !== null\n ? numberFormatter.withCommas(\n lsTarget.find(\n (t) =>\n t.year === +year &&\n t.month === +month &&\n t.building === bld\n ).electricity_bill\n )\n : \"-\"\n : \"-\"}\n \n \n \n {lsTarget.length > 0 ? (\n \n {lsTarget.reduce(function (a, b) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return a + b.electricity_bill;\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n }) -\n Math.round(\n Object.values(\n bill_building_month[month]\n ).reduce((a, b) => a + b)\n ) >\n 0\n ? \"+\"\n : \"\"}\n {numberFormatter.withCommas(\n parseFloat(\n ((lsTarget.reduce(function (\n a,\n b\n ) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return (\n a + b.electricity_bill\n );\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n }) -\n Math.round(\n Object.values(\n bill_building_month[month]\n ).reduce((a, b) => a + b)\n )) /\n lsTarget.reduce(function (\n a,\n b\n ) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return (\n a + b.electricity_bill\n );\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n })) *\n 100\n ).toFixed(2)\n )}\n %\n \n ) : (\n \n -\n \n )}\n \n \n \n );\n }\n );\n })}\n \n ))}\n \n \n {t(\"Total\")}\n \n {Object.keys(bill_building_month_year).map((year) => {\n let bill_building_month =\n bill_building_month_year[year];\n count = 0;\n\n return Object.keys(bill_building_month).map((month) => {\n if (count < 8) {\n count++;\n return;\n }\n\n if (count >= 10) return;\n count++;\n\n return (\n \n \n \n \n {numberFormatter.withCommas(\n Math.round(\n Object.values(\n bill_building_month[month]\n ).reduce((a, b) => a + b)\n )\n )}\n \n \n \n \n {numberFormatter.withCommas(\n Math.round(\n lsTarget.length > 0\n ? lsTarget.reduce(function (a, b) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return a + b.electricity_bill;\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n })\n : \"-\"\n )\n )}\n \n \n \n {lsTarget.length > 0 ? (\n \n {lsTarget.reduce(function (a, b) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return a + b.electricity_bill;\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n }) -\n Math.round(\n Object.values(\n bill_building_month[month]\n ).reduce((a, b) => a + b)\n ) >\n 0\n ? \"+\"\n : \"\"}\n {numberFormatter.withCommas(\n parseFloat(\n ((lsTarget.reduce(function (a, b) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return a + b.electricity_bill;\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n }) -\n Math.round(\n Object.values(\n bill_building_month[month]\n ).reduce((a, b) => a + b)\n )) /\n lsTarget.reduce(function (a, b) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return a + b.electricity_bill;\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n })) *\n 100\n ).toFixed(2)\n )}\n %\n \n ) : (\n \n -\n \n )}\n \n \n \n );\n });\n })}\n \n \n \n ) : (\n \n )}\n \n \n ) : (\n \n )}\n\n {monthDiff > 9 ? (\n \n \n \n \n \n \n \n \n {t(\"Building\")}\n \n \n {Object.keys(bill_building_month_year).map((year) => {\n let bill_building_month = bill_building_month_year[year];\n if (count === 10) count = 0;\n\n return Object.keys(bill_building_month).map((month) => {\n if (count < 10) {\n count++;\n return;\n }\n\n if (count >= 12) return;\n count++;\n\n return (\n \n \n \n \n {`${t(lsMonthFull[month])} ${\n i18n.language === \"th\" ? +year + 543 : year\n }`}\n \n \n \n \n \n \n {t(\"Bill (Baht)\")}\n \n \n \n \n {t(\"Target\")}\n \n \n \n \n {t(\"% Target\")}\n \n \n \n \n );\n });\n })}\n \n {lsSelectedBuilding.map((bld) => (\n \n \n {t(bld)}\n \n\n {Object.keys(bill_building_month_year).map((year) => {\n let bill_building_month =\n bill_building_month_year[year];\n count = 0;\n\n return Object.keys(bill_building_month).map((month) => {\n if (count < 10) {\n count++;\n return;\n }\n\n if (count >= 12) return;\n count++;\n\n return (\n \n \n \n \n {numberFormatter.withCommas(\n Math.round(\n bill_building_month[month][bld]\n )\n )}\n \n \n \n \n {lsTarget.find(\n (t) =>\n t.year === +year &&\n t.month === +month &&\n t.building === bld\n )\n ? lsTarget.find(\n (t) =>\n t.year === +year &&\n t.month === +month &&\n t.building === bld\n ).electricity_bill !== null\n ? numberFormatter.withCommas(\n lsTarget.find(\n (t) =>\n t.year === +year &&\n t.month === +month &&\n t.building === bld\n ).electricity_bill\n )\n : \"-\"\n : \"-\"}\n \n \n \n {lsTarget.length > 0 ? (\n \n {lsTarget.reduce(function (a, b) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return a + b.electricity_bill;\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n }) -\n Math.round(\n Object.values(\n bill_building_month[month]\n ).reduce((a, b) => a + b)\n ) >\n 0\n ? \"+\"\n : \"\"}\n {numberFormatter.withCommas(\n parseFloat(\n ((lsTarget.reduce(function (a, b) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return a + b.electricity_bill;\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n }) -\n Math.round(\n Object.values(\n bill_building_month[month]\n ).reduce((a, b) => a + b)\n )) /\n lsTarget.reduce(function (a, b) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return a + b.electricity_bill;\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n })) *\n 100\n ).toFixed(2)\n )}\n %\n \n ) : (\n \n -\n \n )}\n \n \n \n );\n });\n })}\n \n ))}\n \n \n {t(\"Total\")}\n \n {Object.keys(bill_building_month_year).map((year) => {\n let bill_building_month = bill_building_month_year[year];\n count = 0;\n\n return Object.keys(bill_building_month).map((month) => {\n if (count < 10) {\n count++;\n return;\n }\n\n if (count >= 12) return;\n count++;\n\n return (\n \n \n \n \n {numberFormatter.withCommas(\n Math.round(\n Object.values(\n bill_building_month[month]\n ).reduce((a, b) => a + b)\n )\n )}\n \n \n \n \n {numberFormatter.withCommas(\n Math.round(\n lsTarget.length > 0\n ? lsTarget.reduce(function (a, b) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return a + b.electricity_bill;\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n })\n : \"-\"\n )\n )}\n \n \n \n {lsTarget.length > 0 ? (\n \n {lsTarget.reduce(function (a, b) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return a + b.electricity_bill;\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n }) -\n Math.round(\n Object.values(\n bill_building_month[month]\n ).reduce((a, b) => a + b)\n ) >\n 0\n ? \"+\"\n : \"\"}\n {numberFormatter.withCommas(\n parseFloat(\n ((lsTarget.reduce(function (a, b) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return a + b.electricity_bill;\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n }) -\n Math.round(\n Object.values(\n bill_building_month[month]\n ).reduce((a, b) => a + b)\n )) /\n lsTarget.reduce(function (a, b) {\n if (Number.isInteger(a)) {\n if (\n b.year === +year &&\n b.month === +month\n ) {\n return a + b.electricity_bill;\n }\n return a + 0;\n }\n\n if (\n b.year === +year &&\n b.month === +month &&\n a.year === +year &&\n a.month === +month\n ) {\n return (\n a.electricity_bill +\n b.electricity_bill\n );\n }\n\n return 0;\n })) *\n 100\n ).toFixed(2)\n )}\n %\n \n ) : (\n \n -\n \n )}\n \n \n \n );\n });\n })}\n \n \n \n \n \n ) : (\n \n )}\n \n );\n }\n}\n\nexport default withTranslation()(ElectricityBillReport);\n","import React from \"react\";\n\nimport {\n Document,\n Page,\n View,\n Text,\n Image,\n StyleSheet,\n Font,\n Svg,\n Rect,\n} from \"@react-pdf/renderer\";\n\nimport dateFormatter from \"../../../utils/dateFormatter\";\n\nimport { withTranslation } from \"react-i18next\";\n\nFont.register({\n family: \"THSarabunNew\",\n fonts: [\n { src: \"/THSarabunNew/THSarabunNew.ttf\" },\n { src: \"/THSarabunNew/THSarabunNew Bold.ttf\", fontWeight: \"bold\" },\n {\n src: \"/THSarabunNew/THSarabunNew Italic.ttf\",\n fontStyle: \"italic\",\n fontWeight: \"normal\",\n },\n {\n src: \"/THSarabunNew/THSarabunNew BoldItalic.ttf\",\n fontStyle: \"italic\",\n fontWeight: \"bold\",\n },\n ],\n});\n\nconst styles = StyleSheet.create({\n page: {\n fontFamily: \"THSarabunNew\",\n },\n header: {\n borderBottom: \"1px solid #000\",\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n margin: 30,\n marginTop: 20,\n marginBottom: 10,\n paddingBottom: 10,\n },\n title: { fontSize: 18, fontWeight: \"bold\" },\n stamp: {\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n date: { fontSize: 10, marginBottom: 5, fontWeight: \"bold\" },\n logo: { width: 90 },\n\n body: {\n display: \"flex\",\n flexDirection: \"column\",\n marginLeft: 30,\n marginRight: 30,\n marginBottom: 10,\n },\n section: {\n marginBottom: 15,\n },\n line: {\n display: \"flex\",\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n },\n // red: { color: \"red\" },\n\n table: {\n display: \"table\",\n margin: \"auto\",\n },\n tableRow: {\n width: \"100%\",\n display: \"flex\",\n flexDirection: \"row\",\n },\n tableColHeader15: {\n width: \"15%\",\n borderStyle: \"solid\",\n borderColor: \"#000\",\n borderWidth: 0.5,\n borderLeftWidth: 1.5,\n borderTopWidth: 1.5,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n tableColHeader85: {\n width: \"85%\",\n borderStyle: \"solid\",\n borderColor: \"#000\",\n borderWidth: 0.5,\n borderRightWidth: 1.5,\n borderTopWidth: 1.5,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n tableCol15: {\n width: \"15%\",\n borderStyle: \"solid\",\n borderColor: \"#000\",\n borderWidth: 0.5,\n borderLeftWidth: 1.5,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n tableCol85: {\n width: \"85%\",\n borderStyle: \"solid\",\n borderColor: \"#000\",\n borderWidth: 0.5,\n borderRightWidth: 1.5,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n tableCellHeader: {\n fontSize: 16,\n fontWeight: 600,\n },\n tableCellRed: {\n fontSize: 16,\n fontWeight: 600,\n // color: \"red\",\n },\n\n lineChart: {\n width: \"50%\",\n padding: 10,\n },\n});\n\nclass AcPowerCompareTempHumiReport extends React.PureComponent {\n constructor(props) {\n super(props);\n this.state = {\n dateFrom: this.props.dateFrom,\n dateTo: this.props.dateTo,\n lsSelectedBuilding: this.props.lsSelectedBuilding,\n lsBuilding: this.props.lsBuilding,\n b64LineChartTempKw_building: this.props.b64LineChartTempKw_building,\n b64LineChartHumiKw_building: this.props.b64LineChartHumiKw_building,\n };\n }\n\n render() {\n let {\n dateFrom,\n dateTo,\n lsSelectedBuilding,\n lsBuilding,\n b64LineChartTempKw_building,\n b64LineChartHumiKw_building,\n } = this.state;\n\n const { t } = this.props;\n\n return (\n \n \n \n \n {t(\"A/C Power Used Compared to Temperature and Humidity Report\")}\n \n \n \n {t(\"Date\")}: {dateFormatter.ddmmyyyy(new Date())}\n \n \n \n \n\n \n \n \n {t(\"From\")} \n \n {dateFormatter.ddmmyyyyhhmm_noOffset(dateFrom) + \" \"}\n \n {t(\"To\")} \n \n {dateFormatter.ddmmyyyyhhmm_noOffset(dateTo)}\n \n \n \n\n \n \n \n {t(\"Building\") + \" \"}\n {lsSelectedBuilding.length === lsBuilding.length ? (\n {t(\"All\")}\n ) : (\n \n {lsSelectedBuilding.map(\n (bld, idx) =>\n t(bld) +\n (idx === lsSelectedBuilding.length - 1 ? \"\" : \", \")\n )}\n \n )}\n \n \n \n\n \n \n \n {t(\n \"Compare air conditioning power usage to temperature and humidity.\"\n )}\n \n \n\n \n \n \n {t(\"Building\")}\n \n \n \n \n \n \n \n {t(\"Power\") + \" (kW)\"}\n \n\n \n \n \n \n {t(\"Humidity\") + \" (%)\"}\n \n\n \n \n \n \n {t(\"Temperature\") + \" (°C)\"}\n \n \n \n \n\n {lsSelectedBuilding.slice(0, 6).map((bld) => (\n \n \n {t(bld)}\n \n \n \n \n \n \n \n \n ))}\n \n \n \n \n\n {lsSelectedBuilding.length > 6 ? (\n \n \n \n \n \n \n {t(\"Building\")}\n \n \n \n \n \n \n \n {t(\"Power\") + \" (kW)\"}\n \n\n \n \n \n \n {t(\"Humidity\") + \" (%)\"}\n \n\n \n \n \n \n {t(\"Temperature\") + \" (°C)\"}\n \n \n \n \n\n {lsSelectedBuilding.slice(6).map((bld) => (\n \n \n {t(bld)}\n \n \n \n \n \n \n \n \n ))}\n \n \n \n ) : (\n \n )}\n \n );\n }\n}\n\nexport default withTranslation()(AcPowerCompareTempHumiReport);\n","import React from \"react\";\n\nimport {\n Document,\n Page,\n View,\n Text,\n Image,\n StyleSheet,\n Font,\n} from \"@react-pdf/renderer\";\n\nimport dateFormatter from \"../../../utils/dateFormatter\";\nimport numberFormatter from \"../../../utils/numberFormatter\";\n\nimport { withTranslation } from \"react-i18next\";\n\nFont.register({\n family: \"THSarabunNew\",\n fonts: [\n { src: \"/THSarabunNew/THSarabunNew.ttf\" },\n { src: \"/THSarabunNew/THSarabunNew Bold.ttf\", fontWeight: \"bold\" },\n {\n src: \"/THSarabunNew/THSarabunNew Italic.ttf\",\n fontStyle: \"italic\",\n fontWeight: \"normal\",\n },\n {\n src: \"/THSarabunNew/THSarabunNew BoldItalic.ttf\",\n fontStyle: \"italic\",\n fontWeight: \"bold\",\n },\n ],\n});\n\nconst styles = StyleSheet.create({\n page: {\n fontFamily: \"THSarabunNew\",\n },\n header: {\n borderBottom: \"1px solid #000\",\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n margin: 30,\n marginTop: 20,\n marginBottom: 10,\n paddingBottom: 10,\n },\n title: { fontSize: 18, fontWeight: \"bold\" },\n stamp: {\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n date: { fontSize: 10, marginBottom: 5, fontWeight: \"bold\" },\n logo: { width: 90 },\n\n body: {\n display: \"flex\",\n flexDirection: \"column\",\n marginLeft: 30,\n marginRight: 30,\n marginBottom: 10,\n },\n section: {\n marginBottom: 15,\n },\n line: {\n display: \"flex\",\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n },\n lineCenter: {\n display: \"flex\",\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n // red: { color: \"red\" },\n\n barChart: {\n height: 150,\n },\n\n table: {\n display: \"table\",\n margin: \"auto\",\n },\n tableRow: {\n width: \"100%\",\n display: \"flex\",\n flexDirection: \"row\",\n },\n tableColHeader15: {\n width: \"15%\",\n borderStyle: \"solid\",\n borderColor: \"#000\",\n borderWidth: 0.5,\n borderLeftWidth: 1.5,\n borderTopWidth: 1.5,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n tableColHeader25: {\n width: \"25%\",\n borderStyle: \"solid\",\n borderColor: \"#000\",\n borderWidth: 0.5,\n borderRightWidth: 1.5,\n borderTopWidth: 1.5,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n tableColHeader35: {\n width: \"35%\",\n borderStyle: \"solid\",\n borderColor: \"#000\",\n borderWidth: 0.5,\n borderRightWidth: 1.5,\n borderTopWidth: 1.5,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n tableCol15: {\n width: \"15%\",\n borderStyle: \"solid\",\n borderColor: \"#000\",\n borderWidth: 0.5,\n borderLeftWidth: 1.5,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n tableCol25: {\n width: \"25%\",\n borderStyle: \"solid\",\n borderColor: \"#000\",\n borderWidth: 0.5,\n borderRightWidth: 1.5,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n tableCol35: {\n width: \"35%\",\n borderStyle: \"solid\",\n borderColor: \"#000\",\n borderWidth: 0.5,\n borderRightWidth: 1.5,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n tableCellHeader: {\n fontSize: 16,\n fontWeight: 600,\n },\n tableCellRed: {\n fontSize: 16,\n fontWeight: 600,\n // color: \"red\",\n },\n});\n\nclass EnergyUsagePerCapitaReport extends React.PureComponent {\n constructor(props) {\n super(props);\n this.state = {\n dateFrom: this.props.dateFrom,\n dateTo: this.props.dateTo,\n lsSelectedBuilding: this.props.lsSelectedBuilding,\n lsBuilding: this.props.lsBuilding,\n kwh_system_building: this.props.kwh_system_building,\n lsTarget: this.props.lsTarget,\n b64BarChartBuildingEnergyUsage: this.props.b64BarChartBuildingEnergyUsage,\n b64BarChartBuildingEnergyUsagePerCapita:\n this.props.b64BarChartBuildingEnergyUsagePerCapita,\n };\n }\n\n render() {\n let {\n dateFrom,\n dateTo,\n lsSelectedBuilding,\n lsBuilding,\n kwh_system_building,\n lsTarget,\n b64BarChartBuildingEnergyUsage,\n b64BarChartBuildingEnergyUsagePerCapita,\n } = this.state;\n\n const { t } = this.props;\n\n let kwhMainTotal = 0;\n for (let kwh_system of Object.values(kwh_system_building)) {\n kwhMainTotal += kwh_system[\"Main\"];\n }\n\n let capitaTotal = 0;\n for (let target of lsTarget) {\n if (target.amount_people !== null) capitaTotal += target.amount_people;\n }\n\n return (\n \n \n \n \n {t(\"Energy Usage per Capita Report\")}\n \n \n \n {t(\"Date\")}: {dateFormatter.ddmmyyyy(new Date())}\n \n \n \n \n\n \n \n \n {t(\"From\")} \n \n {dateFormatter.ddmmyyyyhhmm_noOffset(dateFrom) + \" \"}\n \n {t(\"To\")} \n \n {dateFormatter.ddmmyyyyhhmm_noOffset(dateTo)}\n \n \n \n\n \n \n \n {t(\"Building\") + \" \"}\n {lsSelectedBuilding.length === lsBuilding.length ? (\n {t(\"All\")}\n ) : (\n \n {lsSelectedBuilding.map(\n (bld, idx) =>\n t(bld) +\n (idx === lsSelectedBuilding.length - 1 ? \"\" : \", \")\n )}\n \n )}\n \n \n \n\n \n \n {t(\"NIDA's energy usage per capita from\") + \" \"}\n \n {dateFormatter.ddmmyyyyhhmm_noOffset(dateFrom) + \" \"}\n \n {t(\"to\") + \" \"}\n \n {dateFormatter.ddmmyyyyhhmm_noOffset(dateTo)}\n \n \n\n \n {t(\"of building\")} \n {lsSelectedBuilding.length === lsBuilding.length ? (\n {t(\"All\")} \n ) : (\n \n {lsSelectedBuilding.map(\n (bld, idx) =>\n t(bld) +\n (idx === lsSelectedBuilding.length - 1 ? \"\" : \", \")\n )}\n \n \n )}\n \n\n \n {t(\"has a total energy usage of\")} \n \n {numberFormatter.withCommas(\n parseFloat(kwhMainTotal).toFixed(2)\n ) + \" \"}\n \n {t(\"kWh\")}\n \n\n \n {t(\"has a total capita of\")} \n \n {numberFormatter.withCommas(\n parseFloat(capitaTotal).toFixed(2)\n ) + \" \"}\n \n {t(\"people\")}\n \n\n \n {t(\"has an energy usage per capita of\")} \n \n {numberFormatter.withCommas(\n parseFloat(kwhMainTotal / capitaTotal).toFixed(2)\n ) + \" \"}\n \n {t(\"kWh\")}\n \n \n\n \n \n {`${t(\"Energy Usage\")} (${t(\"kWh\")})`}\n \n \n \n \n \n \n \n\n \n \n {`${t(\"Energy Usage per Capita\")} (${t(\"kWh\")})`}\n \n \n \n \n \n \n \n\n {lsSelectedBuilding.length <= 5 ? (\n \n \n \n {t(\"Building\")}\n \n \n {`${t(\"Capita\")} (${t(\"people\")})`}\n \n \n {`${t(\"report2.Energy Usage\")} (${t(\"kWh\")})`}\n \n \n {`${t(\"Energy Usage per Capita\")} (${t(\n \"kWh\"\n )})`}\n \n \n {lsSelectedBuilding.map((bld) => {\n let capita = \"-\";\n\n let kwh = \"-\";\n if (kwh_system_building[bld] !== undefined) {\n kwh = kwh_system_building[bld][\"Main\"];\n }\n\n let kwhPerCapita = \"-\";\n\n let target = lsTarget.find((t) => t.building === bld);\n if (target) {\n if (target.amount_people !== null) {\n capita = target.amount_people;\n\n if (capita !== 0) {\n kwhPerCapita = numberFormatter.withCommas(\n parseFloat(kwh / capita).toFixed(2)\n );\n }\n }\n }\n\n return (\n \n \n {t(bld)}\n \n \n {capita}\n \n \n \n {numberFormatter.withCommas(\n parseFloat(kwh).toFixed(2)\n )}\n \n \n \n {kwhPerCapita}\n \n \n );\n })}\n \n ) : (\n \n )}\n \n \n\n {lsSelectedBuilding.length > 5 ? (\n \n \n \n \n \n \n {t(\"Building\")}\n \n \n {`${t(\"Capita\")} (${t(\"people\")})`}\n \n \n {`${t(\"report2.Energy Usage\")} (${t(\"kWh\")})`}\n \n \n {`${t(\"Energy Usage per Capita\")} (${t(\n \"kWh\"\n )})`}\n \n \n {lsSelectedBuilding.map((bld) => {\n let capita = \"-\";\n\n let kwh = \"-\";\n if (kwh_system_building[bld] !== undefined) {\n kwh = kwh_system_building[bld][\"Main\"];\n }\n\n let kwhPerCapita = \"-\";\n\n let target = lsTarget.find((t) => t.building === bld);\n if (target) {\n if (target.amount_people !== null) {\n capita = target.amount_people;\n\n if (capita !== 0) {\n kwhPerCapita = numberFormatter.withCommas(\n parseFloat(kwh / capita).toFixed(2)\n );\n }\n }\n }\n\n return (\n \n \n {t(bld)}\n \n \n {capita}\n \n \n \n {numberFormatter.withCommas(\n parseFloat(kwh).toFixed(2)\n )}\n \n \n \n {kwhPerCapita}\n \n \n );\n })}\n \n \n \n ) : (\n \n )}\n \n );\n }\n}\n\nexport default withTranslation()(EnergyUsagePerCapitaReport);\n","import React from \"react\";\n\nimport \"./Report.css\";\nimport { Row, Col, Label, Input } from \"reactstrap\";\nimport { Chart, registerables } from \"chart.js\";\nimport ChartDataLabels from \"chartjs-plugin-datalabels\";\n\nimport http from \"../../utils/http\";\nimport dateFormatter from \"../../utils/dateFormatter\";\nimport { lsMonthFull } from \"../../utils/months\";\nimport numberFormatter from \"../../utils/numberFormatter\";\n\nimport { withTranslation } from \"react-i18next\";\nimport i18n from \"../../i18n\";\n\n// Generating PDF documents\nimport { saveAs } from \"file-saver\";\nimport { pdf } from \"@react-pdf/renderer\";\n\n// PDF documents\nimport EnergyUsageReport from \"./EnergyUsageReport/EnergyUsageReport\";\nimport ElectricityBillReport from \"./ElectricityBillReport/ElectricityBillReport\";\nimport AcPowerCompareTempHumiReport from \"./AcPowerCompareTempHumiReport/AcPowerCompareTempHumiReport\";\nimport EnergyUsagePerCapitaReport from \"./EnergyUsagePerCapitaReport/EnergyUsagePerCapitaReport\";\n\nclass Report extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tlet dateFrom = new Date(new Date().setHours(0, 0, 0, 0));\n\t\tlet dateTo = new Date();\n\n\t\tthis.state = {\n\t\t\tdateFrom: dateFrom,\n\t\t\tdateTo: dateTo,\n\t\t\tdisplayDateFrom: dateFrom,\n\t\t\tdisplayDateTo: dateTo,\n\t\t\tlsBuilding: [],\n\t\t\tlsSelectedBuilding: [],\n\t\t\tisEnergyUsageReportSelected: false,\n\t\t\tisElectricityBillReportSelected: false,\n\t\t\tisAcPowerCompareTempHumiReportSelected: false,\n\t\t\tisEnergyUsagePerCapitaReportSelected: false,\n\t\t};\n\n\t\tthis.getAllBuilding = this.getAllBuilding.bind(this);\n\n\t\tthis.handleInputDateChange = this.handleInputDateChange.bind(this);\n\t\tthis.onClickBuilding = this.onClickBuilding.bind(this);\n\t\tthis.onClickAllBuilding = this.onClickAllBuilding.bind(this);\n\n\t\tthis.toggleEnergyUsageReport = this.toggleEnergyUsageReport.bind(this);\n\t\tthis.toggleElectricityBillReport =\n\t\t\tthis.toggleElectricityBillReport.bind(this);\n\t\tthis.toggleAcPowerCompareTempHumiReport =\n\t\t\tthis.toggleAcPowerCompareTempHumiReport.bind(this);\n\t\tthis.toggleEnergyUsagePerCapitaReport =\n\t\t\tthis.toggleEnergyUsagePerCapitaReport.bind(this);\n\n\t\tthis.getKwhSystemBuilding = this.getKwhSystemBuilding.bind(this);\n\t\tthis.getKwhSolar = this.getKwhSolar.bind(this);\n\t\tthis.getElectricityBillBuilding =\n\t\t\tthis.getElectricityBillBuilding.bind(this);\n\n\t\tthis.getAllTargetBuildingPeriod =\n\t\t\tthis.getAllTargetBuildingPeriod.bind(this);\n\t\tthis.getElectricityBillBuildingMonthYear =\n\t\t\tthis.getElectricityBillBuildingMonthYear.bind(this);\n\n\t\tthis.getAcPowerIaqBuilding = this.getAcPowerIaqBuilding.bind(this);\n\n\t\tthis.generateReports = this.generateReports.bind(this);\n\n\t\tthis.getB64PieChartBuildingEnergyUsage =\n\t\t\tthis.getB64PieChartBuildingEnergyUsage.bind(this);\n\t\tthis.getB64BarChartBuildingElectricityBill =\n\t\t\tthis.getB64BarChartBuildingElectricityBill.bind(this);\n\t\tthis.getB64LineChartTempBuilding =\n\t\t\tthis.getB64LineChartTempBuilding.bind(this);\n\t\tthis.getB64LineChartHumiBuilding =\n\t\t\tthis.getB64LineChartHumiBuilding.bind(this);\n\t\tthis.getB64BarChartBuildingEnergyUsage =\n\t\t\tthis.getB64BarChartBuildingEnergyUsage.bind(this);\n\t\tthis.getB64BarChartBuildingEnergyUsagePerCapita =\n\t\t\tthis.getB64BarChartBuildingEnergyUsagePerCapita.bind(this);\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.getAllBuilding();\n\t\tChart.register(...registerables);\n\t}\n\n\tasync getAllBuilding() {\n\t\ttry {\n\t\t\tlet resp = await http.get(\"/building/all\");\n\n\t\t\tthis.setState({ lsBuilding: resp.data });\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\thandleInputDateChange(e) {\n\t\tthis.setState({ [e.target.name]: new Date(e.target.value) });\n\t}\n\n\tonClickBuilding(building) {\n\t\tlet { lsSelectedBuilding, lsBuilding } = this.state;\n\n\t\tif (lsSelectedBuilding.length === lsBuilding.length) {\n\t\t\tlsSelectedBuilding = [building];\n\t\t} else if (!lsSelectedBuilding.includes(building)) {\n\t\t\tlsSelectedBuilding.push(building);\n\t\t\tthis.setState({ lsSelectedBuilding: lsSelectedBuilding });\n\t\t} else {\n\t\t\tlsSelectedBuilding = lsSelectedBuilding.filter((b) => b !== building);\n\t\t}\n\n\t\tthis.setState({ lsSelectedBuilding: lsSelectedBuilding });\n\t}\n\n\tonClickAllBuilding() {\n\t\tlet { lsSelectedBuilding, lsBuilding } = this.state;\n\t\tlsSelectedBuilding = lsBuilding.map((building) => building.label);\n\t\tthis.setState({ lsSelectedBuilding: lsSelectedBuilding });\n\t}\n\n\ttoggleEnergyUsageReport() {\n\t\tthis.setState((prevState) => ({\n\t\t\tisEnergyUsageReportSelected: !prevState.isEnergyUsageReportSelected,\n\t\t}));\n\t}\n\n\ttoggleElectricityBillReport() {\n\t\tthis.setState((prevState) => ({\n\t\t\tisElectricityBillReportSelected:\n\t\t\t\t!prevState.isElectricityBillReportSelected,\n\t\t}));\n\t}\n\n\ttoggleAcPowerCompareTempHumiReport() {\n\t\tthis.setState((prevState) => ({\n\t\t\tisAcPowerCompareTempHumiReportSelected:\n\t\t\t\t!prevState.isAcPowerCompareTempHumiReportSelected,\n\t\t}));\n\t}\n\n\ttoggleEnergyUsagePerCapitaReport() {\n\t\tthis.setState((prevState) => ({\n\t\t\tisEnergyUsagePerCapitaReportSelected:\n\t\t\t\t!prevState.isEnergyUsagePerCapitaReportSelected,\n\t\t}));\n\t}\n\n\t// Data for reports\n\tasync getKwhSystemBuilding() {\n\t\ttry {\n\t\t\tlet { lsBuilding, lsSelectedBuilding, dateFrom, dateTo } = this.state;\n\n\t\t\tlet lsBuildingID = [];\n\t\t\tfor (let bld of lsBuilding) {\n\t\t\t\tif (lsSelectedBuilding.includes(bld.label)) lsBuildingID.push(bld.id);\n\t\t\t}\n\n\t\t\tlet payload = {\n\t\t\t\tls_building_id: lsBuildingID,\n\t\t\t\tdate_from: dateFrom,\n\t\t\t\tdate_to: dateTo,\n\t\t\t};\n\n\t\t\tlet resp = await http.post(\"/building/energy/datetime\", payload);\n\n\t\t\treturn resp.data;\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\tasync getKwhSolar() {\n\t\ttry {\n\t\t\tlet { dateFrom, dateTo } = this.state;\n\n\t\t\tlet payload = {\n\t\t\t\tstart: dateFrom,\n\t\t\t\tend: dateTo,\n\t\t\t};\n\n\t\t\tlet resp = await http.post(\"/api/solar/datetime\", payload);\n\n\t\t\tlet kwhSolar = resp.data[resp.data.length - 1].kwh - resp.data[0].kwh;\n\n\t\t\treturn kwhSolar;\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\tasync getElectricityBillBuilding() {\n\t\ttry {\n\t\t\tlet { lsBuilding, lsSelectedBuilding, dateFrom, dateTo } = this.state;\n\n\t\t\tlet lsBuildingID = [];\n\t\t\tfor (let bld of lsBuilding) {\n\t\t\t\tif (lsSelectedBuilding.includes(bld.label)) lsBuildingID.push(bld.id);\n\t\t\t}\n\n\t\t\tlet payload = {\n\t\t\t\tls_building_id: lsBuildingID,\n\t\t\t\tdate_from: dateFrom,\n\t\t\t\tdate_to: dateTo,\n\t\t\t};\n\n\t\t\tlet resp = await http.post(\"/building/bill/datetime\", payload);\n\n\t\t\treturn resp.data;\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\tasync getAllTargetBuildingPeriod() {\n\t\ttry {\n\t\t\tlet { lsBuilding, lsSelectedBuilding, dateFrom, dateTo } = this.state;\n\n\t\t\tlet lsBuildingID = [];\n\t\t\tfor (let bld of lsBuilding) {\n\t\t\t\tif (lsSelectedBuilding.includes(bld.label)) lsBuildingID.push(bld.id);\n\t\t\t}\n\n\t\t\tlet payload = {\n\t\t\t\tls_building_id: lsBuildingID,\n\t\t\t\tdate_from: dateFrom,\n\t\t\t\tdate_to: dateTo,\n\t\t\t};\n\n\t\t\tlet resp = await http.post(\"/target/building/period\", payload);\n\n\t\t\treturn resp.data;\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\tasync getElectricityBillBuildingMonthYear() {\n\t\ttry {\n\t\t\tlet { lsBuilding, lsSelectedBuilding, dateFrom, dateTo } = this.state;\n\n\t\t\tlet lsBuildingID = [];\n\t\t\tfor (let bld of lsBuilding) {\n\t\t\t\tif (lsSelectedBuilding.includes(bld.label)) lsBuildingID.push(bld.id);\n\t\t\t}\n\n\t\t\tlet payload = {\n\t\t\t\tls_building_id: lsBuildingID,\n\t\t\t\tdate_from: dateFrom,\n\t\t\t\tdate_to: dateTo,\n\t\t\t};\n\n\t\t\tlet resp = await http.post(\"/building/bill/monthyear\", payload);\n\n\t\t\treturn resp.data;\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\tasync getAcPowerIaqBuilding() {\n\t\ttry {\n\t\t\tlet { lsBuilding, lsSelectedBuilding, dateFrom, dateTo } = this.state;\n\n\t\t\tlet lsBuildingID = [];\n\t\t\tfor (let bld of lsBuilding) {\n\t\t\t\tif (lsSelectedBuilding.includes(bld.label)) lsBuildingID.push(bld.id);\n\t\t\t}\n\n\t\t\tlet payload = {\n\t\t\t\tls_building_id: lsBuildingID,\n\t\t\t\tdate_from: dateFrom,\n\t\t\t\tdate_to: dateTo,\n\t\t\t};\n\n\t\t\tlet resp = await http.post(\"/building/power_iaq/datetime\", payload);\n\n\t\t\treturn resp.data;\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\tasync generateReports() {\n\t\tlet {\n\t\t\tisEnergyUsageReportSelected,\n\t\t\tisElectricityBillReportSelected,\n\t\t\tisAcPowerCompareTempHumiReportSelected,\n\t\t\tisEnergyUsagePerCapitaReportSelected,\n\t\t\tdateFrom,\n\t\t\tdateTo,\n\t\t\tlsSelectedBuilding,\n\t\t\tlsBuilding,\n\t\t} = this.state;\n\n\t\tif (isEnergyUsageReportSelected) {\n\t\t\tlet kwh_system_building = await this.getKwhSystemBuilding();\n\t\t\tlet kwhSolar = await this.getKwhSolar();\n\t\t\tlet bill_system_building = await this.getElectricityBillBuilding();\n\n\t\t\tlet b64PieChartBuildingEnergyUsage =\n\t\t\t\tthis.getB64PieChartBuildingEnergyUsage(\n\t\t\t\t\tlsSelectedBuilding,\n\t\t\t\t\tkwh_system_building,\n\t\t\t\t\tlsBuilding\n\t\t\t\t);\n\n\t\t\tif (Object.keys(bill_system_building).length === 0) {\n\t\t\t\talert(\"No data within selected datetime range.\");\n\t\t\t} else {\n\t\t\t\tlet fileName = i18n.t(\"Energy Usage Report\");\n\t\t\t\tlet blob = await pdf(\n\t\t\t\t\t\n\t\t\t\t).toBlob();\n\t\t\t\tsaveAs(blob, fileName + \".pdf\");\n\t\t\t}\n\t\t}\n\n\t\tif (isElectricityBillReportSelected) {\n\t\t\tlet bill_building_month_year =\n\t\t\t\tawait this.getElectricityBillBuildingMonthYear();\n\t\t\tlet lsTarget = await this.getAllTargetBuildingPeriod();\n\n\t\t\tlet b64BarChartBuildingElectricityBill =\n\t\t\t\tthis.getB64BarChartBuildingElectricityBill(\n\t\t\t\t\tbill_building_month_year,\n\t\t\t\t\tlsBuilding\n\t\t\t\t);\n\n\t\t\tlet fileName = i18n.t(\"Electricity Bill Report\");\n\t\t\tlet blob = await pdf(\n\t\t\t\t\n\t\t\t).toBlob();\n\t\t\tsaveAs(blob, fileName + \".pdf\");\n\t\t}\n\n\t\tif (isAcPowerCompareTempHumiReportSelected) {\n\t\t\tlet lsLogAcKwIaq = await this.getAcPowerIaqBuilding();\n\t\t\tlet b64LineChartTempKw_building =\n\t\t\t\tthis.getB64LineChartTempBuilding(lsLogAcKwIaq);\n\t\t\tlet b64LineChartHumiKw_building =\n\t\t\t\tthis.getB64LineChartHumiBuilding(lsLogAcKwIaq);\n\n\t\t\tlet fileName = i18n.t(\n\t\t\t\t\"Air Conditioning Power Used Compared to Temperature and Humidity Report\"\n\t\t\t);\n\t\t\tlet blob = await pdf(\n\t\t\t\t\n\t\t\t).toBlob();\n\t\t\tsaveAs(blob, fileName + \".pdf\");\n\t\t}\n\n\t\tif (isEnergyUsagePerCapitaReportSelected) {\n\t\t\tlet kwh_system_building = await this.getKwhSystemBuilding();\n\t\t\tlet lsTarget = await this.getAllTargetBuildingPeriod();\n\n\t\t\tlet b64BarChartBuildingEnergyUsage =\n\t\t\t\tthis.getB64BarChartBuildingEnergyUsage(kwh_system_building, lsBuilding);\n\n\t\t\tlet b64BarChartBuildingEnergyUsagePerCapita =\n\t\t\t\tthis.getB64BarChartBuildingEnergyUsagePerCapita(\n\t\t\t\t\tkwh_system_building,\n\t\t\t\t\tlsTarget,\n\t\t\t\t\tlsBuilding\n\t\t\t\t);\n\n\t\t\tlet fileName = i18n.t(\"Energy Usage per Capita Report\");\n\t\t\tlet blob = await pdf(\n\t\t\t\t\n\t\t\t).toBlob();\n\t\t\tsaveAs(blob, fileName + \".pdf\");\n\t\t}\n\t}\n\n\tgetB64PieChartBuildingEnergyUsage(\n\t\tlsSelectedBuilding,\n\t\tkwh_system_building,\n\t\tlsBuilding\n\t) {\n\t\tlet options = {\n\t\t\tresponsive: false,\n\t\t\tanimation: false,\n\t\t\tmaintainAspectRatio: false,\n\t\t\tlayout: {\n\t\t\t\tpadding: { top: 10 },\n\t\t\t},\n\t\t\tplugins: {\n\t\t\t\tlegend: {\n\t\t\t\t\tdisplay: false,\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tlet lsData = [];\n\t\tlet lsColor = [];\n\t\tlsSelectedBuilding.forEach((b) => {\n\t\t\tlsData.push(+parseFloat(kwh_system_building[b][\"Main\"]).toFixed(2));\n\t\t\tlsColor.push(lsBuilding.find((bld) => bld.label === b).color_code);\n\t\t});\n\n\t\tlet data = {\n\t\t\tlabels: [...lsSelectedBuilding],\n\t\t\tdatasets: [\n\t\t\t\t{\n\t\t\t\t\tdata: lsData,\n\t\t\t\t\tbackgroundColor: lsColor,\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\n\t\tlet dataTotal = lsData.reduce((a, b) => a + b);\n\n\t\toptions.plugins.datalabels = {\n\t\t\tdisplay: \"auto\",\n\t\t\tcolor: \"#000000\",\n\t\t\tanchor: function (context) {\n\t\t\t\tlet idx = context.dataIndex;\n\t\t\t\tif (context.dataset.data[idx] < 20) return \"end\";\n\t\t\t\treturn \"center\";\n\t\t\t},\n\t\t\talign: function (context) {\n\t\t\t\tlet idx = context.dataIndex;\n\t\t\t\tif (context.dataset.data[idx] < 20) return \"end\";\n\t\t\t\treturn \"center\";\n\t\t\t},\n\t\t\tfont: { weight: \"normal\", size: 12 },\n\t\t\tformatter: function (value) {\n\t\t\t\treturn `${Math.round((value / dataTotal) * 100)}%`;\n\t\t\t},\n\t\t};\n\n\t\tdocument.getElementById(\"pc-building-energy-usage\").remove();\n\t\tdocument.getElementById(\n\t\t\t\"wrapper-pc-building-energy-usage\"\n\t\t).innerHTML = ``;\n\n\t\tlet ctx = document\n\t\t\t.getElementById(\"pc-building-energy-usage\")\n\t\t\t.getContext(\"2d\");\n\n\t\tlet chart = new Chart(ctx, {\n\t\t\ttype: \"pie\",\n\t\t\tdata: data,\n\t\t\toptions: options,\n\t\t\tplugins: [ChartDataLabels],\n\t\t});\n\n\t\treturn chart.toBase64Image();\n\t}\n\n\tgetB64BarChartBuildingElectricityBill(bill_building_month_year, lsBuilding) {\n\t\tlet options = {\n\t\t\tresponsive: true,\n\t\t\tanimation: false,\n\t\t\tmaintainAspectRatio: false,\n\t\t\tscales: {\n\t\t\t\tx: {\n\t\t\t\t\tstacked: true,\n\t\t\t\t\tticks: { font: { size: 12 }, color: \"red\" },\n\t\t\t\t\ttitle: { display: true, text: i18n.t(\"Month\"), font: { size: 12 } },\n\t\t\t\t},\n\t\t\t\ty: {\n\t\t\t\t\tstacked: true,\n\t\t\t\t\tticks: { font: { size: 10 } },\n\t\t\t\t\ttitle: {\n\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\ttext: i18n.t(\"Electricity Bill (Baht)\"),\n\t\t\t\t\t\tfont: { size: 12 },\n\t\t\t\t\t},\n\t\t\t\t\tgrid: { display: false },\n\t\t\t\t},\n\t\t\t},\n\t\t\tlayout: {\n\t\t\t\tpadding: { top: 12 },\n\t\t\t},\n\t\t\tplugins: {\n\t\t\t\tlegend: { display: false },\n\t\t\t},\n\t\t};\n\n\t\tlet labels = [];\n\t\tlet datasets = [];\n\t\tfor (let [year, bill_building_month] of Object.entries(\n\t\t\tbill_building_month_year\n\t\t)) {\n\t\t\tfor (let [month, bill_building] of Object.entries(bill_building_month)) {\n\t\t\t\tlabels.push(\n\t\t\t\t\t`${i18n.t(lsMonthFull[month])} ${\n\t\t\t\t\t\ti18n.language === \"th\" ? +year + 543 : year\n\t\t\t\t\t}`\n\t\t\t\t);\n\n\t\t\t\tfor (let [building, bill] of Object.entries(bill_building)) {\n\t\t\t\t\tlet dataset = datasets.find((ds) => ds.label === building);\n\t\t\t\t\tif (dataset === undefined) {\n\t\t\t\t\t\tdataset = {\n\t\t\t\t\t\t\tlabel: building,\n\t\t\t\t\t\t\tbackgroundColor: lsBuilding.find((bld) => bld.label === building)\n\t\t\t\t\t\t\t\t.color_code,\n\t\t\t\t\t\t\tdata: [],\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tdatasets.push(dataset);\n\t\t\t\t\t}\n\n\t\t\t\t\tdataset.data.push(bill);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet data = {\n\t\t\tlabels: labels,\n\t\t\tdatasets: datasets,\n\t\t};\n\n\t\toptions.plugins.datalabels = {\n\t\t\tdisplay: true,\n\t\t\tcolor: \"red\",\n\t\t\tanchor: \"end\",\n\t\t\talign: \"top\",\n\t\t\tfont: { weight: \"normal\", size: 12 },\n\t\t\tformatter: (value, ctx) => {\n\t\t\t\tlet datasets = ctx.chart.data.datasets;\n\t\t\t\tif (ctx.datasetIndex === datasets.length - 1) {\n\t\t\t\t\tlet sum = 0;\n\t\t\t\t\tdatasets.map((dataset) => {\n\t\t\t\t\t\tsum += dataset.data[ctx.dataIndex];\n\t\t\t\t\t});\n\t\t\t\t\treturn (\n\t\t\t\t\t\tnumberFormatter.withCommas(Math.round(sum)) + ` ${i18n.t(\"Baht\")}`\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\treturn \"\";\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\n\t\tdocument.getElementById(\"bc-building-bill\").remove();\n\t\tdocument.getElementById(\n\t\t\t\"wrapper-bc-building-bill\"\n\t\t).innerHTML = ``;\n\n\t\tlet ctx = document.getElementById(\"bc-building-bill\").getContext(\"2d\");\n\n\t\tlet chart = new Chart(ctx, {\n\t\t\ttype: \"bar\",\n\t\t\tdata: data,\n\t\t\toptions: options,\n\t\t\tplugins: [ChartDataLabels],\n\t\t});\n\n\t\treturn chart.toBase64Image();\n\t}\n\n\tgetB64LineChartTempBuilding(lsLogAcKwIaq) {\n\t\tlet { lsSelectedBuilding } = this.state;\n\n\t\tlet options = {\n\t\t\tresponsive: true,\n\t\t\tanimation: false,\n\t\t\tmaintainAspectRatio: false,\n\t\t\tscales: {\n\t\t\t\tx: {\n\t\t\t\t\ttype: \"time\",\n\t\t\t\t\ttime: {\n\t\t\t\t\t\tdisplayFormats: {\n\t\t\t\t\t\t\tmillisecond: \"HH:mm:ss.SSS\",\n\t\t\t\t\t\t\tsecond: \"HH:mm:ss\",\n\t\t\t\t\t\t\tminute: \"HH:mm\",\n\t\t\t\t\t\t\thour: \"HH:mm\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tticks: { font: { size: 14 } },\n\t\t\t\t\ttitle: { display: true, text: i18n.t(\"Time\"), font: { size: 18 } },\n\t\t\t\t\tgrid: { display: false },\n\t\t\t\t},\n\t\t\t\tyTemp: {\n\t\t\t\t\tticks: { font: { size: 16 } },\n\t\t\t\t\ttitle: {\n\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\ttext: i18n.t(\"Temperature\") + \" (°C)\",\n\t\t\t\t\t\tfont: { size: 18 },\n\t\t\t\t\t},\n\t\t\t\t\tgrid: { display: false },\n\t\t\t\t},\n\t\t\t\tyKw: {\n\t\t\t\t\tticks: { font: { size: 16 } },\n\t\t\t\t\tposition: \"right\",\n\t\t\t\t\ttitle: {\n\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\ttext: i18n.t(\"kW\"),\n\t\t\t\t\t\tfont: { size: 18 },\n\t\t\t\t\t},\n\t\t\t\t\tgrid: { display: false },\n\t\t\t\t},\n\t\t\t},\n\t\t\tplugins: {\n\t\t\t\tlegend: { display: false },\n\t\t\t},\n\t\t};\n\n\t\tlet b64_building = {};\n\n\t\tfor (let bld of lsSelectedBuilding) {\n\t\t\tlet labels = [];\n\n\t\t\tlet datasetKw = {\n\t\t\t\tborderColor: \"#FFC708\",\n\t\t\t\tborderWidth: 2,\n\t\t\t\tpointRadius: 0,\n\t\t\t\tspanGaps: true,\n\t\t\t\tyAxisID: \"yKw\",\n\t\t\t\tdata: [],\n\t\t\t};\n\n\t\t\tlet datasetTemp = {\n\t\t\t\tborderColor: \"#FF0859\",\n\t\t\t\tborderWidth: 2,\n\t\t\t\tpointRadius: 0,\n\t\t\t\tspanGaps: true,\n\t\t\t\tyAxisID: \"yTemp\",\n\t\t\t\tdata: [],\n\t\t\t};\n\n\t\t\tlet prevDatetime;\n\t\t\tfor (let log of lsLogAcKwIaq) {\n\t\t\t\tlet datetime = new Date(log.data_datetime);\n\t\t\t\tlet building = log.building;\n\t\t\t\tlet kw = log.kw;\n\t\t\t\tlet temp = log.temperature;\n\n\t\t\t\tif (building !== bld) continue;\n\n\t\t\t\tif (!labels.find((d) => d.getTime() === datetime.getTime())) {\n\t\t\t\t\tlabels.push(new Date(datetime));\n\t\t\t\t}\n\n\t\t\t\tif (prevDatetime) {\n\t\t\t\t\tif (datetime.getTime() !== prevDatetime.getTime()) {\n\t\t\t\t\t\tdatasetTemp.data.push(temp);\n\t\t\t\t\t}\n\t\t\t\t} else datasetTemp.data.push(temp);\n\n\t\t\t\tif (prevDatetime) {\n\t\t\t\t\tif (datetime.getTime() === prevDatetime.getTime()) {\n\t\t\t\t\t\tdatasetKw.data[datasetKw.data.length - 1] += kw;\n\t\t\t\t\t} else datasetKw.data.push(kw);\n\t\t\t\t} else datasetKw.data.push(kw);\n\n\t\t\t\tprevDatetime = datetime;\n\t\t\t}\n\n\t\t\tlet data = {\n\t\t\t\tlabels: labels,\n\t\t\t\tdatasets: [datasetKw, datasetTemp],\n\t\t\t};\n\n\t\t\tdocument.getElementById(\"lc-building-power-temp\").remove();\n\t\t\tdocument.getElementById(\n\t\t\t\t\"wrapper-lc-building-power-temp\"\n\t\t\t).innerHTML = ``;\n\n\t\t\tlet ctx = document\n\t\t\t\t.getElementById(\"lc-building-power-temp\")\n\t\t\t\t.getContext(\"2d\");\n\n\t\t\tlet chart = new Chart(ctx, {\n\t\t\t\ttype: \"line\",\n\t\t\t\tdata: data,\n\t\t\t\toptions: options,\n\t\t\t});\n\n\t\t\tb64_building[bld] = chart.toBase64Image();\n\t\t}\n\n\t\treturn b64_building;\n\t}\n\n\tgetB64LineChartHumiBuilding(lsLogAcKwIaq) {\n\t\tlet { lsSelectedBuilding } = this.state;\n\n\t\tlet options = {\n\t\t\tresponsive: true,\n\t\t\tanimation: false,\n\t\t\tmaintainAspectRatio: false,\n\t\t\tscales: {\n\t\t\t\tx: {\n\t\t\t\t\ttype: \"time\",\n\t\t\t\t\ttime: {\n\t\t\t\t\t\tdisplayFormats: {\n\t\t\t\t\t\t\tmillisecond: \"HH:mm:ss.SSS\",\n\t\t\t\t\t\t\tsecond: \"HH:mm:ss\",\n\t\t\t\t\t\t\tminute: \"HH:mm\",\n\t\t\t\t\t\t\thour: \"HH:mm\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tticks: { font: { size: 14 } },\n\t\t\t\t\ttitle: { display: true, text: i18n.t(\"Time\"), font: { size: 18 } },\n\t\t\t\t\tgrid: { display: false },\n\t\t\t\t},\n\t\t\t\tyHumi: {\n\t\t\t\t\tticks: { font: { size: 16 } },\n\t\t\t\t\ttitle: {\n\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\ttext: i18n.t(\"Humidity\") + \" (°C)\",\n\t\t\t\t\t\tfont: { size: 18 },\n\t\t\t\t\t},\n\t\t\t\t\tgrid: { display: false },\n\t\t\t\t},\n\t\t\t\tyKw: {\n\t\t\t\t\tticks: { font: { size: 16 } },\n\t\t\t\t\tposition: \"right\",\n\t\t\t\t\ttitle: {\n\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\ttext: i18n.t(\"kW\"),\n\t\t\t\t\t\tfont: { size: 18 },\n\t\t\t\t\t},\n\t\t\t\t\tgrid: { display: false },\n\t\t\t\t},\n\t\t\t},\n\t\t\tplugins: {\n\t\t\t\tlegend: { display: false },\n\t\t\t},\n\t\t};\n\n\t\tlet b64_building = {};\n\n\t\tfor (let bld of lsSelectedBuilding) {\n\t\t\tlet labels = [];\n\n\t\t\tlet datasetKw = {\n\t\t\t\tborderColor: \"#FFC708\",\n\t\t\t\tborderWidth: 2,\n\t\t\t\tpointRadius: 0,\n\t\t\t\tspanGaps: true,\n\t\t\t\tyAxisID: \"yKw\",\n\t\t\t\tdata: [],\n\t\t\t};\n\n\t\t\tlet datasetHumi = {\n\t\t\t\tborderColor: \"#C0DDFB\",\n\t\t\t\tborderWidth: 2,\n\t\t\t\tpointRadius: 0,\n\t\t\t\tspanGaps: true,\n\t\t\t\tyAxisID: \"yHumi\",\n\t\t\t\tdata: [],\n\t\t\t};\n\n\t\t\tlet prevDatetime;\n\t\t\tfor (let log of lsLogAcKwIaq) {\n\t\t\t\tlet datetime = new Date(log.data_datetime);\n\t\t\t\tlet building = log.building;\n\t\t\t\tlet kw = log.kw;\n\t\t\t\tlet humi = log.humidity;\n\n\t\t\t\tif (building !== bld) continue;\n\n\t\t\t\tif (!labels.find((d) => d.getTime() === datetime.getTime())) {\n\t\t\t\t\tlabels.push(new Date(datetime));\n\t\t\t\t}\n\n\t\t\t\tif (prevDatetime) {\n\t\t\t\t\tif (datetime.getTime() !== prevDatetime.getTime()) {\n\t\t\t\t\t\tdatasetHumi.data.push(humi);\n\t\t\t\t\t}\n\t\t\t\t} else datasetHumi.data.push(humi);\n\n\t\t\t\tif (prevDatetime) {\n\t\t\t\t\tif (datetime.getTime() === prevDatetime.getTime()) {\n\t\t\t\t\t\tdatasetKw.data[datasetKw.data.length - 1] += kw;\n\t\t\t\t\t} else datasetKw.data.push(kw);\n\t\t\t\t} else datasetKw.data.push(kw);\n\n\t\t\t\tprevDatetime = datetime;\n\t\t\t}\n\n\t\t\tlet data = {\n\t\t\t\tlabels: labels,\n\t\t\t\tdatasets: [datasetKw, datasetHumi],\n\t\t\t};\n\n\t\t\tdocument.getElementById(\"lc-building-power-humi\").remove();\n\t\t\tdocument.getElementById(\n\t\t\t\t\"wrapper-lc-building-power-humi\"\n\t\t\t).innerHTML = ``;\n\n\t\t\tlet ctx = document\n\t\t\t\t.getElementById(\"lc-building-power-humi\")\n\t\t\t\t.getContext(\"2d\");\n\n\t\t\tlet chart = new Chart(ctx, {\n\t\t\t\ttype: \"line\",\n\t\t\t\tdata: data,\n\t\t\t\toptions: options,\n\t\t\t});\n\n\t\t\tb64_building[bld] = chart.toBase64Image();\n\t\t}\n\n\t\treturn b64_building;\n\t}\n\n\tgetB64BarChartBuildingEnergyUsage(kwh_system_building, lsBuilding) {\n\t\tlet options = {\n\t\t\tresponsive: true,\n\t\t\tanimation: false,\n\t\t\tmaintainAspectRatio: false,\n\t\t\tscales: {\n\t\t\t\tx: { ticks: { font: { size: 10 } }, grid: { display: false } },\n\t\t\t\ty: {\n\t\t\t\t\tticks: { font: { size: 10 } },\n\t\t\t\t\ttitle: {\n\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\ttext: i18n.t(\"kWh\"),\n\t\t\t\t\t\tfont: { size: 12 },\n\t\t\t\t\t},\n\t\t\t\t\tgrid: { display: true },\n\t\t\t\t},\n\t\t\t},\n\t\t\tplugins: {\n\t\t\t\tlegend: { display: false },\n\t\t\t},\n\t\t};\n\n\t\tlet labels = Object.keys(kwh_system_building).map((bld) => i18n.t(bld));\n\t\tlet lsData = [];\n\t\tlet lsColor = [];\n\n\t\tfor (let [building, kwh_system] of Object.entries(kwh_system_building)) {\n\t\t\tlsData.push(kwh_system[\"Main\"]);\n\t\t\tlsColor.push(lsBuilding.find((bld) => bld.label === building).color_code);\n\t\t}\n\n\t\tlet data = {\n\t\t\tlabels: labels,\n\t\t\tdatasets: [\n\t\t\t\t{\n\t\t\t\t\tlabel: \"Energy Usage\",\n\t\t\t\t\tbackgroundColor: lsColor,\n\t\t\t\t\tborderColor: lsColor,\n\t\t\t\t\tdata: lsData,\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\n\t\tdocument.getElementById(\"bc-building-energy-usage\").remove();\n\t\tdocument.getElementById(\n\t\t\t\"wrapper-bc-building-energy-usage\"\n\t\t).innerHTML = ``;\n\n\t\tlet ctx = document\n\t\t\t.getElementById(\"bc-building-energy-usage\")\n\t\t\t.getContext(\"2d\");\n\n\t\tlet chart = new Chart(ctx, {\n\t\t\ttype: \"bar\",\n\t\t\tdata: data,\n\t\t\toptions: options,\n\t\t});\n\n\t\treturn chart.toBase64Image();\n\t}\n\n\tgetB64BarChartBuildingEnergyUsagePerCapita(\n\t\tkwh_system_building,\n\t\tlsTarget,\n\t\tlsBuilding\n\t) {\n\t\tlet options = {\n\t\t\tresponsive: true,\n\t\t\tanimation: false,\n\t\t\tmaintainAspectRatio: false,\n\t\t\tscales: {\n\t\t\t\tx: { ticks: { font: { size: 10 } }, grid: { display: false } },\n\t\t\t\ty: {\n\t\t\t\t\tticks: { font: { size: 10 } },\n\t\t\t\t\ttitle: {\n\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\ttext: i18n.t(\"kWh\"),\n\t\t\t\t\t\tfont: { size: 12 },\n\t\t\t\t\t},\n\t\t\t\t\tgrid: { display: true },\n\t\t\t\t},\n\t\t\t},\n\t\t\tplugins: {\n\t\t\t\tlegend: { display: false },\n\t\t\t},\n\t\t};\n\n\t\tlet labels = Object.keys(kwh_system_building).map((bld) => i18n.t(bld));\n\t\tlet lsData = [];\n\t\tlet lsColor = [];\n\n\t\tfor (let [building, kwh_system] of Object.entries(kwh_system_building)) {\n\t\t\tlet d = 0;\n\n\t\t\tlet target = lsTarget.find((t) => t.building === building);\n\t\t\tif (target) {\n\t\t\t\tif (target.amount_people !== null) {\n\t\t\t\t\td = kwh_system[\"Main\"] / target.amount_people;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlsData.push(d);\n\t\t\tlsColor.push(lsBuilding.find((bld) => bld.label === building).color_code);\n\t\t}\n\n\t\tlet data = {\n\t\t\tlabels: labels,\n\t\t\tdatasets: [\n\t\t\t\t{\n\t\t\t\t\tlabel: \"Energy Usage per Capita\",\n\t\t\t\t\tbackgroundColor: lsColor,\n\t\t\t\t\tborderColor: lsColor,\n\t\t\t\t\tdata: lsData,\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\n\t\tdocument.getElementById(\"bc-building-energy-usage-capita\").remove();\n\t\tdocument.getElementById(\n\t\t\t\"wrapper-bc-building-energy-usage-capita\"\n\t\t).innerHTML = ``;\n\n\t\tlet ctx = document\n\t\t\t.getElementById(\"bc-building-energy-usage-capita\")\n\t\t\t.getContext(\"2d\");\n\n\t\tlet chart = new Chart(ctx, {\n\t\t\ttype: \"bar\",\n\t\t\tdata: data,\n\t\t\toptions: options,\n\t\t});\n\n\t\treturn chart.toBase64Image();\n\t}\n\n\trender() {\n\t\tlet {\n\t\t\tdateFrom,\n\t\t\tdateTo,\n\t\t\tlsBuilding,\n\t\t\tlsSelectedBuilding,\n\t\t\tisEnergyUsageReportSelected,\n\t\t\tisElectricityBillReportSelected,\n\t\t\tisAcPowerCompareTempHumiReportSelected,\n\t\t\tisEnergyUsagePerCapitaReportSelected,\n\t\t} = this.state;\n\n\t\tconst { t } = this.props;\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{/* ******************************** Filter Pane *****************************/}\n\t\t\t\t\t
\n\t\t\t\t\t\t
{t(\"Filter\")}
\n\n\t\t\t\t\t\t{/* ****************************** Filter Form **************************** */}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t{/* ****************************** Building Section **************************** */}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

{t(\"Building\")}

\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t({t(\"All\")})\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{lsBuilding.map((bld) => (\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t this.onClickBuilding(bld.label)}\n\t\t\t\t\t\t\t\t\t\t\t\tchecked={lsSelectedBuilding.includes(bld.label)}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{t(`${bld.label}`)}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
{t(\"Choose Report\")}
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t{t(\"report.Energy Usage\")}\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t{t(\"Electricity Bill\")}\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t{t(\n\t\t\t\t\t\t\t\"Air Conditioning Power Used Compared to Temperature and Humidity\"\n\t\t\t\t\t\t)}\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t{t(\"Energy Usage per Capita\")}\n\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\n\t\t\t\t{/* ****************************** Invisible Chart Container *****************************/}\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\n\t\t);\n\t}\n}\n\nexport default withTranslation()(Report);\n","import React from \"react\";\n\n// Styling and Media\nimport \"./Meter.css\";\nimport {\n\tButton,\n\tRow,\n\tCol,\n\tContainer,\n\tForm,\n\tFormGroup,\n\tInput,\n\tLabel,\n\tTable,\n\tModal,\n\tModalHeader,\n\tModalBody,\n\tModalFooter,\n} from \"reactstrap\";\nimport { IoMdSearch } from \"react-icons/io\";\nimport { ReactSVG } from \"react-svg\";\nimport { RiFileExcel2Fill } from \"react-icons/ri\";\n\n// Utils\nimport dateFormatter from \"../../utils/dateFormatter\";\nimport http from \"../../utils/http\";\nimport csv from \"../../utils/csv\";\n\nimport { withTranslation } from \"react-i18next\";\n\nclass Meter extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tlet dateFrom = new Date(new Date().setHours(0, 0, 0, 0));\n\t\tlet dateTo = new Date();\n\n\t\tthis.state = {\n\t\t\tisMapMode: true,\n\t\t\tisDiagramMode: false,\n\t\t\tlsDevice: [],\n\t\t\tlsBuilding: [],\n\t\t\tlsSelectedBuilding: [],\n\t\t\tlsLog: [],\n\t\t\tbuilding: \"\",\n\t\t\tsearchText: \"\",\n\t\t\tcurrentBuildingLabel: \"\",\n\t\t\tisOverall: true,\n\t\t\tisModalOpen: false,\n\t\t\tmodalDeviceID: \"\",\n\t\t\tdateFrom: dateFrom,\n\t\t\tdateTo: dateTo,\n\t\t\tinterval: \"15 min\",\n\t\t\tbuildingPath: window.location.origin + \"/building/\", // For Building Images\n\t\t\tpropsPath: window.location.origin + \"/props/\", // For Props Images\n\t\t\tlsPermission: JSON.parse(localStorage.getItem(\"lsPermission\")),\n\t\t};\n\n\t\tthis.setMapMode = this.setMapMode.bind(this);\n\t\tthis.setDiagramMode = this.setDiagramMode.bind(this);\n\t\tthis.setBuilding = this.setBuilding.bind(this);\n\n\t\tthis.handleInputChange = this.handleInputChange.bind(this);\n\t\tthis.handleInputDateChange = this.handleInputDateChange.bind(this);\n\t\tthis.onClickBuilding = this.onClickBuilding.bind(this);\n\t\tthis.onDoubleClickBuilding = this.onDoubleClickBuilding.bind(this);\n\t\tthis.onClickAllBuilding = this.onClickAllBuilding.bind(this);\n\t\tthis.toggleSortByMeterID = this.toggleSortByMeterID.bind(this);\n\t\tthis.toggleSortByStatus = this.toggleSortByStatus.bind(this);\n\t\tthis.toggleModalOpen = this.toggleModalOpen.bind(this);\n\n\t\tthis.getAllDevice = this.getAllDevice.bind(this);\n\t\tthis.getAllBuilding = this.getAllBuilding.bind(this);\n\t\tthis.getAllDeviceLatestLog = this.getAllDeviceLatestLog.bind(this);\n\t\tthis.getExportData = this.getExportData.bind(this);\n\n\t\tthis.exportTable = this.exportTable.bind(this);\n\t\tthis.exportMeter = this.exportMeter.bind(this);\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.getAllDevice();\n\t\tthis.getAllBuilding();\n\t\tthis.getAllDeviceLatestLog();\n\n\t\tthis.intervalDeviceLog = setInterval(\n\t\t\t() => this.getAllDeviceLatestLog(),\n\t\t\t300000\n\t\t);\n\t}\n\tcomponentWillUnmount() {\n\t\tclearInterval(this.intervalDeviceLog);\n\t}\n\n\tsetMapMode() {\n\t\tthis.setState({\n\t\t\tisMapMode: true,\n\t\t\tisDiagramMode: false,\n\t\t});\n\t}\n\n\tsetDiagramMode() {\n\t\tlet { lsSelectedBuilding } = this.state;\n\t\tif (lsSelectedBuilding.length > 1) this.onClickAllBuilding();\n\n\t\tthis.setState({\n\t\t\tisDiagramMode: true,\n\t\t\tisMapMode: false,\n\t\t});\n\t}\n\n\tsetBuilding(building) {\n\t\tthis.setState({\n\t\t\tbuilding: building,\n\t\t});\n\t}\n\n\thandleInputChange(e) {\n\t\tthis.setState({ [e.target.name]: e.target.value });\n\t}\n\n\thandleInputDateChange(e) {\n\t\tthis.setState({ [e.target.name]: new Date(e.target.value) });\n\t}\n\n\tonClickBuilding(building) {\n\t\tlet { lsSelectedBuilding, lsBuilding, isDiagramMode } = this.state;\n\n\t\tif (lsSelectedBuilding.length === lsBuilding.length || isDiagramMode) {\n\t\t\tlsSelectedBuilding = [building];\n\t\t} else if (!lsSelectedBuilding.includes(building)) {\n\t\t\tlsSelectedBuilding.push(building);\n\t\t\tthis.setState({ lsSelectedBuilding: lsSelectedBuilding });\n\t\t} else {\n\t\t\tlsSelectedBuilding = lsSelectedBuilding.filter((b) => b !== building);\n\t\t}\n\n\t\tthis.setState({ lsSelectedBuilding: lsSelectedBuilding });\n\t}\n\n\tonDoubleClickBuilding(building) {\n\t\tthis.setState({\n\t\t\tisMapMode: false,\n\t\t\tisDiagramMode: true,\n\t\t\tlsSelectedBuilding: [building],\n\t\t});\n\t}\n\n\tonClickAllBuilding() {\n\t\tlet { lsSelectedBuilding, lsBuilding } = this.state;\n\t\tlsSelectedBuilding = lsBuilding.map((building) => building.label);\n\t\tthis.setState({ lsSelectedBuilding: lsSelectedBuilding });\n\t}\n\n\ttoggleSortByMeterID() {\n\t\tlet { isSortByMeterIDAsc, isSortByMeterIDDesc } = this.state;\n\n\t\tif (!(isSortByMeterIDAsc || isSortByMeterIDDesc)) {\n\t\t\tthis.setState({\n\t\t\t\tisSortByMeterIDAsc: true,\n\t\t\t\tisSortByMeterIDDesc: false,\n\t\t\t\tisSortByStatusActive: false,\n\t\t\t\tisSortByStatusInactive: false,\n\t\t\t});\n\t\t} else if (isSortByMeterIDAsc) {\n\t\t\tthis.setState({\n\t\t\t\tisSortByMeterIDAsc: false,\n\t\t\t\tisSortByMeterIDDesc: true,\n\t\t\t\tisSortByStatusActive: false,\n\t\t\t\tisSortByStatusInactive: false,\n\t\t\t});\n\t\t} else if (isSortByMeterIDDesc) {\n\t\t\tthis.setState({\n\t\t\t\tisSortByMeterIDAsc: true,\n\t\t\t\tisSortByMeterIDDesc: false,\n\t\t\t\tisSortByStatusActive: false,\n\t\t\t\tisSortByStatusInactive: false,\n\t\t\t});\n\t\t}\n\t}\n\n\ttoggleSortByStatus() {\n\t\tlet { isSortByStatusActive, isSortByStatusInactive } = this.state;\n\n\t\tif (!(isSortByStatusActive || isSortByStatusInactive)) {\n\t\t\tthis.setState({\n\t\t\t\tisSortByStatusActive: true,\n\t\t\t\tisSortByStatusInactive: false,\n\t\t\t\tisSortByMeterIDAsc: false,\n\t\t\t\tisSortByMeterIDDesc: false,\n\t\t\t});\n\t\t} else if (isSortByStatusActive) {\n\t\t\tthis.setState({\n\t\t\t\tisSortByStatusActive: false,\n\t\t\t\tisSortByStatusInactive: true,\n\t\t\t\tisSortByMeterIDAsc: false,\n\t\t\t\tisSortByMeterIDDesc: false,\n\t\t\t});\n\t\t} else if (isSortByStatusInactive) {\n\t\t\tthis.setState({\n\t\t\t\tisSortByStatusActive: true,\n\t\t\t\tisSortByStatusInactive: false,\n\t\t\t\tisSortByMeterIDAsc: false,\n\t\t\t\tisSortByMeterIDDesc: false,\n\t\t\t});\n\t\t}\n\t}\n\n\ttoggleModalOpen(deviceID) {\n\t\tthis.setState((prevState) => ({\n\t\t\tisModalOpen: !prevState.isModalOpen,\n\t\t\tmodalDeviceID: deviceID,\n\t\t}));\n\t}\n\n\tasync getAllDevice() {\n\t\ttry {\n\t\t\tlet resp = await http.get(\"/device/all\");\n\n\t\t\tthis.setState({ lsDevice: resp.data });\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\tasync getAllBuilding() {\n\t\ttry {\n\t\t\tlet resp = await http.get(\"/building/all\");\n\n\t\t\tthis.setState({ lsBuilding: resp.data });\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\tasync getAllDeviceLatestLog() {\n\t\ttry {\n\t\t\tlet resp = await http.get(\"/device/all/latest\");\n\n\t\t\tthis.setState({ lsLog: resp.data });\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\tasync getExportData() {\n\t\tlet { dateFrom, dateTo, interval, modalDeviceID } = this.state;\n\n\t\tdateFrom.setHours(0);\n\t\tdateFrom.setMinutes(0);\n\t\tdateFrom.setSeconds(0);\n\n\t\tdateTo.setHours(23);\n\t\tdateTo.setMinutes(59);\n\t\tdateTo.setSeconds(59);\n\n\t\ttry {\n\t\t\tlet payload = {\n\t\t\t\tdate_from: dateFrom,\n\t\t\t\tdate_to: dateTo,\n\t\t\t\tinterval: interval,\n\t\t\t\tdevice_id: modalDeviceID,\n\t\t\t};\n\n\t\t\tlet resp = await http.post(\"/device/export\", payload);\n\n\t\t\treturn resp.data;\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\texportTable() {\n\t\tlet rows = [];\n\t\tlet tableRows = document.querySelectorAll(\"table tr\");\n\n\t\tfor (let i = 0; i < tableRows.length; i++) {\n\t\t\tlet row = [];\n\t\t\tlet cols = tableRows[i].querySelectorAll(\"td, th\");\n\n\t\t\tfor (let j = 0; j < cols.length; j++) {\n\t\t\t\trow.push(cols[j].innerText);\n\t\t\t}\n\n\t\t\trows.push(row);\n\t\t}\n\n\t\tcsv.exportFile(\"Meter Table\", rows);\n\t}\n\n\tasync exportMeter() {\n\t\tlet lsLog = await this.getExportData();\n\n\t\tconsole.log(lsLog);\n\n\t\tlet rows = [[]];\n\t\trows[0].push(\n\t\t\t\"Datetime\",\n\t\t\t\"Energy (kWh)\",\n\t\t\t\"Total Power (kW)\",\n\t\t\t\"Total Apparent (kVA)\",\n\t\t\t\"Power Factor: PF\",\n\t\t\t\"Phase Voltage L1: V1 (V)\",\n\t\t\t\"Phase Voltage L2: V2 (V)\",\n\t\t\t\"Phase Voltage L3: V3 (V)\",\n\t\t\t\"Line Voltage L1-L2 (V)\",\n\t\t\t\"Line Voltage L2-L3 (V)\",\n\t\t\t\"Line Voltage L3-L1 (V)\",\n\t\t\t\"Reactive L1 (KVar)\",\n\t\t\t\"Reactive L2 (KVar)\",\n\t\t\t\"Reactive L3 (KVar)\",\n\t\t\t\"Current L1: I1 (A)\",\n\t\t\t\"Current L2: I2 (A)\",\n\t\t\t\"Current L3: I3 (A)\",\n\t\t\t\"Power L1 (kW)\",\n\t\t\t\"Power L2 (kW)\",\n\t\t\t\"Power L3 (kW)\",\n\t\t\t\"Apparent L1 (kVA)\",\n\t\t\t\"Apparent L2 (kVA)\",\n\t\t\t\"Apparent L3 (kVA)\",\n\t\t\t\"Frequency (Hz)\"\n\t\t);\n\n\t\tfor (let [idx, log] of lsLog.entries()) {\n\t\t\tif (rows[idx + 1] === undefined) rows[idx + 1] = [];\n\n\t\t\trows[idx + 1].push(\n\t\t\t\tdateFormatter.yyyymmddhhmmss_noOffset(new Date(log.data_datetime)),\n\t\t\t\tlog.kwh,\n\t\t\t\tlog.kw_total,\n\t\t\t\tlog.kva_total,\n\t\t\t\tlog.pf,\n\t\t\t\tlog.voltage_l1_N,\n\t\t\t\tlog.voltage_l2_N,\n\t\t\t\tlog.voltage_l3_N,\n\t\t\t\tlog.voltage_l1_l2,\n\t\t\t\tlog.voltage_l2_l3,\n\t\t\t\tlog.voltage_l3_l1,\n\t\t\t\tlog.kvar_l1,\n\t\t\t\tlog.kvar_l2,\n\t\t\t\tlog.kvar_l3,\n\t\t\t\tlog.current_l1,\n\t\t\t\tlog.current_l2,\n\t\t\t\tlog.current_l3,\n\t\t\t\tlog.kw_l1,\n\t\t\t\tlog.kw_l2,\n\t\t\t\tlog.k2_l3,\n\t\t\t\tlog.kva_l1,\n\t\t\t\tlog.kva_l2,\n\t\t\t\tlog.kva_l3,\n\t\t\t\tlog.hz\n\t\t\t);\n\t\t}\n\n\t\tcsv.exportFile(`${this.state.modalDeviceID}`, rows);\n\t}\n\n\trender() {\n\t\tlet {\n\t\t\tisMapMode,\n\t\t\tisDiagramMode,\n\t\t\tsearchText,\n\t\t\tlsDevice,\n\t\t\tlsBuilding,\n\t\t\tlsSelectedBuilding,\n\t\t\tlsLog,\n\t\t\tisSortByMeterIDAsc,\n\t\t\tisSortByMeterIDDesc,\n\t\t\tisSortByStatusActive,\n\t\t\tisSortByStatusInactive,\n\t\t\tpropsPath,\n\t\t\tbuildingPath,\n\t\t\tisModalOpen,\n\t\t\tmodalDeviceID,\n\t\t\tdateTo,\n\t\t\tdateFrom,\n\t\t\tinterval,\n\t\t\tlsPermission,\n\t\t} = this.state;\n\n\t\tconst { t } = this.props;\n\n\t\tif (lsSelectedBuilding.length === 0) {\n\t\t\tlsSelectedBuilding = lsBuilding.map((building) => building.label);\n\t\t}\n\n\t\tlet lsDeviceDisplay = lsDevice.slice();\n\n\t\tif (isSortByMeterIDAsc) {\n\t\t\tlsDeviceDisplay.sort((a, b) => (a.id > b.id ? 1 : b.id > a.id ? -1 : 0));\n\t\t} else if (isSortByMeterIDDesc) {\n\t\t\tlsDeviceDisplay.sort((a, b) => (a.id > b.id ? -1 : b.id > a.id ? 1 : 0));\n\t\t} else if (isSortByStatusActive) {\n\t\t\tlsDeviceDisplay.sort((a, b) => (a.is_active ? -1 : !a.is_active ? 1 : 0));\n\t\t} else if (isSortByStatusInactive) {\n\t\t\tlsDeviceDisplay.sort((a, b) => (!a.is_active ? -1 : a.is_active ? 1 : 0));\n\t\t}\n\n\t\tif (searchText.length > 0) {\n\t\t\tlsDeviceDisplay = lsDeviceDisplay.filter((device, _) => {\n\t\t\t\tlet id = device.id === null ? \"\" : device.id;\n\t\t\t\tlet building = device.building === null ? \"\" : device.building;\n\t\t\t\tlet location = device.location === null ? \"\" : device.location;\n\t\t\t\tlet site = device.site === null ? \"\" : device.site;\n\t\t\t\tlet brandModel = device.brand_model === null ? \"\" : device.brand_model;\n\t\t\t\tlet system = device.system === null ? \"\" : device.system;\n\n\t\t\t\treturn (\n\t\t\t\t\tid.includes(searchText) ||\n\t\t\t\t\tt(building).includes(searchText) ||\n\t\t\t\t\tlocation.includes(searchText) ||\n\t\t\t\t\tsite.includes(searchText) ||\n\t\t\t\t\tbrandModel.includes(searchText) ||\n\t\t\t\t\tt(system).includes(searchText) ||\n\t\t\t\t\tdateFormatter\n\t\t\t\t\t\t.ddmmyyyy(new Date(device.activated_datetime))\n\t\t\t\t\t\t.includes(searchText)\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\n\t\tlsDeviceDisplay = lsDeviceDisplay.filter(\n\t\t\t(device, _) =>\n\t\t\t\tlsSelectedBuilding.includes(device.building) &&\n\t\t\t\t(device.system === \"Main\" || device.system === \"Air Conditioner\")\n\t\t);\n\n\t\tlet latestTime = new Date(0);\n\t\tlet kw_building = {};\n\t\tlet kwTotal = 0;\n\t\tfor (let log of lsLog) {\n\t\t\tlet datetime = new Date(log.data_datetime);\n\t\t\tif (datetime.getTime() > latestTime.getTime()) latestTime = datetime;\n\n\t\t\tif (log.system === \"Main\" && log.floor === null) {\n\t\t\t\tlet building = log.building;\n\t\t\t\tlet kw = log.kw_total === null ? 0 : log.kw_total;\n\n\t\t\t\tif (!kw_building[building]) kw_building[building] = 0;\n\t\t\t\tkw_building[building] += kw;\n\n\t\t\t\tkwTotal += kw;\n\t\t\t}\n\t\t}\n\n\t\tlsLog.sort((a, b) => a.floor - b.floor);\n\n\t\tlet modalDevice = lsDeviceDisplay.find(\n\t\t\t(device) => device.id === modalDeviceID\n\t\t);\n\t\tlet modalLog = lsLog.find((log) => log.device_id === modalDeviceID);\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t{lsBuilding.map((building) => (\n\t\t\t\t\t\n\t\t\t\t))}\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{t(\"Map\")}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{t(\"Diagram\")}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t{isMapMode ? (\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{lsBuilding.map((building) => (\n\t\t\t\t\t\t\t\t\t this.onClickBuilding(building.label)}\n\t\t\t\t\t\t\t\t\t\tonDoubleClick={() =>\n\t\t\t\t\t\t\t\t\t\t\tthis.onDoubleClickBuilding(building.label)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{t(`${building.label}`)}\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{lsBuilding.map((building) => (\n\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log(error);\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tid={\"img-\" + building.label.toLowerCase().replace(\" \", \"-\")}\n\t\t\t\t\t\t\t\t\tclassName={\"img-building\"}\n\t\t\t\t\t\t\t\t\tsrc={\n\t\t\t\t\t\t\t\t\t\tbuildingPath +\n\t\t\t\t\t\t\t\t\t\tbuilding.label +\n\t\t\t\t\t\t\t\t\t\t\"/\" +\n\t\t\t\t\t\t\t\t\t\tbuilding.label +\n\t\t\t\t\t\t\t\t\t\t\".svg\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\twrapper=\"div\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{t(\"General Info\")}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{lsPermission.find(\n\t\t\t\t\t\t\t\t\t\t\t(p) => p.label === \"Export Information\"\n\t\t\t\t\t\t\t\t\t\t) ? (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{t(\"Meter\") + \" ID\"}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{t(\"Status\")}\n\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{lsDeviceDisplay.map((device, _) => (\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
{t(\"Building\")}{t(\"Floor\")}{t(\"Location\")}{t(\"Site\")}{t(\"Brand / Model\")}{t(\"System\")}{t(\"Activated Date\")}
{device.id}{t(`${device.building}`)}{device.floor}{device.location}{device.site}{device.brand_model}{t(`${device.system}`)}\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t{dateFormatter.ddmmyyyy(\n\t\t\t\t\t\t\t\t\t\t\t\t\tnew Date(device.activated_datetime)\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t) : (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t

{t(\"Building\")}

\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{t(\"Overall\")}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{lsBuilding.map((bld) => (\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t this.onClickBuilding(bld.label)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{t(`${bld.label}`)}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{lsSelectedBuilding.length === lsBuilding.length ? (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{t(\"time\")}{\" \"}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{latestTime.toTimeString().split(\" \")[0].substring(0, 5)}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{t(\"NIDA\")}{\" \"}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{parseFloat(kwTotal).toFixed(2) + \" kW\"}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t{lsBuilding.map((bld) => (\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t this.onClickBuilding(bld.label)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{t(`${bld.label}`)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{kw_building[bld.label] === undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? \"N/A\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: parseFloat(kw_building[bld.label]).toFixed(2) +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t \" kW\"}\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t{lsLog.map((log) => (\n\t\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t\t{lsDeviceDisplay.find(\n\t\t\t\t\t\t\t\t\t\t\t\t\t(device) => device.id === log.device_id\n\t\t\t\t\t\t\t\t\t\t\t\t) === undefined ||\n\t\t\t\t\t\t\t\t\t\t\t\tlog.system !== \"Main\" ||\n\t\t\t\t\t\t\t\t\t\t\t\tlog.floor !== null ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t this.toggleModalOpen(log.device_id)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
{log.device_id}
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
({log.kw_total + \" kW\"})
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t device.id === log.device_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)[0]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? lsDeviceDisplay.filter(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(device) => device.id === log.device_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t )[0].is_active\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? \"green-dot\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: \"red-dot\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: \"red-dot\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t{lsLog.map((log) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{lsDeviceDisplay.find(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(device) => device.id === log.device_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t) === undefined ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlog.system !== \"Air Conditioner\" ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlog.floor === null ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
{t(\"Air Handling Unit\")}
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.toggleModalOpen(log.device_id)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{log.device_id}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{log.kw_total === null\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? \"N/A\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: parseFloat(log.kw_total).toFixed(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t2\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t ) + \" kW\"}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t){` - ${t(\"Floor\")} `}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{log.floor === null\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? \"N/A\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: log.floor < 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? log.floor\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.toString()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.replace(\"-\", \"B\")\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: log.floor}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdevice.id === log.device_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)[0]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? lsDeviceDisplay.filter(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(device) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdevice.id === log.device_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t )[0].is_active\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? \"green-dot\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: \"red-dot\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: \"red-dot\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t{lsLog.map((log) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{lsDeviceDisplay.find(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(device) => device.id === log.device_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t) === undefined ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlog.system !== \"Main\" ||\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlog.floor === null ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
{t(\"Others\")}
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthis.toggleModalOpen(log.device_id)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{log.device_id}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{log.kw_total === null\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? \"N/A\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: parseFloat(log.kw_total).toFixed(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t2\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t ) + \" kW\"}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t){` - ${t(\"Floor\")} `}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{log.floor === null\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? \"N/A\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: log.floor < 0\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? log.floor\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.toString()\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.replace(\"-\", \"B\")\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: log.floor}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdevice.id === log.device_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)[0]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? lsDeviceDisplay.filter(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(device) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdevice.id === log.device_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t )[0].is_active\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? \"green-dot\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: \"red-dot\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: \"red-dot\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t)}\n\t\t\t\t this.toggleModalOpen(\"\")}\n\t\t\t\t\tclassName=\"modal-meter\"\n\t\t\t\t>\n\t\t\t\t\t this.toggleModalOpen(\"\")}>\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{modalDevice ? (\n\t\t\t\t\t\t\t\t\tmodalDevice.is_active ? (\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{modalDeviceID + \" \"}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{modalDevice\n\t\t\t\t\t\t\t\t\t? modalDevice.brand_model !== null\n\t\t\t\t\t\t\t\t\t\t? modalDevice.brand_model\n\t\t\t\t\t\t\t\t\t\t: \"N/A\"\n\t\t\t\t\t\t\t\t\t: \"N/A\"}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
{t(\"Energy\")} (kWh)\n\t\t\t\t\t\t\t\t\t\t\t{modalLog\n\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.kwh !== null\n\t\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.kwh\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"\n\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"}\n\t\t\t\t\t\t\t\t\t\t
{t(\"Total Power\")} (kW)\n\t\t\t\t\t\t\t\t\t\t\t{modalLog\n\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.kw_total !== null\n\t\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.kw_total\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"\n\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"}\n\t\t\t\t\t\t\t\t\t\t
{t(\"Total Apparent\")} (kVA)\n\t\t\t\t\t\t\t\t\t\t\t{modalLog\n\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.kva_total !== null\n\t\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.kva_total\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"\n\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"}\n\t\t\t\t\t\t\t\t\t\t
{t(\"Power Factor\")}: PF\n\t\t\t\t\t\t\t\t\t\t\t{modalLog\n\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.pf !== null\n\t\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.pf\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"\n\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"}\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
{t(\"Phase Voltage\")} L1: V1 (V)\n\t\t\t\t\t\t\t\t\t\t\t{modalLog\n\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.voltage_l1_N !== null\n\t\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.voltage_l1_N\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"\n\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"}\n\t\t\t\t\t\t\t\t\t\t{t(\"Current\")} L1: I1 (A)\n\t\t\t\t\t\t\t\t\t\t\t{modalLog\n\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.current_l1 !== null\n\t\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.current_l1\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"\n\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"}\n\t\t\t\t\t\t\t\t\t\t
{t(\"Phase Voltage\")} L2: V2 (V)\n\t\t\t\t\t\t\t\t\t\t\t{modalLog\n\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.voltage_l2_N !== null\n\t\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.voltage_l2_N\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"\n\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"}\n\t\t\t\t\t\t\t\t\t\t{t(\"Current\")} L2: I2 (A)\n\t\t\t\t\t\t\t\t\t\t\t{modalLog\n\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.current_l2 !== null\n\t\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.current_l2\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"\n\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"}\n\t\t\t\t\t\t\t\t\t\t
{t(\"Phase Voltage\")} L3: V3 (V)\n\t\t\t\t\t\t\t\t\t\t\t{modalLog\n\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.voltage_l3_N !== null\n\t\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.voltage_l3_N\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"\n\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"}\n\t\t\t\t\t\t\t\t\t\t{t(\"Current\")} L3: I3 (A)\n\t\t\t\t\t\t\t\t\t\t\t{modalLog\n\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.current_l3 !== null\n\t\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.current_l3\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"\n\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"}\n\t\t\t\t\t\t\t\t\t\t
{t(\"Line Voltage\")} L1-L2 (V)\n\t\t\t\t\t\t\t\t\t\t\t{modalLog\n\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.voltage_l1_l2 !== null\n\t\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.voltage_l1_l2\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"\n\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"}\n\t\t\t\t\t\t\t\t\t\t{t(\"Power\")} L1 (kW)\n\t\t\t\t\t\t\t\t\t\t\t{modalLog\n\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.kw_l1 !== null\n\t\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.kw_l1\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"\n\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"}\n\t\t\t\t\t\t\t\t\t\t
{t(\"Line Voltage\")} L2-L3 (V)\n\t\t\t\t\t\t\t\t\t\t\t{modalLog\n\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.voltage_l2_l3 !== null\n\t\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.voltage_l2_l3\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"\n\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"}\n\t\t\t\t\t\t\t\t\t\t{t(\"Power\")} L2 (kW)\n\t\t\t\t\t\t\t\t\t\t\t{modalLog\n\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.kw_l2 !== null\n\t\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.kw_l2\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"\n\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"}\n\t\t\t\t\t\t\t\t\t\t
{t(\"Line Voltage\")} L3-L1 (V)\n\t\t\t\t\t\t\t\t\t\t\t{modalLog\n\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.voltage_l3_l1 !== null\n\t\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.voltage_l3_l1\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"\n\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"}\n\t\t\t\t\t\t\t\t\t\t{t(\"Power\")} L3 (kW)\n\t\t\t\t\t\t\t\t\t\t\t{modalLog\n\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.kw_l3 !== null\n\t\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.kw_l3\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"\n\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"}\n\t\t\t\t\t\t\t\t\t\t
{t(\"Reactive\")} L1 (KVar)\n\t\t\t\t\t\t\t\t\t\t\t{modalLog\n\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.kvar_l1 !== null\n\t\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.kvar_l1\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"\n\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"}\n\t\t\t\t\t\t\t\t\t\t{t(\"Apparent\")} L1 (kVA)\n\t\t\t\t\t\t\t\t\t\t\t{modalLog\n\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.kva_l1 !== null\n\t\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.kva_l1\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"\n\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"}\n\t\t\t\t\t\t\t\t\t\t
{t(\"Reactive\")} L2 (KVar)\n\t\t\t\t\t\t\t\t\t\t\t{modalLog\n\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.kvar_l2 !== null\n\t\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.kvar_l2\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"\n\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"}\n\t\t\t\t\t\t\t\t\t\t{t(\"Apparent\")} L2 (kVA)\n\t\t\t\t\t\t\t\t\t\t\t{modalLog\n\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.kva_l2 !== null\n\t\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.kva_l2\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"\n\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"}\n\t\t\t\t\t\t\t\t\t\t
{t(\"Reactive\")} L3 (KVar)\n\t\t\t\t\t\t\t\t\t\t\t{modalLog\n\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.kvar_l3 !== null\n\t\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.kvar_l3\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"\n\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"}\n\t\t\t\t\t\t\t\t\t\t{t(\"Apparent\")} L3 (kVA)\n\t\t\t\t\t\t\t\t\t\t\t{modalLog\n\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.kva_l3 !== null\n\t\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.kva_l3\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"\n\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"}\n\t\t\t\t\t\t\t\t\t\t
{t(\"Frequency\")} (Hz)\n\t\t\t\t\t\t\t\t\t\t\t{modalLog\n\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.hz !== null\n\t\t\t\t\t\t\t\t\t\t\t\t\t? modalLog.hz\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"\n\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"}\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{t(\"Select date to export\")}{\" \"}\n\t\t\t\t\t\t\t{lsPermission.find((p) => p.label === \"Export Information\") ? (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t);\n\t}\n}\n\nexport default withTranslation()(Meter);\n","import React from \"react\";\nimport { Row, Col, Container } from \"reactstrap\";\nimport \"./Footer.css\";\n\nclass Footer extends React.Component {\n\trender() {\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n}\n\nexport default Footer;\n","import React, { useEffect, Fragment } from \"react\";\nimport { withRouter } from \"react-router-dom\";\n\nfunction ScrollToTop({ history, children }) {\n\tuseEffect(() => {\n\t\tconst unlisten = history.listen(() => {\n\t\t\twindow.scrollTo(0, 0);\n\t\t});\n\t\treturn () => {\n\t\t\tunlisten();\n\t\t};\n\t}, []);\n\n\treturn {children};\n}\n\nexport default withRouter(ScrollToTop);\n","import React from \"react\";\nimport \"./MixedChartBillCompare.css\";\n\nimport { Chart, registerables } from \"chart.js\";\nimport zoomPlugin from \"chartjs-plugin-zoom\";\nimport \"chartjs-adapter-moment\";\n\nimport i18n from \"../../../../i18n\";\n\nimport { lsMonth } from \"../../../../utils/months\";\n\nlet mixedChart;\n\nclass MixedChartBillCompare extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tbuilding: {},\n\t\t\tcompareTo: \"Target\",\n\t\t\tbillData_month: {},\n\t\t\tcompareData: [],\n\t\t\tlsBuilding: [],\n\t\t\t// Chart details\n\t\t\tdata: {},\n\t\t\toptions: {\n\t\t\t\tresponsive: true,\n\t\t\t\tanimation: false,\n\t\t\t\tmaintainAspectRatio: false,\n\t\t\t\tinteraction: {\n\t\t\t\t\tintersect: false,\n\t\t\t\t\taxis: \"x\",\n\t\t\t\t\tmode: \"index\",\n\t\t\t\t},\n\t\t\t\tscales: {\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tgrid: {\n\t\t\t\t\t\t\tdisplay: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tyAxis: {\n\t\t\t\t\t\tmin: 0,\n\t\t\t\t\t\tmax: 100,\n\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\tgrid: {\n\t\t\t\t\t\t\tdisplay: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttitle: {\n\t\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\t\ttext: \"THB\",\n\t\t\t\t\t\t\tfont: {\n\t\t\t\t\t\t\t\tsize: 16,\n\t\t\t\t\t\t\t\tweight: \"600\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tplugins: {\n\t\t\t\t\ttitle: {\n\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\ttext: \"Electricity Bill (THB)\",\n\t\t\t\t\t\talign: \"start\",\n\t\t\t\t\t\tfont: { weight: \"bold\", size: 20 },\n\t\t\t\t\t},\n\t\t\t\t\tlegend: {\n\t\t\t\t\t\tdisplay: false,\n\t\t\t\t\t},\n\t\t\t\t\ttooltip: {\n\t\t\t\t\t\tenabled: true,\n\t\t\t\t\t\tpadding: 14,\n\t\t\t\t\t\tbackgroundColor: \"#F2F2F2\",\n\t\t\t\t\t\ttitleColor: \"#000\",\n\t\t\t\t\t\tbodyColor: \"#000\",\n\t\t\t\t\t\ttitleFont: { size: 20 },\n\t\t\t\t\t\tbodyFont: { size: 18 },\n\t\t\t\t\t\tbodySpacing: 10,\n\t\t\t\t\t},\n\t\t\t\t\tzoom: {\n\t\t\t\t\t\tpan: {\n\t\t\t\t\t\t\tenabled: true,\n\t\t\t\t\t\t\tmode: \"xy\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tzoom: {\n\t\t\t\t\t\t\twheel: { enabled: true },\n\t\t\t\t\t\t\tpinch: { enabled: true },\n\t\t\t\t\t\t\tmode: \"xy\",\n\t\t\t\t\t\t\tspeed: 100,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlimits: {\n\t\t\t\t\t\t\tx: { min: \"original\", max: \"original\" },\n\t\t\t\t\t\t\ty: { min: \"original\", max: \"original\" },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tthis.handleDoubleClick = this.handleDoubleClick.bind(this);\n\t}\n\n\tbuildChart = () => {\n\t\tlet { data, options, billData_month, compareTo } = this.state;\n\t\tlet opt = JSON.parse(JSON.stringify(options));\n\n\t\tif (Object.keys(billData_month).length === 0) return;\n\n\t\tlet datasets = [\n\t\t\t{\n\t\t\t\tlabel: \"Latest\",\n\t\t\t\tbackgroundColor: \"#FFB800\",\n\t\t\t\tborderColor: \"#FFB800\",\n\t\t\t\tdata: [],\n\t\t\t\ttype: \"bar\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: compareTo,\n\t\t\t\tbackgroundColor: \"#E2E2E2\",\n\t\t\t\tborderColor: \"#E2E2E2\",\n\t\t\t\tfill: \"origin\",\n\t\t\t\tborderWidth: 2,\n\t\t\t\tpointRadius: 2,\n\t\t\t\tdata: [],\n\t\t\t\ttype: \"line\",\n\t\t\t},\n\t\t];\n\n\t\tlet yMax = 0;\n\t\tlet month = new Date().getMonth();\n\t\tfor (let i = 0; i < 12; i++) {\n\t\t\tif (month < 0) month += 12;\n\n\t\t\tlet dataMonth = billData_month[month];\n\n\t\t\tdatasets[0].data.unshift(dataMonth.latest);\n\n\t\t\tlet compareData = datasets[1].data;\n\t\t\tif (compareTo === \"Target\") compareData.unshift(dataMonth.target);\n\t\t\telse if (compareTo === \"Average\") compareData.unshift(dataMonth.average);\n\n\t\t\tfor (let bill of Object.values(billData_month[month])) {\n\t\t\t\tif (bill > yMax) yMax = bill;\n\t\t\t}\n\n\t\t\tmonth--;\n\t\t}\n\n\t\tlet labels = [];\n\t\tfor (let monthIdx = new Date().getMonth(); labels.length < 12; monthIdx--) {\n\t\t\tif (monthIdx < 0) monthIdx += 12;\n\t\t\tlabels.unshift(i18n.t(lsMonth[monthIdx % 12]));\n\t\t}\n\n\t\tdata.labels = labels;\n\t\tdata.datasets = datasets;\n\t\topt.scales.yAxis.max = Math.ceil(yMax);\n\t\topt.scales.yAxis.title.text = i18n.t(opt.scales.yAxis.title.text);\n\t\topt.plugins.title.text = i18n.t(opt.plugins.title.text);\n\t\topt.plugins.tooltip.callbacks = {\n\t\t\ttitle: function (context) {\n\t\t\t\tlet month = context[0].label;\n\t\t\t\tObject.entries(i18n.getDataByLanguage(\"th\").translation).forEach(\n\t\t\t\t\t([en, th]) => {\n\t\t\t\t\t\tif (th === context[0].label) {\n\t\t\t\t\t\t\tmonth = en;\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tlet displayYear = new Date().getFullYear();\n\t\t\t\tlsMonth.forEach((mth, idx) => {\n\t\t\t\t\tif (mth === month) {\n\t\t\t\t\t\tif (new Date().getMonth() - idx < 0) {\n\t\t\t\t\t\t\tdisplayYear = new Date().getFullYear() - 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn context[0].label + \" \" + displayYear;\n\t\t\t},\n\t\t};\n\n\t\tdata.datasets.forEach((ds) => {\n\t\t\tds.label = i18n.t(ds.label);\n\t\t});\n\n\t\tdocument.getElementById(\"mc-bill-compare\").remove();\n\t\tdocument.getElementById(\n\t\t\t\"wrapper-mc-bill-compare\"\n\t\t).innerHTML = ``;\n\n\t\tlet ctx = document.getElementById(\"mc-bill-compare\").getContext(\"2d\");\n\n\t\tmixedChart = new Chart(ctx, {\n\t\t\ttype: \"bar\",\n\t\t\tdata: data,\n\t\t\toptions: opt,\n\t\t});\n\n\t\tthis.setState({\n\t\t\tdata: data,\n\t\t});\n\t};\n\n\tcomponentDidMount() {\n\t\tChart.register(...registerables);\n\t\tChart.register(zoomPlugin);\n\t}\n\n\tcomponentWillReceiveProps(nextProps) {\n\t\tlet lsBuilding = nextProps.lsBuilding;\n\t\tlet compareTo = nextProps.compareTo;\n\t\tlet billData_month = nextProps.billData_month;\n\n\t\tthis.setState(\n\t\t\t{\n\t\t\t\tlsBuilding: lsBuilding,\n\t\t\t\tbillData_month: billData_month,\n\t\t\t\tcompareTo: compareTo,\n\t\t\t},\n\t\t\t() => this.buildChart()\n\t\t);\n\t}\n\n\thandleDoubleClick() {\n\t\tif (mixedChart) mixedChart.resetZoom();\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t);\n\t}\n}\n\nexport default MixedChartBillCompare;\n","import React from \"react\";\nimport \"./BarChartBillCompare.css\";\n\nimport { Chart, registerables } from \"chart.js\";\nimport zoomPlugin from \"chartjs-plugin-zoom\";\nimport \"chartjs-adapter-moment\";\n\nimport i18n from \"../../../../i18n\";\n\nimport { lsMonth } from \"../../../../utils/months\";\n\nlet barChart;\n\nclass BarChartBillCompare extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tbuilding: {},\n\t\t\tcompareTo: \"Target\",\n\t\t\tbillData_month: {},\n\t\t\tcompareData: [],\n\t\t\tlsBuilding: [],\n\t\t\t// Chart details\n\t\t\tdata: {},\n\t\t\toptions: {\n\t\t\t\tresponsive: true,\n\t\t\t\tanimation: false,\n\t\t\t\tmaintainAspectRatio: false,\n\t\t\t\tinteraction: {\n\t\t\t\t\tintersect: false,\n\t\t\t\t\taxis: \"x\",\n\t\t\t\t\tmode: \"index\",\n\t\t\t\t},\n\t\t\t\tscales: {\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tgrid: {\n\t\t\t\t\t\t\tdisplay: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tyAxis: {\n\t\t\t\t\t\tmin: -100,\n\t\t\t\t\t\tmax: 100,\n\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\tgrid: {\n\t\t\t\t\t\t\tdrawBorder: false,\n\t\t\t\t\t\t\tcolor: function (context) {\n\t\t\t\t\t\t\t\tif (context.tick.value === 0) {\n\t\t\t\t\t\t\t\t\treturn \"#000\";\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn \"#00000000\";\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttitle: {\n\t\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\t\ttext: \"%\",\n\t\t\t\t\t\t\tfont: {\n\t\t\t\t\t\t\t\tsize: 16,\n\t\t\t\t\t\t\t\tweight: \"600\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tplugins: {\n\t\t\t\t\ttitle: {\n\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\ttext: \"Electricity Bill Compared to Target/Average\",\n\t\t\t\t\t\talign: \"start\",\n\t\t\t\t\t\tfont: { weight: \"bold\", size: 20 },\n\t\t\t\t\t},\n\t\t\t\t\tlegend: {\n\t\t\t\t\t\tdisplay: false,\n\t\t\t\t\t},\n\t\t\t\t\ttooltip: {\n\t\t\t\t\t\tenabled: true,\n\t\t\t\t\t\tpadding: 14,\n\t\t\t\t\t\tbackgroundColor: \"#F2F2F2\",\n\t\t\t\t\t\ttitleColor: \"#000\",\n\t\t\t\t\t\tbodyColor: \"#000\",\n\t\t\t\t\t\ttitleFont: { size: 20 },\n\t\t\t\t\t\tbodyFont: { size: 18 },\n\t\t\t\t\t\tbodySpacing: 10,\n\t\t\t\t\t\tcallbacks: {\n\t\t\t\t\t\t\tlabel: function (context) {\n\t\t\t\t\t\t\t\tvar label = context.dataset.label || \"\";\n\n\t\t\t\t\t\t\t\tif (label) {\n\t\t\t\t\t\t\t\t\tlabel = i18n.t(label);\n\t\t\t\t\t\t\t\t\tlabel += \": \";\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (context.parsed.y !== null) {\n\t\t\t\t\t\t\t\t\tif (context.parsed.y < 0) {\n\t\t\t\t\t\t\t\t\t\tlabel = i18n.t(label);\n\t\t\t\t\t\t\t\t\t\tlabel += \": \";\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tlabel += context.parsed.y + \"%\";\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn label;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tzoom: {\n\t\t\t\t\t\tpan: {\n\t\t\t\t\t\t\tenabled: true,\n\t\t\t\t\t\t\tmode: \"xy\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tzoom: {\n\t\t\t\t\t\t\twheel: { enabled: true },\n\t\t\t\t\t\t\tpinch: { enabled: true },\n\t\t\t\t\t\t\tmode: \"xy\",\n\t\t\t\t\t\t\tspeed: 100,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlimits: {\n\t\t\t\t\t\t\tx: { min: \"original\", max: \"original\" },\n\t\t\t\t\t\t\ty: { min: \"original\", max: \"original\" },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tthis.handleDoubleClick = this.handleDoubleClick.bind(this);\n\t}\n\n\tbuildChart = () => {\n\t\tlet { data, options, billData_month, compareTo } = this.state;\n\t\tlet opt = JSON.parse(JSON.stringify(options));\n\n\t\tif (Object.keys(billData_month).length === 0) return;\n\n\t\tlet lsData = [];\n\t\tlet lsColor = [];\n\n\t\tlet yMax = 0;\n\t\tlet month = new Date().getMonth();\n\t\tfor (let i = 0; i < 12; i++) {\n\t\t\tif (month < 0) month += 12;\n\n\t\t\tlet dataMonth = billData_month[month];\n\t\t\tlet latest = dataMonth.latest;\n\t\t\tlet target = dataMonth.target;\n\t\t\tlet average = dataMonth.average;\n\n\t\t\tif (compareTo === \"Target\") {\n\t\t\t\tif (target === 0) lsData.unshift(0);\n\t\t\t\telse {\n\t\t\t\t\tlsData.unshift(\n\t\t\t\t\t\t+parseFloat(((target - latest) / target) * 100).toFixed(2)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else if (compareTo === \"Average\") {\n\t\t\t\tif (average === 0) lsData.unshift(0);\n\t\t\t\telse {\n\t\t\t\t\tlsData.unshift(\n\t\t\t\t\t\t+parseFloat(((average - latest) / average) * 100).toFixed(2)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmonth--;\n\t\t}\n\n\t\tlsData.forEach((data) => {\n\t\t\tif (Math.abs(data) > yMax) yMax = Math.abs(data);\n\n\t\t\tif (data >= 0) lsColor.push(\"#7DA0CF\");\n\t\t\telse lsColor.push(\"#F19D9B\");\n\t\t});\n\n\t\tlet datasets = [\n\t\t\t{\n\t\t\t\tlabel: \"Saved\",\n\t\t\t\tbackgroundColor: lsColor,\n\t\t\t\tborderColor: lsColor,\n\t\t\t\tdata: lsData,\n\t\t\t},\n\t\t];\n\n\t\tlet labels = [];\n\t\tfor (let monthIdx = new Date().getMonth(); labels.length < 12; monthIdx--) {\n\t\t\tif (monthIdx < 0) monthIdx += 12;\n\t\t\tlabels.unshift(i18n.t(lsMonth[monthIdx % 12]));\n\t\t}\n\n\t\tdata.labels = labels;\n\t\tdata.datasets = datasets;\n\n\t\tif (yMax === 0) yMax = 100;\n\t\topt.scales.yAxis.max = Math.ceil(yMax);\n\t\topt.scales.yAxis.min = Math.ceil(-yMax);\n\n\t\topt.plugins.title.text = i18n.t(opt.plugins.title.text);\n\t\topt.plugins.tooltip.callbacks = {\n\t\t\tlabel: function (context) {\n\t\t\t\tvar label = context.dataset.label || \"\";\n\n\t\t\t\tif (label) {\n\t\t\t\t\tlabel = i18n.t(label);\n\t\t\t\t\tlabel += \": \";\n\t\t\t\t}\n\t\t\t\tif (context.parsed.y !== null) {\n\t\t\t\t\tif (context.parsed.y < 0) {\n\t\t\t\t\t\tlabel = i18n.t(\"Excess\");\n\t\t\t\t\t\tlabel += \": \";\n\t\t\t\t\t}\n\n\t\t\t\t\tlabel += context.parsed.y + \"%\";\n\t\t\t\t}\n\t\t\t\treturn label;\n\t\t\t},\n\n\t\t\ttitle: function (context) {\n\t\t\t\tlet month = context[0].label;\n\t\t\t\tObject.entries(i18n.getDataByLanguage(\"th\").translation).forEach(\n\t\t\t\t\t([en, th]) => {\n\t\t\t\t\t\tif (th === context[0].label) {\n\t\t\t\t\t\t\tmonth = en;\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tlet displayYear = new Date().getFullYear();\n\t\t\t\tlsMonth.forEach((mth, idx) => {\n\t\t\t\t\tif (mth === month) {\n\t\t\t\t\t\tif (new Date().getMonth() - idx < 0) {\n\t\t\t\t\t\t\tdisplayYear = new Date().getFullYear() - 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn context[0].label + \" \" + displayYear;\n\t\t\t},\n\t\t};\n\n\t\tdocument.getElementById(\"bc-bill-compare\").remove();\n\t\tdocument.getElementById(\n\t\t\t\"wrapper-bc-bill-compare\"\n\t\t).innerHTML = ``;\n\n\t\tlet ctx = document.getElementById(\"bc-bill-compare\").getContext(\"2d\");\n\n\t\tbarChart = new Chart(ctx, {\n\t\t\ttype: \"bar\",\n\t\t\tdata: data,\n\t\t\toptions: opt,\n\t\t});\n\n\t\tthis.setState({\n\t\t\tdata: data,\n\t\t});\n\t};\n\n\tcomponentDidMount() {\n\t\tChart.register(...registerables);\n\t\tChart.register(zoomPlugin);\n\t}\n\n\tcomponentWillReceiveProps(nextProps) {\n\t\tlet lsBuilding = nextProps.lsBuilding;\n\t\tlet compareTo = nextProps.compareTo;\n\t\tlet billData_month = nextProps.billData_month;\n\n\t\tthis.setState(\n\t\t\t{\n\t\t\t\tlsBuilding: lsBuilding,\n\t\t\t\tbillData_month: billData_month,\n\t\t\t\tcompareTo: compareTo,\n\t\t\t},\n\t\t\t() => this.buildChart()\n\t\t);\n\t}\n\n\thandleDoubleClick() {\n\t\tif (barChart) barChart.resetZoom();\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t);\n\t}\n}\n\nexport default BarChartBillCompare;\n","import React from \"react\";\nimport \"./LineChartUsagePerCapita.css\";\n\nimport { Chart, registerables } from \"chart.js\";\nimport zoomPlugin from \"chartjs-plugin-zoom\";\nimport \"chartjs-adapter-moment\";\n\nimport i18n from \"../../../../i18n\";\n\nimport { lsMonth } from \"../../../../utils/months\";\n\nlet lineChart;\n\nclass LineChartUsagePerCapita extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tlsBuilding: [],\n\t\t\tlsTarget: [],\n\t\t\tkwh_building_month: {},\n\n\t\t\t// Chart details\n\t\t\tdata: {},\n\t\t\toptions: {\n\t\t\t\tresponsive: true,\n\t\t\t\tanimation: false,\n\t\t\t\tmaintainAspectRatio: false,\n\t\t\t\tinteraction: {\n\t\t\t\t\tintersect: false,\n\t\t\t\t\taxis: \"x\",\n\t\t\t\t\tmode: \"index\",\n\t\t\t\t},\n\t\t\t\tscales: {\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tgrid: {\n\t\t\t\t\t\t\tdisplay: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tyAxis: {\n\t\t\t\t\t\tmin: 0,\n\t\t\t\t\t\tmax: 100,\n\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\tgrid: {\n\t\t\t\t\t\t\tdisplay: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttitle: {\n\t\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\t\ttext: \"kWh\",\n\t\t\t\t\t\t\tfont: {\n\t\t\t\t\t\t\t\tsize: 16,\n\t\t\t\t\t\t\t\tweight: \"600\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tplugins: {\n\t\t\t\t\ttitle: {\n\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\ttext: \"Energy Use per Capita\",\n\t\t\t\t\t\talign: \"start\",\n\t\t\t\t\t\tfont: { weight: \"bold\", size: 20 },\n\t\t\t\t\t},\n\t\t\t\t\tlegend: {\n\t\t\t\t\t\tdisplay: false,\n\t\t\t\t\t},\n\t\t\t\t\ttooltip: {\n\t\t\t\t\t\tenabled: true,\n\t\t\t\t\t\tpadding: 14,\n\t\t\t\t\t\tbackgroundColor: \"#F2F2F2\",\n\t\t\t\t\t\ttitleColor: \"#000\",\n\t\t\t\t\t\tbodyColor: \"#000\",\n\t\t\t\t\t\ttitleFont: { size: 20 },\n\t\t\t\t\t\tbodyFont: { size: 18 },\n\t\t\t\t\t},\n\t\t\t\t\tzoom: {\n\t\t\t\t\t\tpan: {\n\t\t\t\t\t\t\tenabled: true,\n\t\t\t\t\t\t\tmode: \"xy\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tzoom: {\n\t\t\t\t\t\t\twheel: { enabled: true },\n\t\t\t\t\t\t\tpinch: { enabled: true },\n\t\t\t\t\t\t\tmode: \"xy\",\n\t\t\t\t\t\t\tspeed: 2,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlimits: {\n\t\t\t\t\t\t\tx: { min: \"original\", max: \"original\" },\n\t\t\t\t\t\t\ty: { min: \"original\", max: \"original\" },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tthis.handleDoubleClick = this.handleDoubleClick.bind(this);\n\t}\n\n\tbuildChart = () => {\n\t\tlet { data, options, lsBuilding, lsTarget, kwh_building_month } =\n\t\t\tthis.state;\n\t\tlet opt = JSON.parse(JSON.stringify(options));\n\n\t\tif (Object.keys(kwh_building_month).length === 0) return;\n\n\t\tlet datasets = [];\n\t\tlsBuilding.forEach((building) => {\n\t\t\tdatasets.push({\n\t\t\t\tlabel: building.label,\n\t\t\t\tfill: false,\n\t\t\t\tborderColor: building.color_code,\n\t\t\t\tbackgroundColor: building.color_code,\n\t\t\t\tborderWidth: 2,\n\t\t\t\tspanGaps: true,\n\t\t\t\tpointRadius: 2,\n\t\t\t\tdata: [],\n\t\t\t});\n\t\t});\n\n\t\tlet yMax = 0;\n\n\t\tlet year = new Date().getFullYear();\n\t\tlet month = new Date().getMonth();\n\t\tfor (let i = 0; i < 12; i++) {\n\t\t\tif (month < 0) {\n\t\t\t\tmonth += 12;\n\t\t\t\tyear--;\n\t\t\t}\n\n\t\t\tlet kwh_building = kwh_building_month[month];\n\t\t\tif (kwh_building === undefined) {\n\t\t\t\tdatasets.forEach((ds) => {\n\t\t\t\t\tds.data.unshift(0);\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t} else if (Object.keys(kwh_building).length === 0) {\n\t\t\t\tdatasets.forEach((ds) => {\n\t\t\t\t\tds.data.unshift(0);\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tdatasets.forEach((ds) => {\n\t\t\t\tif (!Object.keys(kwh_building).includes(ds.label)) ds.data.unshift(0);\n\t\t\t});\n\n\t\t\tfor (let [building, kwh] of Object.entries(kwh_building)) {\n\t\t\t\tlet ds = datasets.find((ds) => ds.label === building);\n\n\t\t\t\tlet target = lsTarget.find(\n\t\t\t\t\t(t) => t.building === building && t.month === month && t.year === year\n\t\t\t\t);\n\t\t\t\tif (target === undefined) ds.data.unshift(0);\n\t\t\t\telse if (target.amount_people === null) ds.data.unshift(0);\n\t\t\t\telse {\n\t\t\t\t\tds.data.unshift(parseFloat(kwh / target.amount_people).toFixed(2));\n\n\t\t\t\t\tif (kwh / target.amount_people > yMax) {\n\t\t\t\t\t\tyMax = kwh / target.amount_people;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmonth--;\n\t\t}\n\n\t\tlet labels = [];\n\t\tfor (let monthIdx = new Date().getMonth(); labels.length < 12; monthIdx--) {\n\t\t\tif (monthIdx < 0) monthIdx += 12;\n\t\t\tlabels.unshift(i18n.t(lsMonth[monthIdx % 12]));\n\t\t}\n\t\tdata.labels = labels;\n\n\t\tdatasets.forEach((ds) => {\n\t\t\tds.label = i18n.t(ds.label);\n\t\t});\n\n\t\tdata.datasets = datasets;\n\n\t\topt.scales.yAxis.max = Math.ceil(yMax);\n\t\topt.plugins.title.text = i18n.t(opt.plugins.title.text);\n\t\topt.scales.yAxis.title.text = i18n.t(opt.scales.yAxis.title.text);\n\t\topt.plugins.tooltip.callbacks = {\n\t\t\ttitle: function (context) {\n\t\t\t\tlet month = context[0].label;\n\t\t\t\tObject.entries(i18n.getDataByLanguage(\"th\").translation).forEach(\n\t\t\t\t\t([en, th]) => {\n\t\t\t\t\t\tif (th === context[0].label) {\n\t\t\t\t\t\t\tmonth = en;\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tlet displayYear = new Date().getFullYear();\n\t\t\t\tlsMonth.forEach((mth, idx) => {\n\t\t\t\t\tif (mth === month) {\n\t\t\t\t\t\tif (new Date().getMonth() - idx < 0) {\n\t\t\t\t\t\t\tdisplayYear = new Date().getFullYear() - 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn context[0].label + \" \" + displayYear;\n\t\t\t},\n\t\t};\n\n\t\tdocument.getElementById(\"lc-energy-capita\").remove();\n\t\tdocument.getElementById(\n\t\t\t\"wrapper-lc-energy-capita\"\n\t\t).innerHTML = ``;\n\n\t\tlet ctx = document.getElementById(\"lc-energy-capita\").getContext(\"2d\");\n\n\t\tlineChart = new Chart(ctx, {\n\t\t\ttype: \"line\",\n\t\t\tdata: data,\n\t\t\toptions: opt,\n\t\t});\n\t};\n\n\tcomponentDidMount() {\n\t\tChart.register(...registerables);\n\t\tChart.register(zoomPlugin);\n\t}\n\n\tcomponentWillReceiveProps(nextProps) {\n\t\tlet lsBuilding = nextProps.lsBuilding;\n\t\tlet lsTarget = nextProps.lsTarget;\n\t\tlet kwh_building_month = nextProps.kwh_building_month;\n\n\t\tthis.setState(\n\t\t\t{\n\t\t\t\tlsBuilding: lsBuilding,\n\t\t\t\tlsTarget: lsTarget,\n\t\t\t\tkwh_building_month: kwh_building_month,\n\t\t\t},\n\t\t\t() => this.buildChart()\n\t\t);\n\t}\n\n\thandleDoubleClick() {\n\t\tif (lineChart) lineChart.resetZoom();\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t);\n\t}\n}\n\nexport default LineChartUsagePerCapita;\n","import React from \"react\";\nimport \"./MixedChartEnergyCompare.css\";\n\nimport { Chart, registerables } from \"chart.js\";\nimport zoomPlugin from \"chartjs-plugin-zoom\";\nimport \"chartjs-adapter-moment\";\n\nimport { lsMonth } from \"../../../../utils/months\";\n\nimport i18n from \"../../../../i18n\";\n\nlet mixedChart;\n\nclass MixedChartEnergyCompare extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tbuilding: {},\n\t\t\tcompareTo: \"Target\",\n\t\t\tenergyData_month: {},\n\t\t\tcompareData: [],\n\t\t\tlsBuilding: [],\n\t\t\t// Chart details\n\t\t\tdata: {},\n\t\t\toptions: {\n\t\t\t\tresponsive: true,\n\t\t\t\tanimation: false,\n\t\t\t\tmaintainAspectRatio: false,\n\t\t\t\tinteraction: {\n\t\t\t\t\tintersect: false,\n\t\t\t\t\taxis: \"x\",\n\t\t\t\t\tmode: \"index\",\n\t\t\t\t},\n\t\t\t\tscales: {\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tgrid: {\n\t\t\t\t\t\t\tdisplay: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tyAxis: {\n\t\t\t\t\t\tmin: 0,\n\t\t\t\t\t\tmax: 100,\n\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\tgrid: {\n\t\t\t\t\t\t\tdisplay: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttitle: {\n\t\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\t\ttext: \"kWh\",\n\t\t\t\t\t\t\tfont: {\n\t\t\t\t\t\t\t\tsize: 16,\n\t\t\t\t\t\t\t\tweight: \"600\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tplugins: {\n\t\t\t\t\ttitle: {\n\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\ttext: \"Energy Usage (kWh)\",\n\t\t\t\t\t\talign: \"start\",\n\t\t\t\t\t\tfont: { weight: \"bold\", size: 20 },\n\t\t\t\t\t},\n\t\t\t\t\ttooltip: {\n\t\t\t\t\t\tenabled: true,\n\t\t\t\t\t\tpadding: 14,\n\t\t\t\t\t\tbackgroundColor: \"#F2F2F2\",\n\t\t\t\t\t\ttitleColor: \"#000\",\n\t\t\t\t\t\tbodyColor: \"#000\",\n\t\t\t\t\t\ttitleFont: { size: 20 },\n\t\t\t\t\t\tbodyFont: { size: 18 },\n\t\t\t\t\t\tbodySpacing: 10,\n\t\t\t\t\t},\n\t\t\t\t\tlegend: {\n\t\t\t\t\t\tdisplay: false,\n\t\t\t\t\t},\n\t\t\t\t\tzoom: {\n\t\t\t\t\t\tpan: {\n\t\t\t\t\t\t\tenabled: true,\n\t\t\t\t\t\t\tmode: \"xy\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tzoom: {\n\t\t\t\t\t\t\twheel: { enabled: true },\n\t\t\t\t\t\t\tpinch: { enabled: true },\n\t\t\t\t\t\t\tmode: \"xy\",\n\t\t\t\t\t\t\tspeed: 100,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlimits: {\n\t\t\t\t\t\t\tx: { min: \"original\", max: \"original\" },\n\t\t\t\t\t\t\ty: { min: \"original\", max: \"original\" },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tthis.handleDoubleClick = this.handleDoubleClick.bind(this);\n\t}\n\n\tbuildChart = () => {\n\t\tlet { data, options, energyData_month, compareTo } = this.state;\n\t\tlet opt = JSON.parse(JSON.stringify(options));\n\n\t\tif (Object.keys(energyData_month).length === 0) return;\n\n\t\tlet datasets = [\n\t\t\t{\n\t\t\t\tlabel: \"Latest\",\n\t\t\t\tbackgroundColor: \"#f3efa9\",\n\t\t\t\tborderColor: \"#f3efa9\",\n\t\t\t\tdata: [],\n\t\t\t\ttype: \"bar\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: compareTo,\n\t\t\t\tbackgroundColor: \"#E2E2E2\",\n\t\t\t\tborderColor: \"#E2E2E2\",\n\t\t\t\tfill: \"origin\",\n\t\t\t\tborderWidth: 2,\n\t\t\t\tpointRadius: 2,\n\t\t\t\tdata: [],\n\t\t\t\ttype: \"line\",\n\t\t\t},\n\t\t];\n\n\t\tlet yMax = 0;\n\t\tlet month = new Date().getMonth();\n\t\tfor (let i = 0; i < 12; i++) {\n\t\t\tif (month < 0) month += 12;\n\n\t\t\tlet dataMonth = energyData_month[month];\n\n\t\t\tdatasets[0].data.unshift(dataMonth.latest);\n\n\t\t\tlet compareData = datasets[1].data;\n\t\t\tif (compareTo === \"Target\") compareData.unshift(dataMonth.target);\n\t\t\telse if (compareTo === \"Average\") compareData.unshift(dataMonth.average);\n\n\t\t\tfor (let kwh of Object.values(energyData_month[month])) {\n\t\t\t\tif (kwh > yMax) yMax = kwh;\n\t\t\t}\n\n\t\t\tmonth--;\n\t\t}\n\n\t\tlet labels = [];\n\t\tfor (let monthIdx = new Date().getMonth(); labels.length < 12; monthIdx--) {\n\t\t\tif (monthIdx < 0) monthIdx += 12;\n\t\t\tlabels.unshift(i18n.t(lsMonth[monthIdx % 12]));\n\t\t}\n\n\t\tdata.labels = labels;\n\t\tdata.datasets = datasets;\n\n\t\topt.scales.yAxis.max = Math.ceil(yMax);\n\t\topt.plugins.title.text = i18n.t(opt.plugins.title.text);\n\t\topt.scales.yAxis.title.text = i18n.t(opt.scales.yAxis.title.text);\n\t\topt.plugins.tooltip.callbacks = {\n\t\t\ttitle: function (context) {\n\t\t\t\tlet month = context[0].label;\n\t\t\t\tObject.entries(i18n.getDataByLanguage(\"th\").translation).forEach(\n\t\t\t\t\t([en, th]) => {\n\t\t\t\t\t\tif (th === context[0].label) {\n\t\t\t\t\t\t\tmonth = en;\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tlet displayYear = new Date().getFullYear();\n\t\t\t\tlsMonth.forEach((mth, idx) => {\n\t\t\t\t\tif (mth === month) {\n\t\t\t\t\t\tif (new Date().getMonth() - idx < 0) {\n\t\t\t\t\t\t\tdisplayYear = new Date().getFullYear() - 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn context[0].label + \" \" + displayYear;\n\t\t\t},\n\t\t};\n\n\t\tdata.datasets.forEach((ds) => (ds.label = i18n.t(ds.label)));\n\n\t\tdocument.getElementById(\"mc-energy-compare\").remove();\n\t\tdocument.getElementById(\n\t\t\t\"wrapper-mc-energy-compare\"\n\t\t).innerHTML = ``;\n\n\t\tlet ctx = document.getElementById(\"mc-energy-compare\").getContext(\"2d\");\n\n\t\tmixedChart = new Chart(ctx, {\n\t\t\ttype: \"bar\",\n\t\t\tdata: data,\n\t\t\toptions: opt,\n\t\t});\n\n\t\tthis.setState({\n\t\t\tdata: data,\n\t\t});\n\t};\n\n\tcomponentDidMount() {\n\t\tChart.register(...registerables);\n\t\tChart.register(zoomPlugin);\n\t}\n\n\tcomponentWillReceiveProps(nextProps) {\n\t\tlet lsBuilding = nextProps.lsBuilding;\n\t\tlet compareTo = nextProps.compareTo;\n\t\tlet energyData_month = nextProps.energyData_month;\n\n\t\tthis.setState(\n\t\t\t{\n\t\t\t\tlsBuilding: lsBuilding,\n\t\t\t\tenergyData_month: energyData_month,\n\t\t\t\tcompareTo: compareTo,\n\t\t\t},\n\t\t\t() => this.buildChart()\n\t\t);\n\t}\n\n\thandleDoubleClick() {\n\t\tif (mixedChart) mixedChart.resetZoom();\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t);\n\t}\n}\n\nexport default MixedChartEnergyCompare;\n","import React from \"react\";\nimport \"./BarChartEnergyCompare.css\";\n\nimport { Chart, registerables } from \"chart.js\";\nimport zoomPlugin from \"chartjs-plugin-zoom\";\nimport \"chartjs-adapter-moment\";\n\nimport i18n from \"../../../../i18n\";\n\nimport { lsMonth } from \"../../../../utils/months\";\n\nlet barChart;\n\nclass BarChartEnergyCompare extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tbuilding: {},\n\t\t\tcompareTo: \"Target\",\n\t\t\tenergyData_month: {},\n\t\t\tcompareData: [],\n\t\t\tlsBuilding: [],\n\t\t\t// Chart details\n\t\t\tdata: {},\n\t\t\toptions: {\n\t\t\t\tresponsive: true,\n\t\t\t\tanimation: false,\n\t\t\t\tmaintainAspectRatio: false,\n\t\t\t\tinteraction: {\n\t\t\t\t\tintersect: false,\n\t\t\t\t\taxis: \"x\",\n\t\t\t\t\tmode: \"index\",\n\t\t\t\t},\n\t\t\t\tscales: {\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tgrid: {\n\t\t\t\t\t\t\tdisplay: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tyAxis: {\n\t\t\t\t\t\tmin: -100,\n\t\t\t\t\t\tmax: 100,\n\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\tgrid: {\n\t\t\t\t\t\t\tdrawBorder: false,\n\t\t\t\t\t\t\tcolor: function (context) {\n\t\t\t\t\t\t\t\tif (context.tick.value === 0) {\n\t\t\t\t\t\t\t\t\treturn \"#000\";\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn \"#00000000\";\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttitle: {\n\t\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\t\ttext: \"%\",\n\t\t\t\t\t\t\tfont: {\n\t\t\t\t\t\t\t\tsize: 16,\n\t\t\t\t\t\t\t\tweight: \"600\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tplugins: {\n\t\t\t\t\ttitle: {\n\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\ttext: \"Energy Usage Compared to Target/Average\",\n\t\t\t\t\t\talign: \"start\",\n\t\t\t\t\t\tfont: { weight: \"bold\", size: 20 },\n\t\t\t\t\t},\n\t\t\t\t\tlegend: {\n\t\t\t\t\t\tdisplay: false,\n\t\t\t\t\t},\n\t\t\t\t\ttooltip: {\n\t\t\t\t\t\tenabled: true,\n\t\t\t\t\t\tpadding: 14,\n\t\t\t\t\t\tbackgroundColor: \"#F2F2F2\",\n\t\t\t\t\t\ttitleColor: \"#000\",\n\t\t\t\t\t\tbodyColor: \"#000\",\n\t\t\t\t\t\ttitleFont: { size: 20 },\n\t\t\t\t\t\tbodyFont: { size: 18 },\n\t\t\t\t\t\tbodySpacing: 10,\n\t\t\t\t\t\tcallbacks: {\n\t\t\t\t\t\t\tlabel: function (context) {\n\t\t\t\t\t\t\t\tlet label = context.dataset.label || \"\";\n\n\t\t\t\t\t\t\t\tif (label) {\n\t\t\t\t\t\t\t\t\tlabel = i18n.t(label);\n\t\t\t\t\t\t\t\t\tlabel += \": \";\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (context.parsed.y !== null) {\n\t\t\t\t\t\t\t\t\tif (context.parsed.y < 0) {\n\t\t\t\t\t\t\t\t\t\tlabel = i18n.t(label);\n\t\t\t\t\t\t\t\t\t\tlabel += \": \";\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tlabel += context.parsed.y + \"%\";\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn label;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tzoom: {\n\t\t\t\t\t\tpan: {\n\t\t\t\t\t\t\tenabled: true,\n\t\t\t\t\t\t\tmode: \"xy\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tzoom: {\n\t\t\t\t\t\t\twheel: { enabled: true },\n\t\t\t\t\t\t\tpinch: { enabled: true },\n\t\t\t\t\t\t\tmode: \"xy\",\n\t\t\t\t\t\t\tspeed: 100,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tlimits: {\n\t\t\t\t\t\t\tx: { min: \"original\", max: \"original\" },\n\t\t\t\t\t\t\ty: { min: \"original\", max: \"original\" },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tthis.handleDoubleClick = this.handleDoubleClick.bind(this);\n\t}\n\n\tbuildChart = () => {\n\t\tlet { data, options, energyData_month, compareTo } = this.state;\n\t\tlet opt = JSON.parse(JSON.stringify(options));\n\n\t\tif (Object.keys(energyData_month).length === 0) return;\n\n\t\tlet lsData = [];\n\t\tlet lsColor = [];\n\n\t\tlet yMax = 0;\n\t\tlet month = new Date().getMonth();\n\t\tfor (let i = 0; i < 12; i++) {\n\t\t\tif (month < 0) month += 12;\n\n\t\t\tlet dataMonth = energyData_month[month];\n\t\t\tlet latest = dataMonth.latest;\n\t\t\tlet target = dataMonth.target;\n\t\t\tlet average = dataMonth.average;\n\n\t\t\tif (compareTo === \"Target\") {\n\t\t\t\tif (target === 0) lsData.unshift(0);\n\t\t\t\telse {\n\t\t\t\t\tlsData.unshift(\n\t\t\t\t\t\t+parseFloat(((target - latest) / target) * 100).toFixed(2)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else if (compareTo === \"Average\") {\n\t\t\t\tif (average === 0) lsData.unshift(0);\n\t\t\t\telse {\n\t\t\t\t\tlsData.unshift(\n\t\t\t\t\t\t+parseFloat(((average - latest) / average) * 100).toFixed(2)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmonth--;\n\t\t}\n\n\t\tlsData.forEach((data) => {\n\t\t\tif (Math.abs(data) > yMax) yMax = Math.abs(data);\n\n\t\t\tif (data >= 0) lsColor.push(\"#7DA0CF\");\n\t\t\telse lsColor.push(\"#F19D9B\");\n\t\t});\n\n\t\tlet datasets = [\n\t\t\t{\n\t\t\t\tlabel: \"Saved\",\n\t\t\t\tbackgroundColor: lsColor,\n\t\t\t\tborderColor: lsColor,\n\t\t\t\tdata: lsData,\n\t\t\t},\n\t\t];\n\n\t\tlet labels = [];\n\t\tfor (let monthIdx = new Date().getMonth(); labels.length < 12; monthIdx--) {\n\t\t\tif (monthIdx < 0) monthIdx += 12;\n\t\t\tlabels.unshift(i18n.t(lsMonth[monthIdx % 12]));\n\t\t}\n\n\t\tdata.labels = labels;\n\t\tdata.datasets = datasets;\n\n\t\tif (yMax === 0) yMax = 100;\n\t\topt.scales.yAxis.max = Math.ceil(yMax);\n\t\topt.scales.yAxis.min = Math.ceil(-yMax);\n\t\topt.scales.yAxis.max = Math.ceil(yMax);\n\t\topt.scales.yAxis.min = Math.ceil(-yMax);\n\n\t\topt.plugins.title.text = i18n.t(opt.plugins.title.text);\n\t\topt.plugins.tooltip.callbacks = {\n\t\t\tlabel: function (context) {\n\t\t\t\tlet label = context.dataset.label || \"\";\n\n\t\t\t\tif (label) {\n\t\t\t\t\tlabel = i18n.t(label);\n\t\t\t\t\tlabel += \": \";\n\t\t\t\t}\n\t\t\t\tif (context.parsed.y !== null) {\n\t\t\t\t\tif (context.parsed.y < 0) {\n\t\t\t\t\t\tlabel = i18n.t(\"Excess\");\n\t\t\t\t\t\tlabel += \": \";\n\t\t\t\t\t}\n\n\t\t\t\t\tlabel += context.parsed.y + \"%\";\n\t\t\t\t}\n\t\t\t\treturn label;\n\t\t\t},\n\n\t\t\ttitle: function (context) {\n\t\t\t\tlet month = context[0].label;\n\t\t\t\tObject.entries(i18n.getDataByLanguage(\"th\").translation).forEach(\n\t\t\t\t\t([en, th]) => {\n\t\t\t\t\t\tif (th === context[0].label) {\n\t\t\t\t\t\t\tmonth = en;\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tlet displayYear = new Date().getFullYear();\n\t\t\t\tlsMonth.forEach((mth, idx) => {\n\t\t\t\t\tif (mth === month) {\n\t\t\t\t\t\tif (new Date().getMonth() - idx < 0) {\n\t\t\t\t\t\t\tdisplayYear = new Date().getFullYear() - 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn context[0].label + \" \" + displayYear;\n\t\t\t},\n\t\t};\n\n\t\tdocument.getElementById(\"bc-energy-compare\").remove();\n\t\tdocument.getElementById(\n\t\t\t\"wrapper-bc-energy-compare\"\n\t\t).innerHTML = ``;\n\n\t\tlet ctx = document.getElementById(\"bc-energy-compare\").getContext(\"2d\");\n\n\t\tbarChart = new Chart(ctx, {\n\t\t\ttype: \"bar\",\n\t\t\tdata: data,\n\t\t\toptions: opt,\n\t\t});\n\n\t\tthis.setState({\n\t\t\tdata: data,\n\t\t});\n\t};\n\n\tcomponentDidMount() {\n\t\tChart.register(...registerables);\n\t\tChart.register(zoomPlugin);\n\t}\n\n\tcomponentWillReceiveProps(nextProps) {\n\t\tlet lsBuilding = nextProps.lsBuilding;\n\t\tlet compareTo = nextProps.compareTo;\n\t\tlet energyData_month = nextProps.energyData_month;\n\n\t\tthis.setState(\n\t\t\t{\n\t\t\t\tlsBuilding: lsBuilding,\n\t\t\t\tenergyData_month: energyData_month,\n\t\t\t\tcompareTo: compareTo,\n\t\t\t},\n\t\t\t() => this.buildChart()\n\t\t);\n\t}\n\n\thandleDoubleClick() {\n\t\tif (barChart) barChart.resetZoom();\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t);\n\t}\n}\n\nexport default BarChartEnergyCompare;\n","import React from \"react\";\nimport \"./ForgotPassword.css\";\nimport {\n\tRow,\n\tCol,\n\tContainer,\n\tButton,\n\tForm,\n\tFormGroup,\n\tLabel,\n\tInput,\n} from \"reactstrap\";\nimport { Link } from \"react-router-dom\";\nimport validator from \"validator\";\nimport http from \"../../utils/http\";\n\nimport { withTranslation } from \"react-i18next\";\n\nclass ForgotPassword extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t\tusername: \"\",\n\t\t\temail: \"\",\n\t\t};\n\n\t\tthis.handleInputChange = this.handleInputChange.bind(this);\n\t\tthis.submitForgotPassword = this.submitForgotPassword.bind(this);\n\t}\n\n\thandleInputChange(e) {\n\t\tthis.setState({ [e.target.name]: e.target.value });\n\t}\n\n\tasync submitForgotPassword() {\n\t\tlet { username, email } = this.state;\n\n\t\tif (username.length === 0 && email.length === 0) {\n\t\t\talert(\"Please fill in either your username or email address.\");\n\t\t\treturn;\n\t\t}\n\n\t\tif (email.length > 0 && !validator.isEmail(email)) {\n\t\t\talert(\"Invalid email address.\");\n\t\t\treturn;\n\t\t}\n\n\t\tlet resp = await this.postForgotPassword(username, email);\n\n\t\tif (resp.status === 200) {\n\t\t\talert(\n\t\t\t\t\"Request submitted. Please check your email for further instructions.\"\n\t\t\t);\n\t\t\tthis.props.history.push({\n\t\t\t\tpathname: \"/login\",\n\t\t\t});\n\t\t} else if (resp.status === 500) {\n\t\t\talert(\"Could not reset your password. Please try again\");\n\t\t} else {\n\t\t\talert(resp.data);\n\t\t}\n\t}\n\n\tasync postForgotPassword(username, email) {\n\t\ttry {\n\t\t\tlet payload = {\n\t\t\t\tusername: username,\n\t\t\t\temail: email,\n\t\t\t};\n\n\t\t\treturn await http.post(\"/user/forgot-password\", payload);\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\trender() {\n\t\tlet { username, email } = this.state;\n\n\t\tconst { t } = this.props;\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\"logo\"\n\t\t\t\t\t\t\n\t\t\t\t\t\tNIDA SMART ENERGY\n\t\t\t\t\t
\n\n\t\t\t\t\t\n\t\t\t\t\t\t{t(\"Forgot Password\")}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{t(\"or\")}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{t(\"Submit\")}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{t(\"Back to Log In\")}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t
{t(\"address\")}
\n\t\t\t
\n\t\t);\n\t}\n}\n\nexport default withTranslation()(ForgotPassword);\n","import React from \"react\";\nimport \"./Register.css\";\nimport {\n\tRow,\n\tCol,\n\tContainer,\n\tButton,\n\tForm,\n\tFormGroup,\n\tLabel,\n\tInput,\n} from \"reactstrap\";\nimport { Link } from \"react-router-dom\";\nimport validator from \"validator\";\nimport http from \"../../utils/http\";\n\nimport { withTranslation } from \"react-i18next\";\n\nclass Register extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t\tshowPassword: false,\n\t\t\tusername: \"\",\n\t\t\temail: \"\",\n\t\t\tpassword: \"\",\n\t\t\tconfirmPassword: \"\",\n\t\t\tuserTypeLabel: \"General User\",\n\t\t\tisUsernameEmpty: false,\n\t\t\tisEmailEmpty: false,\n\t\t\tisEmailValid: false,\n\t\t\tisPasswordEmpty: false,\n\t\t\tisPasswordsMatch: false,\n\t\t\tisUserTypeSelected: false,\n\t\t\tloading: false,\n\t\t};\n\n\t\tthis.handleInputChange = this.handleInputChange.bind(this);\n\t\tthis.handleInputChangeSelect = this.handleInputChangeSelect.bind(this);\n\t\tthis.submitRegister = this.submitRegister.bind(this);\n\t\tthis.setLoading = this.setLoading.bind(this);\n\t}\n\n\tcomponentWillMount() {\n\t\tthis.getAllUserType();\n\t}\n\n\ttoggleShowPassword() {\n\t\tthis.setState({ showPassword: !this.state.showPassword });\n\t}\n\n\thandleInputChange(e) {\n\t\tthis.setState({ [e.target.name]: e.target.value });\n\t}\n\n\thandleInputChangeSelect(e) {\n\t\tthis.setState({ userTypeLabel: e.target.value });\n\t}\n\n\tasync submitRegister() {\n\t\tlet {\n\t\t\tusername,\n\t\t\temail,\n\t\t\tpassword,\n\t\t\tconfirmPassword,\n\t\t\tuserTypeLabel,\n\t\t\tlsUserType,\n\t\t} = this.state;\n\n\t\tusername.length === 0\n\t\t\t? this.setState({ isUsernameEmpty: true })\n\t\t\t: this.setState({ isUsernameEmpty: false });\n\n\t\temail.length === 0\n\t\t\t? this.setState({ isEmailEmpty: true })\n\t\t\t: this.setState({ isEmailEmpty: false });\n\n\t\temail.length > 0 && !validator.isEmail(email)\n\t\t\t? this.setState({ isEmailValid: true })\n\t\t\t: this.setState({ isEmailValid: false });\n\n\t\tpassword.length === 0\n\t\t\t? this.setState({ isPasswordEmpty: true })\n\t\t\t: this.setState({ isPasswordEmpty: false });\n\n\t\tlet { isUsernameEmpty, isEmailEmpty, isPasswordEmpty, isEmailValid } =\n\t\t\tthis.state;\n\n\t\tif (isUsernameEmpty && isEmailEmpty && isPasswordEmpty && isEmailValid) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!(password === confirmPassword)) {\n\t\t\talert(\"Passwords don't match\");\n\t\t\treturn;\n\t\t}\n\n\t\tlet userTypeID;\n\t\tfor (let userType of lsUserType) {\n\t\t\tif (userType.label === userTypeLabel) {\n\t\t\t\tuserTypeID = userType.id;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tlet resp = await this.postRegister(username, email, password, userTypeID);\n\n\t\tif (resp) {\n\t\t\tif (resp.status === 200) {\n\t\t\t\talert(\"A verification email will be sent to the provided inbox.\");\n\t\t\t\tthis.props.history.push({\n\t\t\t\t\tpathname: \"/login\",\n\t\t\t\t});\n\t\t\t} else if (resp.status === 500) {\n\t\t\t\talert(\"Could not perform registration. Please try again\");\n\t\t\t}\n\t\t}\n\t}\n\n\tasync postRegister(username, email, password, userTypeID) {\n\t\ttry {\n\t\t\tlet payload = {\n\t\t\t\tusername: username,\n\t\t\t\temail: email,\n\t\t\t\tpassword: password,\n\t\t\t\tuser_type_id: userTypeID,\n\t\t\t};\n\n\t\t\treturn await http.post(\"/user/register\", payload);\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t}\n\t}\n\n\tasync getAllUserType() {\n\t\tthis.setLoading(true);\n\n\t\ttry {\n\t\t\tlet resp = await http.get(\"/user/user-type/all\");\n\n\t\t\tlet lsUserType = resp.data;\n\t\t\tlsUserType.sort(function (a, b) {\n\t\t\t\treturn a.id - b.id;\n\t\t\t});\n\t\t\tlsUserType.splice(0, 1);\n\n\t\t\tthis.setState({ lsUserType: lsUserType });\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t} finally {\n\t\t\tthis.setLoading(false);\n\t\t}\n\t}\n\n\tsetLoading(loading) {\n\t\tthis.setState({\n\t\t\tloading: loading,\n\t\t});\n\t}\n\n\trender() {\n\t\tlet {\n\t\t\tusername,\n\t\t\temail,\n\t\t\tpassword,\n\t\t\tconfirmPassword,\n\t\t\tuserTypeLabel,\n\t\t\tisUsernameEmpty,\n\t\t\tisEmailEmpty,\n\t\t\tisEmailValid,\n\t\t\tisPasswordEmpty,\n\t\t\tlsUserType,\n\t\t\tloading,\n\t\t} = this.state;\n\n\t\tconst { t } = this.props;\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\"logo\"\n\t\t\t\t\t\t\n\t\t\t\t\t\tNIDA SMART ENERGY\n\t\t\t\t\t
\n\n\t\t\t\t\t\n\t\t\t\t\t\t{t(\"Register\")}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{loading ? (\n\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t{lsUserType.map((userType) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{t(\"Register\")}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t{isUsernameEmpty ? (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{t(\"Please fill in your username.\")}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{isEmailEmpty ? (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{t(\"Please fill in your email.\")}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{isEmailValid ? (\n\t\t\t\t\t\t\t{t(\"Email is invalid.\")}\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{isPasswordEmpty ? (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{t(\"Please fill in your password.\")}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{t(\"Back to Log In\")}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t
{t(\"address\")}
\n\t\t\t
\n\t\t);\n\t}\n}\n\nexport default withTranslation()(Register);\n","import React from \"react\";\n\nimport \"./EditProfile.css\";\nimport { ImagePicker } from \"react-file-picker\";\nimport {\n\tRow,\n\tCol,\n\tContainer,\n\tTable,\n\tButton,\n\tInput,\n\tModal,\n\tModalHeader,\n\tModalBody,\n\tModalFooter,\n} from \"reactstrap\";\nimport { FaCamera, FaUserCircle } from \"react-icons/fa\";\nimport { MdModeEdit } from \"react-icons/md\";\n\nimport http from \"../../../utils/http\";\nimport validator from \"validator\";\n\nimport { withTranslation } from \"react-i18next\";\n\nclass EditProfile extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t\tcurrentUsername: localStorage.getItem(\"current_username\"),\n\t\t\tcurrentUserType: \"\",\n\t\t\tprevUsername: \"\",\n\t\t\tprevEmail: \"\",\n\t\t\tusername: \"\",\n\t\t\temail: \"\",\n\t\t\tuserType: \"\",\n\t\t\tdateActivated: \"\",\n\t\t\tdateLastLogin: \"\",\n\t\t\tprevProfileImage: \"\",\n\t\t\tprofileImage: \"\",\n\t\t\tisUserTypeApproved: 0,\n\t\t\tisDeactivated: 0,\n\t\t\tisEditUsernameMode: false,\n\t\t\tisEditEmailMode: false,\n\t\t\tisModalConfirmUsernameOpen: false,\n\t\t\tisModalConfirmEmailOpen: false,\n\t\t\tisModalConfirmChangePasswordOpen: false,\n\t\t\tisModalConfirmDeactivateOpen: false,\n\t\t\tisModalConfirmActivateOpen: false,\n\t\t\tisModalConfirmApproveOpen: false,\n\t\t};\n\n\t\tthis.getUserInfo = this.getUserInfo.bind(this);\n\t\tthis.formatDate = this.formatDate.bind(this);\n\t\tthis.toggleEditUsername = this.toggleEditUsername.bind(this);\n\t\tthis.toggleEditEmail = this.toggleEditEmail.bind(this);\n\t\tthis.handleInputChange = this.handleInputChange.bind(this);\n\t\tthis.submitUsername = this.submitUsername.bind(this);\n\t\tthis.submitEmail = this.submitEmail.bind(this);\n\t\tthis.toggleModalConfirmUsername =\n\t\t\tthis.toggleModalConfirmUsername.bind(this);\n\t\tthis.toggleModalConfirmEmail = this.toggleModalConfirmEmail.bind(this);\n\t\tthis.toggleModalConfirmChangePassword =\n\t\t\tthis.toggleModalConfirmChangePassword.bind(this);\n\t\tthis.toggleModalConfirmDeactivate =\n\t\t\tthis.toggleModalConfirmDeactivate.bind(this);\n\t\tthis.toggleModalConfirmActivate =\n\t\t\tthis.toggleModalConfirmActivate.bind(this);\n\t\tthis.toggleModalConfirmApprove = this.toggleModalConfirmApprove.bind(this);\n\t\tthis.logout = this.logout.bind(this);\n\t\tthis.uploadImage = this.uploadImage.bind(this);\n\t\tthis.changePassword = this.changePassword.bind(this);\n\t\tthis.deactivate = this.deactivate.bind(this);\n\t\tthis.activate = this.activate.bind(this);\n\t\tthis.approve = this.approve.bind(this);\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.getUserInfo();\n\t}\n\n\tcomponentDidUpdate() {\n\t\tlet { currentUsername, username } = this.state;\n\n\t\tlet pathname = this.props.history.location.pathname;\n\n\t\tif (pathname.length <= 19) {\n\t\t\tif (currentUsername !== username) this.getUserInfo();\n\t\t}\n\t}\n\n\tasync getUserInfo() {\n\t\ttry {\n\t\t\tlet paramsUsername = this.props.match.params.username;\n\n\t\t\tlet resp;\n\t\t\tif (!paramsUsername) {\n\t\t\t\tresp = await http.get(\"/user/info\");\n\t\t\t} else {\n\t\t\t\tresp = await http.get(\"/user/type\");\n\n\t\t\t\tthis.setState({ currentUserType: resp.data });\n\n\t\t\t\tlet payload = {\n\t\t\t\t\tusername: paramsUsername,\n\t\t\t\t};\n\t\t\t\tresp = await http.post(\"/user/info\", payload);\n\t\t\t}\n\n\t\t\tlet userInfo = resp.data;\n\n\t\t\tlet prevUsername = userInfo.username;\n\t\t\tlet username = userInfo.username;\n\t\t\tlet prevEmail = userInfo.email;\n\t\t\tlet email = userInfo.email;\n\t\t\tlet userType = userInfo.user_type;\n\t\t\tlet dateActivated = new Date(userInfo.activated_timestamp);\n\t\t\tlet dateLastLogin = new Date(userInfo.last_login_timestamp);\n\t\t\tlet prevProfileImage =\n\t\t\t\tuserInfo.profile_image === undefined || userInfo.profile_image === null\n\t\t\t\t\t? \"\"\n\t\t\t\t\t: userInfo.profile_image;\n\t\t\tlet isUserTypeApproved = userInfo.is_user_type_approved;\n\t\t\tlet isDeactivated = userInfo.is_deactivated;\n\n\t\t\tthis.setState({\n\t\t\t\tprevUsername: prevUsername,\n\t\t\t\tprevEmail: prevEmail,\n\t\t\t\tusername: username,\n\t\t\t\temail: email,\n\t\t\t\tuserType: userType,\n\t\t\t\tdateActivated: dateActivated,\n\t\t\t\tdateLastLogin: dateLastLogin,\n\t\t\t\tprevProfileImage: prevProfileImage,\n\t\t\t\tprofileImage: prevProfileImage,\n\t\t\t\tisUserTypeApproved: isUserTypeApproved,\n\t\t\t\tisDeactivated: isDeactivated,\n\t\t\t});\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\thandleInputChange(e) {\n\t\tthis.setState({ [e.target.name]: e.target.value });\n\t}\n\n\tformatDate(date) {\n\t\tif (date instanceof Date) {\n\t\t\tconst offset = date.getTimezoneOffset();\n\t\t\tdate = new Date(date.getTime() - offset * 60 * 1000);\n\n\t\t\tlet dd = date.getDate();\n\t\t\tlet mm = date.getMonth();\n\t\t\tlet yyyy = date.getFullYear();\n\n\t\t\tif (dd < 10) {\n\t\t\t\tdd = \"0\" + dd;\n\t\t\t}\n\n\t\t\tif (mm < 10) {\n\t\t\t\tmm = \"0\" + mm;\n\t\t\t}\n\n\t\t\treturn dd + \"/\" + mm + \"/\" + yyyy;\n\t\t}\n\t}\n\n\ttoggleEditUsername() {\n\t\tlet prevUsername = this.state.prevUsername;\n\t\tlet username = this.state.username;\n\n\t\tif (prevUsername !== username) {\n\t\t\tthis.setState({ username: prevUsername });\n\t\t}\n\n\t\tthis.setState((prevState) => ({\n\t\t\tisEditUsernameMode: !prevState.isEditUsernameMode,\n\t\t}));\n\t}\n\n\ttoggleEditEmail() {\n\t\tlet prevEmail = this.state.prevEmail;\n\t\tlet email = this.state.email;\n\n\t\tif (prevEmail !== email) {\n\t\t\tthis.setState({ email: prevEmail });\n\t\t}\n\t\tthis.setState((prevState) => ({\n\t\t\tisEditEmailMode: !prevState.isEditEmailMode,\n\t\t}));\n\t}\n\n\tasync submitUsername() {\n\t\ttry {\n\t\t\tlet username = this.state.username;\n\n\t\t\tlet payload = {\n\t\t\t\tusername: username,\n\t\t\t\tprev_username: this.state.prevUsername,\n\t\t\t};\n\n\t\t\tawait http.post(\"/user/username\", payload);\n\n\t\t\tthis.setState({ prevUsername: username });\n\n\t\t\tthis.toggleModalConfirmUsername();\n\t\t\tthis.toggleEditUsername();\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\talert(\"Unable to change your username. Please try again.\");\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\tasync submitEmail() {\n\t\ttry {\n\t\t\tlet email = this.state.email;\n\n\t\t\tif (!validator.isEmail(email)) {\n\t\t\t\talert(\"Email address is invalid.\");\n\t\t\t\tthis.toggleModalConfirmEmail();\n\t\t\t\tthis.toggleEditEmail();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet payload = {\n\t\t\t\temail: email,\n\t\t\t\tusername: this.state.username,\n\t\t\t};\n\n\t\t\tawait http.post(\"/user/email\", payload);\n\n\t\t\tthis.setState({ prevEmail: email });\n\n\t\t\tthis.toggleModalConfirmEmail();\n\t\t\tthis.toggleEditEmail();\n\n\t\t\tthis.logout();\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\talert(\"Unable to change your email address. Please try again.\");\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\ttoggleModalConfirmUsername() {\n\t\tthis.setState((prevState) => ({\n\t\t\tisModalConfirmUsernameOpen: !prevState.isModalConfirmUsernameOpen,\n\t\t}));\n\t}\n\n\ttoggleModalConfirmEmail() {\n\t\tthis.setState((prevState) => ({\n\t\t\tisModalConfirmEmailOpen: !prevState.isModalConfirmEmailOpen,\n\t\t}));\n\t}\n\n\ttoggleModalConfirmChangePassword() {\n\t\tthis.setState((prevState) => ({\n\t\t\tisModalConfirmChangePasswordOpen:\n\t\t\t\t!prevState.isModalConfirmChangePasswordOpen,\n\t\t}));\n\t}\n\n\ttoggleModalConfirmDeactivate() {\n\t\tthis.setState((prevState) => ({\n\t\t\tisModalConfirmDeactivateOpen: !prevState.isModalConfirmDeactivateOpen,\n\t\t}));\n\t}\n\n\ttoggleModalConfirmActivate() {\n\t\tthis.setState((prevState) => ({\n\t\t\tisModalConfirmActivateOpen: !prevState.isModalConfirmActivateOpen,\n\t\t}));\n\t}\n\n\ttoggleModalConfirmApprove() {\n\t\tthis.setState((prevState) => ({\n\t\t\tisModalConfirmApproveOpen: !prevState.isModalConfirmApproveOpen,\n\t\t}));\n\t}\n\n\tlogout() {\n\t\thttp.get(\"/auth/logout\");\n\t\tthis.props.history.push({\n\t\t\tpathname: \"/login\",\n\t\t});\n\t\tthis.setState({ username: \"\" });\n\t\tlocalStorage.clear();\n\t\twindow.location.reload();\n\t}\n\n\tasync uploadImage() {\n\t\ttry {\n\t\t\tlet image = this.state.profileImage;\n\n\t\t\tlet payload = {\n\t\t\t\timage: image,\n\t\t\t\tusername: this.state.username,\n\t\t\t};\n\n\t\t\tawait http.post(\"/user/profile-image\", payload);\n\t\t\talert(\"Profile image changed.\");\n\n\t\t\tthis.setState({ prevProfileImage: image });\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\talert(\"Unable to upload your profile image. Please try again.\");\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\tasync changePassword() {\n\t\ttry {\n\t\t\tlet payload = {\n\t\t\t\tusername: this.state.username,\n\t\t\t};\n\n\t\t\tawait http.post(\"/user/change-password\", payload);\n\t\t\talert(\"Check your email for further instructions.\");\n\n\t\t\tthis.toggleModalConfirmChangePassword();\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\talert(\"Unable to change your password. Please try again.\");\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\tasync deactivate() {\n\t\ttry {\n\t\t\tlet { currentUsername } = this.state;\n\n\t\t\tlet payload = {\n\t\t\t\tusername: this.state.username,\n\t\t\t};\n\t\t\tawait http.post(\"/user/deactivate\", payload);\n\n\t\t\tthis.toggleModalConfirmDeactivate();\n\n\t\t\tif (currentUsername === payload.username) {\n\t\t\t\tthis.logout();\n\t\t\t}\n\n\t\t\tthis.getUserInfo();\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\talert(\"Unable to deactivate. Please try again.\");\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\tasync activate() {\n\t\ttry {\n\t\t\tlet payload = {\n\t\t\t\tusername: this.state.username,\n\t\t\t};\n\t\t\tawait http.post(\"/user/activate\", payload);\n\n\t\t\tthis.toggleModalConfirmActivate();\n\n\t\t\tthis.getUserInfo();\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\talert(\"Unable to activate. Please try again.\");\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\tasync approve() {\n\t\ttry {\n\t\t\tlet payload = {\n\t\t\t\tusername: this.state.username,\n\t\t\t};\n\t\t\tlet resp = await http.post(\"/user/approve\", payload);\n\n\t\t\tif (resp.status === 200) {\n\t\t\t\tthis.getUserInfo();\n\t\t\t}\n\n\t\t\tthis.toggleModalConfirmApprove();\n\t\t} catch (err) {\n\t\t\talert(\"Unable to approve. Please try again.\");\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\trender() {\n\t\tlet {\n\t\t\tcurrentUsername,\n\t\t\tcurrentUserType,\n\t\t\tprevProfileImage,\n\t\t\tprofileImage,\n\t\t\tusername,\n\t\t\temail,\n\t\t\tuserType,\n\t\t\tdateActivated,\n\t\t\tdateLastLogin,\n\t\t\tisUserTypeApproved,\n\t\t\tisDeactivated,\n\t\t\tisEditUsernameMode,\n\t\t\tisEditEmailMode,\n\t\t\tisModalConfirmUsernameOpen,\n\t\t\tisModalConfirmEmailOpen,\n\t\t\tisModalConfirmChangePasswordOpen,\n\t\t\tisModalConfirmDeactivateOpen,\n\t\t\tisModalConfirmActivateOpen,\n\t\t\tisModalConfirmApproveOpen,\n\t\t} = this.state;\n\n\t\tconst { t } = this.props;\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t{t(\"User Information\")}\n\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{profileImage.length === 0 ? (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t this.setState({ profileImage: base64 })}\n\t\t\t\t\t\t\t\t\tonError={(err) => {\n\t\t\t\t\t\t\t\t\t\talert(err);\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{t(\"Choose an Image\")}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t(500x500px)\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{prevProfileImage !== profileImage ? (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{isEditUsernameMode ? (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{userType === \"Super Admin\" ? (\n\t\t\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t\t{isEditUsernameMode ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\t\t{isEditUsernameMode ? (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{isEditEmailMode ? (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{userType === \"Super Admin\" ? (\n\t\t\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t\t{isEditEmailMode ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{isEditEmailMode ? (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{isUserTypeApproved ? (\n\t\t\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t\t\t) : !(\n\t\t\t\t\t\t\t\t\t\t\t\tcurrentUserType === \"Super Admin\" ||\n\t\t\t\t\t\t\t\t\t\t\t\tcurrentUserType === \"Admin \"\n\t\t\t\t\t\t\t\t\t\t ) ? (\n\t\t\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{(currentUsername === username ||\n\t\t\t\t\t\t\t\t\t\t\tcurrentUserType === \"Super Admin\" ||\n\t\t\t\t\t\t\t\t\t\t\tcurrentUserType === \"Admin\") &&\n\t\t\t\t\t\t\t\t\t\tuserType !== \"Super Admin\" ? (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t{t(\"Username\")}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{username}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{t(\"Submit\")}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t{t(\"Cancel\")}\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t{t(\"Email\")}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{email}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{t(\"Submit\")}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t{t(\"Cancel\")}\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
{t(\"User Type\")}\n\t\t\t\t\t\t\t\t\t\t\t{t(userType)}\n\t\t\t\t\t\t\t\t\t\t\t{isUserTypeApproved ? \"\" : \" (Pending)\"}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t{t(\"Approve\")}\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t
{t(\"Activated Date\")}{this.formatDate(dateActivated)}
{t(\"Last Login\")}{this.formatDate(dateLastLogin)}
{t(\"Status\")}\n\t\t\t\t\t\t\t\t\t\t\t{isDeactivated ? (\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t {t(\"Inactive\")}\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t {t(\"Active\")}\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t{t(\"Change Password\")}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t{isDeactivated ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{t(\"Activate\")}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{t(\"Deactivate\")}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{t(\"Confirm Edit Username\")}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{\" \"}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{t(\"Confirm Edit Email\")}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{t(\"You will be logged out after changing your email address.\")}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{\" \"}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{t(\"Confirm Change Password\")}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{t(\n\t\t\t\t\t\t\t\"An email with instructions to change your password will be sent to your email address.\"\n\t\t\t\t\t\t)}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{\" \"}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{t(\"Cancel\")}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{t(\"Confirm Deactivate User\")}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{\" \"}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{t(\"Confirm Activate User\")}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{\" \"}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{t(\"Confirm Approve User Type\")}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{\" \"}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t);\n\t}\n}\n\nexport default withTranslation()(EditProfile);\n","import React from \"react\";\n\nimport \"./SetTarget.css\";\nimport {\n\tRow,\n\tCol,\n\tContainer,\n\tForm,\n\tFormGroup,\n\tLabel,\n\tInput,\n\tButton,\n} from \"reactstrap\";\nimport { MdPeople } from \"react-icons/md\";\nimport { RiFileExcel2Fill } from \"react-icons/ri\";\n\nimport MixedChartBillCompare from \"./MixedChartBillCompare/MixedChartBillCompare\";\nimport BarChartBillCompare from \"./BarChartBillCompare/BarChartBillCompare\";\nimport LineChartUsagePerCapita from \"./LineChartUsagePerCapita/LineChartUsagePerCapita\";\nimport MixedChartEnergyCompare from \"./MixedChartEnergyCompare/MixedChartEnergyCompare\";\nimport BarChartEnergyCompare from \"./BarChartEnergyCompare/BarChartEnergyCompare\";\n\nimport http from \"../../../utils/http\";\nimport csv from \"../../../utils/csv\";\n\nimport { withTranslation } from \"react-i18next\";\nimport i18n from \"../../../i18n\";\n\nconst lsMonth = [\n\t\"January\",\n\t\"February\",\n\t\"March\",\n\t\"April\",\n\t\"May\",\n\t\"June\",\n\t\"July\",\n\t\"August\",\n\t\"September\",\n\t\"October\",\n\t\"November\",\n\t\"December\",\n];\n\nclass SetTarget extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tlsMonth: lsMonth,\n\t\t\tlsBuilding: [],\n\t\t\tlsTarget: [],\n\t\t\tlsTargetDisplay: [],\n\t\t\tlastMonthTarget_bill: 0,\n\t\t\tlastMonthActual_bill: 0,\n\t\t\tlastYearTarget_bill: 0,\n\t\t\tlastYearActual_bill: 0,\n\t\t\tmonthAverage_bill: 0,\n\t\t\tyearAverage_bill: 0,\n\t\t\tlastMonthTarget_usage: 0,\n\t\t\tlastMonthActual_usage: 0,\n\t\t\tlastYearTarget_usage: 0,\n\t\t\tlastYearActual_usage: 0,\n\t\t\tmonthAverage_usage: 0,\n\t\t\tyearAverage_usage: 0,\n\t\t\tbuilding: \"Auditorium\",\n\t\t\tmonth: new Date().getMonth(),\n\t\t\tyear: new Date().getFullYear(),\n\t\t\tmonthDisplay: new Date().getMonth(),\n\t\t\tyearDisplay: new Date().getFullYear(),\n\t\t\telectricityBill: \"\",\n\t\t\tenergyUsage: \"\",\n\t\t\tamountPeople: \"\",\n\t\t\ttariff: \"\",\n\t\t\tcompareToBill: \"Target\",\n\t\t\tcompareToUsage: \"Target\",\n\t\t\tbillData_month: {},\n\t\t\tenergyData_month: {},\n\t\t\tkwh_building_month: {},\n\t\t\tlsPermission: JSON.parse(localStorage.getItem(\"lsPermission\")),\n\t\t};\n\n\t\tthis.onClickCompareToBill = this.onClickCompareToBill.bind(this);\n\t\tthis.onClickCompareToUsage = this.onClickCompareToUsage.bind(this);\n\t\tthis.handleInputChange = this.handleInputChange.bind(this);\n\n\t\tthis.setTarget = this.setTarget.bind(this);\n\n\t\tthis.getAllBuilding = this.getAllBuilding.bind(this);\n\t\tthis.getTarget_monthYear = this.getTarget_monthYear.bind(this);\n\t\tthis.getTarget_monthYear_display =\n\t\t\tthis.getTarget_monthYear_display.bind(this);\n\t\tthis.getTargetPresets = this.getTargetPresets.bind(this);\n\t\tthis.getBillDataMonth = this.getBillDataMonth.bind(this);\n\t\tthis.getEnergyDataMonth = this.getEnergyDataMonth.bind(this);\n\t\tthis.getEnergyMonthPastYear = this.getEnergyMonthPastYear.bind(this);\n\n\t\tthis.exportCharts = this.exportCharts.bind(this);\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.getAllBuilding();\n\t\tthis.getTarget_monthYear();\n\t\tthis.getTarget_monthYear_display();\n\t\tthis.getEnergyMonthPastYear();\n\n\t\tdocument.getElementById(\"root\").classList.add(\"no-scroll\");\n\t}\n\n\tcomponentWillUnmount() {\n\t\tdocument.getElementById(\"root\").classList.remove(\"no-scroll\");\n\t}\n\n\thandleInputChange(e) {\n\t\tthis.setState({ [e.target.name]: e.target.value }, () => {\n\t\t\tif (\n\t\t\t\te.target.name === \"month\" ||\n\t\t\t\te.target.name === \"year\" ||\n\t\t\t\te.target.name === \"building\"\n\t\t\t) {\n\t\t\t\tthis.getTargetPresets();\n\t\t\t\tthis.getTarget_monthYear();\n\t\t\t}\n\n\t\t\tif (e.target.name === \"monthDisplay\" || e.target.name === \"yearDisplay\") {\n\t\t\t\tthis.getTarget_monthYear_display();\n\t\t\t}\n\t\t});\n\t}\n\n\tonClickCompareToBill(compareToBill) {\n\t\tthis.setState({\n\t\t\tcompareToBill: compareToBill,\n\t\t});\n\t}\n\n\tonClickCompareToUsage(compareToUsage) {\n\t\tthis.setState({\n\t\t\tcompareToUsage: compareToUsage,\n\t\t});\n\t}\n\n\tasync setTarget() {\n\t\ttry {\n\t\t\tlet {\n\t\t\t\tlsBuilding,\n\t\t\t\tlsTarget,\n\t\t\t\tbuilding,\n\t\t\t\tmonth,\n\t\t\t\tyear,\n\t\t\t\telectricityBill,\n\t\t\t\tenergyUsage,\n\t\t\t\tamountPeople,\n\t\t\t\ttariff,\n\t\t\t} = this.state;\n\n\t\t\tlet buildingID;\n\t\t\tfor (let b of lsBuilding) {\n\t\t\t\tif (i18n.t(b.label) === building) {\n\t\t\t\t\tbuildingID = b.id;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet target = lsTarget.find(\n\t\t\t\t(t) => t.month === +month && t.year === +year && t.building === building\n\t\t\t);\n\n\t\t\tlet payload = {\n\t\t\t\tbuilding_id: buildingID,\n\t\t\t\tmonth: month,\n\t\t\t\tyear: year,\n\t\t\t};\n\n\t\t\tif (target !== undefined) payload.tariff = target.tariff;\n\t\t\tif (tariff.length > 0) {\n\t\t\t\tpayload.tariff = +tariff;\n\t\t\t}\n\n\t\t\tif (target !== undefined) {\n\t\t\t\tpayload.electricity_bill = target.electricity_bill;\n\t\t\t}\n\t\t\tif (electricityBill.length > 0) {\n\t\t\t\tpayload.electricity_bill = +electricityBill;\n\t\t\t}\n\n\t\t\tif (target !== undefined) payload.energy_usage = target.energy_usage;\n\t\t\tif (energyUsage.length > 0) {\n\t\t\t\tpayload.energy_usage = +energyUsage;\n\t\t\t}\n\n\t\t\tif (target !== undefined) payload.amount_people = target.amount_people;\n\t\t\tif (amountPeople.length > 0) {\n\t\t\t\tpayload.amount_people = +amountPeople;\n\t\t\t}\n\n\t\t\tlet resp = await http.post(\"/target\", payload);\n\n\t\t\tif (resp.status === 200) {\n\t\t\t\tthis.getTarget_monthYear();\n\t\t\t\tthis.getTarget_monthYear_display();\n\t\t\t\tthis.getTargetPresets();\n\t\t\t\tthis.getBillDataMonth();\n\t\t\t\tthis.getEnergyDataMonth();\n\n\t\t\t\tthis.setState({\n\t\t\t\t\telectricityBill: \"\",\n\t\t\t\t\tenergyUsage: \"\",\n\t\t\t\t\tamountPeople: \"\",\n\t\t\t\t\ttariff: \"\",\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\tasync getAllBuilding() {\n\t\ttry {\n\t\t\tlet resp = await http.get(\"/building/all\");\n\n\t\t\tthis.setState({ lsBuilding: resp.data }, () => {\n\t\t\t\tthis.getTargetPresets();\n\t\t\t\tthis.getBillDataMonth();\n\t\t\t\tthis.getEnergyDataMonth();\n\t\t\t});\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\tasync getTarget_monthYear() {\n\t\ttry {\n\t\t\tlet { month, year } = this.state;\n\n\t\t\tlet payload = {\n\t\t\t\tmonth: month,\n\t\t\t\tyear: year,\n\t\t\t};\n\n\t\t\tlet resp = await http.post(\"/target/monthyear\", payload);\n\n\t\t\tlet lsTarget = resp.data;\n\n\t\t\tthis.setState({\n\t\t\t\tlsTarget: lsTarget,\n\t\t\t});\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\tasync getTarget_monthYear_display() {\n\t\ttry {\n\t\t\tlet { monthDisplay, yearDisplay } = this.state;\n\n\t\t\tlet payload = {\n\t\t\t\tmonth: monthDisplay,\n\t\t\t\tyear: yearDisplay,\n\t\t\t};\n\n\t\t\tlet resp = await http.post(\"/target/monthyear\", payload);\n\n\t\t\tlet lsTargetDisplay = resp.data;\n\n\t\t\tthis.setState({\n\t\t\t\tlsTargetDisplay: lsTargetDisplay,\n\t\t\t});\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\tasync getTargetPresets() {\n\t\ttry {\n\t\t\tlet { month, year, building, lsBuilding } = this.state;\n\n\t\t\tlet payload = {\n\t\t\t\tmonth: +month,\n\t\t\t\tyear: +year,\n\t\t\t\tbuilding_id: lsBuilding.find((b) => b.label === building).id,\n\t\t\t};\n\n\t\t\tlet resp = await http.post(\"/target/presets\", payload);\n\n\t\t\tlet presets = resp.data;\n\t\t\tthis.setState({\n\t\t\t\tlastMonthTarget_bill: presets.lastMonthTarget_bill,\n\t\t\t\tlastMonthActual_bill: presets.lastMonthActual_bill,\n\t\t\t\tlastYearTarget_bill: presets.lastYearTarget_bill,\n\t\t\t\tlastYearActual_bill: presets.lastYearActual_bill,\n\t\t\t\tmonthAverage_bill: presets.monthAverage_bill,\n\t\t\t\tyearAverage_bill: presets.yearAverage_bill,\n\t\t\t\tlastMonthTarget_usage: presets.lastMonthTarget_usage,\n\t\t\t\tlastMonthActual_usage: presets.lastMonthActual_usage,\n\t\t\t\tlastYearTarget_usage: presets.lastYearTarget_usage,\n\t\t\t\tlastYearActual_usage: presets.lastYearActual_usage,\n\t\t\t\tmonthAverage_usage: resp.data.monthAverage_usage,\n\t\t\t\tyearAverage_usage: presets.yearAverage_usage,\n\t\t\t});\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\tasync getBillDataMonth() {\n\t\ttry {\n\t\t\tlet { lsBuilding } = this.state;\n\n\t\t\tlet payload = {\n\t\t\t\tbuilding_id: lsBuilding.map(function (building) {\n\t\t\t\t\treturn building.id;\n\t\t\t\t}),\n\t\t\t};\n\n\t\t\tlet resp = await http.post(\"/building/bill/compare\", payload);\n\n\t\t\tthis.setState({\n\t\t\t\tbillData_month: resp.data,\n\t\t\t});\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\tasync getEnergyDataMonth() {\n\t\ttry {\n\t\t\tlet { lsBuilding } = this.state;\n\n\t\t\tlet payload = {\n\t\t\t\tbuilding_id: lsBuilding.map(function (building) {\n\t\t\t\t\treturn building.id;\n\t\t\t\t}),\n\t\t\t};\n\n\t\t\tlet resp = await http.post(\"/target/energy/compare\", payload);\n\n\t\t\tthis.setState({\n\t\t\t\tenergyData_month: resp.data,\n\t\t\t});\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\tasync getEnergyMonthPastYear() {\n\t\ttry {\n\t\t\tlet resp = await http.get(\"/target/energy/year\");\n\n\t\t\tthis.setState({\n\t\t\t\tkwh_building_month: resp.data,\n\t\t\t});\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\texportCharts() {\n\t\tlet {\n\t\t\tlsBuilding,\n\t\t\tbillData_month,\n\t\t\tenergyData_month,\n\t\t\tkwh_building_month,\n\t\t\tlsTarget,\n\t\t} = this.state;\n\n\t\tlet rows = [[]];\n\t\trows[0].push(\"Electricity Bill\");\n\t\trows.push([\"Month\", \"Actual\", \"Target\", \"Average\"]);\n\n\t\tlet today = new Date();\n\t\tlet month = today.getMonth();\n\t\tfor (let i = 0; i < 12; i++) {\n\t\t\tif (month < 0) month += 12;\n\n\t\t\tlet dataMonth = billData_month[month];\n\n\t\t\trows.push([\n\t\t\t\tlsMonth[month],\n\t\t\t\tdataMonth.latest,\n\t\t\t\tdataMonth.target,\n\t\t\t\tdataMonth.average,\n\t\t\t]);\n\n\t\t\tmonth--;\n\t\t}\n\n\t\trows.push([]);\n\t\trows.push([\"Electricity Bill Compared to Target/Average\"]);\n\t\trows.push([\"Month\", \"Saved % Target\", \"Saved % Average\"]);\n\t\tmonth = today.getMonth();\n\t\tfor (let i = 0; i < 12; i++) {\n\t\t\tif (month < 0) month += 12;\n\n\t\t\tlet dataMonth = billData_month[month];\n\t\t\tlet latest = dataMonth.latest;\n\t\t\tlet target = dataMonth.target;\n\t\t\tlet average = dataMonth.average;\n\n\t\t\trows.push([\n\t\t\t\tlsMonth[month],\n\t\t\t\ttarget !== 0\n\t\t\t\t\t? parseFloat(((target - latest) / target) * 100).toFixed(2)\n\t\t\t\t\t: 0,\n\t\t\t\taverage !== 0\n\t\t\t\t\t? parseFloat(((average - latest) / average) * 100).toFixed(2)\n\t\t\t\t\t: 0,\n\t\t\t]);\n\n\t\t\tmonth--;\n\t\t}\n\n\t\trows.push([]);\n\t\trows.push([\"Energy Use per Capita\"]);\n\t\trows.push([\"Month\"]);\n\n\t\tlsBuilding.forEach((building) => {\n\t\t\trows[rows.length - 1].push(building.label);\n\t\t});\n\n\t\tlet year = today.getFullYear();\n\t\tmonth = today.getMonth();\n\t\tfor (let i = 0; i < 12; i++) {\n\t\t\tif (month < 0) {\n\t\t\t\tmonth += 12;\n\t\t\t\tyear--;\n\t\t\t}\n\t\t\trows.push([lsMonth[month]]);\n\n\t\t\tlet kwh_building = kwh_building_month[month];\n\t\t\tif (kwh_building === undefined) {\n\t\t\t\trows[rows.length - 1] = rows[rows.length - 1].concat(\n\t\t\t\t\tnew Array(lsBuilding.length).fill(0)\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t} else if (Object.keys(kwh_building).length === 0) {\n\t\t\t\trows[rows.length - 1] = rows[rows.length - 1].concat(\n\t\t\t\t\tnew Array(lsBuilding.length).fill(0)\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlsBuilding.forEach((b) => {\n\t\t\t\tif (!Object.keys(kwh_building).includes(b.label)) {\n\t\t\t\t\trows[rows.length - 1].push(0);\n\t\t\t\t} else {\n\t\t\t\t\tlet kwh = kwh_building[b.label];\n\t\t\t\t\tlet target = lsTarget.find(\n\t\t\t\t\t\t(t) =>\n\t\t\t\t\t\t\tt.building === b.label && t.month === month && t.year === year\n\t\t\t\t\t);\n\t\t\t\t\tif (target === undefined) rows[rows.length - 1].push(0);\n\t\t\t\t\telse if (target.amount_people === null) rows[rows.length - 1].push(0);\n\t\t\t\t\telse {\n\t\t\t\t\t\trows[rows.length - 1].push(\n\t\t\t\t\t\t\tparseFloat(kwh / target.amount_people).toFixed(2)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tmonth--;\n\t\t}\n\n\t\trows.push([]);\n\t\trows.push([\"Energy Usage\"]);\n\t\trows.push([\"Month\", \"Actual\", \"Target\", \"Average\"]);\n\t\tmonth = today.getMonth();\n\t\tfor (let i = 0; i < 12; i++) {\n\t\t\tif (month < 0) month += 12;\n\n\t\t\tlet dataEnergy = energyData_month[month];\n\n\t\t\trows.push([\n\t\t\t\tlsMonth[month],\n\t\t\t\tdataEnergy.latest,\n\t\t\t\tdataEnergy.target,\n\t\t\t\tdataEnergy.average,\n\t\t\t]);\n\n\t\t\tmonth--;\n\t\t}\n\n\t\trows.push([]);\n\t\trows.push([\"Energy Usage Compared to Target/Average\"]);\n\t\trows.push([\"Month\", \"Saved % Target\", \"Saved % Average\"]);\n\t\tmonth = today.getMonth();\n\t\tfor (let i = 0; i < 12; i++) {\n\t\t\tif (month < 0) month += 12;\n\n\t\t\tlet energyData = energyData_month[month];\n\t\t\tlet latest = energyData.latest;\n\t\t\tlet target = energyData.target;\n\t\t\tlet average = energyData.average;\n\n\t\t\trows.push([\n\t\t\t\tlsMonth[month],\n\t\t\t\ttarget !== 0\n\t\t\t\t\t? parseFloat(((target - latest) / target) * 100).toFixed(2)\n\t\t\t\t\t: 0,\n\t\t\t\taverage !== 0\n\t\t\t\t\t? parseFloat(((average - latest) / average) * 100).toFixed(2)\n\t\t\t\t\t: 0,\n\t\t\t]);\n\n\t\t\tmonth--;\n\t\t}\n\n\t\tcsv.exportFile(\"Historical Data\", rows);\n\t}\n\n\trender() {\n\t\tlet {\n\t\t\tlsMonth,\n\t\t\tlsBuilding,\n\t\t\tlsTarget,\n\t\t\tlsTargetDisplay,\n\t\t\tlastMonthTarget_bill,\n\t\t\tlastMonthActual_bill,\n\t\t\tlastYearTarget_bill,\n\t\t\tlastYearActual_bill,\n\t\t\tmonthAverage_bill,\n\t\t\tyearAverage_bill,\n\t\t\tlastMonthTarget_usage,\n\t\t\tlastMonthActual_usage,\n\t\t\tlastYearTarget_usage,\n\t\t\tlastYearActual_usage,\n\t\t\tmonthAverage_usage,\n\t\t\tyearAverage_usage,\n\t\t\tyearDisplay,\n\t\t\tmonthDisplay,\n\t\t\tbuilding,\n\t\t\tmonth,\n\t\t\tyear,\n\t\t\ttariff,\n\t\t\telectricityBill,\n\t\t\tamountPeople,\n\t\t\tenergyUsage,\n\t\t\tcompareToBill,\n\t\t\tcompareToUsage,\n\t\t\tbillData_month,\n\t\t\tenergyData_month,\n\t\t\tkwh_building_month,\n\t\t\tlsPermission,\n\t\t} = this.state;\n\n\t\tlet currentYear = new Date().getFullYear();\n\t\tlet end = currentYear + 100;\n\t\tlet lsYear = [];\n\t\tfor (let i = currentYear - 10; i < end; i++) lsYear.push(i);\n\n\t\tlet target = lsTarget.find(\n\t\t\t(t) => t.month === +month && t.year === +year && t.building === building\n\t\t);\n\n\t\tconst { t } = this.props;\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{t(\"Set Target\")}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{t(\"Historical Data\")}\n\t\t\t\t\t\t{lsPermission.find((p) => p.label === \"Export Information\") ? (\n\t\t\t\t\t\t\t this.exportCharts()}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{/* ******************************** CONFIG PANE ******************************** */}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{lsMonth.map((m, idx) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{lsYear.map((year) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{lsBuilding.map((building) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{t(\"People\")} \n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{t(\"Tariff\")} ({t(\"Baht\")}/{t(\"kWh\")})\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{t(\"Baht\")}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{\" \"}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{t(\"kWh\")}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t*{t(\"Note\")}:\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{t(\"Electricity bill is estimated\")}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t{/* ****************************** List Pane **************************** */}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{lsMonth.map((month, index) => (\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{lsYear.map((year) => (\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{lsBuilding.map((building) => (\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
{t(\"Building\")}{t(\"Users\")}{t(\"Tariff\")}
\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t{t(building.label)}\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t{lsTargetDisplay.find(\n\t\t\t\t\t\t\t\t\t\t\t\t\t(target) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttarget.month === +monthDisplay &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttarget.year === +yearDisplay &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttarget.building === building.label\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t? lsTargetDisplay.find(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(target) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttarget.month === +monthDisplay &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttarget.year === +yearDisplay &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttarget.building === building.label\n\t\t\t\t\t\t\t\t\t\t\t\t\t ).amount_people !== null\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? lsTargetDisplay.find(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(target) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttarget.month === +monthDisplay &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttarget.year === +yearDisplay &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttarget.building === building.label\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t ).amount_people\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t{lsTargetDisplay.find(\n\t\t\t\t\t\t\t\t\t\t\t\t\t(target) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttarget.month === +monthDisplay &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttarget.year === +yearDisplay &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttarget.building === building.label\n\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t? lsTargetDisplay.find(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(target) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttarget.month === +monthDisplay &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttarget.year === +yearDisplay &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttarget.building === building.label\n\t\t\t\t\t\t\t\t\t\t\t\t\t ).tariff !== null\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? lsTargetDisplay.find(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(target) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttarget.month === +monthDisplay &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttarget.year === +yearDisplay &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttarget.building === building.label\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t ).tariff\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t: \"N/A\"}\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{/* ****************************** HISTORICAL DATA PANE *****************************/}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{/* ****************************** CHART 1 **************************** */}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{t(\"Actual\")}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t{/* ****************************** CHART 2 **************************** */}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
{t(\"Saved\")}
\n\t\t\t\t\t\t\t\t\t
{t(\"Excess\")}
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t{/* ****************************** CHART 3 **************************** */}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t{/* ****************************** CHART 4 **************************** */}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t{t(\"Actual\")}\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t{/* ****************************** CHART 5 **************************** */}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
{t(\"Saved\")}
\n\t\t\t\t\t\t\t\t\t
{t(\"Excess\")}
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n}\n\nexport default withTranslation()(SetTarget);\n","import React from \"react\";\n\nimport \"./DeviceManager.css\";\nimport {\n\tCol,\n\tTable,\n\tContainer,\n\tForm,\n\tFormGroup,\n\tLabel,\n\tInput,\n\tButton,\n\tModal,\n\tModalHeader,\n\tModalBody,\n\tModalFooter,\n} from \"reactstrap\";\nimport { RiFileExcel2Fill } from \"react-icons/ri\";\nimport { IoMdSearch, IoMdAddCircle } from \"react-icons/io\";\nimport { MdModeEdit, MdDelete } from \"react-icons/md\";\nimport { GiConfirmed, GiCancel } from \"react-icons/gi\";\n\nimport dateFormatter from \"../../../utils/dateFormatter\";\nimport http from \"../../../utils/http\";\nimport csv from \"../../../utils/csv\";\n\nimport { withTranslation } from \"react-i18next\";\n\nclass DeviceManager extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tconst { t } = this.props;\n\n\t\tthis.state = {\n\t\t\tlsDevice: [],\n\t\t\tlsBuilding: [],\n\t\t\tlsSystem: [],\n\t\t\tisSortByDeviceIDAsc: false,\n\t\t\tisSortByDeviceIDDesc: false,\n\t\t\tisSortByStatusActive: false,\n\t\t\tisSortByStatusInactive: false,\n\t\t\tisSortByDateActivatedAsc: false,\n\t\t\tisSortByDateActivatedDesc: false,\n\t\t\tsearchText: \"\",\n\t\t\tisModalAddMeterOpen: false,\n\t\t\tisModalConfirmAddMeterOpen: false,\n\t\t\tisModalConfirmEditMeterOpen: false,\n\t\t\tisModalConfirmDeleteMeterOpen: false,\n\t\t\tdeviceID: \"\",\n\t\t\tdeviceIDEdit: \"\",\n\t\t\tdeviceIDDelete: \"\",\n\t\t\tbuilding: \"\",\n\t\t\tfloor: \"\",\n\t\t\tlocation: \"\",\n\t\t\tsite: \"\",\n\t\t\tbrandModel: \"\",\n\t\t\tsystem: t(\"Main\"),\n\t\t\tisActive: false,\n\t\t\tactivatedDate: \"\",\n\t\t\tlsPermission: JSON.parse(localStorage.getItem(\"lsPermission\")),\n\t\t};\n\n\t\tthis.toggleSortByDeviceID = this.toggleSortByDeviceID.bind(this);\n\t\tthis.toggleSortByStatus = this.toggleSortByStatus.bind(this);\n\t\tthis.toggleSortByDateActivated = this.toggleSortByDateActivated.bind(this);\n\t\tthis.toggleModalAddMeter = this.toggleModalAddMeter.bind(this);\n\t\tthis.toggleModalConfirmAddMeter =\n\t\t\tthis.toggleModalConfirmAddMeter.bind(this);\n\t\tthis.toggleModalConfirmDeleteMeter =\n\t\t\tthis.toggleModalConfirmDeleteMeter.bind(this);\n\t\tthis.toggleModalConfirmEditMeter =\n\t\t\tthis.toggleModalConfirmEditMeter.bind(this);\n\t\tthis.getAllBuilding = this.getAllBuilding.bind(this);\n\t\tthis.getAllSystem = this.getAllSystem.bind(this);\n\t\tthis.getAllDevice = this.getAllDevice.bind(this);\n\t\tthis.addMeter = this.addMeter.bind(this);\n\t\tthis.editMeter = this.editMeter.bind(this);\n\t\tthis.deleteMeter = this.deleteMeter.bind(this);\n\t\tthis.setMeterEditMode = this.setMeterEditMode.bind(this);\n\t\tthis.handleInputChange = this.handleInputChange.bind(this);\n\t\tthis.exportTable = this.exportTable.bind(this);\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.getAllBuilding();\n\t\tthis.getAllSystem();\n\t\tthis.getAllDevice();\n\t}\n\n\ttoggleSortByDeviceID() {\n\t\tlet { isSortByDeviceIDAsc, isSortByDeviceIDDesc } = this.state;\n\n\t\tif (!(isSortByDeviceIDAsc || isSortByDeviceIDDesc)) {\n\t\t\tthis.setState({\n\t\t\t\tisSortByDeviceIDAsc: true,\n\t\t\t\tisSortByDeviceIDDesc: false,\n\t\t\t\tisSortByStatusActive: false,\n\t\t\t\tisSortByStatusInactive: false,\n\t\t\t\tisSortByDateActivatedAsc: false,\n\t\t\t\tisSortByDateActivatedDesc: false,\n\t\t\t});\n\t\t} else if (isSortByDeviceIDAsc) {\n\t\t\tthis.setState({\n\t\t\t\tisSortByDeviceIDAsc: false,\n\t\t\t\tisSortByDeviceIDDesc: true,\n\t\t\t\tisSortByStatusActive: false,\n\t\t\t\tisSortByStatusInactive: false,\n\t\t\t\tisSortByDateActivatedAsc: false,\n\t\t\t\tisSortByDateActivatedDesc: false,\n\t\t\t});\n\t\t} else if (isSortByDeviceIDDesc) {\n\t\t\tthis.setState({\n\t\t\t\tisSortByDeviceIDAsc: true,\n\t\t\t\tisSortByDeviceIDDesc: false,\n\t\t\t\tisSortByStatusActive: false,\n\t\t\t\tisSortByStatusInactive: false,\n\t\t\t\tisSortByDateActivatedAsc: false,\n\t\t\t\tisSortByDateActivatedDesc: false,\n\t\t\t});\n\t\t}\n\t}\n\n\ttoggleSortByStatus() {\n\t\tlet { isSortByStatusActive, isSortByStatusInactive } = this.state;\n\n\t\tif (!(isSortByStatusActive || isSortByStatusInactive)) {\n\t\t\tthis.setState({\n\t\t\t\tisSortByStatusActive: true,\n\t\t\t\tisSortByStatusInactive: false,\n\t\t\t\tisSortByDeviceIDAsc: false,\n\t\t\t\tisSortByDeviceIDDesc: false,\n\t\t\t\tisSortByDateActivatedAsc: false,\n\t\t\t\tisSortByDateActivatedDesc: false,\n\t\t\t});\n\t\t} else if (isSortByStatusActive) {\n\t\t\tthis.setState({\n\t\t\t\tisSortByStatusActive: false,\n\t\t\t\tisSortByStatusInactive: true,\n\t\t\t\tisSortByDeviceIDAsc: false,\n\t\t\t\tisSortByDeviceIDDesc: false,\n\t\t\t\tisSortByDateActivatedAsc: false,\n\t\t\t\tisSortByDateActivatedDesc: false,\n\t\t\t});\n\t\t} else if (isSortByStatusInactive) {\n\t\t\tthis.setState({\n\t\t\t\tisSortByStatusActive: true,\n\t\t\t\tisSortByStatusInactive: false,\n\t\t\t\tisSortByDeviceIDAsc: false,\n\t\t\t\tisSortByDeviceIDDesc: false,\n\t\t\t\tisSortByDateActivatedAsc: false,\n\t\t\t\tisSortByDateActivatedDesc: false,\n\t\t\t});\n\t\t}\n\t}\n\n\ttoggleSortByDateActivated() {\n\t\tlet { isSortByDateActivatedAsc, isSortByDateActivatedDesc } = this.state;\n\n\t\tif (!(isSortByDateActivatedAsc || isSortByDateActivatedDesc)) {\n\t\t\tthis.setState({\n\t\t\t\tisSortByDateActivatedAsc: true,\n\t\t\t\tisSortByDateActivatedDesc: false,\n\t\t\t\tisSortByStatusActive: false,\n\t\t\t\tisSortByStatusInactive: false,\n\t\t\t\tisSortByDeviceIDAsc: false,\n\t\t\t\tisSortByDeviceIDDesc: false,\n\t\t\t});\n\t\t} else if (isSortByDateActivatedAsc) {\n\t\t\tthis.setState({\n\t\t\t\tisSortByDateActivatedDesc: true,\n\t\t\t\tisSortByDateActivatedAsc: false,\n\t\t\t\tisSortByStatusActive: false,\n\t\t\t\tisSortByStatusInactive: false,\n\t\t\t\tisSortByDeviceIDAsc: false,\n\t\t\t\tisSortByDeviceIDDesc: false,\n\t\t\t});\n\t\t} else if (isSortByDateActivatedDesc) {\n\t\t\tthis.setState({\n\t\t\t\tisSortByDateActivatedAsc: true,\n\t\t\t\tisSortByDateActivatedDesc: false,\n\t\t\t\tisSortByStatusActive: false,\n\t\t\t\tisSortByStatusInactive: false,\n\t\t\t\tisSortByDeviceIDAsc: false,\n\t\t\t\tisSortByDeviceIDDesc: false,\n\t\t\t});\n\t\t}\n\t}\n\n\ttoggleModalAddMeter() {\n\t\tthis.setState((prevState) => ({\n\t\t\tisModalAddMeterOpen: !prevState.isModalAddMeterOpen,\n\t\t\tdeviceIDEdit: \"\",\n\t\t\tdeviceID: \"\",\n\t\t\tbuilding: \"\",\n\t\t\tfloor: \"\",\n\t\t\tlocation: \"\",\n\t\t\tsite: \"\",\n\t\t\tbrandModel: \"\",\n\t\t\tsystem: \"Main\",\n\t\t\tisActive: false,\n\t\t\tactivatedDate: \"\",\n\t\t}));\n\t}\n\n\ttoggleModalConfirmAddMeter() {\n\t\tthis.setState((prevState) => ({\n\t\t\tisModalConfirmAddMeterOpen: !prevState.isModalConfirmAddMeterOpen,\n\t\t}));\n\t}\n\n\ttoggleModalConfirmEditMeter() {\n\t\tthis.setState((prevState) => ({\n\t\t\tisModalConfirmEditMeterOpen: !prevState.isModalConfirmEditMeterOpen,\n\t\t}));\n\t}\n\n\ttoggleModalConfirmDeleteMeter(deviceID) {\n\t\tthis.setState((prevState) => ({\n\t\t\tisModalConfirmDeleteMeterOpen: !prevState.isModalConfirmDeleteMeterOpen,\n\t\t\tdeviceIDDelete: deviceID,\n\t\t}));\n\t}\n\n\thandleInputChange(e) {\n\t\tthis.setState({ [e.target.name]: e.target.value });\n\t}\n\n\tasync getAllBuilding() {\n\t\ttry {\n\t\t\tlet resp = await http.get(\"/building/all\");\n\n\t\t\tthis.setState({ lsBuilding: resp.data });\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\tasync getAllSystem() {\n\t\ttry {\n\t\t\tlet resp = await http.get(\"/system/all\");\n\n\t\t\tthis.setState({ lsSystem: resp.data });\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\tasync getAllDevice() {\n\t\ttry {\n\t\t\tlet resp = await http.get(\"/device/all\");\n\n\t\t\tthis.setState({ lsDevice: resp.data });\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\tasync addMeter() {\n\t\tlet {\n\t\t\tlsBuilding,\n\t\t\tlsSystem,\n\t\t\tdeviceID,\n\t\t\tbuilding,\n\t\t\tfloor,\n\t\t\tlocation,\n\t\t\tsite,\n\t\t\tbrandModel,\n\t\t\tsystem,\n\t\t\tactivatedDate,\n\t\t\tlsDevice,\n\t\t} = this.state;\n\n\t\ttry {\n\t\t\tif (deviceID.length === 0) {\n\t\t\t\talert(\"Meter ID is required.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (lsDevice.find((d) => d.id === deviceID)) {\n\t\t\t\talert(\"Meter already exists\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (system.length === 0) {\n\t\t\t\talert(\"System is required.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (activatedDate === \"\" || activatedDate === undefined) {\n\t\t\t\tactivatedDate = new Date();\n\t\t\t}\n\n\t\t\tconst { t } = this.props;\n\n\t\t\tbuilding = lsBuilding.find((b) => t(b.label) === t(building)).label;\n\t\t\tsystem = lsSystem.find((s) => t(s.label) === t(system)).label;\n\n\t\t\tlet payload = {\n\t\t\t\tid: deviceID,\n\t\t\t\tbuilding: building,\n\t\t\t\tfloor: floor,\n\t\t\t\tlocation: location,\n\t\t\t\tsite: site,\n\t\t\t\tbrand_model: brandModel,\n\t\t\t\tsystem: system,\n\t\t\t\tactivated_datetime: activatedDate,\n\t\t\t};\n\n\t\t\tawait http.post(\"/device\", payload);\n\n\t\t\tthis.toggleModalConfirmAddMeter();\n\t\t\tthis.toggleModalAddMeter();\n\t\t\tthis.getAllDevice();\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\talert(\"Failed to add Meter. Please try again.\");\n\n\t\t\tthis.toggleModalConfirmAddMeter();\n\t\t\tthis.toggleModalAddMeter();\n\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\tsetMeterEditMode(deviceID) {\n\t\tif (deviceID !== \"\") {\n\t\t\tlet { lsDevice } = this.state;\n\t\t\tlet device = lsDevice.find((device) => {\n\t\t\t\treturn device.id === deviceID;\n\t\t\t});\n\n\t\t\tthis.setState({\n\t\t\t\tbuilding: device.building,\n\t\t\t\tfloor: device.floor,\n\t\t\t\tlocation: device.location,\n\t\t\t\tsite: device.site,\n\t\t\t\tbrandModel: device.brand_model,\n\t\t\t\tsystem: device.system,\n\t\t\t\tactivatedDate: new Date(device.activated_datetime),\n\t\t\t});\n\t\t}\n\n\t\tthis.setState({ deviceIDEdit: deviceID });\n\t}\n\n\tasync editMeter() {\n\t\tlet {\n\t\t\tlsBuilding,\n\t\t\tlsSystem,\n\t\t\tdeviceIDEdit,\n\t\t\tdeviceID,\n\t\t\tbuilding,\n\t\t\tfloor,\n\t\t\tlocation,\n\t\t\tsite,\n\t\t\tbrandModel,\n\t\t\tsystem,\n\t\t\tactivatedDate,\n\t\t} = this.state;\n\n\t\ttry {\n\t\t\tif (deviceID.length === 0) {\n\t\t\t\tdeviceID = deviceIDEdit;\n\t\t\t}\n\n\t\t\tif (system.length === 0) {\n\t\t\t\talert(\"System is required.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (activatedDate === undefined) activatedDate = new Date();\n\n\t\t\tconst { t } = this.props;\n\n\t\t\tbuilding = lsBuilding.find((b) => t(b.label) === building).label;\n\t\t\tsystem = lsSystem.find((s) => t(s.label) === system).label;\n\n\t\t\tlet payload = {\n\t\t\t\tid: deviceID,\n\t\t\t\tbuilding: building,\n\t\t\t\tfloor: floor,\n\t\t\t\tlocation: location,\n\t\t\t\tsite: site,\n\t\t\t\tbrand_model: brandModel,\n\t\t\t\tsystem: system,\n\t\t\t\tactivated_datetime: activatedDate,\n\t\t\t};\n\n\t\t\tawait http.post(\"/device/edit\", payload);\n\n\t\t\tthis.setState({\n\t\t\t\tdeviceID: \"\",\n\t\t\t\tisModalConfirmEditMeterOpen: false,\n\t\t\t\tdeviceIDEdit: \"\",\n\t\t\t});\n\n\t\t\tthis.getAllDevice();\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\talert(\"Failed to edit Meter. Please try again.\");\n\t\t\tthis.toggleModalConfirmEditMeter();\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\tasync deleteMeter() {\n\t\ttry {\n\t\t\tlet { deviceIDDelete } = this.state;\n\n\t\t\tlet payload = { id: deviceIDDelete };\n\n\t\t\tawait http.post(\"/device/delete\", payload);\n\n\t\t\tthis.setState({\n\t\t\t\tdeviceIDDelete: \"\",\n\t\t\t\tisModalConfirmDeleteMeterOpen: false,\n\t\t\t});\n\n\t\t\tthis.getAllDevice();\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t\talert(\"Failed to delete Meter. Please try again.\");\n\t\t\tthis.toggleModalConfirmDeleteMeter();\n\t\t\treturn err.response;\n\t\t}\n\t}\n\n\texportTable() {\n\t\tlet rows = [];\n\t\tlet tableRows = document.querySelectorAll(\"table tr\");\n\n\t\tfor (let i = 0; i < tableRows.length; i++) {\n\t\t\tlet row = [];\n\t\t\tlet cols = tableRows[i].querySelectorAll(\"td, th\");\n\n\t\t\tfor (let j = 0; j < cols.length; j++) {\n\t\t\t\trow.push(cols[j].innerText);\n\t\t\t}\n\n\t\t\trows.push(row);\n\t\t}\n\n\t\tcsv.exportFile(\"Meter Table\", rows);\n\t}\n\n\trender() {\n\t\tlet {\n\t\t\tlsDevice,\n\t\t\tisSortByDeviceIDAsc,\n\t\t\tisSortByDeviceIDDesc,\n\t\t\tisSortByStatusActive,\n\t\t\tisSortByStatusInactive,\n\t\t\tisSortByDateActivatedAsc,\n\t\t\tisSortByDateActivatedDesc,\n\t\t\tsearchText,\n\t\t\tisModalAddMeterOpen,\n\t\t\tisModalConfirmAddMeterOpen,\n\t\t\tisModalConfirmEditMeterOpen,\n\t\t\tisModalConfirmDeleteMeterOpen,\n\t\t\tbuilding,\n\t\t\tfloor,\n\t\t\tlocation,\n\t\t\tsite,\n\t\t\tbrandModel,\n\t\t\tsystem,\n\t\t\tactivatedDate,\n\t\t\tlsBuilding,\n\t\t\tlsSystem,\n\t\t\tdeviceIDEdit,\n\t\t\tdeviceID,\n\t\t\tlsPermission,\n\t\t} = this.state;\n\n\t\tconst { t } = this.props;\n\n\t\tlet lsDeviceDisplay = lsDevice.slice();\n\n\t\tif (isSortByDeviceIDAsc) {\n\t\t\tlsDeviceDisplay.sort((a, b) => (a.id > b.id ? 1 : b.id > a.id ? -1 : 0));\n\t\t} else if (isSortByDeviceIDDesc) {\n\t\t\tlsDeviceDisplay.sort((a, b) => (a.id > b.id ? -1 : b.id > a.id ? 1 : 0));\n\t\t} else if (isSortByStatusActive) {\n\t\t\tlsDeviceDisplay.sort((a, b) =>\n\t\t\t\ta.is_active === 1 ? -1 : a.is_active === 0 ? 1 : 0\n\t\t\t);\n\t\t} else if (isSortByStatusInactive) {\n\t\t\tlsDeviceDisplay.sort((a, b) =>\n\t\t\t\ta.is_active === 0 ? -1 : a.is_active === 1 ? 1 : 0\n\t\t\t);\n\t\t} else if (isSortByDateActivatedAsc) {\n\t\t\tlsDeviceDisplay.sort(\n\t\t\t\t(a, b) =>\n\t\t\t\t\tnew Date(a.activated_datetime).getTime() -\n\t\t\t\t\tnew Date(b.activated_datetime).getTime()\n\t\t\t);\n\t\t} else if (isSortByDateActivatedDesc) {\n\t\t\tlsDeviceDisplay.sort(\n\t\t\t\t(a, b) =>\n\t\t\t\t\tnew Date(b.activated_datetime).getTime() -\n\t\t\t\t\tnew Date(a.activated_datetime).getTime()\n\t\t\t);\n\t\t}\n\n\t\tif (searchText.length > 0) {\n\t\t\tlsDeviceDisplay = lsDeviceDisplay.filter((device) => {\n\t\t\t\tfor (let [, value] of Object.entries(device)) {\n\t\t\t\t\tif (value !== null) {\n\t\t\t\t\t\tif (t(value).toString().includes(searchText)) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t});\n\t\t}\n\n\t\tif (deviceIDEdit.length > 0 && deviceID.length === 0) {\n\t\t\tdeviceID = deviceIDEdit;\n\t\t}\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t{t(\"Device Manager\")}\n\t\t\t\t\t\t{lsPermission.find((p) => p.label === \"Export Information\") ? (\n\t\t\t\t\t\t\t this.exportTable()}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t)}\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{\" \"}\n\t\t\t\t\t\t\t{t(\"Add Meter\")}\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{t(\"device.Meter\")} ID\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{deviceIDEdit !== \"\" ? (\n\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{t(\"Status\")}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{t(\"Activated Date\")}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{lsDeviceDisplay.map((device) => (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{deviceIDEdit === device.id ? (\n\t\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\n\t\t\t\t\t
{t(\"Building\")}{t(\"Floor\")}{t(\"Location\")}{t(\"Site\")}{t(\"Brand / Model\")}{t(\"System\")}
{device.id}\n\t\t\t\t\t\t\t\t\t\t{deviceIDEdit === device.id ? (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t{lsBuilding.map((building) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\tt(device.building)\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{deviceIDEdit === device.id ? (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\tdevice.floor\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{deviceIDEdit === device.id ? (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\tdevice.location\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{deviceIDEdit === device.id ? (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\tdevice.site\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{deviceIDEdit === device.id ? (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\tdevice.brand_model\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{deviceIDEdit === device.id ? (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t{lsSystem.map((system) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\tt(device.system)\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{deviceIDEdit === device.id ? (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\tdateFormatter.ddmmyyyy(\n\t\t\t\t\t\t\t\t\t\t\t\tnew Date(device.activated_datetime)\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{deviceIDEdit === device.id ? (\n\t\t\t\t\t\t\t\t\t\t\t this.toggleModalConfirmEditMeter()}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t this.setMeterEditMode(device.id)}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{deviceIDEdit === device.id ? (\n\t\t\t\t\t\t\t\t\t\t\t this.setMeterEditMode(\"\")}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.toggleModalConfirmDeleteMeter(device.id)\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{t(\"Add Meter\")}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{lsBuilding.map((building) => (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{t(\"Activated Date\")}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{lsSystem.map((system) => (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{t(\"Add\")}\n\t\t\t\t\t\t{\" \"}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{t(\"Confirm Add Meter\")}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{\" \"}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{t(\"Confirm Edit Meter\")}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{\" \"}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{t(\"Confirm Delete Meter\")}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{\" \"}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t);\n\t}\n}\n\nexport default withTranslation()(DeviceManager);\n","import React from \"react\";\n\nimport \"./ActivityLog.css\";\nimport { Container, Row, Col, Input, Label, Table } from \"reactstrap\";\nimport { IoMdSearch } from \"react-icons/io\";\nimport { RiFileExcel2Fill } from \"react-icons/ri\";\n\nimport http from \"../../../utils/http\";\nimport dateFormatter from \"../../../utils/dateFormatter\";\nimport csv from \"../../../utils/csv\";\n\nimport { withTranslation } from \"react-i18next\";\n\nclass ActivityLog extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n lsActivity: [],\n dateFrom: new Date(new Date().setHours(0, 0, 0, 0)),\n dateTo: new Date(),\n isSortByTimestampAsc: false,\n searchText: this.props.location.username\n ? this.props.location.username\n : \"\",\n lsPermission: JSON.parse(localStorage.getItem(\"lsPermission\")),\n };\n\n this.handleChangeDateTo = this.handleChangeDateTo.bind(this);\n this.handleChangeDateFrom = this.handleChangeDateFrom.bind(this);\n this.handleInputChange = this.handleInputChange.bind(this);\n this.toggleSortByTimestamp = this.toggleSortByTimestamp.bind(this);\n this.getActivity = this.getActivity.bind(this);\n this.exportTable = this.exportTable.bind(this);\n }\n\n componentDidMount() {\n this.getActivity();\n }\n\n async getActivity() {\n try {\n let { dateFrom, dateTo } = this.state;\n let payload = {\n from: dateFrom,\n to: dateTo,\n };\n\n let resp = await http.post(\"/activity/\", payload);\n\n this.setState({ lsActivity: resp.data });\n } catch (err) {\n console.log(err);\n return err.response;\n }\n }\n\n handleChangeDateFrom(e) {\n let { dateTo } = this.state;\n let dateFrom = e.target.value;\n\n if (new Date(dateFrom).getTime() > new Date(dateTo).getTime()) {\n alert(\"Date From must be before date To.\");\n return;\n }\n\n this.setState({\n dateFrom: dateFrom,\n });\n }\n\n handleChangeDateTo(e) {\n let { dateFrom } = this.state;\n let dateTo = e.target.value;\n\n if (new Date(dateFrom).getTime() > new Date(dateTo).getTime()) {\n alert(\"Date To must be after date From.\");\n return;\n }\n\n this.setState({\n dateTo: dateTo,\n });\n }\n\n handleInputChange(e) {\n this.setState({ [e.target.name]: e.target.value });\n }\n\n toggleSortByTimestamp() {\n this.setState((prevState) => ({\n isSortByTimestampAsc: !prevState.isSortByTimestampAsc,\n }));\n }\n\n exportTable() {\n let rows = [];\n let tableRows = document.querySelectorAll(\"table tr\");\n\n for (let i = 0; i < tableRows.length; i++) {\n let row = [];\n let cols = tableRows[i].querySelectorAll(\"td, th\");\n\n for (let j = 0; j < cols.length; j++) {\n row.push(cols[j].innerText);\n }\n\n rows.push(row);\n }\n\n csv.exportFile(\"Activity Log\", rows);\n }\n\n render() {\n let {\n lsActivity,\n dateFrom,\n dateTo,\n searchText,\n isSortByTimestampAsc,\n lsPermission,\n } = this.state;\n\n const { t } = this.props;\n\n let lsActivityDisplay = lsActivity.slice();\n\n if (isSortByTimestampAsc) {\n lsActivityDisplay.sort(\n (a, b) =>\n new Date(a.datetime).getTime() - new Date(b.datetime).getTime()\n );\n } else {\n lsActivityDisplay.sort(\n (a, b) =>\n new Date(b.datetime).getTime() - new Date(a.datetime).getTime()\n );\n }\n\n if (searchText.length > 0) {\n lsActivityDisplay = lsActivityDisplay.filter((activity) => {\n return (\n activity.username.includes(searchText) ||\n t(activity.user_type).includes(searchText) ||\n t(activity.action).includes(searchText) ||\n dateFormatter\n .ddmmyyyyhhmm(new Date(activity.datetime))\n .includes(searchText)\n );\n });\n }\n\n return (\n
\n \n \n {t(\"Activity Log\")}\n \n \n {lsPermission.find((p) => p.label === \"Export Information\") ? (\n \n ) : (\n <>\n )}\n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n \n \n \n \n {t(\"Datetime\")}\n \n \n \n \n \n \n \n {lsActivityDisplay.map((act) => (\n \n \n \n \n \n \n ))}\n \n
{t(\"Username\")}{t(\"User Type\")}{t(\"Action\")}
\n {dateFormatter.ddmmyyyyhhmm_noOffset(\n new Date(act.datetime)\n )}\n {act.username}{t(act.user_type)}{t(act.action)}
\n
\n
\n );\n }\n}\n\nexport default withTranslation()(ActivityLog);\n","import React from \"react\";\n\nimport \"./UserManagement.css\";\nimport { Container, Row, Table, Form, FormGroup, Input } from \"reactstrap\";\nimport { RiFileExcel2Fill } from \"react-icons/ri\";\nimport { FaEye } from \"react-icons/fa\";\nimport { IoMdSearch } from \"react-icons/io\";\n\nimport http from \"../../../utils/http\";\nimport dateFormatter from \"../../../utils/dateFormatter\";\nimport csv from \"../../../utils/csv\";\n\nimport { withTranslation } from \"react-i18next\";\n\nclass UserManagement extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n lsUser: [],\n isSortByUsernameAsc: false,\n isSortByUsernameDesc: false,\n isSortByDateActivatedAsc: false,\n isSortByDateActivatedDesc: false,\n isSortByDateLastLoginAsc: false,\n isSortByDateLastLoginDesc: false,\n searchText: \"\",\n lsPermission: JSON.parse(localStorage.getItem(\"lsPermission\")),\n };\n\n this.getAllUser = this.getAllUser.bind(this);\n this.toggleSortByUsername = this.toggleSortByUsername.bind(this);\n this.toggleSortByActivatedDate = this.toggleSortByActivatedDate.bind(this);\n this.toggleSortByLastLoginDate = this.toggleSortByLastLoginDate.bind(this);\n this.handleInputChange = this.handleInputChange.bind(this);\n this.navigateToUserProfile = this.navigateToUserProfile.bind(this);\n this.navigateToActivityLog = this.navigateToActivityLog.bind(this);\n this.exportTable = this.exportTable.bind(this);\n }\n\n componentDidMount() {\n this.getAllUser();\n }\n\n async getAllUser() {\n try {\n let resp = await http.get(\"/user/all\");\n\n this.setState({ lsUser: resp.data });\n } catch (err) {\n console.log(err);\n alert(\"Unable to activate. Please try again.\");\n return err.response;\n }\n }\n\n toggleSortByUsername() {\n let { isSortByUsernameAsc, isSortByUsernameDesc } = this.state;\n\n if (!(isSortByUsernameAsc || isSortByUsernameDesc)) {\n this.setState({\n isSortByUsernameAsc: true,\n isSortByDateActivatedAsc: false,\n isSortByDateActivatedDesc: false,\n isSortByDateLastLoginAsc: false,\n isSortByDateLastLoginDesc: false,\n });\n } else if (isSortByUsernameAsc) {\n this.setState({\n isSortByUsernameDesc: true,\n isSortByUsernameAsc: false,\n isSortByDateActivatedAsc: false,\n isSortByDateActivatedDesc: false,\n isSortByDateLastLoginAsc: false,\n isSortByDateLastLoginDesc: false,\n });\n } else if (isSortByUsernameDesc) {\n this.setState({\n isSortByUsernameAsc: true,\n isSortByUsernameDesc: false,\n isSortByDateActivatedAsc: false,\n isSortByDateActivatedDesc: false,\n isSortByDateLastLoginAsc: false,\n isSortByDateLastLoginDesc: false,\n });\n }\n }\n\n toggleSortByActivatedDate() {\n let { isSortByDateActivatedAsc, isSortByDateActivatedDesc } = this.state;\n\n if (!(isSortByDateActivatedAsc || isSortByDateActivatedDesc)) {\n this.setState({\n isSortByDateActivatedAsc: true,\n isSortByDateActivatedDesc: false,\n isSortByUsernameDesc: false,\n isSortByUsernameAsc: false,\n isSortByDateLastLoginAsc: false,\n isSortByDateLastLoginDesc: false,\n });\n } else if (isSortByDateActivatedAsc) {\n this.setState({\n isSortByDateActivatedDesc: true,\n isSortByDateActivatedAsc: false,\n isSortByUsernameDesc: false,\n isSortByUsernameAsc: false,\n isSortByDateLastLoginAsc: false,\n isSortByDateLastLoginDesc: false,\n });\n } else if (isSortByDateActivatedDesc) {\n this.setState({\n isSortByDateActivatedAsc: true,\n isSortByDateActivatedDesc: false,\n isSortByUsernameAsc: false,\n isSortByUsernameDesc: false,\n isSortByDateLastLoginAsc: false,\n isSortByDateLastLoginDesc: false,\n });\n }\n }\n\n toggleSortByLastLoginDate() {\n let { isSortByDateLastLoginAsc, isSortByDateLastLoginDesc } = this.state;\n\n if (!(isSortByDateLastLoginAsc || isSortByDateLastLoginDesc)) {\n this.setState({\n isSortByDateLastLoginAsc: true,\n isSortByDateLastLoginDesc: false,\n isSortByDateActivatedAsc: false,\n isSortByDateActivatedDesc: false,\n isSortByUsernameDesc: false,\n isSortByUsernameAsc: false,\n });\n } else if (isSortByDateLastLoginAsc) {\n this.setState({\n isSortByDateLastLoginDesc: true,\n isSortByDateLastLoginAsc: false,\n isSortByDateActivatedDesc: false,\n isSortByDateActivatedAsc: false,\n isSortByUsernameDesc: false,\n isSortByUsernameAsc: false,\n });\n } else if (isSortByDateLastLoginDesc) {\n this.setState({\n isSortByDateLastLoginAsc: true,\n isSortByDateLastLoginDesc: false,\n isSortByDateActivatedAsc: false,\n isSortByDateActivatedDesc: false,\n isSortByUsernameAsc: false,\n isSortByUsernameDesc: false,\n });\n }\n }\n\n handleInputChange(e) {\n this.setState({ [e.target.name]: e.target.value });\n }\n\n navigateToUserProfile(username) {\n this.props.history.push({ pathname: \"edit-profile/\" + username });\n }\n\n navigateToActivityLog(username, e) {\n this.props.history.push({ pathname: \"activity-log/\", username: username });\n e.stopPropagation();\n }\n\n exportTable() {\n let rows = [];\n let tableRows = document.querySelectorAll(\"table tr\");\n\n for (let i = 0; i < tableRows.length; i++) {\n let row = [];\n let cols = tableRows[i].querySelectorAll(\"td, th\");\n\n for (let j = 0; j < cols.length - 1; j++) {\n row.push(cols[j].innerText);\n }\n\n rows.push(row);\n }\n\n csv.exportFile(\"User Management\", rows);\n }\n\n render() {\n let {\n lsUser,\n isSortByUsernameAsc,\n isSortByUsernameDesc,\n isSortByDateActivatedAsc,\n isSortByDateActivatedDesc,\n isSortByDateLastLoginAsc,\n isSortByDateLastLoginDesc,\n searchText,\n lsPermission,\n } = this.state;\n\n const { t } = this.props;\n\n let lsUserDisplay = lsUser.slice();\n\n if (isSortByUsernameAsc) {\n lsUserDisplay.sort((a, b) =>\n a.username > b.username ? 1 : b.username > a.username ? -1 : 0\n );\n } else if (isSortByUsernameDesc) {\n lsUserDisplay.sort((a, b) =>\n a.username > b.username ? -1 : b.username > a.username ? 1 : 0\n );\n } else if (isSortByDateActivatedAsc) {\n lsUserDisplay.sort(\n (a, b) =>\n new Date(a.activated_timestamp).getTime() -\n new Date(b.activated_timestamp).getTime()\n );\n } else if (isSortByDateActivatedDesc) {\n lsUserDisplay.sort(\n (a, b) =>\n new Date(b.activated_timestamp).getTime() -\n new Date(a.activated_timestamp).getTime()\n );\n } else if (isSortByDateLastLoginAsc) {\n lsUserDisplay.sort(\n (a, b) =>\n new Date(a.last_login_timestamp).getTime() -\n new Date(b.last_login_timestamp).getTime()\n );\n } else if (isSortByDateLastLoginDesc) {\n lsUserDisplay.sort(\n (a, b) =>\n new Date(b.last_login_timestamp).getTime() -\n new Date(a.last_login_timestamp).getTime()\n );\n }\n\n if (searchText.length > 0) {\n lsUserDisplay = lsUserDisplay.filter((user, index) => {\n return (\n user.username.includes(searchText) ||\n user.email.includes(searchText) ||\n user.user_type.includes(searchText) ||\n dateFormatter\n .ddmmyyyy(new Date(user.activated_timestamp))\n .includes(searchText) ||\n dateFormatter\n .ddmmyyyy(new Date(user.last_login_timestamp))\n .includes(searchText)\n );\n });\n }\n\n return (\n
\n \n {t(\"User Management\")}{\" \"}\n {lsPermission.find((p) => p.label === \"Export Information\") ? (\n \n ) : (\n <>\n )}\n \n \n \n
\n \n \n \n \n \n \n
\n
\n \n \n \n \n {t(\"Username\")}{\" \"}\n \n \n \n \n {t(\"Activated Date\")}\n \n \n {t(\"Last Login\")}\n \n \n \n \n \n {lsUserDisplay.map((user) => (\n this.navigateToUserProfile(user.username)}>\n \n \n \n \n \n \n \n \n \n ))}\n \n
{t(\"Email\")}{t(\"User Type\")}{t(\"View Activity Log\")}
{user.username}{user.email}\n {t(`${user.user_type}`)}\n {user.is_user_type_approved ? \"\" : ` (${t(\"Pending\")})`}\n \n {dateFormatter.ddmmyyyy(new Date(user.activated_timestamp))}\n \n {dateFormatter.ddmmyyyy(\n new Date(user.last_login_timestamp)\n )}\n
\n
\n
\n );\n }\n}\n\nexport default withTranslation()(UserManagement);\n","import React from \"react\";\n\nimport \"./SetPermission.css\";\nimport { Row, Col, Container, Table, Input } from \"reactstrap\";\n\nimport http from \"../../../utils/http\";\n\nimport { withTranslation } from \"react-i18next\";\n\nclass SetPermission extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t\tlsUserTypePermission: [],\n\t\t\tlsPermission: [],\n\t\t\tlsUserType: [],\n\t\t};\n\n\t\tthis.getAllUserType = this.getAllUserType.bind(this);\n\t\tthis.getAllPermission = this.getAllPermission.bind(this);\n\t\tthis.getAllUserTypePermission = this.getAllUserTypePermission.bind(this);\n\t\tthis.updateUserTypePermission = this.updateUserTypePermission.bind(this);\n\t}\n\n\tcomponentDidMount() {\n\t\tthis.getAllUserType();\n\t\tthis.getAllPermission();\n\t\tthis.getAllUserTypePermission();\n\t}\n\n\tasync getAllUserType() {\n\t\ttry {\n\t\t\tlet resp = await http.get(\"/user/user-type/all\");\n\n\t\t\tlet lsUserType = resp.data;\n\t\t\tlsUserType.sort(function (a, b) {\n\t\t\t\treturn a.id - b.id;\n\t\t\t});\n\t\t\tlsUserType.splice(0, 1);\n\n\t\t\tthis.setState({ lsUserType: lsUserType });\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t}\n\t}\n\n\tasync getAllPermission() {\n\t\ttry {\n\t\t\tlet resp = await http.get(\"/permission/all\");\n\n\t\t\tlet lsPermission = resp.data;\n\n\t\t\tthis.setState({ lsPermission: lsPermission });\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t}\n\t}\n\n\tasync getAllUserTypePermission() {\n\t\ttry {\n\t\t\tlet resp = await http.get(\"/permission/user-type\");\n\n\t\t\tlet lsUserTypePermission = resp.data;\n\n\t\t\tthis.setState({ lsUserTypePermission: lsUserTypePermission });\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t}\n\t}\n\n\tasync updateUserTypePermission(userTypeID, permissionID) {\n\t\ttry {\n\t\t\tlet payload = { user_type_id: userTypeID, permission_id: permissionID };\n\n\t\t\tlet resp = await http.post(\"/permission/update\", payload);\n\n\t\t\tif (resp.status === 200) {\n\t\t\t\tthis.getAllUserTypePermission();\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconsole.log(err);\n\t\t}\n\t}\n\n\trender() {\n\t\tlet { lsUserTypePermission, lsPermission, lsUserType } = this.state;\n\n\t\tconst { t } = this.props;\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{t(\"Set Permission\")}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{lsUserType.map((userType) => (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{lsPermission.map((permission) => (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{lsUserType.map((userType) => (\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\n\t\t\t\t\t
{t(userType.label)}
{t(permission.label)}\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tuserTypePermission.user_type_id === userType.id &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tuserTypePermission.permission_id === permission.id\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? true\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: false\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\t\t\t\t\t\t\tthis.updateUserTypePermission(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tuserType.id,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tpermission.id\n\t\t\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n}\n\nexport default withTranslation()(SetPermission);\n","import React from \"react\";\nimport \"./App.css\";\n\nimport { BrowserRouter as Router, Route, Switch } from \"react-router-dom\";\n\nimport NavBar from \"./components/NavBar/Navbar\";\nimport Home from \"./components/Home/Home\";\nimport Login from \"./components/Login/Login\";\nimport Building from \"./components/Building/Building\";\nimport Dashboard from \"./components/Dashboard/Dashboard\";\nimport Report from \"./components/Report/Report\";\nimport Meter from \"./components/Meter/Meter\";\nimport Footer from \"./components/Footer/Footer\";\nimport ScrollToTop from \"./ScrollToTop\";\nimport ForgotPassword from \"./components/ForgotPassword/ForgotPassword\";\nimport Register from \"./components/Register/Register\";\nimport EditProfile from \"./components/User/EditProfile/EditProfile\";\nimport SetTarget from \"./components/User/SetTarget/SetTarget\";\nimport DeviceManager from \"./components/User/DeviceManager/DeviceManager\";\nimport ActivityLog from \"./components/User/ActivityLog/ActivityLog\";\nimport UserManagement from \"./components/User/UserManagement/UserManagement\";\nimport SetPermission from \"./components/User/SetPermission/SetPermission\";\n\nimport i18n from \"./i18n\";\nimport { withTranslation } from \"react-i18next\";\n\nclass App extends React.Component {\n render() {\n const { t } = this.props;\n\n return (\n
\n
\n i18n.changeLanguage(\"th\")}>{t(\"TH\")}|\n i18n.changeLanguage(\"en\")}>{t(\"ENG\")}\n
\n \n \n
\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n
\n );\n }\n}\n\nexport default withTranslation()(App);\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport \"./index.css\";\nimport reportWebVitals from \"./reportWebVitals\";\nimport \"bootstrap/dist/css/bootstrap.min.css\";\nimport App from \"./App\";\n\nif (process.env.REACT_APP_NODE_ENV === \"production\") {\n\tconsole.log = console.warn = console.error = () => {};\n}\n\nReactDOM.render(, document.getElementById(\"root\"));\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n","const lsMonth = [\n\t\"JAN\",\n\t\"FEB\",\n\t\"MAR\",\n\t\"APR\",\n\t\"MAY\",\n\t\"JUN\",\n\t\"JUL\",\n\t\"AUG\",\n\t\"SEP\",\n\t\"OCT\",\n\t\"NOV\",\n\t\"DEC\",\n];\n\nconst lsMonthFull = [\n\t\"January\",\n\t\"February\",\n\t\"March\",\n\t\"April\",\n\t\"May\",\n\t\"June\",\n\t\"July\",\n\t\"August\",\n\t\"September\",\n\t\"October\",\n\t\"November\",\n\t\"December\",\n];\n\nmodule.exports = { lsMonth, lsMonthFull };\n"],"sourceRoot":""}