diff --git a/src/assets/css/styles.scss b/src/assets/css/styles.scss index e4b081510..65ad41ce2 100644 --- a/src/assets/css/styles.scss +++ b/src/assets/css/styles.scss @@ -120,18 +120,18 @@ body { .p-paginator { background-color: #ffffff !important; - border: 0px; - padding: 2.5em !important; + border: 0; + padding: 2.5em; } .p-paginator-next { - height: 4em !important; - min-width: 4em !important; + height: 4em; + min-width: 4em; } .p-paginator-prev { - height: 4em !important; - min-width: 4em !important; + height: 4em; + min-width: 4em; } .p-paginator-page { diff --git a/src/componentes/escolas/MembrosDaAssociacao/components/CargosDaComposicaoList.js b/src/componentes/escolas/MembrosDaAssociacao/components/CargosDaComposicaoList.js new file mode 100644 index 000000000..30791929b --- /dev/null +++ b/src/componentes/escolas/MembrosDaAssociacao/components/CargosDaComposicaoList.js @@ -0,0 +1,91 @@ +import React from "react"; +import {useGetCargosDaComposicao} from "../hooks/useGetCargosDaComposicao"; +import {DataTable} from "primereact/datatable"; +import {Column} from "primereact/column"; +import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; +import {faEdit} from "@fortawesome/free-solid-svg-icons"; +import ReactTooltip from "react-tooltip"; + +export const CargosDaComposicaoList = () => { + const {isLoading, data} = useGetCargosDaComposicao() + + const acoesTemplate = (rowData) => { + return ( +
+ +
+ ) + }; + + return( + <> + {!isLoading && data && data.diretoria_executiva && +
+

Diretoria executiva

+ + + + + + +
+ } + + {data && data.conselho_fiscal && + +
+

Conselho Fiscal

+ + + + + + +
+ } + + + ) +} \ No newline at end of file diff --git a/src/componentes/escolas/MembrosDaAssociacao/components/MandatoInfo.js b/src/componentes/escolas/MembrosDaAssociacao/components/MandatoInfo.js new file mode 100644 index 000000000..0011f32ed --- /dev/null +++ b/src/componentes/escolas/MembrosDaAssociacao/components/MandatoInfo.js @@ -0,0 +1,23 @@ +import React from "react"; +import {useGetMandatoVigente} from "../hooks/useGetMandatoVigente"; +import useDataTemplate from "../../../../hooks/Globais/useDataTemplate"; + +export const MandatoInfo = () => { + const {isLoading, data} = useGetMandatoVigente() + const dataTemplate = useDataTemplate() + return ( + <> + {!isLoading && data && data.uuid && +
+
+

Mandato

+

+ Período atual: {dataTemplate(null, null, data.data_inicial)} até {dataTemplate(null, null, data.data_final)} +

+
+
+ } + + + ) +} \ No newline at end of file diff --git a/src/componentes/escolas/MembrosDaAssociacao/components/Paginacao.js b/src/componentes/escolas/MembrosDaAssociacao/components/Paginacao.js new file mode 100644 index 000000000..b3cb73d9b --- /dev/null +++ b/src/componentes/escolas/MembrosDaAssociacao/components/Paginacao.js @@ -0,0 +1,31 @@ +import React, {useContext} from "react"; +import {useGetMandatoVigente} from "../hooks/useGetMandatoVigente"; +import {MembrosDaAssociacaoContext} from "../context/MembrosDaAssociacao"; +import {Paginator} from "primereact/paginator"; + +export const Paginacao = () => { + const {isLoading, count} = useGetMandatoVigente() + const {setCurrentPage, firstPage, setFirstPage} = useContext(MembrosDaAssociacaoContext) + + const onPageChange = (event) => { + setCurrentPage(event.page + 1) + setFirstPage(event.first) + }; + + return( + <> + {!isLoading && + + } + + ) +} \ No newline at end of file diff --git a/src/componentes/escolas/MembrosDaAssociacao/context/MembrosDaAssociacao.js b/src/componentes/escolas/MembrosDaAssociacao/context/MembrosDaAssociacao.js new file mode 100644 index 000000000..930658f90 --- /dev/null +++ b/src/componentes/escolas/MembrosDaAssociacao/context/MembrosDaAssociacao.js @@ -0,0 +1,34 @@ +import React, { createContext, useMemo, useState } from 'react'; +export const MembrosDaAssociacaoContext = createContext({ + composicaoUuid: '', + setComposicaoUuid: () => {}, + currentPage: 1, + setCurrentPage: () => {}, + firstPage: 0, + setFirstPage: () => {}, +}) + +export const MembrosDaAssociacaoProvider = ({children}) => { + + const [composicaoUuid, setComposicaoUuid] = useState(''); + const [firstPage, setFirstPage] = useState(0); + const [currentPage, setCurrentPage] = useState(1); + + const contextValue = useMemo(() => { + return{ + composicaoUuid, + setComposicaoUuid, + firstPage, + setFirstPage, + currentPage, + setCurrentPage, + } + }, [composicaoUuid, firstPage, currentPage]) + + return ( + + {children} + + ) + +} \ No newline at end of file diff --git a/src/componentes/escolas/MembrosDaAssociacao/hooks/useGetCargosDaComposicao.js b/src/componentes/escolas/MembrosDaAssociacao/hooks/useGetCargosDaComposicao.js new file mode 100644 index 000000000..fdcd5ae14 --- /dev/null +++ b/src/componentes/escolas/MembrosDaAssociacao/hooks/useGetCargosDaComposicao.js @@ -0,0 +1,23 @@ +import {getCargosDaComposicao} from "../../../../services/Mandatos.service"; +import {useQuery} from "@tanstack/react-query"; +import {useContext} from "react"; +import {MembrosDaAssociacaoContext} from "../context/MembrosDaAssociacao"; + +export const useGetCargosDaComposicao = () => { + + const {composicaoUuid} = useContext(MembrosDaAssociacaoContext) + + const { isLoading, isError, data, error, refetch } = useQuery( + ['cargos-da-composicao', composicaoUuid], + ()=> getCargosDaComposicao(composicaoUuid), + { + keepPreviousData: true, + staleTime: 5000, // 5 segundos + refetchOnWindowFocus: true, // Caso saia da aba e voltar ele refaz a requisição + } + ); + + return {isLoading, isError, data, error, refetch} + + +} \ No newline at end of file diff --git a/src/componentes/escolas/MembrosDaAssociacao/hooks/useGetMandatoVigente.js b/src/componentes/escolas/MembrosDaAssociacao/hooks/useGetMandatoVigente.js new file mode 100644 index 000000000..5a763427b --- /dev/null +++ b/src/componentes/escolas/MembrosDaAssociacao/hooks/useGetMandatoVigente.js @@ -0,0 +1,24 @@ +import {getMandatoVigente} from "../../../../services/Mandatos.service"; +import {useQuery} from "@tanstack/react-query"; +import {useMemo} from "react"; +import {visoesService} from "../../../../services/visoes.service"; + +export const useGetMandatoVigente = () => { + + const associacao_uuid = visoesService.getItemUsuarioLogado('associacao_selecionada.uuid') + + const { isLoading, isError, data = {uuid: null, composicoes: [] }, error } = useQuery( + ['mandato-vigente', associacao_uuid], + ()=> getMandatoVigente(associacao_uuid), + { + keepPreviousData: true, + staleTime: 5000, // 5 segundos + refetchOnWindowFocus: true, // Caso saia da aba e voltar ele refaz a requisição + } + ); + + const count = useMemo(() => data.composicoes.length, [data]); + + return {isLoading, isError, data, error, count} + +} \ No newline at end of file diff --git a/src/componentes/escolas/MembrosDaAssociacao/index.js b/src/componentes/escolas/MembrosDaAssociacao/index.js new file mode 100644 index 000000000..88846efc1 --- /dev/null +++ b/src/componentes/escolas/MembrosDaAssociacao/index.js @@ -0,0 +1,33 @@ +import React from "react"; +import {UrlsMenuInterno} from "../Associacao/UrlsMenuInterno"; +import {MenuInterno} from "../../Globais/MenuInterno"; +import {PaginaMandatoVigente} from "./pages/PaginaMandatoVigente"; +import {MandatosAnteriores} from "./pages/MandatosAnteriores"; +import {ExportaDadosDaAsssociacao} from "../Associacao/ExportaDadosAssociacao"; +import {MembrosDaAssociacaoProvider} from "./context/MembrosDaAssociacao"; +import "./membros-da-associacao.scss" + +export const MembrosDaAssociacao = () => { + return ( + + + + + + + ) +} \ No newline at end of file diff --git a/src/componentes/escolas/MembrosDaAssociacao/membros-da-associacao.scss b/src/componentes/escolas/MembrosDaAssociacao/membros-da-associacao.scss new file mode 100644 index 000000000..cccf385a2 --- /dev/null +++ b/src/componentes/escolas/MembrosDaAssociacao/membros-da-associacao.scss @@ -0,0 +1,14 @@ +.paginacao-composicoes{ + text-align: right !important; + padding: 0 10px 0 0 !important; +} + +.paginacao-composicoes .p-paginator-prev, .paginacao-composicoes .p-paginator-next{ + height: 3em !important; + min-width: 3em !important; +} + +.paginacao-composicoes .p-paginator-element{ + margin: 5px !important; + background-color: #DADADA !important; +} diff --git a/src/componentes/escolas/MembrosDaAssociacao/pages/MandatosAnteriores.js b/src/componentes/escolas/MembrosDaAssociacao/pages/MandatosAnteriores.js new file mode 100644 index 000000000..ab4180196 --- /dev/null +++ b/src/componentes/escolas/MembrosDaAssociacao/pages/MandatosAnteriores.js @@ -0,0 +1,8 @@ +import React from "react"; + +export const MandatosAnteriores = () => { + return ( +

Mandatos anteriores

+ ) + +} \ No newline at end of file diff --git a/src/componentes/escolas/MembrosDaAssociacao/pages/PaginaMandatoVigente.js b/src/componentes/escolas/MembrosDaAssociacao/pages/PaginaMandatoVigente.js new file mode 100644 index 000000000..7c8cb12bf --- /dev/null +++ b/src/componentes/escolas/MembrosDaAssociacao/pages/PaginaMandatoVigente.js @@ -0,0 +1,48 @@ +import React, {useContext, useEffect} from "react"; +import {useGetMandatoVigente} from "../hooks/useGetMandatoVigente"; +import {MandatoInfo} from "../components/MandatoInfo"; +import Loading from "../../../../utils/Loading"; +import {CargosDaComposicaoList} from "../components/CargosDaComposicaoList"; +import {MembrosDaAssociacaoContext} from "../context/MembrosDaAssociacao"; +import {Paginacao} from "../components/Paginacao"; + +export const PaginaMandatoVigente = () => { + + const {isLoading, data, isError} = useGetMandatoVigente() + const {setComposicaoUuid, composicaoUuid, currentPage} = useContext(MembrosDaAssociacaoContext) + + useEffect(() => { + let indice = currentPage-1 + if (data && data.composicoes && data.composicoes.length > 0) { + let composicao_uuid = data.composicoes[indice].uuid + setComposicaoUuid(composicao_uuid) + } + }, [data, setComposicaoUuid, currentPage]); + + if (isLoading) { + return ( + + ); + } + + if ((data && !data.uuid) || isError){ + return ( +

Não existe mandato vigente

+ ) + } + + return ( + <> + + + {composicaoUuid && + + } + + ) +} \ No newline at end of file diff --git a/src/paginas/escolas/MembrosDaAssociacao/index.js b/src/paginas/escolas/MembrosDaAssociacao/index.js index 8794e7da5..b96a663a6 100644 --- a/src/paginas/escolas/MembrosDaAssociacao/index.js +++ b/src/paginas/escolas/MembrosDaAssociacao/index.js @@ -1,16 +1,31 @@ import React from "react"; import {PaginasContainer} from "../../PaginasContainer"; + +// TODO Remover esse componente, nova versão abaixo import {MembrosDaAssociacao} from "../../../componentes/escolas/Associacao/Membros"; -import { TopoComBotoes } from "../../../componentes/escolas/Associacao/TopoComBotoes"; +// TODO Remover alias quando concluido +// Nova versão com mandatos e composições +import {MembrosDaAssociacao as NovoMembrosAssociacao} from '../../../componentes/escolas/MembrosDaAssociacao'; + +import {TopoComBotoes} from "../../../componentes/escolas/Associacao/TopoComBotoes"; +import {visoesService} from "../../../services/visoes.service"; -export const MembrosDaAssociacaoPage = () =>{ + +export const MembrosDaAssociacaoPage = () => { return (
- + <> + {[['access_membros_da_associacao'], ['change_membros_da_associacao']].some(visoesService.getPermissoes) ? ( + + ) : + + } +
+ ) }; \ No newline at end of file diff --git a/src/rotas/index.js b/src/rotas/index.js index c1e48af0f..2726cb2e1 100644 --- a/src/rotas/index.js +++ b/src/rotas/index.js @@ -16,6 +16,7 @@ import {DetalhedasPrestacoesPage} from "../paginas/escolas/DetalheDasPrestacoes" import {VisualizacaoDaAta} from "../componentes/escolas/GeracaoDaAta/VisualizacaoDaAta"; import {EdicaoAta} from "../componentes/escolas/GeracaoDaAta/VisualizacaoDaAta/EdicaoAta"; import {MembrosDaAssociacaoPage} from "../paginas/escolas/MembrosDaAssociacao"; +import {PaginaMandatoVigente} from "../componentes/escolas/MembrosDaAssociacao/pages/PaginaMandatoVigente"; import { ValoresReprogramados } from "../componentes/Globais/ValoresReprogramados"; import {DadosDasContasPage} from "../paginas/escolas/DadosDasContasAssociacao"; import {EsqueciMinhaSenhaPage} from "../paginas/Login/EsqueciMinhaSenha"; @@ -92,6 +93,7 @@ import TesteDataTableAnt import {GestaoDeUsuariosFormPage} from "../componentes/Globais/GestaoDeUsuariosForm"; import {Mandatos} from "../componentes/sme/Mandatos"; import {MotivosRejeicaoEncerramentoConta} from "../componentes/sme/Parametrizacoes/Estrutura/MotivosRejeicaoEncerramentoConta"; +import {MandatosAnteriores} from "../componentes/escolas/MembrosDaAssociacao/pages/MandatosAnteriores"; const routesConfig = [ { @@ -160,6 +162,18 @@ const routesConfig = [ component: MembrosDaAssociacaoPage, permissoes: ['access_dados_associacao'], }, + { + exact: true, + path: "/membros-da-associacao-mandato-vigente", + component: PaginaMandatoVigente, + permissoes: ['access_dados_associacao'], + }, + { + exact: true, + path: "/membros-da-associacao-mandatos-anteriores", + component: MandatosAnteriores, + permissoes: ['access_dados_associacao'], + }, { exact: true, path: "/cadastro-de-membros-da-associacao/:uuid_membro_associacao?", diff --git a/src/services/Mandatos.service.js b/src/services/Mandatos.service.js index e0945c679..385af01b2 100644 --- a/src/services/Mandatos.service.js +++ b/src/services/Mandatos.service.js @@ -34,3 +34,21 @@ export const patchMandato = async (uuidMandato, payload) => { authHeader, )) }; + +export const getMandatoVigente = async (associacao_uuid, currentPage) => { + return (await api.get(`/api/mandatos/mandato-vigente/`,{ + ...authHeader, + params: { + associacao_uuid: associacao_uuid, + } + })).data +} + +export const getCargosDaComposicao = async (composicao_uuid) => { + return (await api.get(`/api/cargos-composicao/cargos-da-composicao/`,{ + ...authHeader, + params: { + composicao_uuid: composicao_uuid, + } + })).data +}