import Fab from '@mui/material/Fab'; import FormControl from '@mui/material/FormControl'; import InputLabel from '@mui/material/InputLabel'; import MenuItem from '@mui/material/MenuItem'; import Select, { SelectChangeEvent } from '@mui/material/Select'; import { GetServerSideProps } from 'next'; import Head from 'next/head'; import { parseCookies } from 'nookies'; import React, { useContext, useEffect, useState } from 'react' import BasicButton from '../../components/buttons/basicButton/BasicButton'; import { LineBarChart } from '../../components/graph/LineBarChart'; import LineChart from '../../components/graph/LineChart'; import Header from '../../components/header/Header' import PageTitle from '../../components/pageTitle/PageTitle'; import { api } from '../../services/api'; import getAPIClient from '../../services/ssrApi'; import { PldGraphView, PldTableMinMaxView, PldTableView, TableHeader } from '../../styles/layouts/pld/PldView' import RenderIf from '../../utils/renderIf' import Tabs from '@mui/material/Tabs'; import Tab from '@mui/material/Tab'; import NavigationIcon from '@mui/icons-material/Navigation'; import TextField from '@mui/material/TextField'; import { DesktopDatePicker } from '@mui/x-date-pickers/DesktopDatePicker'; import { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFns'; import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider'; import { MenuContext } from '../../contexts/menu/MenuContext'; interface pldInterface { tableData: any, graphByHourData: any, graphByMonthData: any userName: string, clientMonth: any } export default function pld({tableData, userName, clientMonth}: pldInterface) { const { pldMenu, setPldMenu } = useContext(MenuContext) const dateFormated = new Date() const year_Month = `0${dateFormated.getMonth()+1}/${dateFormated.getFullYear()}` const [date, setDate] = useState(new Date()); const [select, setSelect] = useState('SUDESTE'); // rendering page const [month, setMonth] = useState(new Date().toLocaleDateString().slice(3, 10)) const [dataByDay, setDataByDay] = useState([]) const [sul, setSul] = useState([]) const [norte, setNorte] = useState([]) const [sudeste, setSudeste] = useState([]) const [nordeste, setNordeste] = useState([]) const [ pageYPosition, setPageYPosition ] = useState(0); function getPageYAfterScroll(){ setPageYPosition(window.scrollY); } const handleChange = (event: SelectChangeEvent) => { setSelect(event.target.value); }; const handleChangeDay = (event: SelectChangeEvent) => { setMonth(event.target.value); }; const handleChangeDate = (newValue: Date | null) => { setDate(newValue) }; function getDataByDay() { api.post('/pld/daily', { "filters": [ {"type" : "=", "field" : "year_month_formatted", "value": month, "row": true}, {"type" : "=", "field" : "submarket", "value": select} ], "order": [{ "field": "day_calc", "direction": "asc" }] }).then(res => { setDataByDay(res.data.data) }).catch(exception => { // console.log(exception) }) } function getDataByHour() { api.post('/pld/schedule', { "limit": 20, "offset": 0, "filters": [ {"type" : "=", "field" : "dia_num", "value": date.toLocaleDateString().split('/').reverse().join('-'), "row": true}, {"type" : "=", "field" : "submercado", "value": "SUL"} ], "order": [{ "field": "hour", "direction": "asc" }] }).then(res => { setSul(res.data.data) }).catch(exception => { // console.log(exception) }) api.post('/pld/schedule', { "limit": 20, "offset": 0, "filters": [ {"type" : "=", "field" : "dia_num", "value": date.toLocaleDateString().split('/').reverse().join('-'), "row": true}, {"type" : "=", "field" : "submercado", "value": "SUDESTE"} ], "order": [{ "field": "hour", "direction": "asc" }] }).then(res => { setSudeste(res.data.data) }).catch(exception => { // console.log(exception) }) api.post('/pld/schedule', { "limit": 20, "offset": 0, "filters": [ {"type" : "=", "field" : "dia_num", "value": date.toLocaleDateString().split('/').reverse().join('-'), "row": true}, {"type" : "=", "field" : "submercado", "value": "NORTE"} ], "order": [{ "field": "hour", "direction": "asc" }] }).then(res => { setNorte(res.data.data) }).catch(exception => { // console.log(exception) }) api.post('/pld/schedule', { "limit": 20, "offset": 0, "filters": [ {"type" : "=", "field" : "dia_num", "value": date.toLocaleDateString().split('/').reverse().join('-'), "row": true}, {"type" : "=", "field" : "submercado", "value": "NORDESTE"} ], "order": [{ "field": "hour", "direction": "asc" }] }).then(res => { setNordeste(res.data.data) }).catch(exception => { // console.log(exception) }) } function handleColor(value, region) { if (value <= tableData.result[1].norte_min) return '' else if (value >= tableData.result[0][`${region}_max`]) return '' else if (tableData.result[0][`${region}_max`] - value > tableData.result[0][`${region}_max`]/2) return '' else if (tableData.result[1][`${region}_min`] - value <= tableData.result[1][`${region}_min`]) return '' } function downloadCSVFile(csv, filename) { const csv_file = new Blob(["\ufeff",csv], {type: "text/csv"}); const download_link = document.createElement("a"); download_link.download = filename; download_link.href = window.URL.createObjectURL(csv_file); download_link.style.display = "none"; document.body.appendChild(download_link); download_link.click(); } function htmlToCSV(html, filename) { const data = []; const rows = document.querySelectorAll("table tr"); // const rows = document.getElementsByClassName('tabela'); for (let i = rows.length/2; i < rows.length; i++) { const row = [], cols: any = rows[i].querySelectorAll("td, th"); for (let j = 0; j < cols.length; j++) { row.push(cols[j].innerText); } data.push(row.join(";")); } downloadCSVFile(data.join("\n"), filename); } useEffect(() => { getDataByHour() getDataByDay() }, [date, month, select]) useEffect(() => { window?.addEventListener('scroll', getPageYAfterScroll); }, []) return (
Smart Energia - PLD
setPldMenu(nv)} aria-label="">
{ const html = document.querySelector("table").outerHTML; htmlToCSV(html, "tabela_PLD.csv"); }} title='Download'/>
{ tableData.data.map(data => { return <> }) }
Mês Nordeste

(R$/MWh)

Norte

(R$/MWh)

Sudeste

(R$/MWh)

Sul

(R$/MWh)

{data.year_month_formatted} {parseFloat(data.nordeste).toLocaleString('pt-br',{currency: 'BRL', minimumFractionDigits: 2, maximumFractionDigits: 2})} {parseFloat(data.norte).toLocaleString('pt-br',{currency: 'BRL', minimumFractionDigits: 2, maximumFractionDigits: 2})} {parseFloat(data.sudeste).toLocaleString('pt-br',{currency: 'BRL', minimumFractionDigits: 2, maximumFractionDigits: 2})} {parseFloat(data.sul).toLocaleString('pt-br',{currency: 'BRL', minimumFractionDigits: 2, maximumFractionDigits: 2})}
{ tableData.result.map((data, index) => { if (index === 0) { return <> } else if (index===1) { return <> } else if (index===2) { return <> } }) }
Máximo {parseFloat(data.nordeste_max).toLocaleString('pt-br',{style: 'currency', currency: 'BRL', minimumFractionDigits: 2, maximumFractionDigits: 2})} {parseFloat(data.norte_max).toLocaleString('pt-br',{style: 'currency', currency: 'BRL', minimumFractionDigits: 2, maximumFractionDigits: 2})} {parseFloat(data.sudeste_max).toLocaleString('pt-br',{style: 'currency', currency: 'BRL', minimumFractionDigits: 2, maximumFractionDigits: 2})} {parseFloat(data.sul_max).toLocaleString('pt-br',{style: 'currency', currency: 'BRL', minimumFractionDigits: 2, maximumFractionDigits: 2})}
Mínimo {parseFloat(data.nordeste_min).toLocaleString('pt-br',{style: 'currency', currency: 'BRL', minimumFractionDigits: 2, maximumFractionDigits: 2})} {parseFloat(data.norte_min).toLocaleString('pt-br',{style: 'currency', currency: 'BRL', minimumFractionDigits: 2, maximumFractionDigits: 2})} {parseFloat(data.sudeste_min).toLocaleString('pt-br',{style: 'currency', currency: 'BRL', minimumFractionDigits: 2, maximumFractionDigits: 2})} {parseFloat(data.sul_min).toLocaleString('pt-br',{style: 'currency', currency: 'BRL', minimumFractionDigits: 2, maximumFractionDigits: 2})}
Desv. Padrão {parseFloat(data.nordeste_desv_pad).toLocaleString('pt-br',{style: 'currency', currency: 'BRL', minimumFractionDigits: 2})} {parseFloat(data.norte_desv_pad).toLocaleString('pt-br',{style: 'currency', currency: 'BRL', minimumFractionDigits: 2})} {parseFloat(data.sudeste_desv_pad).toLocaleString('pt-br',{style: 'currency', currency: 'BRL', minimumFractionDigits: 2})} {parseFloat(data.sul_desv_pad).toLocaleString('pt-br',{style: 'currency', currency: 'BRL', minimumFractionDigits: 2})}
{ tableData.data.map(data => { return <> }) } { tableData.result.map((data, index) => { if (index === 0) { return <> } else if (index===1) { return <> } else if (index===2) { return <> } }) }
Mês Nordeste Norte Sudeste Sul
{data.year_month_formatted} {parseFloat(data.nordeste).toLocaleString('pt-br',{currency: 'BRL', minimumFractionDigits: 2, maximumFractionDigits: 2})} {parseFloat(data.norte).toLocaleString('pt-br',{currency: 'BRL', minimumFractionDigits: 2, maximumFractionDigits: 2})} {parseFloat(data.sudeste).toLocaleString('pt-br',{currency: 'BRL', minimumFractionDigits: 2, maximumFractionDigits: 2})} {parseFloat(data.sul).toLocaleString('pt-br',{currency: 'BRL', minimumFractionDigits: 2, maximumFractionDigits: 2})}
Máximo {parseFloat(data.nordeste_max).toLocaleString('pt-br',{style: 'currency', currency: 'BRL', minimumFractionDigits: 2, maximumFractionDigits: 2})} {parseFloat(data.norte_max).toLocaleString('pt-br',{style: 'currency', currency: 'BRL', minimumFractionDigits: 2, maximumFractionDigits: 2})} {parseFloat(data.sudeste_max).toLocaleString('pt-br',{style: 'currency', currency: 'BRL', minimumFractionDigits: 2, maximumFractionDigits: 2})} {parseFloat(data.sul_max).toLocaleString('pt-br',{style: 'currency', currency: 'BRL', minimumFractionDigits: 2, maximumFractionDigits: 2})}
Mínimo {parseFloat(data.nordeste_min).toLocaleString('pt-br',{style: 'currency', currency: 'BRL', minimumFractionDigits: 2, maximumFractionDigits: 2})} {parseFloat(data.norte_min).toLocaleString('pt-br',{style: 'currency', currency: 'BRL', minimumFractionDigits: 2, maximumFractionDigits: 2})} {parseFloat(data.sudeste_min).toLocaleString('pt-br',{style: 'currency', currency: 'BRL', minimumFractionDigits: 2, maximumFractionDigits: 2})} {parseFloat(data.sul_min).toLocaleString('pt-br',{style: 'currency', currency: 'BRL', minimumFractionDigits: 2, maximumFractionDigits: 2})}
Desv. Padrão {parseFloat(data.nordeste_desv_pad).toLocaleString('pt-br',{style: 'currency', currency: 'BRL', minimumFractionDigits: 2})} {parseFloat(data.norte_desv_pad).toLocaleString('pt-br',{style: 'currency', currency: 'BRL', minimumFractionDigits: 2})} {parseFloat(data.sudeste_desv_pad).toLocaleString('pt-br',{style: 'currency', currency: 'BRL', minimumFractionDigits: 2})} {parseFloat(data.sul_desv_pad).toLocaleString('pt-br',{style: 'currency', currency: 'BRL', minimumFractionDigits: 2})}
{/* grafico de grafico por seleção de data (mês) (diario)*/}
Região Mês
value.mmovel)} data3={dataByDay} dataset1={'Média'} dataset2={'barra1'} dataset3={'Diario'} label={dataByDay.map((value, index) => { return value.day_formatted })} title='' subtitle='' />
{/* grafico de grafico por seleção de data INTEIRA (horario)*/}
{/*

Selecione a data:

*/}
} />
{pageYPosition > 300 && }
) } export const getServerSideProps: GetServerSideProps = async (ctx) => { const apiClient = getAPIClient(ctx) const { ['@smartAuth-token']: token } = parseCookies(ctx) const { ['user-name']: userName } = parseCookies(ctx) let tableData = []; let clientMonth = []; await apiClient.post('/pld/list').then(res => { tableData = res.data }).catch(res => { // console.log(res) }) await apiClient.post('/pld', { "filters": [], "fields": ["mes_ref"], "distinct": true }).then(res => { clientMonth = res.data.data }).catch(res => { // console.log(res) }) if (!token) { return { redirect: { destination: '/', permanent: false } } } return { props: { tableData, userName, clientMonth } } }