diff --git a/.env b/.env index 7c3a28b..77602a0 100644 --- a/.env +++ b/.env @@ -1,2 +1,2 @@ -# REACT_APP_API_PATH=http://localhost:3000/ -REACT_APP_API_PATH=https://br-ipti-beneficiarios.azurewebsites.net/ \ No newline at end of file +REACT_APP_API_PATH=http://localhost:3000/ +# REACT_APP_API_PATH=https://br-ipti-beneficiarios.azurewebsites.net/ \ No newline at end of file diff --git a/src/Assets/images/report-svgrepo-com.svg b/src/Assets/images/report-svgrepo-com.svg new file mode 100644 index 0000000..88495cf --- /dev/null +++ b/src/Assets/images/report-svgrepo-com.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Assets/images/report.svg b/src/Assets/images/report.svg new file mode 100644 index 0000000..c886184 --- /dev/null +++ b/src/Assets/images/report.svg @@ -0,0 +1 @@ +Report by Vector Place on IconScout \ No newline at end of file diff --git a/src/Pages/Classroom/ClassroomOne/Report/index.tsx b/src/Pages/Classroom/ClassroomOne/Report/index.tsx index 4a5fa57..8b719c6 100644 --- a/src/Pages/Classroom/ClassroomOne/Report/index.tsx +++ b/src/Pages/Classroom/ClassroomOne/Report/index.tsx @@ -1,100 +1,108 @@ -import { Tooltip } from "primereact/tooltip" -import { Container } from "../../../../Styles/styles" -import { DataTable } from "primereact/datatable" -import { Column } from "primereact/column" -import { Button } from "primereact/button" -import { useRef } from "react" -import data from "./../../../../Data/students.json" - - -interface ColumnMeta { - field: string; - header: string; -} +import { Tooltip } from "primereact/tooltip"; +import { Container } from "../../../../Styles/styles"; +import { DataTable } from "primereact/datatable"; +import { Column } from "primereact/column"; +import { Button } from "primereact/button"; +import { useRef } from "react"; +import Present from "../../../../Assets/images/status-approved.svg"; +import NotPresent from "../../../../Assets/images/status-desapproved.svg"; +import { useFetchRequestClassroomReport } from "../../../../Services/Classroom/query"; +import { useParams } from "react-router-dom"; + +import html2canvas from "html2canvas"; +import jsPDF from "jspdf"; const Report = () => { - return ( - - ) -} + return ; +}; const ReportPage = () => { + const { id } = useParams(); - const dt = useRef(null); + const contentRef = useRef(null); - const cols: ColumnMeta[] = [ - { field: 'category', header: 'Category' }, - { field: 'quantity', header: 'Quantity' } - ]; + const generatePDF = () => { + if (!contentRef.current) return; - // const exportColumns = cols.map((col) => ({ title: col.header, dataKey: col.field })); + const elementToCapture = contentRef.current; + html2canvas(elementToCapture).then((canvas) => { + const pdf = new jsPDF("p", "mm", "a4"); - // const exportCSV = (selectionOnly: any) => { - // dt.current.exportCSV({ selectionOnly }); - // }; + const imgData = canvas.toDataURL("image/png"); + const imgWidth = 210; + const imgHeight = (canvas.height * imgWidth) / canvas.width; + pdf.addImage(imgData, "PNG", 0, 0, imgWidth, imgHeight); - const exportPdf = () => { - import('jspdf').then((jsPDF) => { - import('jspdf-autotable').then(() => { - // const doc = new jsPDF.default(0, 0); + pdf.save(`Relatorio_turma.pdf`); + }); + }; - // doc.autoTable(exportColumns, products); - // doc.save('products.pdf'); - }); - }); - }; + const { data } = useFetchRequestClassroomReport(parseInt(id!)); - const exportExcel = () => { - import('xlsx').then((xlsx) => { - const worksheet = xlsx.utils.json_to_sheet(data); - const workbook = { Sheets: { data: worksheet }, SheetNames: ['data'] }; - const excelBuffer = xlsx.write(workbook, { - bookType: 'xlsx', - type: 'array' - }); - - saveAsExcelFile(excelBuffer, 'products'); - }); + const bodyMeeting = (rowData: any, options: any) => { + const verifyFouls = () => { + const verify = data?.meeting[ + parseInt(options?.column.props.columnKey) + ]?.fouls?.find( + (props: any) => props.registration_fk === rowData.registration_fk + ); + return verify; }; - - const saveAsExcelFile = (buffer: any, fileName: any) => { - import('file-saver').then((module) => { - if (module && module.default) { - let EXCEL_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8'; - let EXCEL_EXTENSION = '.xlsx'; - const data = new Blob([buffer], { - type: EXCEL_TYPE - }); - - module.default.saveAs(data, fileName + '_export_' + new Date().getTime() + EXCEL_EXTENSION); - } - }); - } - - const header = ( -
- {/*
- ); - return ( - -
- - - - {cols.map((col, index) => ( - <> - - - ))} - - -
-
- ) -} - -export default Report \ No newline at end of file + return ; + }; + + const bodyTotal = (rowData: any) => { + const verifyFouls = () => { + var count = 0; + for (const meeting of data?.meeting) { + const verify = meeting?.fouls?.find( + (props: any) => props.registration_fk === rowData.registration_fk + ); + + if (verify) { + count++; + } + } + + return (count !== 0 ? count / data.meeting.length : 1) * 100; + }; + return

{verifyFouls()}%

; + }; + + const header = ( +
+
+ ); + return ( + + + + {data?.meeting?.map((item: any, index: number) => ( + + ))} + + + + ); +}; + +export default Report; diff --git a/src/Pages/Classroom/ClassroomOne/index.tsx b/src/Pages/Classroom/ClassroomOne/index.tsx index 72dc96a..9ed8905 100644 --- a/src/Pages/Classroom/ClassroomOne/index.tsx +++ b/src/Pages/Classroom/ClassroomOne/index.tsx @@ -3,6 +3,8 @@ import { Button } from "primereact/button"; import { useContext, useState } from "react"; import { useNavigate, useParams } from "react-router-dom"; import pessoas from "../../../Assets/images/pessoasgray.svg"; + +import report from "../../../Assets/images/report-svgrepo-com.svg"; import meeting from "../../../Assets/images/school_teacher.svg"; import TextInput from "../../../Components/TextInput"; @@ -33,7 +35,7 @@ const ClassroomOnePage = () => { const props = useContext(ClassroomContext) as ClassroomTypes; const { data: classroom } = useFetchRequestClassroomOne(parseInt(id!)); const [edit, setEdit] = useState(false); - const [visible, setVisible] = useState(false) + const [visible, setVisible] = useState(false); const propsAplication = useContext( AplicationContext @@ -41,7 +43,6 @@ const ClassroomOnePage = () => { if (props.isLoading) return ; - return ( {edit ? ( @@ -87,12 +88,24 @@ const ClassroomOnePage = () => {

{classroom?.name}

- {propsAplication.user?.role === (ROLE.ADMIN || ROLE.COORDINATORS) && ( -