diff --git a/README.md b/README.md index f7ac4ffb2..f3b4a4b4e 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,35 @@ Front da aplicação _SIG.Escola_ da Secretaria de Educação da cidade de São License: MIT -Versão: 1.32.0 +Versão: 1.33.0 ## Release Notes +### 1.33.0 - 24/08/2022 - Entregas da Release 5 - (Sprints 43 a 47) +* UE > Na emissão da ata, agora a aplicação informa quais campos estão incompletos. +* UE > Novo fluxo de informação de valores reprogramados iniciais. +* DRE > Novo fluxo de aprovação de valores reprogramados iniciais. +* DRE > Novo processo de geração de relatórios consolidados, agora é possível gerações parciais. +* DRE > Após completar as gerações parciais de um relatório consolidado, é possível gerar uma versão unificada com todas as parciais. +* DRE > Relatório de Execução Físico-Financeira agora é único para todas as contas. +* DRE > Nova consulta em tela do relatório de Execução Físico-Financeira, agora em uma versão mais simplificada e com todas as contas em uma mesma tela. +* DRE > Ata de parecer técnico não exibe mais valores financeiros e agrupa as PCs apenas por status, não mais por conta. +* DRE > Melhorias na conferência de lançamentos do acompanhamento de PC: Tags de informações e novos filtros. +* DRE > Mudanças no layout da lauda. +* DRE > No acompanhamento de PCs, as PCs que constam em relatórios consolidados não podem mais voltar para análise. +* DRE > Nova funcionalidade de Acesso de Suporte às unidades educacionais. +* SME > Nova funcionalidade de Acesso de Suporte às diretorias e unidades educacionais. +* SME > Nova central de extração de dados. +* SME > Extração de dados de créditos. +* ADM > Ação a partir de comissões para definição da comissão de exame de contas. +* ADM > Novos filtros em tipos de acertos em lançamentos. +* ADM > Novos filtros em tipos de acertos em documentos. +* ADM > Registro de movimentações nos arquivos de análise de PCs para fins de auditoria. +* GLO > Formulário de login agora exibe informação sobre o critério de senha diferente das anteriores. +* GLO > A redefinição de Senha agora exibe informação sobre o critério de senha diferente das anteriores. +* GLO > Incluída a informação de hora de criação no rodapé de vários relatórios. +* GLO > 🐞 Correção de bugs. + ### 1.32.0 - 01/06/2022 - Entregas da Release 4c - Sprint 42 * DRE > Exibição do período e remoção do histórico de devoluções em análise de PC * DRE > Remoção do bloco "Cobrança da PC" e revisão do bloco "Comentários" em análise de PC diff --git a/package.json b/package.json index bfc7052f9..dc5067efc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ptrf", - "version": "1.32.1", + "version": "1.33.0", "private": true, "dependencies": { "@fortawesome/fontawesome-svg-core": "^1.2.27", diff --git a/src/App.js b/src/App.js index 495aacd16..808cb10e9 100644 --- a/src/App.js +++ b/src/App.js @@ -25,6 +25,7 @@ export const App = () => { pathName.match(/\/visualizacao-da-ata-parecer-tecnico\/[a-zA-Z0-9]/) || pathName.match(/\/edicao-da-ata-parecer-tecnico\/[a-zA-Z0-9]/) || pathName.match(/\/dre-relatorio-consolidado-apuracao\/[a-zA-Z0-9]/) || + pathName.match(/\/dre-relatorio-consolidado-em-tela\/[a-zA-Z0-9]/) || pathName.match(/\/dre-relatorio-consolidado-dados-das-ues\/[a-zA-Z0-9]/) ? ( <> diff --git a/src/assets/img/icone-menu-suporte-unidades.svg b/src/assets/img/icone-menu-suporte-unidades.svg new file mode 100644 index 000000000..160421b35 --- /dev/null +++ b/src/assets/img/icone-menu-suporte-unidades.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/img/icone-menu-valores-reprogramados.svg b/src/assets/img/icone-menu-valores-reprogramados.svg new file mode 100644 index 000000000..63ca65f61 --- /dev/null +++ b/src/assets/img/icone-menu-valores-reprogramados.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/componentes/Globais/BarraMensagemUnidadeEmSuporte/ModalConfirmaEncerramentoSuporte.js b/src/componentes/Globais/BarraMensagemUnidadeEmSuporte/ModalConfirmaEncerramentoSuporte.js new file mode 100644 index 000000000..131954808 --- /dev/null +++ b/src/componentes/Globais/BarraMensagemUnidadeEmSuporte/ModalConfirmaEncerramentoSuporte.js @@ -0,0 +1,19 @@ +import {ModalBootstrap} from "../ModalBootstrap"; +import React from "react"; + +export const ModalConfirmaEncerramentoSuporte = (props) => { + return ( + {}} + titulo={"Confirmação de encerramento de suporte"} + bodyText={"

Deseja encerrar o suporte a essa unidade?

Ao confirmar, você será direcionado para a página de acesso ao sistema e ao acessá-lo, não visualizará mais essa unidade.

"} + primeiroBotaoTexto={"Não"} + primeiroBotaoCss={"outline-success"} + primeiroBotaoOnclick={props.handleNaoConfirmaEncerramentoSuporte} + segundoBotaoTexto={"Sim"} + segundoBotaoCss={"danger"} + segundoBotaoOnclick={props.handleConfirmaEncerramentoSuporte} + /> + ) +}; diff --git a/src/componentes/Globais/BarraMensagemUnidadeEmSuporte/index.js b/src/componentes/Globais/BarraMensagemUnidadeEmSuporte/index.js new file mode 100644 index 000000000..98fca4565 --- /dev/null +++ b/src/componentes/Globais/BarraMensagemUnidadeEmSuporte/index.js @@ -0,0 +1,65 @@ +import React, {useCallback, useEffect, useState} from "react"; +import { barraMensagemCustom } from "../BarraMensagem"; +import {visoesService} from "../../../services/visoes.service" +import {ModalConfirmaEncerramentoSuporte} from "./ModalConfirmaEncerramentoSuporte"; +import {encerrarAcessoSuporte,authService} from "../../../services/auth.service"; + +export const BarraMensagemUnidadeEmSuporte = () => { + const mensagemSuporte = "Você está acessando essa unidade em MODO SUPORTE. Use o botão encerrar quando concluir o suporte." + const [unidadeEstaEmSuporte, setUnidadeEstaEmSuporte] = useState(false) + + const dadosUsuarioLogado = visoesService.getDadosDoUsuarioLogado() + + const verificaSeUnidadeEstaEmSuporte = () => { + if (dadosUsuarioLogado) { + const unidadeSelecionada = dadosUsuarioLogado.unidades.find(obj => { + return obj.uuid === dadosUsuarioLogado.unidade_selecionada.uuid + }) + if (unidadeSelecionada && unidadeSelecionada.acesso_de_suporte){ + setUnidadeEstaEmSuporte(unidadeSelecionada.acesso_de_suporte) + } + } + } + + useEffect(() => { + verificaSeUnidadeEstaEmSuporte() + }, []); + + const handleEncerrarSuporte = () => { + setShowModalConfirmaEncerramentoSuporte(true) + } + + const [showModalConfirmaEncerramentoSuporte, setShowModalConfirmaEncerramentoSuporte] = useState(false); + const handleNaoConfirmaEncerramentoSuporte = useCallback(() => { + setShowModalConfirmaEncerramentoSuporte(false) + }, []); + const handleConfirmaEncerramentoSuporte = useCallback(() => { + encerrarAcessoSuporte(dadosUsuarioLogado.usuario_logado.login, dadosUsuarioLogado.unidade_selecionada.uuid) + .then((result) => { + setUnidadeEstaEmSuporte(false) + setShowModalConfirmaEncerramentoSuporte(false) + localStorage.removeItem('DADOS_USUARIO_LOGADO'); + authService.logout() + }) + .catch((erro) => { + console.error('Erro ao encerrar acesso de suporte.', erro) + }) + + }, []); + + return ( + <> + + { unidadeEstaEmSuporte && + barraMensagemCustom.BarraMensagemSucessLaranja(mensagemSuporte, "Encerrar suporte", handleEncerrarSuporte, true) + } +
+ +
+ + ); +} diff --git a/src/componentes/Globais/Dashborard/index.js b/src/componentes/Globais/Dashborard/index.js index a9ec4c3be..e85fbf437 100644 --- a/src/componentes/Globais/Dashborard/index.js +++ b/src/componentes/Globais/Dashborard/index.js @@ -40,8 +40,7 @@ export const Dashboard = () => { }, [uuid_associacao]); const buscaPeriodos = useCallback(async () => { - // let periodos = await getPeriodosAteAgoraForaImplantacaoDaAssociacao(uuid_associacao); - let periodos = await getPeriodosDePrestacaoDeContasDaAssociacao(); + let periodos = await getPeriodosAteAgoraForaImplantacaoDaAssociacao(uuid_associacao); setSelectPeriodo(periodos[0].uuid) setPeriodosAssociacao(periodos); }, []); diff --git a/src/componentes/Globais/EdicaoDeSenha/FormRedefinirSenha/index.js b/src/componentes/Globais/EdicaoDeSenha/FormRedefinirSenha/index.js index 6c347c304..d6167d1fb 100644 --- a/src/componentes/Globais/EdicaoDeSenha/FormRedefinirSenha/index.js +++ b/src/componentes/Globais/EdicaoDeSenha/FormRedefinirSenha/index.js @@ -8,11 +8,11 @@ import {MedidorForcaSenha} from "../../MedidorForcaSenha"; import {TextoValidacaoSenha} from "../../MedidorForcaSenha/textoValidacaoSenha"; import {YupSignupSchemaRedefinirSenha} from "../../../../utils/ValidacoesAdicionaisFormularios"; -export const FormRedefinirSenha = ({textoValidacaoDentroDoForm=null, redirectUrlSucesso, textoSucesso, cssAlertSucesso, textoErro, cssAlertErro}) => { +export const FormRedefinirSenha = ({textoValidacaoDentroDoForm=null, redirectUrlSucesso, textoSucesso, cssAlertSucesso, cssAlertErro}) => { let {uuid} = useParams(); - const [msgErro, setMsgErro] = useState(false); + const [msgErro, setMsgErro] = useState(""); const [senhaRedefinida, setSenhaRedefinida] = useState(false); const initialValues = { @@ -32,8 +32,8 @@ export const FormRedefinirSenha = ({textoValidacaoDentroDoForm=null, redirectUrl setSenhaRedefinida(true); setMsgErro(false) }catch (e) { - console.log("Erro ao redefinir senha ", e); - setMsgErro(true) + console.log("Erro ao redefinir senha ==> ", e.response); + setMsgErro(e.response.data.detail) } }; @@ -107,7 +107,7 @@ export const FormRedefinirSenha = ({textoValidacaoDentroDoForm=null, redirectUrl {msgErro &&
- {textoErro} + {msgErro} diff --git a/src/componentes/Globais/EscolheUnidade/FiltroDeUnidades.js b/src/componentes/Globais/EscolheUnidade/FiltroDeUnidades.js new file mode 100644 index 000000000..6ce3ca6fb --- /dev/null +++ b/src/componentes/Globais/EscolheUnidade/FiltroDeUnidades.js @@ -0,0 +1,41 @@ +import React, {useState} from "react"; + +export const FiltroDeUnidades = ({stateFiltros, handleSubmitFiltros, limpaFiltros, filtroInicial}) =>{ + const [filtros, setFiltros] = useState(stateFiltros); + + const handleChangeFiltros = (name, value) => { + setFiltros({ + ...stateFiltros, + [name]: value + }); + }; + + const handleLimpaFiltros = () => { + setFiltros(filtroInicial) + limpaFiltros() + } + + return( + <> +
handleSubmitFiltros(event, filtros)}> +
+
+ + handleChangeFiltros(e.target.name, e.target.value)} + name="nome_ou_codigo" + type="text" + className="form-control" + placeholder="Escreva o nome ou código que deseja procurar..." + /> +
+
+
+ + +
+
+ + ); +}; diff --git a/src/componentes/Globais/EscolheUnidade/ListaDeUnidades.js b/src/componentes/Globais/EscolheUnidade/ListaDeUnidades.js new file mode 100644 index 000000000..06b62c32a --- /dev/null +++ b/src/componentes/Globais/EscolheUnidade/ListaDeUnidades.js @@ -0,0 +1,79 @@ +import React from "react"; +import {Column} from "primereact/column"; +import {DataTable} from "primereact/datatable"; +import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; +import {faKey} from "@fortawesome/free-solid-svg-icons"; + +export const ListaDeUnidades = ({listaUnidades, rowsPerPage, acaoAoEscolherUnidade, textoAcaoEscolher}) => { + + const unidadeEscolarTemplate = (rowData) => { + return ( +
+ {rowData['nome_com_tipo'] ? {rowData['nome_com_tipo']} : ''} +
+ ) + }; + + const handleAcaoEscolher = (rowData) => { + const unidadeSelecionada = { + uuid: rowData.uuid, + nome: rowData.nome, + codigo_eol: rowData.codigo_eol, + tipo_unidade: rowData.tipo_unidade, + associacao_nome: rowData.associacao_nome, + associacao_uuid: rowData.associacao_uuid, + visao: rowData.visao + } + acaoAoEscolherUnidade(unidadeSelecionada) + }; + + const acoesTemplate = (rowData) =>{ + return ( + <> + + + + + ) + }; + + return ( + rowsPerPage} + rows={rowsPerPage} + paginatorTemplate="PrevPageLink PageLinks NextPageLink" + autoLayout={true} + > + + + + + ); +}; \ No newline at end of file diff --git a/src/componentes/Globais/EscolheUnidade/index.js b/src/componentes/Globais/EscolheUnidade/index.js new file mode 100644 index 000000000..d32f4b409 --- /dev/null +++ b/src/componentes/Globais/EscolheUnidade/index.js @@ -0,0 +1,97 @@ +import React, {useEffect, useState} from "react"; +import {getUnidades} from "../../../services/dres/Unidades.service" +import {ListaDeUnidades} from "./ListaDeUnidades"; +import Loading from "../../../utils/Loading"; +import {FiltroDeUnidades} from "./FiltroDeUnidades"; +import Img404 from "../../../assets/img/img-404.svg"; +import {MsgImgCentralizada} from "../Mensagens/MsgImgCentralizada"; + +export const EscolheUnidade = (props) =>{ + + const {dre_uuid, visao} = props + + const initialStateFiltros = { + nome_ou_codigo: "", + }; + + const mensagemListaVaziaSemFiltroAplicado = 'Use parte do nome ou código EOL para localizar a unidade para qual você deseja viabilizar o acesso de suporte.' + const mensagemListaVaziaComFiltroAplicadoDRE = 'Não foi encontrada nenhuma unidade que corresponda ao filtro aplicado. Certifique-se que a unidade procurada é uma unidade subordinada à sua DRE.' + const mensagemListaVaziaComFiltroAplicadoSME = 'Não foi encontrada nenhuma unidade que corresponda ao filtro aplicado.' + + const [loading, setLoading] = useState(false); + const [listaUnidades, setListaUnidades] = useState([]); + const [stateFiltros, setStateFiltros] = useState(initialStateFiltros); + const [mensagemListaVazia, setMensagemListaVazia] = useState(mensagemListaVaziaSemFiltroAplicado) + + useEffect(()=>{ + carregaListaUnidades(); + }, [stateFiltros]); + + useEffect( () => { + if (stateFiltros.nome_ou_codigo === "") { + setMensagemListaVazia(mensagemListaVaziaSemFiltroAplicado); + } else { + if (visao === 'DRE') setMensagemListaVazia(mensagemListaVaziaComFiltroAplicadoDRE); + if (visao === 'SME') setMensagemListaVazia(mensagemListaVaziaComFiltroAplicadoSME); + } + }, [stateFiltros]); + + const carregaListaUnidades = async ()=>{ + if (stateFiltros.nome_ou_codigo !== "") { + setLoading(true) + try { + let listaUnidades = await getUnidades(dre_uuid, stateFiltros.nome_ou_codigo); + setListaUnidades(listaUnidades); + }catch (e) { + console.log("Erro ao carregar lista de unidades.", e) + } + setLoading(false) + } + else { + setListaUnidades([]) + } + }; + + const escolherUnidade = (unidadeSelecionada) => { + props.onSelecionaUnidade(unidadeSelecionada) + } + + const handleSubmitFiltros = (event, filtros)=>{ + event.preventDefault(); + setStateFiltros(filtros); + }; + + const limpaFiltros = () => { + setStateFiltros(initialStateFiltros); + }; + + return( +
+ + + {loading && } + + {!loading && listaUnidades && listaUnidades.length > 0 && + + } + + {!loading && (!listaUnidades || listaUnidades.length === 0) && + + } + +
+ ) +} diff --git a/src/componentes/Globais/EsqueciMinhaSenha/RedefinirSenha/index.js b/src/componentes/Globais/EsqueciMinhaSenha/RedefinirSenha/index.js index 30d4a4c5e..a621e77b5 100644 --- a/src/componentes/Globais/EsqueciMinhaSenha/RedefinirSenha/index.js +++ b/src/componentes/Globais/EsqueciMinhaSenha/RedefinirSenha/index.js @@ -17,7 +17,6 @@ export const RedefinirSenha = () => { redirectUrlSucesso={'/login'} textoSucesso={'Senha redefinida com sucesso'} cssAlertSucesso={'alert alert-success'} - textoErro={'Erro ao redefinir a senha, tente novamente'} cssAlertErro={'alert alert-danger'} />
diff --git a/src/componentes/Globais/ExibeAcertosEmLancamentosEDocumentosPorConta/TabelaAcertosEmValoresReprogramados.js b/src/componentes/Globais/ExibeAcertosEmLancamentosEDocumentosPorConta/TabelaAcertosEmValoresReprogramados.js deleted file mode 100644 index d8a26bdf5..000000000 --- a/src/componentes/Globais/ExibeAcertosEmLancamentosEDocumentosPorConta/TabelaAcertosEmValoresReprogramados.js +++ /dev/null @@ -1,65 +0,0 @@ -import React, {useState} from "react"; -import {Column} from "primereact/column"; -import {DataTable} from "primereact/datatable"; - -const TabelaAcertosEmValoresReprogramados = ({saldosIniciasAjustes}) => { - - const [expandedRows, setExpandedRows] = useState(null); - - const formataValor = (valor) => { - let valor_formatado = Number(valor).toLocaleString('pt-BR', { - style: 'currency', - currency: 'BRL' - }); - return valor_formatado; - } - - const rowExpansionTemplate = (data) => { - return ( -
- {data.novo_saldo_reprogramado_capital && -
-

Saldo Reprogramado Capital

-

{formataValor(data.novo_saldo_reprogramado_capital)}

-
- } - - {data.novo_saldo_reprogramado_custeio && -
-

Saldo Reprogramado Custeio

-

{formataValor(data.novo_saldo_reprogramado_custeio)}

-
- } - - {data.novo_saldo_reprogramado_livre && -
-

Saldo Reprogramado Livre

-

{formataValor(data.novo_saldo_reprogramado_livre)}

-
- } -
- ) - }; - - return( - <> - {saldosIniciasAjustes && saldosIniciasAjustes.length > 0 ? ( - setExpandedRows(e.data)} - rowExpansionTemplate={rowExpansionTemplate} - stripedRows - className='mt-3' - > - - - - - ): -

Não existem ajustes para serem exibidos

- } - - ) -} -export default TabelaAcertosEmValoresReprogramados; \ No newline at end of file diff --git a/src/componentes/Globais/ExibeAcertosEmLancamentosEDocumentosPorConta/TabsAjustesEmValoresReprogramados.js b/src/componentes/Globais/ExibeAcertosEmLancamentosEDocumentosPorConta/TabsAjustesEmValoresReprogramados.js deleted file mode 100644 index 96d5dd58f..000000000 --- a/src/componentes/Globais/ExibeAcertosEmLancamentosEDocumentosPorConta/TabsAjustesEmValoresReprogramados.js +++ /dev/null @@ -1,39 +0,0 @@ -import React, {Fragment, memo} from "react"; - -const TabsAjustesEmValoresReprogramados = ({contasAssociacao, carregarAjustesValoresReprogramados, children, toggleBtnEscolheContaValoresReprogramados, clickBtnEscolheContaValoresReprogramados}) => { - - return( - <> - - - - - ) -} -export default memo(TabsAjustesEmValoresReprogramados) \ No newline at end of file diff --git a/src/componentes/Globais/ExibeAcertosEmLancamentosEDocumentosPorConta/index.js b/src/componentes/Globais/ExibeAcertosEmLancamentosEDocumentosPorConta/index.js index d38570370..981ec8571 100644 --- a/src/componentes/Globais/ExibeAcertosEmLancamentosEDocumentosPorConta/index.js +++ b/src/componentes/Globais/ExibeAcertosEmLancamentosEDocumentosPorConta/index.js @@ -3,14 +3,11 @@ import {useHistory} from "react-router-dom"; import useValorTemplate from "../../../hooks/dres/PrestacaoDeContas/ConferenciaDeLancamentos/useValorTemplate"; import useDataTemplate from "../../../hooks/Globais/useDataTemplate"; import useNumeroDocumentoTemplate from "../../../hooks/dres/PrestacaoDeContas/ConferenciaDeLancamentos/useNumeroDocumentoTemplate"; -import {getContasDaAssociacao, getSaldosIniciasAjustes, getDocumentosAjustes, getLancamentosAjustes, getTiposDeAcertoLancamentos, getTemReajustes, getExtratosBancariosAjustes, getTemAjustesExtratos} from "../../../services/dres/PrestacaoDeContas.service"; +import {getContasDaAssociacao, getDocumentosAjustes, getLancamentosAjustes, getTiposDeAcertoLancamentos, getExtratosBancariosAjustes, getTemAjustesExtratos} from "../../../services/dres/PrestacaoDeContas.service"; import {TabelaAcertosLancamentos} from "./TabelaAcertosLancamentos"; import TabsAcertosEmLancamentosPorConta from "./TabsAcertosEmLancamentosPorConta"; import Loading from "../../../utils/Loading"; -import TabsAjustesEmValoresReprogramados from "./TabsAjustesEmValoresReprogramados" -import TabelaAcertosEmValoresReprogramados from "./TabelaAcertosEmValoresReprogramados"; - // Redux import {useDispatch} from "react-redux"; import {addDetalharAcertos, limparDetalharAcertos} from "../../../store/reducers/componentes/dres/PrestacaoDeContas/DetalhePrestacaoDeContas/ConferenciaDeLancamentos/DetalharAcertos/actions" @@ -46,14 +43,11 @@ const ExibeAcertosEmLancamentosEDocumentosPorConta = ({exibeBtnIrParaPaginaDeAce filtrar_por_tipo_de_ajuste: '', } - const [exibeAcertosNosSaldos, setExibeAcertosNosSaldos] = useState(false); const [exibeAcertosNosExtratos, setExibeAcertosNosExtratos] = useState(true); - const [saldosIniciasAjustes, setSaldosIniciaisAjustes] = useState([]); const [extratosBancariosAjustes, setExtratosBancariosAjustes] = useState(null); const [lancamentosAjustes, setLancamentosAjustes] = useState([]) const [lancamentosDocumentos, setLancamentosDocumentos] = useState([]) const [contasAssociacao, setContasAssociacao] = useState([]) - const [loadingSaldosIniciais, setLoadingSaldosIniciais] = useState(true) const [loadingExtratosBancarios, setLoadingExtratosBancarios] = useState(true) const [loadingLancamentos, setLoadingLancamentos] = useState(true) const [loadingDocumentos, setLoadingDocumentos] = useState(true) @@ -63,7 +57,6 @@ const ExibeAcertosEmLancamentosEDocumentosPorConta = ({exibeBtnIrParaPaginaDeAce const [contaUuid, setContaUuid] = useState('') const [listaTiposDeAcertoLancamentos, setListaTiposDeAcertoLancamentos] = useState([]) const [clickBtnEscolheConta, setClickBtnEscolheConta] = useState({0:true}); - const [clickBtnEscolheContaValoresReprogramados, setClickBtnEscolheContaValoresReprogramados] = useState({0:true}); const [clickBtnEscolheContaExtratosBancarios, setClickBtnEscolheContaExtratosBancarios] = useState({0:true}); const toggleBtnEscolheConta = (id) => { @@ -74,14 +67,6 @@ const ExibeAcertosEmLancamentosEDocumentosPorConta = ({exibeBtnIrParaPaginaDeAce } }; - const toggleBtnEscolheContaValoresReprogramados = (id) => { - if (id !== Object.keys(clickBtnEscolheContaValoresReprogramados)[0]){ - setClickBtnEscolheContaValoresReprogramados({ - [id]: !clickBtnEscolheContaValoresReprogramados[id] - }); - } - }; - const toggleBtnEscolheContaExtratosBancarios = (id) => { if (id !== Object.keys(clickBtnEscolheContaExtratosBancarios)[0]){ setClickBtnEscolheContaExtratosBancarios({ @@ -101,26 +86,6 @@ const ExibeAcertosEmLancamentosEDocumentosPorConta = ({exibeBtnIrParaPaginaDeAce carregaDadosDasContasDaAssociacao() }, [carregaDadosDasContasDaAssociacao, analiseAtualUuid]) - - const consultaReajustes = useCallback(async () => { - /* - Essa função é necessária para verificar se a algum ajuste nessa analise, independente da conta, - o retorno da API irá determinar se o bloco "Acertos nos saldos iniciais reprogramados" - deve ser exibido - */ - - setExibeAcertosNosSaldos(false); - let tem_reajustes = await getTemReajustes(analiseAtualUuid); - - if(tem_reajustes && tem_reajustes.length > 0){ - setExibeAcertosNosSaldos(true); - } - else{ - setExibeAcertosNosSaldos(false); - } - - }, [analiseAtualUuid]) - const consultaSeTemAjustesExtratos = useCallback(async () => { /* Essa função é necessária para verificar se a algum ajuste de extrato nessa analise, independente da conta, @@ -140,14 +105,6 @@ const ExibeAcertosEmLancamentosEDocumentosPorConta = ({exibeBtnIrParaPaginaDeAce }, [analiseAtualUuid]) - const carregarAjustesValoresReprogramados = useCallback(async (conta_uuid) => { - setContaUuid(conta_uuid); - setLoadingSaldosIniciais(true); - let saldos_iniciais_ajustes = await getSaldosIniciasAjustes(analiseAtualUuid, conta_uuid); - setSaldosIniciaisAjustes(saldos_iniciais_ajustes) - setLoadingSaldosIniciais(false); - }, [analiseAtualUuid]) - const carregarAjustesExtratosBancarios = useCallback(async (conta_uuid) => { setContaUuid(conta_uuid); setLoadingExtratosBancarios(true); @@ -172,18 +129,14 @@ const ExibeAcertosEmLancamentosEDocumentosPorConta = ({exibeBtnIrParaPaginaDeAce useEffect(() => { if (contasAssociacao && contasAssociacao.length > 0){ - // TODO Rever o método consultaReajustes. Repete a consulta à API feita por carregarAjustesValoresReprogramados - consultaReajustes(); // TODO Rever os métodos consultaSeTemAjustesExtratos. Repete a consulta da API feira por carregarAjustesExtratosBancarios consultaSeTemAjustesExtratos(); - carregarAjustesValoresReprogramados(contasAssociacao[0].uuid); carregarAjustesExtratosBancarios(contasAssociacao[0].uuid); carregaAcertosLancamentos(contasAssociacao[0].uuid) carregaAcertosDocumentos(contasAssociacao[0].uuid) setClickBtnEscolheConta({0: true}) - setClickBtnEscolheContaValoresReprogramados({0: true}) } - }, [contasAssociacao, consultaReajustes, carregarAjustesValoresReprogramados, carregaAcertosLancamentos, carregaAcertosDocumentos, carregarAjustesExtratosBancarios]) + }, [contasAssociacao, carregaAcertosLancamentos, carregaAcertosDocumentos, carregarAjustesExtratosBancarios]) useEffect(() => { @@ -314,35 +267,6 @@ const ExibeAcertosEmLancamentosEDocumentosPorConta = ({exibeBtnIrParaPaginaDeAce return( <> - { exibeAcertosNosSaldos && - <> -
Acertos nos saldos iniciais reprogramados
- - {loadingSaldosIniciais ? ( - - ) : - <> - - - } - - -
- - } - {/*INICIO*/} { exibeAcertosNosExtratos && @@ -354,7 +278,7 @@ const ExibeAcertosEmLancamentosEDocumentosPorConta = ({exibeBtnIrParaPaginaDeAce toggleBtnEscolheContaExtratoBancario={toggleBtnEscolheContaExtratosBancarios} clickBtnEscolheContaExtratoBancario={clickBtnEscolheContaExtratosBancarios} > - {loadingSaldosIniciais ? ( + {loadingExtratosBancarios ? ( { @@ -89,12 +90,50 @@ export const GestaoDePerfis = () => { if (rowData['unidades'] && rowData['unidades'].length > 0){ return( rowData['unidades'].map((unidade, index)=>( -

{unidade.tipo_unidade} {unidade.nome}

+
+

+ {unidade.acesso_de_suporte && + <> + + + + + + } + {unidade.tipo_unidade} {unidade.nome}

+
+ )) ) } }; + const nomeUsuarioComIconeDeAcessoSuporteTemplate = (rowData) => { + console.log('Rowdata:', rowData) + const unidadeLogada = rowData["unidades"].find(obj => { + return obj.uuid === unidade_selecionada + }) + return ( +
+ {unidadeLogada.acesso_de_suporte && + <> + + + + + + } + {rowData["name"]} +
+ ) + } + const tipoUsuarioTemplate = (rowData) =>{ return rowData['e_servidor'] ? "Servidor" : "Não Servidor" }; @@ -164,7 +203,15 @@ export const GestaoDePerfis = () => { usuarios && Object.entries(usuarios).length > 0 &&
- + + {(visao_selecionada === "DRE" || visao_selecionada === "SME") && + + } + + {(visao_selecionada === "UE") && + + } + {(visao_selecionada === "DRE" || visao_selecionada === "SME") && {

Não podem conter caracteres acentuados

Um número ou símbolo (caracter especial)

Deve ter no mínimo 8 e no máximo 12 caracteres

+

Deve ser diferente das 5 anteriores

{localStorage.getItem("medidorSenha") < 7 &&

Sua nova senha deve conter letras maiúsculas, minúsculas, números e símbolos. Por favor, digite outra senha

diff --git a/src/componentes/Globais/ModalBootstrap/index.js b/src/componentes/Globais/ModalBootstrap/index.js index 76a184cfb..78c40aad0 100644 --- a/src/componentes/Globais/ModalBootstrap/index.js +++ b/src/componentes/Globais/ModalBootstrap/index.js @@ -1,6 +1,9 @@ -import React, {Fragment} from "react"; +import React, {Fragment, useEffect, useState} from "react"; +import Loading from "../../../utils/Loading"; +import {getTagInformacao} from "../../../services/escolas/Despesas.service"; import {Button, Modal} from "react-bootstrap"; import "./modal-bootstrap.scss" +import { useCallback } from "react"; export const ModalBootstrap = (propriedades) =>{ return ( @@ -368,4 +371,92 @@ export const ModalBootstrapTipoRecursoNaoAceito = (propriedades) =>{ ) -}; \ No newline at end of file +}; + +export const ModalBootstrapConfirmarPublicacao = (propriedades) =>{ + return ( + + + + {propriedades.titulo} + + + {propriedades.bodyText} + + + + {propriedades.segundoBotaoOnclick && propriedades.segundoBotaoTexto ? ( + + ):null} + + + + ) +}; + +export const ModalBootstrapLegendaInformacao = (propriedades) => { + const [listaTagInformacao, setListaTagInformacao] = useState([]) + const [loading, setLoading] = useState(true) + + const types = { + 1: 'tag-purple', + 2: 'tag-darkblue', + 3: 'tag-orange', + 4: 'tag-green', + 5: 'tag-blank' + } + + const handleTagInformacao = useCallback(async () => { + setLoading(true) + try { + const response = await getTagInformacao() + setListaTagInformacao(response) + } + catch (e) { + console.error('Erro ao carregar tag informação', e) + } + setLoading(false) + + }, []) + + useEffect(() => { + handleTagInformacao() + }, [handleTagInformacao]) + + return ( + + + + {propriedades.titulo} + + + {loading ? ( + + ): listaTagInformacao?.length > 0 ? listaTagInformacao.map((tag) => { + return ( +
+ {tag.nome} +

{tag.descricao}

+
+ ) + }): Nenhuma informação encontrada} +
+ + + +
+
+ ) + +} \ No newline at end of file diff --git a/src/componentes/Globais/SidebarLeft/getUrls.js b/src/componentes/Globais/SidebarLeft/getUrls.js index f01a491ef..3244878fa 100644 --- a/src/componentes/Globais/SidebarLeft/getUrls.js +++ b/src/componentes/Globais/SidebarLeft/getUrls.js @@ -12,6 +12,9 @@ import IconeGestaoDePerfis from "../../../assets/img/icone-menu-gestao-de-perfis import IconeMenuParametrizacoes from "../../../assets/img/icone-menu-parametrizacoes.svg" import IconeMenuSaldosBancarios from "../../../assets/img/icone-menu-sme-saldos-bancarios.svg" import IconeMenuFornecedores from "../../../assets/img/icone-menu-fornecedores.svg" +import IconeMenuValoresReprogramados from "../../../assets/img/icone-menu-valores-reprogramados.svg" +import IconeMenuSuporteUnidades from "../../../assets/img/icone-menu-suporte-unidades.svg" +import IconeMenuExtracaoDados from '../../../assets/img/icone-dados-da-diretoria.svg' const getDadosUsuario = () =>{ let usuario = localStorage.getItem(USUARIO_NOME); @@ -63,6 +66,7 @@ const UrlsMenuDres ={ }, lista_de_urls:[ {label: "Associações", url: "dre-associacoes", dataFor:"dre_associacoes", icone:IconeMenuGastosDaEscola, permissoes: ['access_associacao_dre'],}, + {label: "Valores reprogramados", url: "dre-valores-reprogramados", dataFor: "dre-valores-reprogramados", icone: IconeMenuValoresReprogramados, permissoes: ['access_valores_reprogramados_dre']}, {label: "Regularidade", url: "regularidade-associacoes", dataFor:"regularidade_associacoes", icone:IconeMenuGastosDaEscola, permissoes: ['access_regularidade_dre'],}, {label: "Acompanhamento de PC", url: "dre-dashboard", dataFor:"dre_dashboard", icone:IconeAcompanhamento, permissoes: ['access_dados_diretoria'],}, {label: "Relatório consolidado", url: "dre-relatorio-consolidado", dataFor:"dre_relatorio_consolidado", icone:IconeRelatorio, permissoes: ['access_relatorio_consolidado_dre']}, @@ -75,6 +79,7 @@ const UrlsMenuDres ={ ] }, {label: "Fornecedores", url: "parametro-fornecedores", dataFor:"parametro_fornecedores", icone:IconeMenuFornecedores, permissoes: ['access_fornecedores'],}, + {label: "Suporte às Unidades", url: "suporte-unidades-dre", dataFor:"suporte_unidades_dre", icone:IconeMenuSuporteUnidades, permissoes: ['access_suporte_unidades_dre'],}, {label: "Gestão de perfis", url: "gestao-de-perfis", dataFor:"gestao_de_perfis", icone:IconeGestaoDePerfis, permissoes: ['access_gestao_perfis_dre'],}, ] }; @@ -90,12 +95,13 @@ const UrlsMenuSME ={ {label: "Parametrizações", url: "painel-parametrizacoes", dataFor:"sme_painel_parametrizacoes", icone:IconeMenuParametrizacoes, permissoes: ['access_painel_parametrizacoes'],}, {label: "Acompanhamento de PCs", url: "acompanhamento-pcs-sme", dataFor:"acompanhamento_pcs_sme", icone:IconeAcompanhamento, permissoes: ['access_acompanhamento_pc_sme'],}, {label: "Consulta de saldos bancários", url: "consulta-de-saldos-bancarios", dataFor:"consulta_de_saldos_bancarios", icone:IconeMenuSaldosBancarios, permissoes: ['access_consulta_saldo_bancario'],}, + {label: "Suporte às Unidades", url: "suporte-unidades-sme", dataFor:"suporte_unidades_sme", icone:IconeMenuSuporteUnidades, permissoes: ['access_suporte_unidades_sme'],}, + {label: "Extração de dados", url: "extracoes-dados", dataFor:"extracao_de_dados", icone:IconeMenuExtracaoDados, permissoes: ['access_extracao_de_dados_sme'],}, {label: "Gestão de perfis", url: "gestao-de-perfis", dataFor:"gestao_de_perfis", icone:IconeGestaoDePerfis, permissoes: ['access_gestao_perfis_sme'],}, ] }; - const GetUrls = () =>{ let dados_usuario_logado = visoesService.getDadosDoUsuarioLogado(); diff --git a/src/componentes/Globais/SuporteAsUnidades/ModalConfirmaInicioSuporte.js b/src/componentes/Globais/SuporteAsUnidades/ModalConfirmaInicioSuporte.js new file mode 100644 index 000000000..b9614e5ee --- /dev/null +++ b/src/componentes/Globais/SuporteAsUnidades/ModalConfirmaInicioSuporte.js @@ -0,0 +1,19 @@ +import {ModalBootstrap} from "../ModalBootstrap"; +import React from "react"; + +export const ModalConfirmaInicioSuporte = (props) => { + return ( + + ) +}; \ No newline at end of file diff --git a/src/componentes/Globais/SuporteAsUnidades/TextoExplicativoDaPagina.js b/src/componentes/Globais/SuporteAsUnidades/TextoExplicativoDaPagina.js new file mode 100644 index 000000000..6002a36e8 --- /dev/null +++ b/src/componentes/Globais/SuporteAsUnidades/TextoExplicativoDaPagina.js @@ -0,0 +1,28 @@ +import React, {useState, useEffect} from "react"; +import "./suporte-as-unidades.scss" + +import {geTextoExplicativoSuporteUnidades} from "../../../services/SuporteAsUnidades.service" + +export const TextoExplicativo = (props) => { + const {visao} = props + + const [textoExplicativo, setTextoExplicativo] = useState(""); + + useEffect(() => { + buscaTextoExplicativo(); + }, []); + + const buscaTextoExplicativo = async () => { + await geTextoExplicativoSuporteUnidades(visao).then((response) => { + setTextoExplicativo(response.detail); + }).catch((error) => { + console.log(error); + }) + }; + + return( +
+
+
+ ) +}; \ No newline at end of file diff --git a/src/componentes/Globais/SuporteAsUnidades/index.js b/src/componentes/Globais/SuporteAsUnidades/index.js new file mode 100644 index 000000000..bd2ca1add --- /dev/null +++ b/src/componentes/Globais/SuporteAsUnidades/index.js @@ -0,0 +1,72 @@ +import React, {useCallback, useEffect, useState} from "react"; +import {TextoExplicativo} from "./TextoExplicativoDaPagina" +import {EscolheUnidade} from "../EscolheUnidade"; +import {visoesService} from "../../../services/visoes.service"; +import {ModalConfirmaInicioSuporte} from "./ModalConfirmaInicioSuporte"; +import {getUsuarioLogado, viabilizarAcessoSuporte, authService} from "../../../services/auth.service" +import {setarUnidadeProximoLoginAcessoSuporte} from "../../../services/visoes.service" + +export const SuporteAsUnidades = (props) =>{ + + const {visao} = props + + let dreUuid = '' + if (visao === "DRE") { + dreUuid = visoesService.getItemUsuarioLogado('associacao_selecionada.uuid') + } + + const [showModalConfirmaSuporte, setShowModalConfirmaSuporte] = useState(false); + const [unidadeSuporteSelecionada, setUnidadeSuporteSelecionada] = useState(null) + + const handleNaoConfirmaSuporte = useCallback(() => { + setShowModalConfirmaSuporte(false) + }, []); + + const handleConfirmaSuporte = useCallback(() => { + viabilizarAcessoSuporte(getUsuarioLogado().login, {codigo_eol: unidadeSuporteSelecionada.codigo_eol}) + .then((result) => { + setarUnidadeProximoLoginAcessoSuporte( + unidadeSuporteSelecionada.visao, + unidadeSuporteSelecionada.uuid, + unidadeSuporteSelecionada.associacao_uuid, + unidadeSuporteSelecionada.associacao_nome, + unidadeSuporteSelecionada.tipo_unidade, + unidadeSuporteSelecionada.nome + ) + authService.logout() + setShowModalConfirmaSuporte(false) + }) + .catch((erro) => { + console.error('Erro ao viabilizar acesso de suporte.', erro) + }) + + }, [unidadeSuporteSelecionada]); + + const handleSelecaoUnidadeSuporte = useCallback((unidadeSelecionada) => { + setUnidadeSuporteSelecionada(unidadeSelecionada) + setShowModalConfirmaSuporte(true) + }, []); + + let textoConfirmacaoSuporte = "" + if (unidadeSuporteSelecionada){ + textoConfirmacaoSuporte = `

Deseja iniciar suporte para a unidade ${unidadeSuporteSelecionada.nome}?

Ao confirmar, você será direcionado para a página de acesso ao sistema e ao acessá-lo novamente você visualizará a unidade selecionada.

` + } + + return( +
+ +
+ +
+ +
+
+
+ + ) +} diff --git a/src/componentes/Globais/SuporteAsUnidades/suporte-as-unidades.scss b/src/componentes/Globais/SuporteAsUnidades/suporte-as-unidades.scss new file mode 100644 index 000000000..271165f71 --- /dev/null +++ b/src/componentes/Globais/SuporteAsUnidades/suporte-as-unidades.scss @@ -0,0 +1,5 @@ +.container-texto-explicativo { + background-color: #D3F1F3; + padding-top: 16px; + padding-bottom: 14px; +} diff --git a/src/componentes/Globais/ValoresReprogramados/BarraStatus.js b/src/componentes/Globais/ValoresReprogramados/BarraStatus.js new file mode 100644 index 000000000..0ea0bb065 --- /dev/null +++ b/src/componentes/Globais/ValoresReprogramados/BarraStatus.js @@ -0,0 +1,9 @@ +import React from "react"; + +export const BarraStatus = ({statusValoresReprogramados, defineCorBarraStatus}) => { + return ( +
+

{statusValoresReprogramados.texto}

+
+ ) +} \ No newline at end of file diff --git a/src/componentes/Globais/ValoresReprogramados/Botoes.js b/src/componentes/Globais/ValoresReprogramados/Botoes.js new file mode 100644 index 000000000..0dbb9a4ba --- /dev/null +++ b/src/componentes/Globais/ValoresReprogramados/Botoes.js @@ -0,0 +1,37 @@ +import React from "react"; + +export const Botoes = ({handleSalvarValoresReprogramados, handleOnClickConcluirValoresReprogramados, handleVoltar, permiteSalvarOuConcluir}) => { + return( + <> +
+
+ + + + + +
+
+ + ) +} \ No newline at end of file diff --git a/src/componentes/Globais/ValoresReprogramados/Cabecalho.js b/src/componentes/Globais/ValoresReprogramados/Cabecalho.js new file mode 100644 index 000000000..77c4f036d --- /dev/null +++ b/src/componentes/Globais/ValoresReprogramados/Cabecalho.js @@ -0,0 +1,13 @@ +import React from "react"; + +export const Cabecalho = ({valoresReprogramados, textoPeriodo}) => { + return ( +
+
+

{valoresReprogramados.associacao.nome}

+

Código Eol: {valoresReprogramados.associacao.codigo_eol}

+

Período: {textoPeriodo()}

+
+
+ ) +} \ No newline at end of file diff --git a/src/componentes/Globais/ValoresReprogramados/TextoExplicativoDaPagina.js b/src/componentes/Globais/ValoresReprogramados/TextoExplicativoDaPagina.js new file mode 100644 index 000000000..44b54843a --- /dev/null +++ b/src/componentes/Globais/ValoresReprogramados/TextoExplicativoDaPagina.js @@ -0,0 +1,9 @@ +import React from "react"; + +export const TextoExplicativo = ({textoExplicativo}) => { + return ( +
+
+
+ ) +} \ No newline at end of file diff --git a/src/componentes/Globais/ValoresReprogramados/ValoresReprogramadosFormFormik.js b/src/componentes/Globais/ValoresReprogramados/ValoresReprogramadosFormFormik.js new file mode 100644 index 000000000..d789712ed --- /dev/null +++ b/src/componentes/Globais/ValoresReprogramados/ValoresReprogramadosFormFormik.js @@ -0,0 +1,382 @@ +import React from "react"; +import {Formik} from "formik"; +import CurrencyInput from "react-currency-input"; +import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; +import {faCheckCircle, faExclamationTriangle} from "@fortawesome/free-solid-svg-icons"; + + +export const ValoresReprogramadosFormFormik = ({ + valoresReprogramados, + formRef, + editavelUE, + editavelDRE, + valoresSomadosUE, + valoresSomadosDRE, + handleOnKeyDown, + handleChangeStatusConferencia, + handleClickEstaCorreto, + visao_selecionada, + exibeAcao, + rowSpan +}) => { + + return ( +
+ + {valoresReprogramados && + + {props => { + const { + values, + errors, + setFieldValue + } = props; + return( + <> + +
+ {values.contas && values.contas.length > 0 && values.contas.map((dado, index_conta) => { + return ( +
+
+

Conta {dado.conta.tipo_conta}

+ + + + + + + + + + + + {dado.conta.acoes && dado.conta.acoes.length > 0 && dado.conta.acoes.map((acao, index_acao) => { + return ( + + + {exibeAcao(acao) && + + + + } + + {acao.custeio && + + + + + + + } + + {acao.capital && + + + + + + + } + + {acao.livre && + + + + + + + } + + ) + })} + + + + + + + + + + + +
AçãoTipo de aplicaçãoPreencha o valor reprogramado (Associação)Conferência DRE
{acao.nome}
Custeio + { + props.handleChange(e); + valoresSomadosUE(dado); + handleChangeStatusConferencia(setFieldValue, e, acao.custeio, index_conta, index_acao, "UE") + }} + onKeyDown={(e) => handleOnKeyDown(setFieldValue, e, acao.custeio, index_conta, index_acao, "UE")} + placeholder=' ' + allowEmpty={true} + disabled={!editavelUE()} + /> + +
+
+ { + props.handleChange(e); + valoresSomadosDRE(dado); + handleChangeStatusConferencia(setFieldValue, e, acao.custeio, index_conta, index_acao, "DRE") + }} + onKeyDown={(e) => handleOnKeyDown(setFieldValue, e, acao.custeio, index_conta, index_acao, "DRE")} + placeholder=' ' + allowEmpty={true} + disabled={!editavelDRE()} + /> + + {(acao.custeio.status_conferencia === "correto" || acao.custeio.status_conferencia === "incorreto") && +
+ {acao.custeio.status_conferencia === "correto" ? "Correto" : "Corrigir valor"} +
+ } + + {!acao.custeio.status_conferencia && visao_selecionada === "DRE" && editavelDRE() && + + } + +
+ + {(acao.custeio.status_conferencia === "correto" || acao.custeio.status_conferencia === "incorreto") && +
+ + + +
+ } + +
+
Capital + { + props.handleChange(e); + valoresSomadosUE(dado); + handleChangeStatusConferencia(setFieldValue, e, acao.capital, index_conta, index_acao, "UE") + }} + onKeyDown={(e) => handleOnKeyDown(setFieldValue, e, acao.capital, index_conta, index_acao, "UE")} + placeholder=' ' + allowEmpty={true} + disabled={!editavelUE()} + /> + +
+
+ { + props.handleChange(e); + valoresSomadosDRE(dado); + handleChangeStatusConferencia(setFieldValue, e, acao.capital, index_conta, index_acao, "DRE") + }} + onKeyDown={(e) => handleOnKeyDown(setFieldValue, e, acao.capital, index_conta, index_acao, "DRE")} + placeholder=' ' + allowEmpty={true} + disabled={!editavelDRE()} + /> + + {(acao.capital.status_conferencia === "correto" || acao.capital.status_conferencia === "incorreto") && +
+ {acao.capital.status_conferencia === "correto" ? "Correto" : "Corrigir valor"} +
+ } + + {!acao.capital.status_conferencia && visao_selecionada === "DRE" && editavelDRE() && + + } + +
+ + {(acao.capital.status_conferencia === "correto" || acao.capital.status_conferencia === "incorreto") && +
+ + + +
+ } + +
+
Livre aplicação + { + props.handleChange(e); + valoresSomadosUE(dado); + handleChangeStatusConferencia(setFieldValue, e, acao.livre, index_conta, index_acao, "UE") + }} + onKeyDown={(e) => handleOnKeyDown(setFieldValue, e, acao.livre, index_conta, index_acao, "UE")} + placeholder=' ' + allowEmpty={true} + disabled={!editavelUE()} + /> + +
+
+ { + props.handleChange(e); + valoresSomadosDRE(dado); + handleChangeStatusConferencia(setFieldValue, e, acao.livre, index_conta, index_acao, "DRE") + }} + onKeyDown={(e) => handleOnKeyDown(setFieldValue, e, acao.livre, index_conta, index_acao, "DRE")} + placeholder=' ' + allowEmpty={true} + disabled={!editavelDRE()} + /> + + {(acao.livre.status_conferencia === "correto" || acao.livre.status_conferencia === "incorreto") && +
+ {acao.livre.status_conferencia === "correto" ? "Correto" : "Corrigir valor"} +
+ } + + {!acao.livre.status_conferencia && visao_selecionada === "DRE" && editavelDRE() && + + } + +
+ + {(acao.livre.status_conferencia === "correto" || acao.livre.status_conferencia === "incorreto") && +
+ + + +
+ } + +
+
+ Total + + Total +
+ {valoresSomadosUE(dado)} +
+ Total +
+ {valoresSomadosDRE(dado)} +
+
+
+ ) + })} +
+ + ) + }} + +
+ } + +
+ + ) +} \ No newline at end of file diff --git a/src/componentes/Globais/ValoresReprogramados/index.js b/src/componentes/Globais/ValoresReprogramados/index.js new file mode 100644 index 000000000..4f2403373 --- /dev/null +++ b/src/componentes/Globais/ValoresReprogramados/index.js @@ -0,0 +1,688 @@ +import React, {useState, useEffect, useCallback, useRef} from "react"; +import { useLocation } from 'react-router-dom'; +import { Botoes } from "./Botoes"; +import { ValoresReprogramadosFormFormik } from "./ValoresReprogramadosFormFormik"; +import { BarraStatus } from "./BarraStatus"; +import { Cabecalho } from "./Cabecalho"; +import { TextoExplicativo } from "./TextoExplicativoDaPagina"; +import { PaginasContainer } from "../../../paginas/PaginasContainer"; +import { + getValoresReprogramados, + patchSalvarValoresReprogramados , + patchConcluirValoresReprogramados, + getStatusValoresReprogramados, + getTextoExplicativoUe, + getTextoExplicativoDre +} from "../../../services/ValoresReprogramados.service"; +import { visoesService } from "../../../services/visoes.service"; +import Loading from "../../../utils/Loading"; +import { trataNumericos, exibeDataPT_BR } from "../../../utils/ValidacoesAdicionaisFormularios"; +import "./valores-reprogramados.scss" +import { toastCustom } from "../ToastCustom"; +import { + ModalConclusaoValoresReprogramadosNaoPermitido, + ModalDescartarAlteracoesValoresReprogramados, + ModalConcluirValoresReprogramados +} from "../../../utils/Modais"; + + +export const ValoresReprogramados = () => { + // Dados localstorage + const visao_selecionada = visoesService.getItemUsuarioLogado('visao_selecionada.nome'); + const associacao_selecionada = visoesService.getItemUsuarioLogado('associacao_selecionada.uuid'); + + const formRef = useRef(); + const parametros = useLocation(); + + // States + const [valoresReprogramados, setValoresReprogramados] = useState(false); + const [objetoParaComparacao, setObjetoParaComparacao] = useState(false); + const [statusValoresReprogramados, setStatusValoresReprogramados] = useState(false); + const [uuidAssociacao, setUuidAssociacao] = useState(false); + const [loading, setLoading] = useState(true); + const [showConclusaoNaoPermitida, setShowConclusaoNaoPermitida] = useState(false); + const [msgConclusaoNaoPermitida, setMsgConclusaoNaoPermitida] = useState(""); + const [showDescartarAlteracoes, setShowDescartarAlteracoes] = useState(false); + const [textoExplicativo, setShowTextoExplicativo] = useState("") + const [showConcluir, setShowConcluir] = useState(false); + + // Chamadas a API + const carregaUuidAssociacao = useCallback(async () => { + if(visao_selecionada && associacao_selecionada){ + if(visao_selecionada === "UE"){ + setUuidAssociacao(associacao_selecionada); + } + else if(visao_selecionada === "DRE"){ + if (parametros && parametros.state && parametros.state.uuid_associacao){ + setUuidAssociacao(parametros.state.uuid_associacao); + } + } + } + }, [visao_selecionada, associacao_selecionada, parametros]); + + const carregaValoresReprogramados = useCallback(async () => { + if(uuidAssociacao){ + try { + let listaValoresReprogramados = await getValoresReprogramados(uuidAssociacao); + if(listaValoresReprogramados){ + setValoresReprogramados(listaValoresReprogramados); + setObjetoParaComparacao(listaValoresReprogramados); + setLoading(false); + } + else{ + setValoresReprogramados(false); + setObjetoParaComparacao(false); + } + } + catch (e) { + console.log("Erro ao buscar valores reprogramados ", e) + } + } + }, [uuidAssociacao]); + + + const carregaStatusValoresReprogramados = useCallback(async () => { + if(uuidAssociacao){ + try { + let status = await getStatusValoresReprogramados(uuidAssociacao); + if(status){ + setStatusValoresReprogramados(status.status); + } + else{ + setStatusValoresReprogramados(false); + } + } + catch (e) { + console.log("Erro ao buscar status valores reprogramados ", e) + } + } + }, [uuidAssociacao]); + + const carregaTextoExplicativo = useCallback(async () => { + if(visao_selecionada){ + if(visao_selecionada === "UE"){ + let texto = await getTextoExplicativoUe(); + setShowTextoExplicativo(texto.detail); + } + else if(visao_selecionada === "DRE"){ + let texto = await getTextoExplicativoDre(); + setShowTextoExplicativo(texto.detail); + } + } + }, [visao_selecionada]); + + // useEffects + useEffect(() => { + carregaUuidAssociacao() + }, [carregaUuidAssociacao]) + + useEffect(() => { + carregaValoresReprogramados() + }, [carregaValoresReprogramados]) + + useEffect(() => { + carregaStatusValoresReprogramados() + }, [carregaStatusValoresReprogramados]) + + useEffect(() => { + carregaTextoExplicativo() + }, [carregaTextoExplicativo]) + + + // handles + + const handleSalvarValoresReprogramados = async () => { + let dadosForm = formRef.current.values + let dadosFormatado = formataDados(dadosForm); + + let payload = { + associacao_uuid: uuidAssociacao, + visao: visao_selecionada, + dadosForm: dadosFormatado + } + + try { + setLoading(true); + let valores = await patchSalvarValoresReprogramados(payload); + setValoresReprogramados(valores); + setObjetoParaComparacao(valores); + setLoading(false); + toastCustom.ToastCustomSuccess('Informações salvas com sucesso.', `As informações dos valores reprogramados foram salvos com sucesso.`) + } catch (e) { + console.log("Erro ao salvar Valores Reprogramados ", e.response) + } + } + + const handleOnClickConcluirValoresReprogramados = async () => { + let dadosForm = formRef.current.values; + let dadosFormatado = formataDados(dadosForm); + let validado = validaPayload(dadosFormatado); + + if(validado){ + setShowConcluir(true); + } + else{ + if(visao_selecionada === "UE"){ + setMsgConclusaoNaoPermitida("Todos os campos da coluna de valores da Associação devem estar preenchidos (zeros são permitidos).") + } + else if(visao_selecionada === "DRE"){ + setMsgConclusaoNaoPermitida("Todos os campos da coluna de valores da DRE devem estar preenchidos (zeros são permitidos).") + } + + setShowConclusaoNaoPermitida(true); + } + } + + const handleConcluirValoresReprogramados = async () => { + let dadosForm = formRef.current.values; + let dadosFormatado = formataDados(dadosForm); + + let payload = { + associacao_uuid: uuidAssociacao, + visao: visao_selecionada, + dadosForm: dadosFormatado + } + + try { + setShowConcluir(false); + setLoading(true); + let valores = await patchConcluirValoresReprogramados(payload); + setValoresReprogramados(valores); + setObjetoParaComparacao(valores); + let status = await getStatusValoresReprogramados(uuidAssociacao); + setStatusValoresReprogramados(status.status); + setLoading(false); + toastCustom.ToastCustomSuccess('Concluído com sucesso.', `${status.status.texto}`) + } catch (e) { + console.log("Erro ao salvar Valores Reprogramados ", e.response) + } + } + + const objetosDiferentes = () => { + let dadosForm = formRef.current.values; + let dadosComparacao = objetoParaComparacao; + + let tem_diferenca = false; + let atributo = visao_selecionada === "UE" ? "valor_ue" : "valor_dre"; + + for(let i=0; i<=dadosComparacao.contas.length-1; i++){ + let contaForm = dadosForm.contas[i].conta; + let contaComparacao = dadosComparacao.contas[i].conta; + + for(let x=0; x<=contaComparacao.acoes.length-1; x++){ + let acaoForm = contaForm.acoes[x]; + let acaoComparacao = contaComparacao.acoes[x]; + + if(acaoComparacao.custeio && acaoForm.custeio){ + // Formata valor do form + acaoForm.custeio[atributo] = trataNumericos(acaoForm.custeio[atributo]) + + // Formata valor do objeto de comparacao (estado inicial do objeto) + acaoComparacao.custeio[atributo] = trataNumericos(acaoComparacao.custeio[atributo]) + + if(acaoComparacao.custeio[atributo] !== acaoForm.custeio[atributo]){ + tem_diferenca = true; + break; + } + } + + if(acaoComparacao.capital && acaoForm.capital){ + // Formata valor do form + acaoForm.capital[atributo] = trataNumericos(acaoForm.capital[atributo]) + + // Formata valor do objeto de comparacao (estado inicial do objeto) + acaoComparacao.capital[atributo] = trataNumericos(acaoComparacao.capital[atributo]) + + if(acaoComparacao.capital[atributo] !== acaoForm.capital[atributo]){ + tem_diferenca = true; + break; + } + } + + if(acaoComparacao.livre && acaoForm.livre){ + // Formata valor do form + acaoForm.livre[atributo] = trataNumericos(acaoForm.livre[atributo]) + + // Formata valor do objeto de comparacao (estado inicial do objeto) + acaoComparacao.livre[atributo] = trataNumericos(acaoComparacao.livre[atributo]) + + if(acaoComparacao.livre[atributo] !== acaoForm.livre[atributo]){ + tem_diferenca = true; + break; + } + } + } + } + + return tem_diferenca; + } + + const handleVoltar = () => { + if(objetosDiferentes()){ + setShowDescartarAlteracoes(true); + } + else{ + redirecionarUsuario(); + } + } + + const handleOnKeyDown = (setFieldValue, e, aplicacao, index_conta, index_acao, origem) => { + /* Função necessária para que o usuário consiga apagar a máscara do input */ + + let backspace = 8; + let teclaPressionada = e.keyCode; + let nome_aplicacao = aplicacao.nome; + let valor = origem === "UE" ? aplicacao.valor_ue : aplicacao.valor_dre; + let atributo = origem === "UE" ? "valor_ue" : "valor_dre"; + + if(teclaPressionada === backspace){ + if(valor === 0 || valor === "R$0,00"){ + setFieldValue(`contas[${index_conta}].conta.acoes[${index_acao}].${nome_aplicacao}.${atributo}`, null); + + if(origem === "DRE"){ + // Necessario para esconder input quando o valor for nulo + setFieldValue(`contas[${index_conta}].conta.acoes[${index_acao}].${nome_aplicacao}.status_conferencia`, null); + } + else if(origem === "UE"){ + setFieldValue(`contas[${index_conta}].conta.acoes[${index_acao}].${nome_aplicacao}.status_conferencia`, "sem-texto-ou-icone"); + } + + } + } + } + + const handleChangeStatusConferencia = (setFieldValue, e, aplicacao, index_conta, index_acao, origem) => { + let nome_aplicacao = aplicacao.nome; + let valor_ue = null; + let valor_dre = null; + + if(origem === "DRE"){ + valor_dre = e.target.value; + valor_ue = aplicacao.valor_ue; + } + else if(origem === "UE"){ + valor_dre = aplicacao.valor_dre; + valor_ue = e.target.value; + } + + valor_ue = trataNumericos(valor_ue); + valor_dre = trataNumericos(valor_dre); + + if((valor_ue || valor_ue === 0 ) && (valor_dre || valor_dre === 0)){ + if(valor_ue === valor_dre){ + setFieldValue(`contas[${index_conta}].conta.acoes[${index_acao}].${nome_aplicacao}.status_conferencia`, "correto"); + } + else if(valor_ue !== valor_dre){ + setFieldValue(`contas[${index_conta}].conta.acoes[${index_acao}].${nome_aplicacao}.status_conferencia`, "incorreto"); + } + } + else if((valor_ue || valor_ue === 0 ) && (!valor_dre || valor_dre === 0)){ + setFieldValue(`contas[${index_conta}].conta.acoes[${index_acao}].${nome_aplicacao}.status_conferencia`, null); + } + } + + const handleClickEstaCorreto = (setFieldValue, aplicacao, index_conta, index_acao) => { + let nome_aplicacao = aplicacao.nome; + let valor_ue = aplicacao.valor_ue; + + setFieldValue(`contas[${index_conta}].conta.acoes[${index_acao}].${nome_aplicacao}.valor_dre`, valor_ue); + setFieldValue(`contas[${index_conta}].conta.acoes[${index_acao}].${nome_aplicacao}.status_conferencia`, "correto"); + } + + // validacoes + + const editavelUE = () => { + if(periodoFechado()){ + return false; + } + + if(visao_selecionada === "UE"){ + if(visoesService.getPermissoes(['change_valores_reprogramados_ue'])){ + if(valoresReprogramados && valoresReprogramados.associacao){ + let status = valoresReprogramados.associacao.status_valores_reprogramados; + + if(status === "NAO_FINALIZADO" || status === "EM_CORRECAO_UE"){ + return true; + } + } + } + } + + return false; + } + + const editavelDRE = () => { + if(periodoFechado()){ + return false; + } + + if(visao_selecionada === "DRE"){ + if(visoesService.getPermissoes(['change_valores_reprogramados_dre'])){ + if(valoresReprogramados && valoresReprogramados.associacao){ + let status = valoresReprogramados.associacao.status_valores_reprogramados; + if(status === "EM_CONFERENCIA_DRE" || status === "VALORES_CORRETOS"){ + return true; + } + } + } + } + + return false; + } + + const periodoFechado = () => { + if(statusValoresReprogramados.periodo_fechado){ + return true; + } + + return false; + } + + const permiteSalvarOuConcluir = () => { + let permite = visao_selecionada === "UE" ? editavelUE() : editavelDRE(); + return permite; + } + + const defineCorBarraStatus = (numero_cor) => { + return `cor-${numero_cor}` + } + + const valoresSomadosUE = (dado_conta) => { + let total_ue = 0; + let acoes = dado_conta.conta.acoes; + + for(let i=0; i<=acoes.length-1; i++){ + let acao = acoes[i]; + + if(acao.capital){ + let valor_ue_capital = acao.capital.valor_ue ? trataNumericos(acao.capital.valor_ue) : 0; + total_ue = total_ue + valor_ue_capital; + } + + if(acao.custeio){ + let valor_ue_custeio = acao.custeio.valor_ue ? trataNumericos(acao.custeio.valor_ue) : 0; + total_ue = total_ue + valor_ue_custeio; + } + + if(acao.livre){ + let valor_ue_livre = acao.livre.valor_ue ? trataNumericos(acao.livre.valor_ue) : 0; + total_ue = total_ue + valor_ue_livre; + } + } + + let total_ue_formatado = total_ue.toLocaleString('pt-BR', { + style: 'currency', + currency: 'BRL' + }); + + return total_ue_formatado; + } + + const valoresSomadosDRE = (dado_conta) => { + let total_dre = 0; + let acoes = dado_conta.conta.acoes; + + for(let i=0; i<=acoes.length-1; i++){ + let acao = acoes[i]; + + if(acao.capital){ + let valor_dre_capital = acao.capital.valor_dre ? trataNumericos(acao.capital.valor_dre) : 0; + total_dre = total_dre + valor_dre_capital; + } + + if(acao.custeio){ + let valor_dre_custeio = acao.custeio.valor_dre ? trataNumericos(acao.custeio.valor_dre) : 0; + total_dre = total_dre + valor_dre_custeio; + } + + if(acao.livre){ + let valor_dre_livre = acao.livre.valor_dre ? trataNumericos(acao.livre.valor_dre) : 0; + total_dre = total_dre + valor_dre_livre; + } + } + + let total_dre_formatado = total_dre.toLocaleString('pt-BR', { + style: 'currency', + currency: 'BRL' + }); + + return total_dre_formatado; + } + + const validaPayload = (dadosForm) => { + let validado = false; + + if(visao_selecionada === "UE"){ + validado = true; + for(let i=0; i<= dadosForm.contas.length-1; i++){ + let conta = dadosForm.contas[i].conta + + for(let a=0; a<=conta.acoes.length-1; a++){ + let acao = conta.acoes[a] + + if(acao.custeio){ + if(acao.custeio.valor_ue === null){ + validado = false; + break; + } + } + + if(acao.capital){ + if(acao.capital.valor_ue === null){ + validado = false; + break; + } + } + + if(acao.livre){ + if(acao.livre.valor_ue === null){ + validado = false; + break; + } + } + } + } + } + else if(visao_selecionada === "DRE"){ + validado = true; + for(let i=0; i<= dadosForm.contas.length-1; i++){ + let conta = dadosForm.contas[i].conta + + for(let a=0; a<=conta.acoes.length-1; a++){ + let acao = conta.acoes[a] + + if(acao.custeio){ + if(acao.custeio.valor_dre === null){ + validado = false; + break; + } + } + + if(acao.capital){ + if(acao.capital.valor_dre === null){ + validado = false; + break; + } + } + + if(acao.livre){ + if(acao.livre.valor_dre === null){ + validado = false; + break; + } + } + } + } + } + + return validado; + } + + const redirecionarUsuario = () => { + let path; + + if(visao_selecionada === "UE"){ + path = "/lista-de-receitas"; + } + else if(visao_selecionada === "DRE"){ + path = "/dre-valores-reprogramados"; + } + + window.location.assign(path); + } + + const formataDados = (dadosForm) => { + for(let c=0; c<= dadosForm.contas.length-1; c++){ + let conta = dadosForm.contas[c].conta + + for(let a=0; a<=conta.acoes.length-1; a++){ + let acao = conta.acoes[a] + + if(acao.custeio){ + acao.custeio.valor_ue = trataNumericos(acao.custeio.valor_ue) + acao.custeio.valor_dre = trataNumericos(acao.custeio.valor_dre) + } + + if(acao.capital){ + acao.capital.valor_ue = trataNumericos(acao.capital.valor_ue) + acao.capital.valor_dre = trataNumericos(acao.capital.valor_dre) + } + + if(acao.livre){ + acao.livre.valor_ue = trataNumericos(acao.livre.valor_ue) + acao.livre.valor_dre = trataNumericos(acao.livre.valor_dre) + } + } + } + + return dadosForm; + } + + const exibeAcao = (acao) => { + if(!acao.custeio && !acao.capital && !acao.livre){ + return false; + } + + return true; + } + + const rowSpan = (acao) => { + let total = 1 + + if(acao.capital){ + total = total +1 + } + + if(acao.custeio){ + total = total + 1 + }; + + if(acao.livre){ + total = total + 1 + } + + return total; + } + + const textoPeriodo = () => { + let periodo = valoresReprogramados.associacao.periodo_inicial + let texto = "-" + + if(periodo){ + let data_inicio = periodo.data_inicio_realizacao_despesas ? exibeDataPT_BR(periodo.data_inicio_realizacao_despesas) : "-"; + let data_fim = periodo.data_fim_realizacao_despesas ? exibeDataPT_BR(periodo.data_fim_realizacao_despesas) : "-"; + texto = `${periodo.referencia} - ${data_inicio} até ${data_fim}`; + } + + return texto + } + + return ( + <> + + +

Valores reprogramados

+ + +
+ {loading ? ( + + ) : + + <> + + + + + + + + + } + +
+ +
+ setShowConclusaoNaoPermitida(false)} + bodyText={msgConclusaoNaoPermitida} + /> +
+ +
+ setShowDescartarAlteracoes(false)} + redirecionarUsuario={redirecionarUsuario} + /> +
+ +
+ setShowConcluir(false)} + handleConcluirValoresReprogramados={handleConcluirValoresReprogramados} + /> +
+ +
+ + ) +} \ No newline at end of file diff --git a/src/componentes/Globais/ValoresReprogramados/valores-reprogramados.scss b/src/componentes/Globais/ValoresReprogramados/valores-reprogramados.scss new file mode 100644 index 000000000..62e2d12f9 --- /dev/null +++ b/src/componentes/Globais/ValoresReprogramados/valores-reprogramados.scss @@ -0,0 +1,110 @@ +.titulo-contas { + color: #00585E; + font-size: 18px; + font-weight: 700; +} + +.titulo-acoes { + color: #00585E; + font-weight: 700; + font-size: 14px; +} + +.tabela-valores-reprogramados th{ + background-color: #F5F6F8; + color: #42474A; + font-weight: 700; + font-size: 14px; +} + +.tabela-valores-reprogramados-td-ue { + font-size: 14px; +} + +.tabela-valores-reprogramados-td-dre { + font-size: 12px; +} + +.status-conferencia { + margin-top: 9px; +} + +.tabela-valores-reprogramados .tbody-total { + background-color: #F5F6F8; + + .total-titulo { + font-weight: 700; + font-size: 14px; + color: #00585D; + } + + .total-subtitulo { + font-weight: 700; + font-size: 12px; + color: #00585D; + } + + .total-valor { + font-weight: 700; + font-size: 14px; + color: #42474A; + } +} + +.barra-status{ + color: #fff; + font-size: 14px !important; + font-weight: bold !important; +} + +.titulo-associacao { + font-size: 24px; + color: #00585e; + font-weight: 700; +} + +.subtitulo-associacao { + font-size: 16px; +} + +.cor-1 { + background-color: #8c8c8c; +} + +.cor-2 { + background-color: #D06D12; +} + +.cor-3 { + background-color: #B53B0F; +} + +.cor-4 { + background-color: #2B7D83; +} + +.link-esta-correto, .link-esta-correto:focus{ + color: #000000 !important; + background-color: transparent; + outline: 0; + border: none !important; + text-decoration: underline; + font-size: 14px; + } + + .link-esta-correto:hover{ + cursor: pointer; + } + + .link-esta-correto-disabled, .link-esta-correto-disabled:focus, .link-esta-correto-disabled:hover{ + color: #7D7D7D !important; + background-color: transparent; + outline: 0; + border: none !important; + text-decoration: underline; + font-size: 14px; + pointer-events: none; + cursor: default; + } + + \ No newline at end of file diff --git a/src/componentes/dres/PrestacaoDeContas/DetalhePrestacaoDeContas/ArquivosDeReferencia/TabsArquivosDeReferencia.js b/src/componentes/dres/PrestacaoDeContas/DetalhePrestacaoDeContas/ArquivosDeReferencia/TabsArquivosDeReferencia.js index 37ba8246f..92ba1f2b1 100644 --- a/src/componentes/dres/PrestacaoDeContas/DetalhePrestacaoDeContas/ArquivosDeReferencia/TabsArquivosDeReferencia.js +++ b/src/componentes/dres/PrestacaoDeContas/DetalhePrestacaoDeContas/ArquivosDeReferencia/TabsArquivosDeReferencia.js @@ -5,8 +5,6 @@ import {AnalisesDeContaDaPrestacao} from "../AnalisesDeContaDaPrestacao"; import {ResumoFinanceiroTabelaTotais} from "../ResumoFinanceiroTabelaTotais"; import Loading from "../../../../../utils/Loading"; import ArquivosDeReferenciaVisualizacaoDownload from "./ArquivosDeReferenciaVisualizacaoDownload"; -import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; -import {faExclamationTriangle} from "@fortawesome/free-solid-svg-icons"; export const TabsArquivosDeReferencia = ({valoresReprogramadosAjustes, setValoresReprogramadosAjustes, prestacaoDeContas, infoAta, toggleBtnEscolheConta, exibeAtaPorConta, clickBtnEscolheConta, infoAtaPorConta, adicaoAjusteSaldo, setAdicaoAjusteSaldo, onClickAdicionarAcertoSaldo, onClickDescartarAcerto, formErrosAjusteSaldo, validaAjustesSaldo, handleOnKeyDownAjusteSaldo, onClickSalvarAcertoSaldo, ajusteSaldoSalvoComSucesso, onClickDeletarAcertoSaldo, ...rest}) => { @@ -14,25 +12,6 @@ export const TabsArquivosDeReferencia = ({valoresReprogramadosAjustes, setValore <>

Materiais de referência

- {prestacaoDeContas && prestacaoDeContas.permite_analise_valores_reprogramados && prestacaoDeContas.permite_analise_valores_reprogramados.permite_analise - ? -
-
- - - - Por se tratar do período inicial de uso do sistema pela Associação, favor conferir - os saldos iniciais de valores reprogramados dentro do item "Síntese do período por ação" abaixo. - - -
-
- : - null - }
-
- - -
diff --git a/src/componentes/dres/PrestacaoDeContas/DetalhePrestacaoDeContas/ResumoDosAcertos/index.js b/src/componentes/dres/PrestacaoDeContas/DetalhePrestacaoDeContas/ResumoDosAcertos/index.js index f9c91cf14..acdb7c660 100644 --- a/src/componentes/dres/PrestacaoDeContas/DetalhePrestacaoDeContas/ResumoDosAcertos/index.js +++ b/src/componentes/dres/PrestacaoDeContas/DetalhePrestacaoDeContas/ResumoDosAcertos/index.js @@ -7,7 +7,6 @@ import { getUltimaAnalisePc, getLancamentosAjustes, getDocumentosAjustes, - getSaldosIniciasAjustes, getExtratosBancariosAjustes } from "../../../../../services/dres/PrestacaoDeContas.service"; import moment from "moment"; @@ -39,7 +38,6 @@ export const ResumoDosAcertos = () => { const [btnDevolverParaAcertoDisabled, setBtnDevolverParaAcertoDisabled] = useState(false) const [showModalConfirmaDevolverParaAcerto, setShowModalConfirmaDevolverParaAcerto] = useState(false) const [loading, setLoading] = useState(true) - const [totalValoresReprogramadosAjustes, setTotalValoresReprogramadosAjustes] = useState(undefined) const [totalExtratosAjustes, setTotalExtratosAjustes] = useState(undefined) const [totalLancamentosAjustes, setTotalLancamentosAjustes] = useState(undefined) const [totalDocumentosAjustes, setTotalDocumentosAjustes] = useState(undefined) @@ -74,7 +72,6 @@ export const ResumoDosAcertos = () => { } setAnaliseAtualUuid(analise_atual_uuid) // Necessario alterar os estados dos totais para chamar novamente o método verificaSeExibeMsg setado com undefined - setTotalValoresReprogramadosAjustes(undefined) setTotalExtratosAjustes(undefined) setTotalLancamentosAjustes(undefined) setTotalDocumentosAjustes(undefined) @@ -112,7 +109,6 @@ export const ResumoDosAcertos = () => { setAnaliseAtualUuid(analisesDePcDevolvidas[ultimo_indice_array].uuid) } // Necessario alterar os estados dos totais para chamar novamente o método verificaSeExibeMsg setado com '' - setTotalValoresReprogramadosAjustes('') setTotalExtratosAjustes('') setTotalLancamentosAjustes('') setTotalDocumentosAjustes('') @@ -122,9 +118,6 @@ export const ResumoDosAcertos = () => { setLoading(true) if (props.state.infoAta && props.state.infoAta.contas && props.state.infoAta.contas.length > 0 && analiseAtualUuid) { props.state.infoAta.contas.map(async (conta) => { - let valores_reprogramados_ajustes = await getSaldosIniciasAjustes(analiseAtualUuid, conta.conta_associacao.uuid); - setTotalValoresReprogramadosAjustes(valores_reprogramados_ajustes.length) - let extratos_ajustes = await getExtratosBancariosAjustes(analiseAtualUuid, conta.conta_associacao.uuid); setTotalExtratosAjustes(extratos_ajustes.length) @@ -143,7 +136,7 @@ export const ResumoDosAcertos = () => { const verificaSeExibeMsg = useCallback(() => { setLoading(true) - if (totalLancamentosAjustes !== undefined && totalLancamentosAjustes <= 0 && totalDocumentosAjustes !== undefined && totalDocumentosAjustes <= 0 && totalValoresReprogramadosAjustes !== undefined && totalValoresReprogramadosAjustes <= 0 && totalExtratosAjustes !== undefined && totalExtratosAjustes <= 0) { + if (totalLancamentosAjustes !== undefined && totalLancamentosAjustes <= 0 && totalDocumentosAjustes !== undefined && totalDocumentosAjustes <= 0 && totalExtratosAjustes !== undefined && totalExtratosAjustes <= 0) { setExibeMsg(true) if (prestacaoDeContas && prestacaoDeContas.devolucoes_da_prestacao && prestacaoDeContas.devolucoes_da_prestacao.length > 0) { setTextoMsg('Não existem novas solicitações salvas desde o retorno da Associação. Consulte acima as solicitações anteriores') @@ -154,7 +147,7 @@ export const ResumoDosAcertos = () => { setExibeMsg(false) } setLoading(false) - }, [prestacaoDeContas, totalLancamentosAjustes, totalDocumentosAjustes, totalValoresReprogramadosAjustes, totalExtratosAjustes]) + }, [prestacaoDeContas, totalLancamentosAjustes, totalDocumentosAjustes, totalExtratosAjustes]) useEffect(() => { verificaSeExibeMsg() diff --git a/src/componentes/dres/PrestacaoDeContas/DetalhePrestacaoDeContas/ResumoFinanceiroTabelaAcoes.js b/src/componentes/dres/PrestacaoDeContas/DetalhePrestacaoDeContas/ResumoFinanceiroTabelaAcoes.js index 666dcb402..4cb429ef3 100644 --- a/src/componentes/dres/PrestacaoDeContas/DetalhePrestacaoDeContas/ResumoFinanceiroTabelaAcoes.js +++ b/src/componentes/dres/PrestacaoDeContas/DetalhePrestacaoDeContas/ResumoFinanceiroTabelaAcoes.js @@ -1,9 +1,8 @@ import React from "react"; import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; import {faChevronUp, faChevronDown} from "@fortawesome/free-solid-svg-icons"; -import { VerificaSaldoReprogramadoInicial } from "./VerificaSaldoReprogramadoInicial"; -export const ResumoFinanceiroTabelaAcoes = ({valoresReprogramadosAjustes, setValoresReprogramadosAjustes, infoAta, valorTemplate, toggleBtnTabelaAcoes, clickBtnTabelaAcoes, prestacaoDeContas}) => { +export const ResumoFinanceiroTabelaAcoes = ({infoAta, valorTemplate, toggleBtnTabelaAcoes, clickBtnTabelaAcoes, prestacaoDeContas}) => { return ( <> {infoAta && infoAta.acoes && infoAta.acoes.length > 0 && @@ -116,21 +115,7 @@ export const ResumoFinanceiroTabelaAcoes = ({valoresReprogramadosAjustes, setVal {valorTemplate(info.saldo_atual_total)} - - - {prestacaoDeContas && prestacaoDeContas.permite_analise_valores_reprogramados && prestacaoDeContas.permite_analise_valores_reprogramados.permite_analise - ? - - : - null - } - +
diff --git a/src/componentes/dres/PrestacaoDeContas/DetalhePrestacaoDeContas/VerificaSaldoReprogramadoInicial.js b/src/componentes/dres/PrestacaoDeContas/DetalhePrestacaoDeContas/VerificaSaldoReprogramadoInicial.js deleted file mode 100644 index 8bf516a22..000000000 --- a/src/componentes/dres/PrestacaoDeContas/DetalhePrestacaoDeContas/VerificaSaldoReprogramadoInicial.js +++ /dev/null @@ -1,483 +0,0 @@ -import React, {useState, useEffect} from "react"; -import {Formik} from "formik"; -import { getUltimaAnalisePc, getAnaliseValorReprogramadoPorAcao, patchAnaliseValorReprogramadoPorAcao, postAnaliseValorReprogramadoPorAcao, getSaldosIniciasAjustes } from "../../../../services/dres/PrestacaoDeContas.service"; -import CurrencyInput from "react-currency-input"; -import { trataNumericos } from "../../../../utils/ValidacoesAdicionaisFormularios"; -import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; -import {faCheck} from "@fortawesome/free-solid-svg-icons"; - -export const VerificaSaldoReprogramadoInicial = ({setValoresReprogramadosAjustes, conta_associacao_uuid, acao_associacao_uuid, prestacaoDeContas}) => { - - const [dadosUuid, setDadosUuid] = useState({}); - const [initialState, setInitialState] = useState({ - acao_associacao: "", - analise_prestacao_conta: "", - conta_associacao: "", - novo_saldo_reprogramado_capital: null, - novo_saldo_reprogramado_custeio: null, - novo_saldo_reprogramado_livre: null, - uuid: "", - valor_saldo_reprogramado_correto: true - }); - const [showBtnConfirmarSuperior, setShowBtnConfirmarSuperior] = useState(false) - const [onClickBtnConfirmarSuperior, setOnClickBtnConfirmarSuperior] = useState(false); - const [disableBtnConfirmarSuperior, setDisableBtnConfirmarSuperior] = useState(false); - - const [showBtnConfirmarInferior, setShowBtnConfirmarInferior] = useState(true); - const [onClickBtnConfirmarInferior, setOnClickBtnConfirmarInferior] = useState(false); - const [disableBtnConfirmarInferior, setDisableBtnConfirmarInferior] = useState(true); - - useEffect(() => { - const verificaSeTemAnaliseAtual = async () => { - let uuid_analise; - - if(prestacaoDeContas && prestacaoDeContas.analise_atual && prestacaoDeContas.analise_atual.uuid){ - uuid_analise = prestacaoDeContas.analise_atual.uuid - } - else{ - let ultima_analise = await getUltimaAnalisePc(prestacaoDeContas.uuid) - uuid_analise = ultima_analise.uuid - } - - let objeto = { - uuid_analise: uuid_analise, - uuid_conta_associacao: conta_associacao_uuid, - uuid_acao_associacao: acao_associacao_uuid - } - - setDadosUuid(objeto) - } - - verificaSeTemAnaliseAtual(); - - }, [prestacaoDeContas, conta_associacao_uuid, acao_associacao_uuid]) - - const recebeAnaliseValorReprogramado = async() => { - if(dadosUuid.uuid_analise && dadosUuid.uuid_conta_associacao && dadosUuid.uuid_acao_associacao){ - let analise = await getAnaliseValorReprogramadoPorAcao(dadosUuid.uuid_analise, dadosUuid.uuid_conta_associacao, dadosUuid.uuid_acao_associacao) - analise = analise[0] - - if(analise && analise.uuid){ - - let objeto = { - uuid: analise.uuid, - acao_associacao: analise.acao_associacao, - analise_prestacao_conta: analise.analise_prestacao_conta, - conta_associacao: analise.conta_associacao, - novo_saldo_reprogramado_capital: analise.novo_saldo_reprogramado_capital ? parseFloat(analise.novo_saldo_reprogramado_capital) : analise.novo_saldo_reprogramado_capital, - novo_saldo_reprogramado_custeio: analise.novo_saldo_reprogramado_custeio ? parseFloat(analise.novo_saldo_reprogramado_custeio) : analise.novo_saldo_reprogramado_custeio, - novo_saldo_reprogramado_livre: analise.novo_saldo_reprogramado_livre ? parseFloat(analise.novo_saldo_reprogramado_livre) : analise.novo_saldo_reprogramado_livre, - valor_saldo_reprogramado_correto: analise.valor_saldo_reprogramado_correto - } - - setInitialState(objeto) - - if(analise.valor_saldo_reprogramado_correto){ - setShowBtnConfirmarSuperior(true); - setShowBtnConfirmarInferior(false); - } - else{ - setShowBtnConfirmarSuperior(false); - setShowBtnConfirmarInferior(true); - } - } - else{ - let objeto = { - acao_associacao: dadosUuid.uuid_acao_associacao, - analise_prestacao_conta: dadosUuid.uuid_analise, - conta_associacao: dadosUuid.uuid_conta_associacao, - novo_saldo_reprogramado_capital: null, - novo_saldo_reprogramado_custeio: null, - novo_saldo_reprogramado_livre: null, - valor_saldo_reprogramado_correto: true - } - - setInitialState(objeto); - - setShowBtnConfirmarSuperior(true); - setShowBtnConfirmarInferior(false); - } - } - } - - useEffect(() => { - recebeAnaliseValorReprogramado(); - }, [dadosUuid]) - - const onSubmitForm = async (values) => { - if(values.uuid){ - let payload = {} - if(values.valor_saldo_reprogramado_correto){ - payload = { - valor_saldo_reprogramado_correto: values.valor_saldo_reprogramado_correto, - novo_saldo_reprogramado_custeio: null, - novo_saldo_reprogramado_capital: null, - novo_saldo_reprogramado_livre: null - } - } - else{ - payload = { - valor_saldo_reprogramado_correto: values.valor_saldo_reprogramado_correto, - novo_saldo_reprogramado_custeio: trataNumericos(values.novo_saldo_reprogramado_custeio), - novo_saldo_reprogramado_capital: trataNumericos(values.novo_saldo_reprogramado_capital), - novo_saldo_reprogramado_livre: trataNumericos(values.novo_saldo_reprogramado_livre) - } - } - - try { - await patchAnaliseValorReprogramadoPorAcao(values.uuid, payload); - recebeAnaliseValorReprogramado(); - let valores_reprogramados_ajustes = await getSaldosIniciasAjustes(dadosUuid.uuid_analise, dadosUuid.uuid_conta_associacao); - setValoresReprogramadosAjustes([...valores_reprogramados_ajustes]) - console.log("Edição realizada com sucesso!") - } catch (e) { - console.log("Erro ao fazer edição", e.response) - } - } - else{ - let payload = {} - if(values.valor_saldo_reprogramado_correto){ - payload = { - analise_prestacao_conta: values.analise_prestacao_conta, - conta_associacao: values.conta_associacao, - acao_associacao: values.acao_associacao, - valor_saldo_reprogramado_correto: values.valor_saldo_reprogramado_correto, - novo_saldo_reprogramado_custeio: null, - novo_saldo_reprogramado_capital: null, - novo_saldo_reprogramado_livre: null - } - } - else{ - payload = { - analise_prestacao_conta: values.analise_prestacao_conta, - conta_associacao: values.conta_associacao, - acao_associacao: values.acao_associacao, - valor_saldo_reprogramado_correto: values.valor_saldo_reprogramado_correto, - novo_saldo_reprogramado_custeio: trataNumericos(values.novo_saldo_reprogramado_custeio), - novo_saldo_reprogramado_capital: trataNumericos(values.novo_saldo_reprogramado_capital), - novo_saldo_reprogramado_livre: trataNumericos(values.novo_saldo_reprogramado_livre) - } - } - - try { - await postAnaliseValorReprogramadoPorAcao(payload); - recebeAnaliseValorReprogramado(); - let valores_reprogramados_ajustes = await getSaldosIniciasAjustes(dadosUuid.uuid_analise, dadosUuid.uuid_conta_associacao); - setValoresReprogramadosAjustes([...valores_reprogramados_ajustes]) - console.log("Criação realizada com sucesso!") - } catch (e) { - console.log("Erro ao fazer criação", e.response) - } - } - } - - const handleOnClickConfirmarSuperior = (values) => { - setDisableBtnConfirmarSuperior(true); - setOnClickBtnConfirmarSuperior(true); - setOnClickBtnConfirmarInferior(false); - onSubmitForm(values); - } - - const handleOnClickConfirmarInferior = (values) => { - setDisableBtnConfirmarInferior(true); - setOnClickBtnConfirmarInferior(true); - setOnClickBtnConfirmarSuperior(false); - onSubmitForm(values); - } - - const handleOnChangeSaldoReprogramadoCorreto = (setFieldValue, ) => { - setFieldValue(`valor_saldo_reprogramado_correto`, true) - setShowBtnConfirmarSuperior(true); - setShowBtnConfirmarInferior(false); - } - - const handleOnChangeSaldoReprogramadoIncorreto = (setFieldValue, values) => { - setFieldValue(`valor_saldo_reprogramado_correto`, false) - setShowBtnConfirmarSuperior(false); - setShowBtnConfirmarInferior(true); - - setDisableBtnConfirmarSuperior(false); - setOnClickBtnConfirmarSuperior(false); - - - setFieldValue(`novo_saldo_reprogramado_custeio`, initialState.novo_saldo_reprogramado_custeio) - setFieldValue(`novo_saldo_reprogramado_capital`, initialState.novo_saldo_reprogramado_capital) - setFieldValue(`novo_saldo_reprogramado_livre`, initialState.novo_saldo_reprogramado_livre) - - - setDisableBtnConfirmarInferior(true); - } - - const handleOnKeyDownCusteio = (setFieldValue, e, values) => { - /* Função necessária para que o usuário consiga apagar a máscara do input */ - let backspace = 8 - let teclaPressionada = e.keyCode - - if(teclaPressionada === backspace){ - if(values.novo_saldo_reprogramado_custeio === 0 || values.novo_saldo_reprogramado_custeio === "R$0,00"){ - setFieldValue(`novo_saldo_reprogramado_custeio`, null); - setDisableBtnConfirmarInferior(false); - setOnClickBtnConfirmarInferior(false); - } - } - } - - const handleOnKeyDownCapital = (setFieldValue, e, values) => { - /* Função necessária para que o usuário consiga apagar a máscara do input */ - let backspace = 8 - let teclaPressionada = e.keyCode - - if(teclaPressionada === backspace){ - if(values.novo_saldo_reprogramado_capital === 0 || values.novo_saldo_reprogramado_capital === "R$0,00"){ - setFieldValue(`novo_saldo_reprogramado_capital`, null); - setDisableBtnConfirmarInferior(false); - setOnClickBtnConfirmarInferior(false); - } - } - } - - const handleOnKeyDownLivreAplicacao = (setFieldValue, e, values) => { - /* Função necessária para que o usuário consiga apagar a máscara do input */ - let backspace = 8 - let teclaPressionada = e.keyCode - - if(teclaPressionada === backspace){ - if(values.novo_saldo_reprogramado_livre === 0 || values.novo_saldo_reprogramado_livre === "R$0,00"){ - setFieldValue(`novo_saldo_reprogramado_livre`, null); - setDisableBtnConfirmarInferior(false); - setOnClickBtnConfirmarInferior(false); - } - } - } - - const handleOnChangeNovoSaldoReprogramado = (values) => { - setDisableBtnConfirmarInferior(false); - setOnClickBtnConfirmarInferior(false); - } - - const apenasLeitura = () => { - if(prestacaoDeContas){ - if(prestacaoDeContas.status === "EM_ANALISE"){ - return false; - } - } - return true; - } - - return ( -
- - {props => { - const { - values, - errors, - setFieldValue - } = props; - - return ( - <> -
-
- O valor de saldo reprogramado inicial declarado pela unidade está correto? -
- -
-
- { - handleOnChangeSaldoReprogramadoCorreto(setFieldValue) - }} - disabled={apenasLeitura()} - /> - - - { - handleOnChangeSaldoReprogramadoIncorreto(setFieldValue, values) - }} - disabled={apenasLeitura()} - /> - -
- - {showBtnConfirmarSuperior && !apenasLeitura() - ? -
- {onClickBtnConfirmarSuperior && - - - Confirmado - - } - - -
- : - null - } - -
- - {!values.valor_saldo_reprogramado_correto - ? - <> - Insira o valor correto para que a Associação realize o ajuste. - - - - - - - - - - - - - - - - - - -
Custeio (R$)Capital (R$)Livre aplicação (R$)
- { - props.handleChange(e); - handleOnChangeNovoSaldoReprogramado(); - }} - onKeyDown={(e) => handleOnKeyDownCusteio(setFieldValue, e, values)} - placeholder=' ' - allowEmpty={true} - disabled={apenasLeitura()} - /> - - { - props.handleChange(e); - handleOnChangeNovoSaldoReprogramado(); - }} - onKeyDown={(e) => handleOnKeyDownCapital(setFieldValue, e, values)} - placeholder=' ' - allowEmpty={true} - disabled={apenasLeitura()} - /> - - { - props.handleChange(e); - handleOnChangeNovoSaldoReprogramado(); - }} - onKeyDown={(e) => handleOnKeyDownLivreAplicacao(setFieldValue, e, values)} - placeholder=' ' - allowEmpty={true} - disabled={apenasLeitura()} - /> -
- - {showBtnConfirmarInferior && !apenasLeitura() - ? -
-
- {onClickBtnConfirmarInferior && - - - Confirmado - - } - -
-
- : - null - } - - - : - null - } - -
- - ) - }} - -
-
- ) -}; \ No newline at end of file diff --git a/src/componentes/dres/PrestacaoDeContas/DetalhePrestacaoDeContas/index.js b/src/componentes/dres/PrestacaoDeContas/DetalhePrestacaoDeContas/index.js index 3f9e62323..6fb54193a 100644 --- a/src/componentes/dres/PrestacaoDeContas/DetalhePrestacaoDeContas/index.js +++ b/src/componentes/dres/PrestacaoDeContas/DetalhePrestacaoDeContas/index.js @@ -29,6 +29,7 @@ import {GetComportamentoPorStatus} from "./GetComportamentoPorStatus"; import {ModalSalvarPrestacaoDeContasAnalise} from "../../../../utils/Modais"; import Loading from "../../../../utils/Loading"; import {toastCustom} from "../../../Globais/ToastCustom"; +import {ModalNaoPodeVoltarParaAnalise} from "../ModalNaoPodeVoltarParaAnalise"; require("ordinal-pt-br"); @@ -114,6 +115,7 @@ export const DetalhePrestacaoDeContas = () =>{ const [showRecebida, setShowRecebida] = useState(false); const [showConcluirAnalise, setShowConcluirAnalise] = useState(false); const [showVoltarParaAnalise, setShowVoltarParaAnalise] = useState(false); + const [showNaoPodeVoltarParaAnalise, setShowNaoPodeVoltarParaAnalise] = useState(false); const [redirectListaPc, setRedirectListaPc] = useState(false); const [informacoesPrestacaoDeContas, setInformacoesPrestacaoDeContas] = useState(initialInformacoesPrestacaoDeContas); const [clickBtnEscolheConta, setClickBtnEscolheConta] = useState({0: true, key_0: true}); @@ -135,7 +137,6 @@ export const DetalhePrestacaoDeContas = () =>{ const [btnSalvarDisabled, setBtnSalvarDisabled] = useState(true); const [showModalSalvarAnalise, setShowModalSalvarAnalise] = useState(false); const [loading, setLoading] = useState(true); - const [valoresReprogramadosAjustes, setValoresReprogramadosAjustes] = useState([]) const [adicaoAjusteSaldo, setAdicaoAjusteSaldo] = useState(false); const [formErrosAjusteSaldo, setFormErrosAjusteSaldo] = useState([]) const [ajusteSaldoSalvoComSucesso, setAjusteSaldoSalvoComSucesso] = useState([]); @@ -710,6 +711,7 @@ export const DetalhePrestacaoDeContas = () =>{ setShowVoltarParaAnalise(false); setshowErroPrestacaoDeContasPosterior(false); setShowDeleteAjusteSaldoPC(false); + setShowNaoPodeVoltarParaAnalise(false); }; const onCloseModalSalvarAnalise = () => { @@ -884,6 +886,15 @@ export const DetalhePrestacaoDeContas = () =>{ setLoading(false); }; + const verificaSePodeVoltarParaAnalise = () => { + if (prestacaoDeContas.publicada) { + setShowNaoPodeVoltarParaAnalise(true) + } + else { + setShowVoltarParaAnalise(true) + } + } + const onVoltarParaAnalise = async () => { setLoading(true); setShowVoltarParaAnalise(false); @@ -1015,8 +1026,6 @@ export const DetalhePrestacaoDeContas = () =>{ prestacaoDeContas && prestacaoDeContas.status && { getObjetoIndexAnalise={getObjetoIndexAnalise} toggleBtnTabelaAcoes={toggleBtnTabelaAcoes} clickBtnTabelaAcoes={clickBtnTabelaAcoes} - setShowVoltarParaAnalise={setShowVoltarParaAnalise} + setShowVoltarParaAnalise={verificaSePodeVoltarParaAnalise} btnSalvarDisabled={btnSalvarDisabled} setBtnSalvarDisabled={setBtnSalvarDisabled} carregaPrestacaoDeContas={carregaPrestacaoDeContas} @@ -1168,6 +1177,15 @@ export const DetalhePrestacaoDeContas = () =>{ segundoBotaoTexto="Confirmar" /> +
+ Não é possível reabrir essa PC para análise, pois ela já foi publicada no Relatório Consolidado ${prestacaoDeContas.referencia_consolidado_dre}.

`} + primeiroBotaoTexto="Fechar" + primeiroBotaoCss="success" + /> +
{ + return ( + + ) +}; diff --git a/src/componentes/dres/PrestacaoDeContas/prestacao-de-contas.scss b/src/componentes/dres/PrestacaoDeContas/prestacao-de-contas.scss index 42d665c6d..1b1744310 100644 --- a/src/componentes/dres/PrestacaoDeContas/prestacao-de-contas.scss +++ b/src/componentes/dres/PrestacaoDeContas/prestacao-de-contas.scss @@ -322,7 +322,6 @@ .text-wrap-conferencia-de-lancamentos{ overflow-wrap: break-word; - hyphens: manual; } .span-rateio-tag-conferencia-de-lancamentos{ @@ -461,4 +460,48 @@ color: #297805; font-size: 14px; font-weight: bold; -} \ No newline at end of file +} + +/* trilha status relatorio consolidado */ + +.container-circulo-relatorio-consolidado { + z-index: 1; + text-align: center; + background-color: #fff; + + .circulo { + color: #fff; + font-size: 14px; + background-color: #A4A4A4; + border-radius: 67px; + padding: 3px 8px; + font-weight: bold; + } + + .circulo-duplo { + color: #fff; + font-size: 14px; + border-radius: 67px; + font-weight: bold; + padding: 12px 4px; + border: 2px solid #00585E; + background-color: #fff; + } + + .circulo-relatorio-consolidado-dois-digitos{ + padding: 8px 9px; + } + + .circulo-relatorio-consolidado-tres-digitos{ + padding: 9px 6px; + } + + .circulo-relatorio-consolidado-simples { + background-color: #00585E; + } + + .circulo-relatorio-consolidado-simples-vermelho { + background-color: #B40C02; + } +} + diff --git a/src/componentes/dres/RelatorioConsolidado/AtaParecerTecnico/VisualizacaoAtaParecerTecnico/Assinaturas/index.js b/src/componentes/dres/RelatorioConsolidado/AtaParecerTecnico/VisualizacaoAtaParecerTecnico/Assinaturas/index.js index cf7e50be6..9b69020d0 100644 --- a/src/componentes/dres/RelatorioConsolidado/AtaParecerTecnico/VisualizacaoAtaParecerTecnico/Assinaturas/index.js +++ b/src/componentes/dres/RelatorioConsolidado/AtaParecerTecnico/VisualizacaoAtaParecerTecnico/Assinaturas/index.js @@ -11,7 +11,7 @@ moment.updateLocale('pt', { export const Assinaturas = ({presentes_na_ata}) => { return ( <> -

+

Nada mais a ser tratado, os trabalhos foram encerrados, a Ata lida e achada conforme, vai assinada pelos membros da Comissão.

diff --git a/src/componentes/dres/RelatorioConsolidado/AtaParecerTecnico/VisualizacaoAtaParecerTecnico/TabelaAprovadas/index.js b/src/componentes/dres/RelatorioConsolidado/AtaParecerTecnico/VisualizacaoAtaParecerTecnico/TabelaAprovadas/index.js index a39598f13..9d2bff1e7 100644 --- a/src/componentes/dres/RelatorioConsolidado/AtaParecerTecnico/VisualizacaoAtaParecerTecnico/TabelaAprovadas/index.js +++ b/src/componentes/dres/RelatorioConsolidado/AtaParecerTecnico/VisualizacaoAtaParecerTecnico/TabelaAprovadas/index.js @@ -81,12 +81,6 @@ export const TabelaAprovadas = ({infoContas, status, exibirUltimoItem}) => { infoContas.contas.map((conta, index) => -
-

- Conta {conta.nome} -

-
-
{divideLista(conta).map((dados, index_dados) =>
@@ -123,12 +117,6 @@ export const TabelaAprovadas = ({infoContas, status, exibirUltimoItem}) => { infoContas.contas.map((conta, index) => -
-

- Conta {conta.nome} -

-
- @@ -166,12 +154,6 @@ export const TabelaAprovadas = ({infoContas, status, exibirUltimoItem}) => { infoContas.contas.map((conta, index) => -
-

- Conta {conta.nome} -

-
-
diff --git a/src/componentes/dres/RelatorioConsolidado/AtaParecerTecnico/VisualizacaoAtaParecerTecnico/TextoDinamicoSuperior/index.js b/src/componentes/dres/RelatorioConsolidado/AtaParecerTecnico/VisualizacaoAtaParecerTecnico/TextoDinamicoSuperior/index.js index d5ffd1e99..181963747 100644 --- a/src/componentes/dres/RelatorioConsolidado/AtaParecerTecnico/VisualizacaoAtaParecerTecnico/TextoDinamicoSuperior/index.js +++ b/src/componentes/dres/RelatorioConsolidado/AtaParecerTecnico/VisualizacaoAtaParecerTecnico/TextoDinamicoSuperior/index.js @@ -1,10 +1,16 @@ import React from "react"; -export const TextoDinamicoSuperior = ({dadosAta, retornaDadosAtaFormatado}) => { +export const TextoDinamicoSuperior = ({retornaDadosAtaFormatado, retornaTituloCorpoAta, ehPrevia}) => { return( <> -

ATA DE PARECER TÉCNICO CONCLUSIVO {retornaDadosAtaFormatado("numero_ata")}

+

{retornaTituloCorpoAta()} {retornaDadosAtaFormatado("numero_ata")}

+ {ehPrevia() && +

+ Atenção! Essa é apenas uma prévia da ata. As informações aqui exibidas podem mudar até a publicação do relatório consolidado. A ata final só poderá ser criada após a publicação. +

+ } +

{retornaDadosAtaFormatado("data_reuniao")}, às {retornaDadosAtaFormatado("hora_reuniao")}, reuniu-se a Comissão de Prestação de Contas do PTRF da Diretoria Regional de Educação {retornaDadosAtaFormatado("nome_dre")}, instituída pela Portaria DRE-{retornaDadosAtaFormatado("nome_dre")} nº {retornaDadosAtaFormatado("numero_portaria")} de {retornaDadosAtaFormatado("data_portaria")}, para análise das prestações de contas dos recursos transferidos pelo diff --git a/src/componentes/dres/RelatorioConsolidado/AtaParecerTecnico/VisualizacaoAtaParecerTecnico/TopoComBotoes/index.js b/src/componentes/dres/RelatorioConsolidado/AtaParecerTecnico/VisualizacaoAtaParecerTecnico/TopoComBotoes/index.js index 17830c778..57b72b82f 100644 --- a/src/componentes/dres/RelatorioConsolidado/AtaParecerTecnico/VisualizacaoAtaParecerTecnico/TopoComBotoes/index.js +++ b/src/componentes/dres/RelatorioConsolidado/AtaParecerTecnico/VisualizacaoAtaParecerTecnico/TopoComBotoes/index.js @@ -1,49 +1,47 @@ import React from "react"; import { visoesService } from "../../../../../../services/visoes.service"; -export const TopoComBotoes = ({dadosAta, retornaDadosAtaFormatado, handleClickFecharAtaParecerTecnico, handleClickEditarAta, handleClickGerarAta, textoBtnGerar, downloadAtaParecerTecnico}) =>{ - const podeEditarAta = [['change_ata_parecer_tecnico']].some(visoesService.getPermissoes) +export const TopoComBotoes = ({ + dadosAta, + retornaDadosAtaFormatado, + handleClickFecharAtaParecerTecnico, + handleClickEditarAta, + downloadAtaParecerTecnico, + retornaTituloCabecalhoAta, + jaPublicado + }) =>{ + const podeEditarAta = [['change_ata_parecer_tecnico']].some(visoesService.getPermissoes) && !jaPublicado return( <> -

-
-

Visualização da ata

- - Período {dadosAta.periodo.referencia} - - {retornaDadosAtaFormatado('periodo.data_inicio_realizacao_despesas')} até {retornaDadosAtaFormatado('periodo.data_fim_realizacao_despesas')} +
+
+

{retornaTituloCabecalhoAta()}

+ + Período {dadosAta.periodo.referencia} - {retornaDadosAtaFormatado('periodo.data_inicio_realizacao_despesas')} até {retornaDadosAtaFormatado('periodo.data_fim_realizacao_despesas')} -
+
-
- - - {dadosAta && dadosAta.alterado_em && - - } +
+ {!jaPublicado && + + } + + {dadosAta && dadosAta.arquivo_pdf && + + } - {dadosAta && dadosAta.arquivo_pdf && textoBtnGerar() !== 'Ata sendo gerada...' && - - } - - + +
-
-
+
) }; \ No newline at end of file diff --git a/src/componentes/dres/RelatorioConsolidado/AtaParecerTecnico/VisualizacaoAtaParecerTecnico/index.js b/src/componentes/dres/RelatorioConsolidado/AtaParecerTecnico/VisualizacaoAtaParecerTecnico/index.js index bd8f4ed4d..0a7683d50 100644 --- a/src/componentes/dres/RelatorioConsolidado/AtaParecerTecnico/VisualizacaoAtaParecerTecnico/index.js +++ b/src/componentes/dres/RelatorioConsolidado/AtaParecerTecnico/VisualizacaoAtaParecerTecnico/index.js @@ -1,13 +1,13 @@ -import React, {useState, useEffect} from "react"; +import React, {useState, useEffect, useCallback} from "react"; import {useParams} from "react-router-dom"; import { TopoComBotoes } from "./TopoComBotoes"; import { TextoDinamicoSuperior } from "./TextoDinamicoSuperior"; import { TabelaAprovadas } from "./TabelaAprovadas"; import { Assinaturas } from "./Assinaturas"; -import {getAtaParecerTecnico, getInfoContas, getGerarAta, getStatusAta, getDownloadAtaParecerTecnico} from "../../../../../services/dres/AtasParecerTecnico.service"; +import {getAtaParecerTecnico, getInfoContas, getDownloadAtaParecerTecnico} from "../../../../../services/dres/AtasParecerTecnico.service"; import moment from "moment"; import Loading from "../../../../../utils/Loading" -import {toastCustom} from "../../../../Globais/ToastCustom"; +import {getConsolidadoDrePorUuidAtaDeParecerTecnico} from "../../../../../services/dres/RelatorioConsolidado.service" moment.updateLocale('pt', { months: [ @@ -19,55 +19,52 @@ moment.updateLocale('pt', { const numero = require('numero-por-extenso'); export const VisualizacaoDaAtaParecerTecnico = () => { - let {uuid_ata} = useParams(); + let {uuid_ata, ja_publicado} = useParams(); + + // Para bloquear as edições quando for de um Consolidado DRE incremental publicacoes_anteriores + // eslint-disable-next-line no-eval + const jaPublicado = eval(ja_publicado) const [dadosAta, setDadosAta] = useState({}); const [infoContas, setInfoContas] = useState([]) const [loading, setLoading] = useState(true); - const [statusAta, setStatusAta] = useState(false); - useEffect(() => { - if (statusAta && statusAta.status_geracao_pdf && statusAta.status_geracao_pdf === "EM_PROCESSAMENTO") { - const timer = setInterval(() => { - consultarStatus(); - }, 5000); - // clearing interval - return () => clearInterval(timer); - } - }, [statusAta]); + // Consolidado DRE + const [consolidadoDre, setConsolidadoDre] = useState(false); - useEffect(() => { - getDadosAta(); - }, []); + const carregaConsolidadoDrePorUuidDaAtaDeParecerTecnico = useCallback(async () => { + if (uuid_ata){ + let consolidado_dre = await getConsolidadoDrePorUuidAtaDeParecerTecnico(uuid_ata) + setConsolidadoDre(consolidado_dre) + } + }, [uuid_ata]) useEffect(() => { - consultaInfoContas(); - }, [dadosAta]); + carregaConsolidadoDrePorUuidDaAtaDeParecerTecnico() + }, [carregaConsolidadoDrePorUuidDaAtaDeParecerTecnico]) - useEffect(() => { - consultarStatus(); - },[dadosAta]); - const getDadosAta = async () => { + const getDadosAta = useCallback(async () => { let dados_ata = await getAtaParecerTecnico(uuid_ata); setDadosAta(dados_ata); - } + }, [uuid_ata]) + + useEffect(() => { + getDadosAta(); + }, [getDadosAta]); - const consultaInfoContas = async () => { + const consultaInfoContas = useCallback( async () => { if(dadosAta && Object.entries(dadosAta).length > 0){ - let info = await getInfoContas(dadosAta.dre.uuid, dadosAta.periodo.uuid) + let info = await getInfoContas(dadosAta.dre.uuid, dadosAta.periodo.uuid, uuid_ata) + setInfoContas(info) setLoading(false); } - - } + }, [dadosAta, uuid_ata]) - const consultarStatus = async () => { - if (dadosAta && dadosAta.uuid && dadosAta.dre.uuid && dadosAta.periodo.uuid) { - let status = await getStatusAta(dadosAta.dre.uuid, dadosAta.periodo.uuid); - setStatusAta(status); - } - }; + useEffect(() => { + consultaInfoContas(); + }, [consultaInfoContas]); const dataPorExtenso = (data) => { if (!data) { @@ -107,8 +104,6 @@ export const VisualizacaoDaAtaParecerTecnico = () => { else{ texto_minuto = "minutos" } - - // Corrigindo o genero de hora let hora_genero = numero.porExtenso(hora).replace("um", "uma").replace("dois", "duas") @@ -120,7 +115,7 @@ export const VisualizacaoDaAtaParecerTecnico = () => { } return hora_extenso; - + } const retornaDadosAtaFormatado = (campo) => { @@ -148,7 +143,7 @@ export const VisualizacaoDaAtaParecerTecnico = () => { } else{ return "_______" - } + } } else if(campo === "data_portaria") { if(dadosAta.data_portaria){ @@ -168,44 +163,44 @@ export const VisualizacaoDaAtaParecerTecnico = () => { nome_dre = nome_dre.replace("DIRETORIA REGIONAL DE EDUCACAO", "") nome_dre = nome_dre.trim(); } - + return nome_dre; } }; - const handleClickFecharAtaParecerTecnico = () => { - window.location.assign("/dre-relatorio-consolidado") - }; + const retornaTituloCabecalhoAta = () => { + if(ehPrevia()){ + return "Visualização da prévia da ata" + } - const handleClickEditarAta = () => { - let path = `/edicao-da-ata-parecer-tecnico/${uuid_ata}/`; - window.location.assign(path) + return "Visualização da ata" } - const handleClickGerarAta = async () => { - try { - await getGerarAta(dadosAta.uuid, dadosAta.dre.uuid, dadosAta.periodo.uuid); - let mensagem_parte_1 = "Quando a geração for concluída um botão para download ficará" - let mensagem_parte_2 = "disponível na área da Ata na página anterior de Relatórios." - toastCustom.ToastCustomInfo('Ata sendo gerada', {mensagem_parte_1}
{mensagem_parte_2}
) - setStatusAta({ - ...statusAta, - status_geracao_pdf: "EM_PROCESSAMENTO" - }) - } - catch (e) { - console.log('Erro ao gerar ata ', e.response.data); + const retornaTituloCorpoAta = () => { + if(ehPrevia()){ + return "PRÉVIA DA ATA DE PARECER TÉCNICO CONCLUSIVO" } + return "ATA DE PARECER TÉCNICO CONCLUSIVO" } - const textoBtnGerar = () =>{ - if (statusAta.status_geracao_pdf === 'EM_PROCESSAMENTO'){ - return 'Ata sendo gerada...' - } else{ - return 'Gerar Ata' + const ehPrevia = () => { + if(!consolidadoDre.uuid){ + return true; } + else if(consolidadoDre.uuid && consolidadoDre.versao === "PREVIA"){ + return true; + } + return false; + } + + const handleClickFecharAtaParecerTecnico = () => { + window.location.assign("/dre-relatorio-consolidado") }; + const handleClickEditarAta = () => { + let path = `/edicao-da-ata-parecer-tecnico/${uuid_ata}/`; + window.location.assign(path) + } const downloadAtaParecerTecnico = async () =>{ await getDownloadAtaParecerTecnico(dadosAta.uuid); @@ -214,71 +209,83 @@ export const VisualizacaoDaAtaParecerTecnico = () => { return (
{loading ? ( -
- -
- ) : - - <> -
- {dadosAta && Object.entries(dadosAta).length > 0 && - + - } -
- -
- {dadosAta && Object.entries(dadosAta).length > 0 && - - } +
+ ) : - {dadosAta && Object.entries(dadosAta).length > 0 && infoContas && infoContas.aprovadas && - - } + <> +
+ {dadosAta && Object.entries(dadosAta).length > 0 && + + } +
- {dadosAta && Object.entries(dadosAta).length > 0 && infoContas && infoContas.aprovadas_ressalva && - - } +
+ {dadosAta && Object.entries(dadosAta).length > 0 && + + } - {dadosAta && Object.entries(dadosAta).length > 0 && infoContas && infoContas.reprovadas && - - } + {dadosAta && Object.entries(dadosAta).length > 0 && infoContas && infoContas.aprovadas && + + } - {dadosAta && Object.entries(dadosAta).length > 0 && dadosAta.presentes_na_ata && - - } -
- - } + {dadosAta && Object.entries(dadosAta).length > 0 && infoContas && infoContas.aprovadas_ressalva && + + } + + {dadosAta && Object.entries(dadosAta).length > 0 && infoContas && infoContas.reprovadas && + + } + + {dadosAta && dadosAta.comentarios && + <> +

Comentários

+
+
+

{dadosAta.comentarios}

+
+
+ + } + {dadosAta && Object.entries(dadosAta).length > 0 && dadosAta.presentes_na_ata && + + } + +
+ + }
) } \ No newline at end of file diff --git a/src/componentes/dres/RelatorioConsolidado/AtaParecerTecnico/ata-parecer-tecnico.scss b/src/componentes/dres/RelatorioConsolidado/AtaParecerTecnico/ata-parecer-tecnico.scss index a14ac2a45..d09375a01 100644 --- a/src/componentes/dres/RelatorioConsolidado/AtaParecerTecnico/ata-parecer-tecnico.scss +++ b/src/componentes/dres/RelatorioConsolidado/AtaParecerTecnico/ata-parecer-tecnico.scss @@ -53,6 +53,12 @@ font-size: 16px; } +.texto-atencao { + color: #42474A; + font-size: 16px; + font-weight: bold; +} + .tabela-status-pc tbody:nth-child(odd) { background-color: #F3F3F3; } diff --git a/src/componentes/dres/RelatorioConsolidado/AtaParecerTecnico/index.js b/src/componentes/dres/RelatorioConsolidado/AtaParecerTecnico/index.js index 4083c6cc9..833df3d59 100644 --- a/src/componentes/dres/RelatorioConsolidado/AtaParecerTecnico/index.js +++ b/src/componentes/dres/RelatorioConsolidado/AtaParecerTecnico/index.js @@ -1,15 +1,39 @@ import React from "react"; import './ata-parecer-tecnico.scss'; import { exibeDateTimePT_BR_Ata } from "../../../../utils/ValidacoesAdicionaisFormularios"; -import Spinner from "../../../../assets/img/spinner.gif" import {FontAwesomeIcon} from '@fortawesome/react-fontawesome' import {faDownload} from '@fortawesome/free-solid-svg-icons' +import {getDownloadAtaParecerTecnico} from "../../../../services/dres/AtasParecerTecnico.service"; +import {postCriarAtaAtrelarAoConsolidadoDre} from "../../../../services/dres/RelatorioConsolidado.service"; +export const AtaParecerTecnico = ({consolidadoDre}) => { + + const onClickVerAta = (uuid_ata) =>{ + window.location.assign(`/visualizacao-da-ata-parecer-tecnico/${uuid_ata}/${consolidadoDre.ja_publicado}`) + }; + + + const criarAtaAtrelarAoConsolidado = async (dre_uuid, periodo_uuid, consolidado_uuid=null) =>{ + let payload = { + dre: dre_uuid, + periodo: periodo_uuid, + consolidado: consolidado_uuid, + } + try { + let ata = await postCriarAtaAtrelarAoConsolidadoDre(payload) + onClickVerAta(ata.uuid) + }catch (e) { + console.log("Erro ao criar a Ata - criarAtaAtrelarAoConsolidado", e) + } + } + + const downloadAtaParecerTecnico = async () =>{ + await getDownloadAtaParecerTecnico(consolidadoDre.ata_de_parecer_tecnico.uuid); + }; -export const AtaParecerTecnico = ({ataParecerTecnico, onClickVerAta, disablebtnVisualizarAta, downloadAtaParecerTecnico, handleClickGerarAta, disablebtnGerarAta}) => { const mensagem = (ata) => { - if(ata.uuid === undefined){ - return "Documento pendente de geração"; + if(!ata || ata.uuid === undefined){ + return "Documento pendente de geração"; } else if(ata.uuid && ata.alterado_em){ return "Último preenchimento em " + exibeDateTimePT_BR_Ata(ata.alterado_em); @@ -20,91 +44,55 @@ export const AtaParecerTecnico = ({ataParecerTecnico, onClickVerAta, disablebtnV } const classeMensagem = (ata) => { - if(ata.uuid === undefined || ata.alterado_em === null){ - return "ata-nao-preenchida" + if(!ata || ata.uuid === undefined || ata.alterado_em === null){ + return "ata-nao-preenchida" } else if(ata.uuid && ata.alterado_em){ return "ata-preenchida" } } - const emProcessamento = (ata) => { - if(ata && ata.status_geracao_pdf && ata.status_geracao_pdf === "EM_PROCESSAMENTO"){ - return true; - } - - return false; - } - - const mensagemGeracao = (ata) => { - if(ata.status_geracao_pdf === "EM_PROCESSAMENTO"){ - return ( - - Gerando ata em PDF. Aguarde - - ) - } - } - return ( <> -
-
-
-
- Atas de Parecer Técnico Conclusivo +
+
+
+
+

Ata de apresentação do Parecer Técnico Conclusivo

+

+ {mensagem(consolidadoDre.ata_de_parecer_tecnico)} + {consolidadoDre.ata_de_parecer_tecnico && consolidadoDre.ata_de_parecer_tecnico.arquivo_pdf && + + } +

- -
- {ataParecerTecnico && ataParecerTecnico.alterado_em && +
+
+ {consolidadoDre.ata_de_parecer_tecnico && consolidadoDre.ata_de_parecer_tecnico.uuid ? ( - } - + ): -
-
-
-
-

Ata de apresentação de Parecer Técnico Conclusivo

-

- - {mensagem(ataParecerTecnico)} - + } - <> - {emProcessamento(ataParecerTecnico) - ? - mensagemGeracao(ataParecerTecnico) - : - ataParecerTecnico.arquivo_pdf && - - } - -

-
diff --git a/src/componentes/dres/RelatorioConsolidado/BarraDeStatus.js b/src/componentes/dres/RelatorioConsolidado/BarraDeStatus.js index 6b6d46334..1043a9984 100644 --- a/src/componentes/dres/RelatorioConsolidado/BarraDeStatus.js +++ b/src/componentes/dres/RelatorioConsolidado/BarraDeStatus.js @@ -1,10 +1,10 @@ import React from "react"; -export const BarraDeStatus = ({statusRelatorio}) =>{ +export const BarraDeStatus = ({statusBarraDeStatus}) =>{ return(
-
-

{statusRelatorio.status_txt ? statusRelatorio.status_txt : ""}

+
+

{statusBarraDeStatus.status_txt ? statusBarraDeStatus.status_txt : ""}

); diff --git a/src/componentes/dres/RelatorioConsolidado/DemonstrativoDaExecucaoFisicoFinanceira.js b/src/componentes/dres/RelatorioConsolidado/DemonstrativoDaExecucaoFisicoFinanceira.js new file mode 100644 index 000000000..c0bb87bab --- /dev/null +++ b/src/componentes/dres/RelatorioConsolidado/DemonstrativoDaExecucaoFisicoFinanceira.js @@ -0,0 +1,110 @@ +import React, {memo, useEffect, useState} from "react"; +import { + getDownloadRelatorio, + getTiposConta +} from "../../../services/dres/RelatorioConsolidado.service"; +import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; +import {faDownload} from "@fortawesome/free-solid-svg-icons"; + +const DemonstrativoDaExecucaoFisicoFinanceira = ({consolidadoDre, periodoEscolhido}) => { + const [contas, setContas] = useState(false); + + useEffect(()=>{ + let mounted = true + const carregaContas = async () => { + try { + let tipo_contas = await getTiposConta(); + if (mounted){ + setContas(tipo_contas); + } + }catch (e) { + console.log("Erro ao trazer os tipos de contas ", e); + } + }; + carregaContas() + return () =>{ + mounted = false + } + }, []) + + const retornaClasseMensagem = (texto) => { + let classeMensagem = "documento-gerado"; + if (texto === 'NAO_GERADOS') { + classeMensagem = "documento-pendente" + } + if (texto === 'EM_PROCESSAMENTO') { + classeMensagem = "documento-processando" + } + return classeMensagem + } + + const downloadRelatorio = async (relatorio_uuid, relatorio_versao) =>{ + await getDownloadRelatorio(relatorio_uuid, relatorio_versao); + }; + + const onClickPreencherRelatorio = () =>{ + let consolidado_dre_uuid = consolidadoDre.uuid + window.location.assign(`/dre-relatorio-consolidado-em-tela/${periodoEscolhido}/${consolidadoDre.ja_publicado}/${consolidado_dre_uuid}`) + }; + return ( +
+ {consolidadoDre.relatorios_fisico_financeiros && consolidadoDre.relatorios_fisico_financeiros.length > 0 ? ( + <> + {consolidadoDre.relatorios_fisico_financeiros.map((relatorio) => +
+
+
+

Demonstrativo da Execução Físico-Financeira {relatorio.tipo_conta ? "- Conta " + relatorio.tipo_conta : ""}

+

+ {relatorio.status_geracao_arquivo} + +

+
+
+ {!consolidadoDre.eh_consolidado_de_publicacoes_parciais && +
+ +
+ } +
+ )} + + ) : +
+
+
+

Demonstrativo da Execução Físico-Financeira

+

+ Documento pendente de geração +

+
+
+ {!consolidadoDre.eh_consolidado_de_publicacoes_parciais && +
+ +
+ } +
+ } +
+ ) +} +export default memo(DemonstrativoDaExecucaoFisicoFinanceira) \ No newline at end of file diff --git a/src/componentes/dres/RelatorioConsolidado/ExecucaoFinanceira/index.js b/src/componentes/dres/RelatorioConsolidado/ExecucaoFinanceira/index.js deleted file mode 100644 index 96f9a8726..000000000 --- a/src/componentes/dres/RelatorioConsolidado/ExecucaoFinanceira/index.js +++ /dev/null @@ -1,93 +0,0 @@ -import React from "react"; -import Spinner from "../../../../assets/img/spinner.gif" -import {FontAwesomeIcon} from '@fortawesome/react-fontawesome' -import {faDownload} from '@fortawesome/free-solid-svg-icons' - -export const ExecucaoFinanceira =({statusRelatorio, textoBtnRelatorio, gerarPrevia, downloadPreviaRelatorio, downloadRelatorio}) =>{ - const emProcessamento = statusRelatorio.status_geracao === 'EM_PROCESSAMENTO' - let classeMensagem = "documento-gerado"; - if (statusRelatorio.status_geracao === 'NAO_GERADO') { - classeMensagem = "documento-pendente" - } - if (statusRelatorio.status_geracao === 'EM_PROCESSAMENTO') { - classeMensagem = "documento-processando" - } - - const relatorioGerado = (status) => { - if(status === "GERADO_PARCIAL" || status === "GERADO_TOTAL"){ - return true; - } - - return false; - } - - return( - <> - {statusRelatorio && -
-
-

Execução Financeira

-
-
-
-

Demonstrativo da Execução Físico-Financeira

-

- - {statusRelatorio.status_arquivo ? statusRelatorio.status_arquivo : ''} {emProcessamento ? : ''} - - - {relatorioGerado(statusRelatorio.status_geracao) && statusRelatorio.versao === "PREVIA" ? - - : - null - } - - -

- - -
-
- {statusRelatorio.versao !== "FINAL" && - - } - -
-
-
-
-
- } - - - ) -}; \ No newline at end of file diff --git a/src/componentes/dres/RelatorioConsolidado/Lauda.js b/src/componentes/dres/RelatorioConsolidado/Lauda.js new file mode 100644 index 000000000..7fac0269d --- /dev/null +++ b/src/componentes/dres/RelatorioConsolidado/Lauda.js @@ -0,0 +1,67 @@ +import React, {memo} from "react"; +import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; +import {faDownload} from "@fortawesome/free-solid-svg-icons"; +import { getDownloadLauda } from "../../../services/dres/Laudas.service"; +import { formataNomeDRE } from "../../../utils/ValidacoesAdicionaisFormularios"; + +const Lauda = ({consolidadoDre}) => { + + const retornaClasseMensagem = (texto) => { + let classeMensagem = "documento-gerado"; + if (texto === 'NAO_GERADOS') { + classeMensagem = "documento-pendente" + } + if (texto === 'EM_PROCESSAMENTO') { + classeMensagem = "documento-processando" + } + return classeMensagem + } + + const downloadLauda = async (lauda) =>{ + let nome_dre = ""; + let tipo_conta = ""; + + if(consolidadoDre && consolidadoDre.dre_nome ){ + nome_dre = formataNomeDRE(consolidadoDre.dre_nome).toLowerCase(); + } + + if(lauda && lauda.tipo_conta && lauda.tipo_conta){ + tipo_conta = lauda.tipo_conta.toLowerCase(); + } + + let filename = `Lauda_${nome_dre}_${tipo_conta}.docx.txt`; + + await getDownloadLauda(lauda.uuid, filename); + }; + + return( +
+ {consolidadoDre.laudas && consolidadoDre.laudas.length > 0 && + <> + {consolidadoDre.laudas.map((lauda) => +
+
+
+

Lauda - {lauda && lauda.tipo_conta ? "Conta " + lauda.tipo_conta : ""}

+ +

+ {lauda.status_geracao_arquivo} + +

+
+
+
+ )} + + } +
+ ) + +} +export default memo(Lauda) \ No newline at end of file diff --git a/src/componentes/dres/RelatorioConsolidado/ModalAssociacoesEmAnalise.js b/src/componentes/dres/RelatorioConsolidado/ModalAssociacoesEmAnalise.js deleted file mode 100644 index 87f299d11..000000000 --- a/src/componentes/dres/RelatorioConsolidado/ModalAssociacoesEmAnalise.js +++ /dev/null @@ -1,19 +0,0 @@ -import React from "react"; -import {ModalBootstrap} from "../../Globais/ModalBootstrap"; - -export const ModalAssociacoesEmAnalise = (props) =>{ - return ( - - ) -}; \ No newline at end of file diff --git a/src/componentes/dres/RelatorioConsolidado/ModalMsgGeracaoRelatorio.js b/src/componentes/dres/RelatorioConsolidado/ModalMsgGeracaoRelatorio.js index 8f9a4bb82..f99c24e9f 100644 --- a/src/componentes/dres/RelatorioConsolidado/ModalMsgGeracaoRelatorio.js +++ b/src/componentes/dres/RelatorioConsolidado/ModalMsgGeracaoRelatorio.js @@ -1,20 +1,6 @@ import React from "react"; import {ModalBootstrap} from "../../Globais/ModalBootstrap"; -export const ModalMsgGeracaoRelatorio = (props) =>{ - return ( - - ) -}; - export const ModalMsgGeracaoLauda = (props) =>{ return ( { + return( + + ) +} +export default PreviaDocumentos \ No newline at end of file diff --git a/src/componentes/dres/RelatorioConsolidado/PublicarDocumentos.js b/src/componentes/dres/RelatorioConsolidado/PublicarDocumentos.js new file mode 100644 index 000000000..010cf8430 --- /dev/null +++ b/src/componentes/dres/RelatorioConsolidado/PublicarDocumentos.js @@ -0,0 +1,42 @@ +import React, {memo} from "react"; +import { ModalPublicarRelatorioConsolidado } from "../../../utils/Modais"; + +const PublicarDocumentos = ({publicarConsolidadoDre, podeGerarPrevia, children, consolidadoDre, publicarConsolidadoDePublicacoesParciais, showPublicarRelatorioConsolidado, setShowPublicarRelatorioConsolidado}) => { + + return( + <> +
+
{consolidadoDre.titulo_relatorio}
+ + {!consolidadoDre.ja_publicado && + <> + {podeGerarPrevia() && +
+ {children} +
+ } + +
+ +
+ + + } +
+ +
+ setShowPublicarRelatorioConsolidado(false)} + publicarConsolidadoDre={() => publicarConsolidadoDre(consolidadoDre)} + /> +
+ + ) +} +export default memo(PublicarDocumentos) \ No newline at end of file diff --git a/src/componentes/dres/RelatorioConsolidado/RelatorioConsolidadoApuracao/BoxConsultarDados.js b/src/componentes/dres/RelatorioConsolidado/RelatorioConsolidadoApuracao/BoxConsultarDados.js index 119ddd0d2..392cc8448 100644 --- a/src/componentes/dres/RelatorioConsolidado/RelatorioConsolidadoApuracao/BoxConsultarDados.js +++ b/src/componentes/dres/RelatorioConsolidado/RelatorioConsolidadoApuracao/BoxConsultarDados.js @@ -2,10 +2,10 @@ import React from "react"; import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; import {faArrowRight} from "@fortawesome/free-solid-svg-icons"; -export const BoxConsultarDados = ({periodo_uuid, conta_uuid}) =>{ +export const BoxConsultarDados = ({periodo_uuid, conta_uuid, jaPublicado}) =>{ const onClickConsultar = ()=>{ - window.location.assign(`/dre-relatorio-consolidado-dados-das-ues/${periodo_uuid}/${conta_uuid}/`) + window.location.assign(`/dre-relatorio-consolidado-dados-das-ues/${periodo_uuid}/${conta_uuid}/${jaPublicado}`) }; return( diff --git a/src/componentes/dres/RelatorioConsolidado/RelatorioConsolidadoApuracao/JustificativaDiferenca.js b/src/componentes/dres/RelatorioConsolidado/RelatorioConsolidadoApuracao/JustificativaDiferenca.js index ee1f54cda..e5b64aeb8 100644 --- a/src/componentes/dres/RelatorioConsolidado/RelatorioConsolidadoApuracao/JustificativaDiferenca.js +++ b/src/componentes/dres/RelatorioConsolidado/RelatorioConsolidadoApuracao/JustificativaDiferenca.js @@ -2,7 +2,7 @@ import React from "react"; import {visoesService} from "../../../../services/visoes.service"; -export const JustificativaDiferenca = ({comparaValores, justificativaDiferenca, setJustificativaDiferenca, onChangeJustificativaDiferenca, onSubmitJustificativaDiferenca, btnSalvarJustificativaDisable, setBtnSalvarJustificativaDisable}) => { +export const JustificativaDiferenca = ({comparaValores, justificativaDiferenca, setJustificativaDiferenca, onChangeJustificativaDiferenca, onSubmitJustificativaDiferenca, btnSalvarJustificativaDisable, setBtnSalvarJustificativaDisable, jaPublicado}) => { const onClickBtnLimpar = () => { setJustificativaDiferenca({ @@ -11,7 +11,7 @@ export const JustificativaDiferenca = ({comparaValores, justificativaDiferenca, }) setBtnSalvarJustificativaDisable(false); } - + return( <> {comparaValores() && @@ -22,8 +22,30 @@ export const JustificativaDiferenca = ({comparaValores, justificativaDiferenca,
- - + +
} diff --git a/src/componentes/dres/RelatorioConsolidado/RelatorioConsolidadoApuracao/TopoComBotoes.js b/src/componentes/dres/RelatorioConsolidado/RelatorioConsolidadoApuracao/TopoComBotoes.js index 6ab7e9e1d..9f25ca68b 100644 --- a/src/componentes/dres/RelatorioConsolidado/RelatorioConsolidadoApuracao/TopoComBotoes.js +++ b/src/componentes/dres/RelatorioConsolidado/RelatorioConsolidadoApuracao/TopoComBotoes.js @@ -1,7 +1,6 @@ import React from "react"; -import {visoesService} from "../../../../services/visoes.service"; -export const TopoComBotoes = ({periodoNome, contaNome, onClickGerarRelatorio, textoBtnRelatorio}) =>{ +export const TopoComBotoes = ({periodoNome, contaNome}) =>{ return( <>
@@ -9,18 +8,6 @@ export const TopoComBotoes = ({periodoNome, contaNome, onClickGerarRelatorio, te
- {visoesService.getPermissoes(['gerar_relatorio_consolidado_dre']) - ? -
- -
- : null}
) diff --git a/src/componentes/dres/RelatorioConsolidado/RelatorioConsolidadoApuracao/index.js b/src/componentes/dres/RelatorioConsolidado/RelatorioConsolidadoApuracao/index.js index 3d82b233e..1f644439b 100644 --- a/src/componentes/dres/RelatorioConsolidado/RelatorioConsolidadoApuracao/index.js +++ b/src/componentes/dres/RelatorioConsolidado/RelatorioConsolidadoApuracao/index.js @@ -1,4 +1,5 @@ -import React, {useEffect, useState} from "react"; +// TODO Remover o componente RelatorioConsolidadoApuracao. +import React, {useEffect, useState, useCallback} from "react"; import {useParams} from "react-router-dom"; import {InfoAssociacoesEmAnalise} from "./InfoAssociacoesEmAnalise"; import { @@ -11,7 +12,7 @@ import { getDevolucoesAoTesouro, putCriarEditarDeletarObservacaoDevolucaoContaPtrf, putCriarEditarDeletarObservacaoDevolucaoTesouro, - postGerarRelatorio, getConsultarStatus, + getConsolidadoDre } from "../../../../services/dres/RelatorioConsolidado.service"; import {TopoComBotoes} from "./TopoComBotoes"; import {BoxConsultarDados} from "./BoxConsultarDados"; @@ -23,14 +24,16 @@ import {TabelaDevolucoesAoTesouro} from "./TabelaDevolucoesAoTesouro"; import {TabelaExecucaoFisica} from "./TabelaExecucaoFisica"; import {auxGetNomes} from "../auxGetNomes"; import {ModalObservacoesRelatorioConsolidadoApuracao} from "../ModalObservacoesRelatorioConsolidadoApuracao"; -import {ModalAssociacoesEmAnalise} from "../ModalAssociacoesEmAnalise"; -import {ModalMsgGeracaoRelatorio} from "../ModalMsgGeracaoRelatorio"; import {ModalSalvarJustificativa} from "../ModalSalvarJustificativa"; import Loading from "../../../../utils/Loading"; export const RelatorioConsolidadoApuracao = () => { - let {periodo_uuid, conta_uuid} = useParams(); + let {periodo_uuid, conta_uuid, ja_publicado, consolidado_dre_uuid} = useParams(); + + // Para bloquear as edições quando for de um Consolidado DRE incremental publicacoes_anteriores + // eslint-disable-next-line no-eval + const jaPublicado = eval(ja_publicado) const dre_uuid = visoesService.getItemUsuarioLogado('associacao_selecionada.uuid'); @@ -55,26 +58,10 @@ export const RelatorioConsolidadoApuracao = () => { const [observacao, setObservacao] = useState(false); const [showModalObservacao, setShowModalObservacao] = useState(false); - const [showModalAssociacoesEmAnalise, setShowModalAssociacoesEmAnalise] = useState(false); const [loading, setLoading] = useState(false); - const [showModalMsgGeracaoRelatorio, setShowModalMsgGeracaoRelatorio] = useState(false); - const [msgGeracaoRelatorio, setMsgGeracaoRelatorio] = useState(''); - - const [statusRelatorio, setStatusRelatorio] = useState(false); - - useEffect(() => { - if (statusRelatorio && statusRelatorio.status_geracao && statusRelatorio.status_geracao === "EM_PROCESSAMENTO") { - const timer = setInterval(() => { - consultarStatus(); - }, 5000); - // clearing interval - return () => clearInterval(timer); - } - }); - useEffect(() => { - consultarStatus(); - }, [periodo_uuid, conta_uuid]); + // Consolidado DRE + const [consolidadoDre, setConsolidadoDre] = useState(false); useEffect(() => { carregaItensDashboard(); @@ -84,38 +71,30 @@ export const RelatorioConsolidadoApuracao = () => { carregaNomePeriodo(); carregaNomeConta(); retornaQtdeEmAnalise(); - carregaExecucaoFinanceira(); carregaDevolucoesContaPtrf(); carregaJustificativa(); carregaDevolucoesAoTesouro(); }, [itensDashboard]); - const consultarStatus = async () => { - console.log("Consultar status...") - if (dre_uuid && periodo_uuid && conta_uuid) { - let status = await getConsultarStatus(dre_uuid, periodo_uuid, conta_uuid); - setStatusRelatorio(status); - } - }; - - const setaStatusComoProcessando = () => { - const statusProcessando = { - pcs_em_analise: false, - status_geracao: "EM_PROCESSAMENTO", - status_txt: "Análise de prestações de contas das associações completa. Relatório em processamento.", - cor_idx: 3, - status_arquivo: "Relatório sendo gerado. Aguarde." + // Consolidado DRE + const carregaConsolidadoDre = useCallback(async () => { + if (dre_uuid && periodo_uuid){ + try { + let consolidado_dre = await getConsolidadoDre(dre_uuid, periodo_uuid) + if (consolidado_dre && consolidado_dre.length > 0){ + setConsolidadoDre(consolidado_dre[0]) + }else { + setConsolidadoDre(false) + } + }catch (e) { + console.log("Erro ao buscar Consolidado Dre ", e) + } } - setStatusRelatorio(statusProcessando); - }; + }, [dre_uuid, periodo_uuid]) - const textoBtnRelatorio = () =>{ - if (statusRelatorio.status_geracao === 'EM_PROCESSAMENTO'){ - return 'Relatório sendo gerado...' - } else{ - return 'Gerar relatório' - } - }; + useEffect(() => { + carregaConsolidadoDre() + }, [carregaConsolidadoDre]) const carregaItensDashboard = async () => { if (periodo_uuid) { @@ -136,14 +115,19 @@ export const RelatorioConsolidadoApuracao = () => { setContaNome(conta_nome); }; - const carregaExecucaoFinanceira = async () => { + const carregaExecucaoFinanceira = useCallback( async () => { try { - let execucao = await getExecucaoFinanceira(dre_uuid, periodo_uuid, conta_uuid); + let execucao = await getExecucaoFinanceira(dre_uuid, periodo_uuid, consolidado_dre_uuid !== 'null' ? consolidado_dre_uuid : ''); + console.log("XXXXXXXXXXXXXXX getExecucaoFinanceira ", execucao) setExecucaoFinanceira(execucao); } catch (e) { console.log("Erro ao carregar execução financeira ", e) } - }; + }, [dre_uuid, periodo_uuid, consolidado_dre_uuid]); + + useEffect(() => { + carregaExecucaoFinanceira(); + }, [carregaExecucaoFinanceira]); const carregaDevolucoesContaPtrf = async () => { try { @@ -235,8 +219,6 @@ export const RelatorioConsolidadoApuracao = () => { const onHandleClose = () => { setShowModalObservacao(false); - setShowModalAssociacoesEmAnalise(false); - setShowModalMsgGeracaoRelatorio(false); }; const onHandleCloseSalvarJustificativa = () => { @@ -295,41 +277,19 @@ export const RelatorioConsolidadoApuracao = () => { setLoading(false); }; - const onClickGerarRelatorio = async () => { - if (totalEmAnalise > 0) { - setShowModalAssociacoesEmAnalise(true) - } else { - await onGerarRelatorio(); + const publicado = () => { + if(!consolidadoDre){ + return false; } - }; - - const onGerarRelatorio = async () => { - - let parcial = totalEmAnalise > 0; - - const payload = { - dre_uuid: dre_uuid, - periodo_uuid: periodo_uuid, - tipo_conta_uuid: conta_uuid, - parcial: parcial - }; - try { - setLoading(true); - await postGerarRelatorio(payload); - console.log('Solicitação de relatório enviada com sucesso.'); - setShowModalAssociacoesEmAnalise(false); - setLoading(false); - setMsgGeracaoRelatorio('O relatório está sendo gerado, enquanto isso você pode continuar a usar o sistema. Consulte na tela anterior o status de geração do relatório.'); - setShowModalMsgGeracaoRelatorio(true) - setaStatusComoProcessando() - } catch (e) { - setShowModalAssociacoesEmAnalise(false); - setLoading(false); - setMsgGeracaoRelatorio('Erro ao gerar relatório'); - setShowModalMsgGeracaoRelatorio(true); - console.log('Erro ao gerar relatório ', e.response.data); + else if(consolidadoDre && consolidadoDre.versao === "PREVIA"){ + return false; } - }; + else if(consolidadoDre && consolidadoDre.versao === "FINAL"){ + return true; + } + + return false; + } return ( <> @@ -350,8 +310,6 @@ export const RelatorioConsolidadoApuracao = () => { { { onSubmitJustificativaDiferenca={onSubmitJustificativaDiferenca} btnSalvarJustificativaDisable={btnSalvarJustificativaDisable} setBtnSalvarJustificativaDisable={setBtnSalvarJustificativaDisable} + jaPublicado={jaPublicado} /> { titulo="Observação sobre devolução" /> -
- -
{ handleClose={onHandleCloseSalvarJustificativa} />
- - {msgGeracaoRelatorio && -
- -
- } - } diff --git a/src/componentes/dres/RelatorioConsolidado/RelatorioConsolidadoDadosDasUes/TopoComBotoes.js b/src/componentes/dres/RelatorioConsolidado/RelatorioConsolidadoDadosDasUes/TopoComBotoes.js index 6a35e7f47..1ed9be6c9 100644 --- a/src/componentes/dres/RelatorioConsolidado/RelatorioConsolidadoDadosDasUes/TopoComBotoes.js +++ b/src/componentes/dres/RelatorioConsolidado/RelatorioConsolidadoDadosDasUes/TopoComBotoes.js @@ -2,14 +2,14 @@ import React from "react"; import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; import {faArrowLeft} from "@fortawesome/free-solid-svg-icons"; -export const TopoComBotoes = ({periodoNome, contaNome, periodo_uuid, conta_uuid}) =>{ +export const TopoComBotoes = ({periodoNome, contaNome, periodo_uuid, conta_uuid, jaPublicado}) =>{ return( <>

Período {periodoNome} | Conta {contaNome}

+ +
+ + } + + ) +}; \ No newline at end of file diff --git a/src/componentes/dres/RelatorioConsolidado/RelatorioConsolidadoEmTela/TabelaExecucaoFinanceira.js b/src/componentes/dres/RelatorioConsolidado/RelatorioConsolidadoEmTela/TabelaExecucaoFinanceira.js new file mode 100644 index 000000000..0d99c0be6 --- /dev/null +++ b/src/componentes/dres/RelatorioConsolidado/RelatorioConsolidadoEmTela/TabelaExecucaoFinanceira.js @@ -0,0 +1,95 @@ +import React from "react"; + +export const TabelaExecucaoFinanceira = ({execucaoFinanceira, valorTemplate, comparaValores, tipoConta}) =>{ + + return( + <> +
Execução Financeira - Conta {tipoConta}
+ {execucaoFinanceira && Object.entries(execucaoFinanceira).length > 0 && +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Tipo de recursoCusteioCapitalLivre AplicaçãoTotal (R$)
Saldo reprogramado período anterior{execucaoFinanceira.saldo_reprogramado_periodo_anterior_custeio ? valorTemplate(execucaoFinanceira.saldo_reprogramado_periodo_anterior_custeio) :'-'}{execucaoFinanceira.saldo_reprogramado_periodo_anterior_capital ? valorTemplate(execucaoFinanceira.saldo_reprogramado_periodo_anterior_capital) :'-'}{execucaoFinanceira.saldo_reprogramado_periodo_anterior_livre ? valorTemplate(execucaoFinanceira.saldo_reprogramado_periodo_anterior_livre) :'-'}{execucaoFinanceira.saldo_reprogramado_periodo_anterior_total ? valorTemplate(execucaoFinanceira.saldo_reprogramado_periodo_anterior_total) :'-'}
Previsto Secretaria Municipal de Educação{execucaoFinanceira.repasses_previstos_sme_custeio ? valorTemplate(execucaoFinanceira.repasses_previstos_sme_custeio) :'-'}{execucaoFinanceira.repasses_previstos_sme_capital ? valorTemplate(execucaoFinanceira.repasses_previstos_sme_capital) :'-'}{execucaoFinanceira.repasses_previstos_sme_livre ? valorTemplate(execucaoFinanceira.repasses_previstos_sme_livre) :'-'}{execucaoFinanceira.repasses_previstos_sme_total ? valorTemplate(execucaoFinanceira.repasses_previstos_sme_total) :'-'}
Transferido pela Diretoria Regional de Ensino no período{execucaoFinanceira.repasses_no_periodo_custeio ? valorTemplate(execucaoFinanceira.repasses_no_periodo_custeio) :'-'}{execucaoFinanceira.repasses_no_periodo_capital ? valorTemplate(execucaoFinanceira.repasses_no_periodo_capital) :'-'}{execucaoFinanceira.repasses_no_periodo_livre ? valorTemplate(execucaoFinanceira.repasses_no_periodo_livre) :'-'}{execucaoFinanceira.repasses_no_periodo_total ? valorTemplate(execucaoFinanceira.repasses_no_periodo_total) :'-'}
Rendimentos de Aplicação Financeira{execucaoFinanceira.receitas_rendimento_no_periodo_custeio ? valorTemplate(execucaoFinanceira.receitas_rendimento_no_periodo_custeio) :'-'}{execucaoFinanceira.receitas_rendimento_no_periodo_capital ? valorTemplate(execucaoFinanceira.receitas_rendimento_no_periodo_capital) :'-'}{execucaoFinanceira.receitas_rendimento_no_periodo_livre ? valorTemplate(execucaoFinanceira.receitas_rendimento_no_periodo_livre) :'-'}{execucaoFinanceira.receitas_rendimento_no_periodo_total ? valorTemplate(execucaoFinanceira.receitas_rendimento_no_periodo_total) :'-'}
Devolução à conta PTRF{execucaoFinanceira.receitas_devolucao_no_periodo_custeio ? valorTemplate(execucaoFinanceira.receitas_devolucao_no_periodo_custeio) :'-'}{execucaoFinanceira.receitas_devolucao_no_periodo_capital ? valorTemplate(execucaoFinanceira.receitas_devolucao_no_periodo_capital) :'-'}{execucaoFinanceira.receitas_devolucao_no_periodo_livre ? valorTemplate(execucaoFinanceira.receitas_devolucao_no_periodo_livre) :'-'}{execucaoFinanceira.receitas_devolucao_no_periodo_total ? valorTemplate(execucaoFinanceira.receitas_devolucao_no_periodo_total) :'-'}
Demais créditos{execucaoFinanceira.demais_creditos_no_periodo_custeio ? valorTemplate(execucaoFinanceira.demais_creditos_no_periodo_custeio) :'-'}{execucaoFinanceira.demais_creditos_no_periodo_capital ? valorTemplate(execucaoFinanceira.demais_creditos_no_periodo_capital) :'-'}{execucaoFinanceira.demais_creditos_no_periodo_livre ? valorTemplate(execucaoFinanceira.demais_creditos_no_periodo_livre) :'-'}{execucaoFinanceira.demais_creditos_no_periodo_total ? valorTemplate(execucaoFinanceira.demais_creditos_no_periodo_total) :'-'}
Valor total{execucaoFinanceira.receitas_totais_no_periodo_custeio ? valorTemplate(execucaoFinanceira.receitas_totais_no_periodo_custeio) :'-'}{execucaoFinanceira.receitas_totais_no_periodo_capital ? valorTemplate(execucaoFinanceira.receitas_totais_no_periodo_capital) :'-'}{execucaoFinanceira.receitas_totais_no_periodo_livre ? valorTemplate(execucaoFinanceira.receitas_totais_no_periodo_livre) :'-'}{execucaoFinanceira.receitas_totais_no_periodo_total ? valorTemplate(execucaoFinanceira.receitas_totais_no_periodo_total) :'-'}
Despesa realizada{execucaoFinanceira.despesas_no_periodo_custeio ? valorTemplate(execucaoFinanceira.despesas_no_periodo_custeio) :'-'}{execucaoFinanceira.despesas_no_periodo_capital ? valorTemplate(execucaoFinanceira.despesas_no_periodo_capital) :'-'}{execucaoFinanceira.despesas_no_periodo_livre ? valorTemplate(execucaoFinanceira.despesas_no_periodo_livre) :'-'}{execucaoFinanceira.despesas_no_periodo_total ? valorTemplate(execucaoFinanceira.despesas_no_periodo_total) :'-'}
Saldo reprogramado próximo período{execucaoFinanceira.saldo_reprogramado_proximo_periodo_custeio ? valorTemplate(execucaoFinanceira.saldo_reprogramado_proximo_periodo_custeio) :'-'}{execucaoFinanceira.saldo_reprogramado_proximo_periodo_capital ? valorTemplate(execucaoFinanceira.saldo_reprogramado_proximo_periodo_capital) :'-'}{execucaoFinanceira.saldo_reprogramado_proximo_periodo_livre ? valorTemplate(execucaoFinanceira.saldo_reprogramado_proximo_periodo_livre) :'-'}{execucaoFinanceira.saldo_reprogramado_proximo_periodo_total ? valorTemplate(execucaoFinanceira.saldo_reprogramado_proximo_periodo_total) :'-'}
Devolução para o tesouro---{execucaoFinanceira.devolucoes_ao_tesouro_no_periodo_total ? valorTemplate(execucaoFinanceira.devolucoes_ao_tesouro_no_periodo_total) :'-'}
+ } + + ) +}; \ No newline at end of file diff --git a/src/componentes/dres/RelatorioConsolidado/RelatorioConsolidadoEmTela/TopoComBotoes.js b/src/componentes/dres/RelatorioConsolidado/RelatorioConsolidadoEmTela/TopoComBotoes.js new file mode 100644 index 000000000..928ae73aa --- /dev/null +++ b/src/componentes/dres/RelatorioConsolidado/RelatorioConsolidadoEmTela/TopoComBotoes.js @@ -0,0 +1,20 @@ +import React from "react"; + +export const TopoComBotoes = ({periodoNome, ePrevia, referencia}) =>{ + const textoVersao = ePrevia ? '(Prévia)': '' + + return( + <> +
+
+

Período: {periodoNome} {textoVersao}

+

+
{referencia}
+
+
+ +
+
+ + ) +}; \ No newline at end of file diff --git a/src/componentes/dres/RelatorioConsolidado/RelatorioConsolidadoEmTela/index.js b/src/componentes/dres/RelatorioConsolidado/RelatorioConsolidadoEmTela/index.js new file mode 100644 index 000000000..ce2621dcf --- /dev/null +++ b/src/componentes/dres/RelatorioConsolidado/RelatorioConsolidadoEmTela/index.js @@ -0,0 +1,204 @@ +import React, {useEffect, useState} from "react"; +import {useParams} from "react-router-dom"; +import { + getExecucaoFinanceira, + postJustificativa, + patchJustificativa, +} from "../../../../services/dres/RelatorioConsolidado.service"; +import {TopoComBotoes} from "./TopoComBotoes"; +import {visoesService} from "../../../../services/visoes.service"; +import {TabelaExecucaoFinanceira} from "./TabelaExecucaoFinanceira"; +import {JustificativaDiferenca} from "./JustificativaDiferenca"; +import {auxGetNomes} from "../auxGetNomes"; +import {ModalSalvarJustificativa} from "../ModalSalvarJustificativa"; +import Loading from "../../../../utils/Loading"; + +export const RelatorioConsolidadoEmTela = () => { + + let {periodo_uuid, conta_uuid, ja_publicado, consolidado_dre_uuid} = useParams(); + + // Para bloquear as edições quando for de um Consolidado DRE incremental publicacoes_anteriores + // eslint-disable-next-line no-eval + const jaPublicado = eval(ja_publicado) + + const dre_uuid = visoesService.getItemUsuarioLogado('associacao_selecionada.uuid'); + + const initJustificativa = { + uuid: '', + dre: dre_uuid, + periodo: periodo_uuid, + tipo_conta: conta_uuid, + texto: '' + }; + + const [periodoNome, setPeriodoNome] = useState(''); + const [execucaoFinanceira, setExecucaoFinanceira] = useState(false); + const [justificativaDiferencaCheque, setJustificativaDiferencaCheque] = useState(initJustificativa); + const [justificativaDiferencaCartao, setJustificativaDiferencaCartao] = useState(initJustificativa); + const [btnSalvarJustificativaDisableCheque, setBtnSalvarJustificativaDisableCheque] = useState(true); + const [btnSalvarJustificativaDisableCartao, setBtnSalvarJustificativaDisableCartao] = useState(true); + const [showSalvarJustificativa, setShowSalvarJustificativa] = useState(false); + const [loading, setLoading] = useState(false); + + useEffect( () => { + async function carregaInformacoes(){ + setLoading(true); + await carregaNomePeriodo(); + await carregaExecucaoFinanceira(); + setLoading(false); + } + carregaInformacoes() + }, []); + + const carregaNomePeriodo = async () => { + if (periodo_uuid) { + let periodo_nome = await auxGetNomes.nomePeriodo(periodo_uuid); + setPeriodoNome(periodo_nome); + } + }; + + const carregaExecucaoFinanceira = async () => { + try { + let execucao = await getExecucaoFinanceira(dre_uuid, periodo_uuid, consolidado_dre_uuid !== 'null' ? consolidado_dre_uuid : ''); + setExecucaoFinanceira(execucao); + carregaJustificativas(execucao) + } catch (e) { + console.log("Erro ao carregar execução financeira ", e) + } + }; + + const carregaJustificativas = (execucao) => { + if (execucao) { + execucao.por_tipo_de_conta.map((conta) => { + const justificativa = { + uuid: conta.justificativa_uuid, + dre: dre_uuid, + periodo: periodo_uuid, + tipo_conta: conta.tipo_conta_uuid, + texto: conta.justificativa_texto, + } + if (conta.tipo_conta === 'Cheque'){ + setJustificativaDiferencaCheque(justificativa) + } + else if (conta.tipo_conta === 'Cartão'){ + setJustificativaDiferencaCartao(justificativa) + } + }) + } + } + + const valorTemplate = (valor) => { + let valor_formatado = Number(valor).toLocaleString('pt-BR', { + style: 'currency', + currency: 'BRL' + }); + valor_formatado = valor_formatado.replace(/R/, "").replace(/\$/, ""); + return valor_formatado + }; + + const comparaValores = (execucaoFinanceiraConta) => { + if (execucaoFinanceiraConta) { + return execucaoFinanceiraConta.repasses_previstos_sme_custeio !== execucaoFinanceiraConta.repasses_no_periodo_custeio || + execucaoFinanceiraConta.repasses_previstos_sme_capital !== execucaoFinanceiraConta.repasses_no_periodo_capital || + execucaoFinanceiraConta.repasses_previstos_sme_livre !== execucaoFinanceiraConta.repasses_no_periodo_livre || + execucaoFinanceiraConta.repasses_previstos_sme_total !== execucaoFinanceiraConta.repasses_no_periodo_total; + } + }; + + const onChangeJustificativaDiferenca = (justificativa_texto, tipo_conta) => { + if (tipo_conta === 'Cheque'){ + setBtnSalvarJustificativaDisableCheque(false) + setJustificativaDiferencaCheque({...justificativaDiferencaCheque, texto:justificativa_texto}) + } + else if (tipo_conta === 'Cartão'){ + setBtnSalvarJustificativaDisableCartao(false) + setJustificativaDiferencaCartao({...justificativaDiferencaCartao, texto:justificativa_texto}) + } + + }; + + const onSubmitJustificativaDiferencaCheque = async () => { + await atualizaJustificativaDiferenca(justificativaDiferencaCheque) + setBtnSalvarJustificativaDisableCheque(true) + }; + + const onSubmitJustificativaDiferencaCartao = async () => { + await atualizaJustificativaDiferenca(justificativaDiferencaCartao) + setBtnSalvarJustificativaDisableCartao(true) + }; + + const atualizaJustificativaDiferenca = async (justificativaDiferenca) => { + if (justificativaDiferenca && justificativaDiferenca.uuid) { + let payload = { + texto: justificativaDiferenca.texto + }; + await patchJustificativa(justificativaDiferenca.uuid, payload) + setShowSalvarJustificativa(true); + } else { + delete justificativaDiferenca.uuid; + await postJustificativa(justificativaDiferenca) + setShowSalvarJustificativa(true); + } + }; + + const onHandleCloseSalvarJustificativa = () => { + setShowSalvarJustificativa(false); + } + + return ( + <> + +
+ {loading ? ( +
+ +
+ ) : + <> +
+ + {execucaoFinanceira && execucaoFinanceira.por_tipo_de_conta.map((execucaoFinanceiraConta) => { + return
+ + +
+ })} + +
+
+ +
+ + + } +
+ + ) +}; \ No newline at end of file diff --git a/src/componentes/dres/RelatorioConsolidado/TrilhaDeStatus.js b/src/componentes/dres/RelatorioConsolidado/TrilhaDeStatus.js index f7f3d47a5..7b6141ed4 100644 --- a/src/componentes/dres/RelatorioConsolidado/TrilhaDeStatus.js +++ b/src/componentes/dres/RelatorioConsolidado/TrilhaDeStatus.js @@ -1,39 +1,52 @@ import React from "react"; -export const TrilhaDeStatus = ({retornaQtdeStatus, retornaQtdeStatusTotal}) => { +export const TrilhaDeStatus = ({ + trilhaStatus, + filtraStatus, + retornaClasseCirculoTrilhaStatus, + formataNumero, + retornaCorCirculoTrilhaStatus, + eh_circulo_duplo +}) => { + return ( <>
-
Prestações de contas das Associações
+
Prestações de contas das {trilhaStatus.total_associacoes_dre} Associações
-
+ +
 
-
- {retornaQtdeStatus('NAO_RECEBIDA')} -

Não recebido

-
-
- {retornaQtdeStatus('RECEBIDA')} -

Recebida e
aguardando análise

-
-
- {retornaQtdeStatus('DEVOLVIDA')} -

Devolvido
para acertos

-
-
- {retornaQtdeStatus('EM_ANALISE')} -

Em análise

-
-
- {retornaQtdeStatusTotal()} -

Conclusão

da análise

-
+ {filtraStatus().map((item, index) => +
+ {eh_circulo_duplo(item.estilo_css) + ? + <> + + + {formataNumero(item.status)} + + +

+ + : + <> + + {formataNumero(item.status)} + +

+ + } +
+ )} +
- )}; + ) +} \ No newline at end of file diff --git a/src/componentes/dres/RelatorioConsolidado/index.js b/src/componentes/dres/RelatorioConsolidado/index.js index 2b872521f..fe0edc5a4 100644 --- a/src/componentes/dres/RelatorioConsolidado/index.js +++ b/src/componentes/dres/RelatorioConsolidado/index.js @@ -1,401 +1,405 @@ -import React, {useEffect, useState} from "react"; -import {getFiqueDeOlhoRelatoriosConsolidados, getConsultarStatus, getTiposConta, getDownloadRelatorio, postGerarPreviaRelatorio, postGerarLauda, getStatusAta} from "../../../services/dres/RelatorioConsolidado.service"; -import {getItensDashboard, getPeriodos} from "../../../services/dres/Dashboard.service"; -import {SelectPeriodo} from "./SelectPeriodo"; -import {SelectConta} from "./SelectConta"; -import {MsgImgCentralizada} from "../../Globais/Mensagens/MsgImgCentralizada"; -import Img404 from "../../../assets/img/img-404.svg"; -import {TrilhaDeStatus} from "./TrilhaDeStatus"; +import React, {useCallback, useEffect, useState, memo} from "react"; import {visoesService} from "../../../services/visoes.service"; +import { + getFiqueDeOlhoRelatoriosConsolidados, + getStatusConsolidadoDre, + postPublicarConsolidadoDre, + getTrilhaStatus, + postGerarPreviaConsolidadoDre, + getConsolidadosDreJaPublicadosProximaPublicacao, + postPublicarConsolidadoDePublicacoesParciais, + getStatusRelatorioConsolidadoDePublicacoesParciais, +} from "../../../services/dres/RelatorioConsolidado.service"; +import {getPeriodos} from "../../../services/dres/Dashboard.service"; +import {SelectPeriodo} from "./SelectPeriodo"; +import {PaginasContainer} from "../../../paginas/PaginasContainer"; import {BarraDeStatus} from "./BarraDeStatus"; -import {ExecucaoFinanceira} from "./ExecucaoFinanceira"; -import { AtaParecerTecnico } from "./AtaParecerTecnico"; import './relatorio-consolidado.scss' +import Img404 from "../../../assets/img/img-404.svg"; +import {MsgImgCentralizada} from "../../Globais/Mensagens/MsgImgCentralizada"; +import {TrilhaDeStatus} from "./TrilhaDeStatus"; import Loading from "../../../utils/Loading"; -import { ModalMsgGeracaoRelatorio, ModalMsgGeracaoLauda } from "./ModalMsgGeracaoRelatorio"; -import { getDownloadAtaParecerTecnico, getGerarAta } from "../../../services/dres/AtasParecerTecnico.service"; -import {toastCustom} from "../../Globais/ToastCustom"; +import PublicarDocumentos from "./PublicarDocumentos"; +import DemonstrativoDaExecucaoFisicoFinanceira from "./DemonstrativoDaExecucaoFisicoFinanceira"; +import {AtaParecerTecnico} from "./AtaParecerTecnico"; +import Lauda from "./Lauda"; +import {ModalAtaNaoPreenchida} from "../../../utils/Modais"; +import PreviaDocumentos from "./PreviaDocumento"; +import {PERIODO_RELATORIO_CONSOLIDADO_DRE} from "../../../services/auth.service"; -export const RelatorioConsolidado = () => { +const RelatorioConsolidado = () => { const dre_uuid = visoesService.getItemUsuarioLogado('associacao_selecionada.uuid'); + const periodo_relatorio_consolidado_localstorage = localStorage.getItem(PERIODO_RELATORIO_CONSOLIDADO_DRE) const [fiqueDeOlho, setFiqueDeOlho] = useState(""); + + // Consolidado DRE + const [consolidadosDreJaPublicados, setConsolidadosDreJaPublicados] = useState(false); + const [consolidadoDreProximaPublicacao, setConsolidadoDreProximaPublicacao] = useState(false); + const [statusBarraDeStatus, setStatusBarraDeStatus] = useState(''); + const [statusProcessamentoConsolidadoDre, setStatusProcessamentoConsolidadoDre] = useState(''); + const [statusProcessamentoRelatorioConsolidadoDePublicacoesParciais, setStatusProcessamentoRelatorioConsolidadoDePublicacoesParciais] = useState(''); const [periodos, setPeriodos] = useState(false); const [periodoEscolhido, setPeriodoEsolhido] = useState(false); - const [itensDashboard, setItensDashboard] = useState(false); - const [contas, setContas] = useState(false); - const [contaEscolhida, setContaEscolhida] = useState(false); - const [statusRelatorio, setStatusRelatorio] = useState(false); - const [totalEmAnalise, setTotalEmAnalise] = useState(0); + const [showPublicarRelatorioConsolidado, setShowPublicarRelatorioConsolidado] = useState(false); + + // Ata + const [showAtaNaoPreenchida, setShowAtaNaoPreenchida] = useState(false); + + const [trilhaStatus, setTrilhaStatus] = useState(false); const [loading, setLoading] = useState(false); - const [showModalMsgGeracaoRelatorio, setShowModalMsgGeracaoRelatorio] = useState(false); - const [showModalMsgGeracaoLauda, setShowModalMsgGeracaoLauda] = useState(false); - const [msgGeracaoRelatorio, setMsgGeracaoRelatorio] = useState(''); - const [msgGeracaoLauda, setMsgGeracaoLauda] = useState(''); - const [ataParecerTecnico, setAtaParecerTecnico] = useState({}); - const [disablebtnVisualizarAta, setDisablebtnVisualizarAta] = useState(true); - const [disablebtnGerarAta, setDisablebtnGerarAta] = useState(true); - const [disablebtnGerarLauda, setDisablebtnGerarLauda] = useState(true); - useEffect(() => { - if (statusRelatorio && statusRelatorio.status_geracao && statusRelatorio.status_geracao === "EM_PROCESSAMENTO") { - const timer = setInterval(() => { - consultarStatus(); - }, 5000); - // clearing interval - return () => clearInterval(timer); + const carregaPeriodos = useCallback(async () => { + try { + let periodos = await getPeriodos(); + setPeriodos(periodos); + if (periodos && periodos.length > 0){ + //Caso exista mais de um período seleciona por default o anterior ao corrente. + const periodoIndex = periodos.length > 1 ? 1 : 0; + if (periodo_relatorio_consolidado_localstorage){ + setPeriodoEsolhido(periodo_relatorio_consolidado_localstorage) + }else { + setPeriodoEsolhido(periodos[periodoIndex].uuid) + } + + } + } catch (e) { + console.log("Erro ao buscar períodos ", e) } - }); + }, [periodo_relatorio_consolidado_localstorage]); useEffect(() => { - if (ataParecerTecnico && ataParecerTecnico.status_geracao_pdf && ataParecerTecnico.status_geracao_pdf === "EM_PROCESSAMENTO") { - const timer = setInterval(() => { - consultarStatusAta(); - }, 5000); - // clearing interval - return () => clearInterval(timer); + carregaPeriodos() + }, [carregaPeriodos]) + + + const carregaConsolidadosDreJaPublicadosProximaPublicacao = useCallback(async () => { + if ( (dre_uuid && periodoEscolhido && statusProcessamentoConsolidadoDre) || statusProcessamentoRelatorioConsolidadoDePublicacoesParciais ) { + try { + let consolidados_dre = await getConsolidadosDreJaPublicadosProximaPublicacao(dre_uuid, periodoEscolhido) + setConsolidadosDreJaPublicados(consolidados_dre.publicacoes_anteriores) + setConsolidadoDreProximaPublicacao(consolidados_dre.proxima_publicacao) + } catch (e) { + console.log("Erro ao buscar Consolidado Dre ", e) + } } - }); + }, [dre_uuid, periodoEscolhido, statusProcessamentoConsolidadoDre, statusProcessamentoRelatorioConsolidadoDePublicacoesParciais]) useEffect(() => { - buscaFiqueDeOlho(); - }, []); + carregaConsolidadosDreJaPublicadosProximaPublicacao() + }, [carregaConsolidadosDreJaPublicadosProximaPublicacao]) - useEffect(() => { - carregaPeriodos(); - }, []); + const retornaStatusConsolidadosDre = useCallback(async () => { + if (dre_uuid && periodoEscolhido) { + try { + let status = await getStatusConsolidadoDre(dre_uuid, periodoEscolhido) + + if (status && status.length > 0) { + setStatusBarraDeStatus(status[0]) + setStatusProcessamentoConsolidadoDre(status[0].status_geracao) + } + } catch (e) { + console.log("Erro ao buscar status Consolidado Dre ", e) + } + } + }, [dre_uuid, periodoEscolhido]) - useEffect(() => { - carregaContas(); - }, []); useEffect(() => { - carregaItensDashboard(); - }, [periodoEscolhido]); + retornaStatusConsolidadosDre() + }, [retornaStatusConsolidadosDre]) + + const retornaStatusProcessamentoRelatorioConsolidadoDePublicacoesParciais = useCallback(async () => { + if (dre_uuid && periodoEscolhido) { + try { + let status = await getStatusRelatorioConsolidadoDePublicacoesParciais(dre_uuid, periodoEscolhido) + setStatusProcessamentoRelatorioConsolidadoDePublicacoesParciais(status.status) + } catch (e) { + console.log("Erro ao buscar status Consolidado Dre ", e) + } + } + }, [dre_uuid, periodoEscolhido]) + useEffect(() => { - consultarStatus(); - }, [periodoEscolhido, contaEscolhida]); + retornaStatusProcessamentoRelatorioConsolidadoDePublicacoesParciais() + }, [retornaStatusProcessamentoRelatorioConsolidadoDePublicacoesParciais]) + + const buscaTrilhaStatus = useCallback(async () => { + if (dre_uuid && periodoEscolhido) { + let trilha_status = await getTrilhaStatus(dre_uuid, periodoEscolhido) + setTrilhaStatus(trilha_status) + } + }, [dre_uuid, periodoEscolhido]) useEffect(() => { - retornaQtdeEmAnalise(); - }, [itensDashboard]); + buscaTrilhaStatus() + }, [buscaTrilhaStatus]) useEffect(() => { - consultarStatusAta(); - }, [periodoEscolhido, statusRelatorio]); - - const carregaPeriodos = async () => { - let periodos = await getPeriodos(); - setPeriodos(periodos); - if (periodos && periodos.length > 0){ - setPeriodoEsolhido(periodos[0].uuid) + if (statusProcessamentoConsolidadoDre && statusProcessamentoConsolidadoDre === "EM_PROCESSAMENTO") { + setLoading(true) + const timer = setInterval(() => { + retornaStatusConsolidadosDre(); + }, 5000); + // clearing interval + return () => clearInterval(timer); + } else { + buscaTrilhaStatus(); + setLoading(false); } - }; + }, [statusProcessamentoConsolidadoDre, retornaStatusConsolidadosDre, buscaTrilhaStatus]); - const setaStatusComoProcessando = () => { - const statusProcessando = { - pcs_em_analise: false, - status_geracao: "EM_PROCESSAMENTO", - status_txt: "Análise de prestações de contas das associações completa. Relatório em processamento.", - cor_idx: 3, - status_arquivo: "Previa do relatório sendo gerada. Aguarde." + useEffect(() => { + if (statusProcessamentoRelatorioConsolidadoDePublicacoesParciais && statusProcessamentoRelatorioConsolidadoDePublicacoesParciais === "EM_PROCESSAMENTO") { + setLoading(true) + const timer = setInterval(() => { + retornaStatusProcessamentoRelatorioConsolidadoDePublicacoesParciais(); + }, 5000); + // clearing interval + return () => clearInterval(timer); + } else { + setLoading(false); } - setStatusRelatorio(statusProcessando); - }; + }, [statusProcessamentoRelatorioConsolidadoDePublicacoesParciais, retornaStatusProcessamentoRelatorioConsolidadoDePublicacoesParciais]); - const carregaContas = async () => { + const buscaFiqueDeOlho = useCallback(async () => { try { - let tipo_contas = await getTiposConta(); - setContas(tipo_contas); - if (tipo_contas && tipo_contas.length > 0){ - setContaEscolhida(tipo_contas[0].uuid) - } - }catch (e) { - console.log("Erro ao trazer os tipos de contas ", e); + let fique_de_olho = await getFiqueDeOlhoRelatoriosConsolidados(); + setFiqueDeOlho(fique_de_olho.detail); + } catch (e) { + console.log("Erro ao buscar Fique de Olho ", e) } - }; - - const carregaItensDashboard = async () =>{ - if (periodoEscolhido){ - let itens = await getItensDashboard(periodoEscolhido); - setItensDashboard(itens) - } - }; + }, []) - const buscaFiqueDeOlho = async () => { - let fique_de_olho = await getFiqueDeOlhoRelatoriosConsolidados(); - setFiqueDeOlho(fique_de_olho.detail); - }; + useEffect(() => { + buscaFiqueDeOlho() + }, [buscaFiqueDeOlho]) const handleChangePeriodos = async (uuid_periodo) => { setPeriodoEsolhido(uuid_periodo) + localStorage.setItem(PERIODO_RELATORIO_CONSOLIDADO_DRE, uuid_periodo); }; - const handleChangeContas = async (uuid_conta) => { - setContaEscolhida(uuid_conta) - }; - - const retornaQtdeStatus = (status) => { - let item = itensDashboard.cards.find(element => element.status === status); + const formataNumero = (status) => { + let item = trilhaStatus.cards.find(element => element.status === status); let qtde_itens = item.quantidade_prestacoes; - if (qtde_itens <= 9){ + + if (qtde_itens <= 9) { return '0' + qtde_itens; - }else { + } else { return qtde_itens.toString(); } }; - const retornaQtdeStatusTotal = () =>{ - if (itensDashboard) { - let total = itensDashboard.cards.filter(elemtent => elemtent.status === 'APROVADA' || elemtent.status === 'REPROVADA').reduce((total, valor) => total + valor.quantidade_prestacoes, 0); - if (total <= 9){ - return '0' + total; - }else { - return total.toString(); - } - } - }; + const retornaClasseCirculoTrilhaStatus = (status) => { + let qtde_formatado = formataNumero(status); - const retornaQtdeEmAnalise = () => { - if (itensDashboard) { - let total = itensDashboard.cards.filter(elemtent => elemtent.status === 'RECEBIDA' || elemtent.status === 'DEVOLVIDA' || elemtent.status === 'EM_ANALISE').reduce((total, valor) => total + valor.quantidade_prestacoes, 0); - setTotalEmAnalise(total) + if (qtde_formatado && qtde_formatado.length < 3) { + return "circulo-relatorio-consolidado-dois-digitos" + } else { + return "circulo-relatorio-consolidado-tres-digitos" } }; - const consultarStatus = async () =>{ - if (dre_uuid && periodoEscolhido && contaEscolhida){ - let status = await getConsultarStatus(dre_uuid, periodoEscolhido, contaEscolhida); - setStatusRelatorio(status); + const retornaCorCirculoTrilhaStatus = (estilo) => { + if (estilo === 2) { + return "circulo-relatorio-consolidado-simples-vermelho" } + return "circulo-relatorio-consolidado-simples" }; - const consultarStatusAta = async() => { - if(dre_uuid && periodoEscolhido && statusRelatorio.versao === "FINAL"){ - try{ - let ata = await getStatusAta(dre_uuid, periodoEscolhido); - setAtaParecerTecnico(ata) - setDisablebtnVisualizarAta(false); - setDisablebtnGerarAta(false); + const eh_circulo_duplo = (estilo) => { + return estilo === 1; + } - if(ata.alterado_em && statusRelatorio.status_geracao !== "EM_PROCESSAMENTO"){ - setDisablebtnGerarLauda(false); - } - else{ - setDisablebtnGerarLauda(true); - } - - } - catch{ - setAtaParecerTecnico({}) - console.log("Ata não encontrada") - setDisablebtnVisualizarAta(true); - setDisablebtnGerarAta(true); - setDisablebtnGerarLauda(true); - } + const filtraStatus = () => { + return trilhaStatus.cards.filter((item) => item.status !== "APROVADA" && item.status !== "REPROVADA") + } - + const podeGerarPrevia = () => { + if (trilhaStatus && trilhaStatus.cards && trilhaStatus.cards.length > 0){ + let card_concluido = trilhaStatus.cards.find((element) => element.status === 'CONCLUIDO' ) + let qtde_prestacoes = card_concluido.quantidade_prestacoes + return qtde_prestacoes > 0 } } - const onClickVerRelatorio = () =>{ - window.location.assign(`/dre-relatorio-consolidado-apuracao/${periodoEscolhido}/${contaEscolhida}/`) - }; - - const onClickVerAta = (uuid_ata) =>{ - window.location.assign(`/visualizacao-da-ata-parecer-tecnico/${uuid_ata}/`) - }; + const podeExibirProximaPublicacao = () =>{ + return (consolidadoDreProximaPublicacao && podeGerarPrevia()) || consolidadoDreProximaPublicacao.eh_consolidado_de_publicacoes_parciais + } - const textoBtnRelatorio = () =>{ - if(statusRelatorio.versao === "FINAL"){ - if (statusRelatorio.status_geracao === 'GERADO_TOTAL'){ - return 'Documento gerado' - }else if (statusRelatorio.status_geracao === 'GERADO_PARCIAL'){ - return 'Documento parcial gerado' - }else if (statusRelatorio.status_geracao === 'NAO_GERADO'){ - return 'Documento não gerado' - }else if (statusRelatorio.status_geracao === "EM_PROCESSAMENTO"){ - return 'Relatório sendo gerado...' + const publicarConsolidadoDre = async (consolidado_dre) => { + setShowPublicarRelatorioConsolidado(false) + let payload = { + dre_uuid: dre_uuid, + periodo_uuid: periodoEscolhido + } + try { + if (!consolidado_dre.ata_de_parecer_tecnico || !consolidado_dre.ata_de_parecer_tecnico.alterado_em) { + setShowAtaNaoPreenchida(true); + } else { + let publicar = await postPublicarConsolidadoDre(payload); + setStatusProcessamentoConsolidadoDre(publicar.status); } + await carregaConsolidadosDreJaPublicadosProximaPublicacao() + } catch (e) { + console.log("Erro ao publicar Consolidado Dre ", e) } + } - return 'Documento não gerado' - }; + const publicarConsolidadoDePublicacoesParciais = async () => { - const gerarPrevia = async () => { - let parcial = totalEmAnalise > 0; - const payload = { + let payload = { dre_uuid: dre_uuid, - periodo_uuid: periodoEscolhido, - tipo_conta_uuid: contaEscolhida, - parcial: parcial - }; - - try{ - await postGerarPreviaRelatorio(payload); - console.log('Solicitação de previa do relatório enviada com sucesso.'); - setMsgGeracaoRelatorio('O relatório está sendo gerado, enquanto isso você pode continuar a usar o sistema. Quando a geração for concluída um botão para download ficará disponível.'); - setShowModalMsgGeracaoRelatorio(true); - setaStatusComoProcessando(); - }catch(e){ - setMsgGeracaoRelatorio('Erro ao gerar relatório'); - setShowModalMsgGeracaoRelatorio(true); - console.log('Erro ao gerar relatório ', e.response.data); + periodo_uuid: periodoEscolhido } + try { + await postPublicarConsolidadoDePublicacoesParciais(payload); - } + let status = await getStatusRelatorioConsolidadoDePublicacoesParciais(dre_uuid, periodoEscolhido) - const gerarLauda = async () => { - let parcial = totalEmAnalise > 0; - const payload = { - dre_uuid: dre_uuid, - periodo_uuid: periodoEscolhido, - tipo_conta_uuid: contaEscolhida, - parcial: parcial - }; - - try{ - await postGerarLauda(payload); - console.log('Solicitação de lauda enviada com sucesso.'); - setMsgGeracaoLauda('A lauda está sendo gerada e será enviada para a central de downloads.') - setShowModalMsgGeracaoLauda(true); - }catch(e){ - setMsgGeracaoLauda('Erro ao gerar lauda.') - setShowModalMsgGeracaoLauda(true); - console.log('Erro ao gerar lauda ', e.response.data); + setStatusProcessamentoRelatorioConsolidadoDePublicacoesParciais(status.status); + + } catch (e) { + console.log("Erro ao publicar Consolidado de Publicações Parciais ", e) } + await carregaConsolidadosDreJaPublicadosProximaPublicacao() } - const downloadRelatorio = async () =>{ - await getDownloadRelatorio(dre_uuid, periodoEscolhido, contaEscolhida, statusRelatorio.versao); - }; - - const downloadPreviaRelatorio = async () =>{ - await getDownloadRelatorio(dre_uuid, periodoEscolhido, contaEscolhida, statusRelatorio.versao); - }; - - const downloadAtaParecerTecnico = async () =>{ - await getDownloadAtaParecerTecnico(ataParecerTecnico.uuid); - }; - - const onHandleClose = () => { - setShowModalMsgGeracaoRelatorio(false); - }; - - const onHandleCloseModalMsgLauda = () => { - setShowModalMsgGeracaoLauda(false); - }; + const gerarPreviaConsolidadoDre = async () => { + let payload = { + dre_uuid: dre_uuid, + periodo_uuid: periodoEscolhido + } - const handleClickGerarAta = async () => { try { - await getGerarAta(ataParecerTecnico.uuid, dre_uuid, periodoEscolhido); - let mensagem_parte_1 = "Quando a geração for concluída um botão para download ficará" - let mensagem_parte_2 = "disponível na área da Ata." - toastCustom.ToastCustomInfo('Ata sendo gerada', {mensagem_parte_1}
{mensagem_parte_2}
) - setAtaParecerTecnico({ - ...ataParecerTecnico, - status_geracao_pdf: "EM_PROCESSAMENTO" - }) - } - catch (e) { - console.log('Erro ao gerar ata ', e.response.data); + let previa = await postGerarPreviaConsolidadoDre(payload); + setStatusProcessamentoConsolidadoDre(previa.status); + await carregaConsolidadosDreJaPublicadosProximaPublicacao() + } catch (e) { + console.log("Erro ao publicar Prévia Consolidado Dre ", e) } } return ( - <> - {loading ? ( -
- -
- ) : - <> -
-
-
-
- {statusRelatorio && + +

Relatório consolidado

+ <> +
+
+
+
+ {statusBarraDeStatus && - } - - {periodoEscolhido && - + {periodoEscolhido && dre_uuid && trilhaStatus ? ( + <> + + {loading ? ( +
+ +

Os documentos estão sendo gerados. Enquanto isso, você + pode realizar outras atividades no sistema.

+
+ ) : + <> + {/*{consolidadoDreProximaPublicacao && podeGerarPrevia() &&*/} + {podeExibirProximaPublicacao() && + +
+ + + + + {!consolidadoDreProximaPublicacao.eh_consolidado_de_publicacoes_parciais && + + } + + {!consolidadoDreProximaPublicacao.eh_consolidado_de_publicacoes_parciais && + + } +
+ } + + {consolidadosDreJaPublicados && consolidadosDreJaPublicados.map((consolidadoDre) => +
+ + + + + + +
+ )} + + } + + ) : + - } - {periodoEscolhido && itensDashboard ? ( - <> - - - - {statusRelatorio.versao === "FINAL" && statusRelatorio.status_geracao === "GERADO_TOTAL" && ataParecerTecnico && - - } - - - ) : - - } - -
- -
- -
- -
- -
- - } - + } +
+ +
+ setShowAtaNaoPreenchida(false)} + /> +
+
) -}; \ No newline at end of file +} + +export default memo(RelatorioConsolidado) \ No newline at end of file diff --git a/src/componentes/dres/RelatorioConsolidado/relatorio-consolidado.scss b/src/componentes/dres/RelatorioConsolidado/relatorio-consolidado.scss index 221d04f69..ca64b347c 100644 --- a/src/componentes/dres/RelatorioConsolidado/relatorio-consolidado.scss +++ b/src/componentes/dres/RelatorioConsolidado/relatorio-consolidado.scss @@ -35,10 +35,14 @@ color: #00585e; } -.container-box-consultar-dados{ +.container-box-consultar-dados, .container-publicar-cabecalho{ background-color: #F3F3F3; } +.container-publicar-cabecalho{ + border-color: #DADADA; +} + .tabela-execucao-financeira, .tabela-devolucoes, .tabela-execucao-fisica{ .tr-titulo{ background-color: #F5F6F8; @@ -124,3 +128,28 @@ body .tabela-associacoes-nao-regularizadas .p-datatable-tbody > tr > td, body .t padding: 15px !important; } + +.btn-consultar-relatorio, .btn-consultar-relatorio > button{ + background-color: #fff !important; + font-weight: normal !important; + border-color: #00585E !important; + color: #00585E !important; + padding: 0.25rem 0.5rem; +} + +.btn-consultar-relatorio > button span{ + padding: 0 !important; +} + +.btn-consultar-relatorio button:nth-child(1){ + cursor: default; +} + +.btn-consultar-relatorio button:nth-child(2){ + border-left: none !important; +} + +.btn-consultar-relatorio button:nth-child(2):hover{ + background-color: #00585E !important; + color: #fff !important; +} diff --git a/src/componentes/dres/ValoresReprogramadosDre/Cabecalho.js b/src/componentes/dres/ValoresReprogramadosDre/Cabecalho.js new file mode 100644 index 000000000..c9b4918c6 --- /dev/null +++ b/src/componentes/dres/ValoresReprogramadosDre/Cabecalho.js @@ -0,0 +1,14 @@ +import React from "react"; + +export const Cabecalho = () => { + return( +
+
+

+ Conferência de valores reprogramados iniciais +

+
+
+ + ) +} \ No newline at end of file diff --git a/src/componentes/dres/ValoresReprogramadosDre/Filtros.js b/src/componentes/dres/ValoresReprogramadosDre/Filtros.js new file mode 100644 index 000000000..abac78724 --- /dev/null +++ b/src/componentes/dres/ValoresReprogramadosDre/Filtros.js @@ -0,0 +1,80 @@ +import React from "react"; +import { Select } from 'antd'; + +export const Filtros = ({ + stateFiltros, + handleChangeFiltros, + handleOnChangeMultipleSelectStatus, + handleSubmitFiltros, + limpaFiltros, + tabelaAssociacoes, + tabelaValoresReprogramados +}) => { + + const { Option } = Select; + + return( +
+
+
+ + handleChangeFiltros(e.target.name, e.target.value)} + name="filtro_search" + id="filtro_search" + type="text" + className="form-control" + placeholder="Escreva o termo que deseja filtrar" + /> +
+ +
+ + +
+ +
+ + +
+
+ +
+ + +
+ +
+ ) +} \ No newline at end of file diff --git a/src/componentes/dres/ValoresReprogramadosDre/TabelaValoresReprogramados.js b/src/componentes/dres/ValoresReprogramadosDre/TabelaValoresReprogramados.js new file mode 100644 index 000000000..815e3af6d --- /dev/null +++ b/src/componentes/dres/ValoresReprogramadosDre/TabelaValoresReprogramados.js @@ -0,0 +1,50 @@ +import React from "react"; +import { DataTable } from 'primereact/datatable'; +import { Column } from 'primereact/column'; + +export const TabelaValoresReprogramados = ({ + listaDeValoresReprogramados, + rowsPerPage, + valorTemplateCheque, + valorTemplateCartao, + statusTemplate, + acoesTemplate +}) => { + + return( + rowsPerPage} + paginatorTemplate="PrevPageLink PageLinks NextPageLink" + > + + + + + + + + + + ) +} \ No newline at end of file diff --git a/src/componentes/dres/ValoresReprogramadosDre/index.js b/src/componentes/dres/ValoresReprogramadosDre/index.js new file mode 100644 index 000000000..3ac729743 --- /dev/null +++ b/src/componentes/dres/ValoresReprogramadosDre/index.js @@ -0,0 +1,249 @@ +import React, {useEffect, useState} from "react"; +import "./valoresReprogramadosDre.scss" +import { Cabecalho } from "./Cabecalho"; +import { Filtros } from "./Filtros"; +import { TabelaValoresReprogramados } from "./TabelaValoresReprogramados"; +import { + getListaValoresReprogramados, + filtrosListaValoresReprogramados, + getTabelaValoresReprogramados +} from "../../../services/dres/ValoresReprogramadosDre.service"; +import { + getTabelaAssociacoes, +} from "../../../services/dres/Associacoes.service"; +import { getUnidade } from "../../../services/dres/Unidades.service"; +import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; +import {faEdit} from "@fortawesome/free-solid-svg-icons"; +import Loading from "../../../utils/Loading"; +import Img404 from "../../../assets/img/img-404.svg"; +import {MsgImgCentralizada} from "../../Globais/Mensagens/MsgImgCentralizada"; +import {MsgImgLadoDireito} from "../../Globais/Mensagens/MsgImgLadoDireito"; +import {Link} from 'react-router-dom'; + + +export const ValoresReprogramadosDre = () =>{ + // Tabela Valores Reprogramados + const rowsPerPage = 10; + // Filtros + + // O critério da história pede que venha por padrão filtrado pelos status: + const statusPadrao = ["NAO_FINALIZADO", "EM_CONFERENCIA_DRE", "EM_CORRECAO_UE"] + + const initialStateFiltros = { + filtro_search: "", + filtro_tipo_unidade: "", + filtro_status: statusPadrao, + }; + + const [listaDeValoresReprogramados, setListaDeValoresReprogramados] = useState([]); + const [dadosDiretoria, setDadosDiretoria] = useState(null); + const [loading, setLoading] = useState(true); + const [buscaUtilizandoFiltros, setBuscaUtilizandoFiltros] = useState(false); + const [stateFiltros, setStateFiltros] = useState(initialStateFiltros); + const [tabelaAssociacoes, setTabelaAssociacoes] = useState({}); + const [tabelaValoresReprogramados, setTabelaValoresReprogramados] = useState({}); + + // Consultas a API + useEffect(()=>{ + buscaTabelaAssociacoes(); + }, []); + + useEffect(()=>{ + buscaTabelaValoresReprogramados(); + }, []); + + useEffect(() => { + buscaDiretoria(); + }, []); + + useEffect(() => { + buscaListaDeValoresReprogramados(); + }, [dadosDiretoria]); + + + const buscaDiretoria = async () => { + let diretoria = await getUnidade(); + setDadosDiretoria(diretoria); + }; + + const buscaListaDeValoresReprogramados = async () => { + try{ + if(dadosDiretoria && dadosDiretoria.uuid){ + let listaValoresReprogramados = await getListaValoresReprogramados(dadosDiretoria.uuid, statusPadrao); + setListaDeValoresReprogramados(listaValoresReprogramados.valores_reprogramados); + setLoading(false); + } + }catch (e){ + console.log("Erro ao buscar valores reprogramados ", e); + } + } + + const buscaTabelaAssociacoes = async () =>{ + let tabela_associacoes = await getTabelaAssociacoes(); + setTabelaAssociacoes(tabela_associacoes); + }; + + const buscaTabelaValoresReprogramados = async () => { + let tabela_valores_reprogramados = await getTabelaValoresReprogramados(); + setTabelaValoresReprogramados(tabela_valores_reprogramados); + } + + // Filtros + const handleChangeFiltros = (name, value) => { + setStateFiltros({ + ...stateFiltros, + [name]: value + }); + }; + + const handleOnChangeMultipleSelectStatus = async (value) => { + let name = "filtro_status" + + setStateFiltros({ + ...stateFiltros, + [name]: value + }); + } + + const handleSubmitFiltros = async (event)=>{ + setLoading(true); + setBuscaUtilizandoFiltros(true); + event.preventDefault(); + let resultado_filtros = await filtrosListaValoresReprogramados( + dadosDiretoria.uuid, stateFiltros.filtro_search, + stateFiltros.filtro_tipo_unidade, stateFiltros.filtro_status + ); + setListaDeValoresReprogramados(resultado_filtros.valores_reprogramados); + setLoading(false); + }; + + const limpaFiltros = async () => { + setLoading(true); + setStateFiltros(initialStateFiltros); + await buscaListaDeValoresReprogramados(); + }; + + // Templates tabela + const valorTemplateCheque = (rowData) => { + if(rowData['total_conta_um'] !== "-"){ + let valorFormatado = rowData['total_conta_um'] + ? Number(rowData['total_conta_um']).toLocaleString('pt-BR', { + style: 'currency', + currency: 'BRL' + }) + : '-'; + return ({valorFormatado}) + } + else{ + return (-) + } + }; + + const valorTemplateCartao = (rowData) => { + if(rowData['total_conta_dois'] !== "-"){ + let valorFormatado = rowData['total_conta_dois'] + ? Number(rowData['total_conta_dois']).toLocaleString('pt-BR', { + style: 'currency', + currency: 'BRL' + }) + : '-'; + + return ({valorFormatado}) + } + else{ + return (-) + } + }; + + const statusTemplate = (rowData) => { + let status = rowData["associacao"]['status_valores_reprogramados'] + + if(status === "NAO_FINALIZADO"){ + return "Não finalizado" + } + else if(status === "EM_CONFERENCIA_DRE"){ + return "Em conferência DRE" + } + else if(status === "EM_CORRECAO_UE"){ + return "Em correção UE" + } + else if(status === "VALORES_CORRETOS"){ + return "Valores corretos" + } + else{ + return "" + } + } + + const acoesTemplate = (rowData) => { + return ( +
+ + + +
+ ) + } + + + return( + <> + + + + + {loading ? ( + + ) : + listaDeValoresReprogramados && listaDeValoresReprogramados.length > 0 ? ( + + + ) : + buscaUtilizandoFiltros ? + + : + + } + + + ) +} \ No newline at end of file diff --git a/src/componentes/dres/ValoresReprogramadosDre/valoresReprogramadosDre.scss b/src/componentes/dres/ValoresReprogramadosDre/valoresReprogramadosDre.scss new file mode 100644 index 000000000..7917cb978 --- /dev/null +++ b/src/componentes/dres/ValoresReprogramadosDre/valoresReprogramadosDre.scss @@ -0,0 +1,35 @@ +.titulo-valores-reprogramados-dre{ + color: #00585E; + font-size: 24pt; + font-weight: 700; +} + + +/* multiselect */ + +.multiselect-demo .p-multiselect { + min-width: 15rem; +} + +.multiselect-demo .multiselect-custom .p-multiselect-label:not(.p-placeholder):not(.p-multiselect-items-label) { + padding-top: .25rem; + padding-bottom: .25rem; +} + +.multiselect-demo .multiselect-custom .country-item-value { + padding: .25rem .5rem; + border-radius: 3px; + display: inline-flex; + margin-right: .5rem; + background-color: var(--primary-color); + color: var(--primary-color-text); +} + +.multiselect-demo .multiselect-custom .country-item-value img.flag { + width: 17px; +} + +.multiselect-lista-valores-reprogramados .ant-select-selector .ant-select-selection-overflow{ + min-height: calc(1.5em + .75rem + 2px); +} + \ No newline at end of file diff --git a/src/componentes/escolas/GeracaoAtaRetificadora/BoxAtaRetificadora/index.js b/src/componentes/escolas/GeracaoAtaRetificadora/BoxAtaRetificadora/index.js index 0ec76ab85..a5b75ff86 100644 --- a/src/componentes/escolas/GeracaoAtaRetificadora/BoxAtaRetificadora/index.js +++ b/src/componentes/escolas/GeracaoAtaRetificadora/BoxAtaRetificadora/index.js @@ -1,5 +1,6 @@ import React, {useCallback, useEffect, useState} from "react"; import {getAtas, getDownloadAtaPdf, getGerarAtaPdf} from "../../../../services/escolas/AtasAssociacao.service"; +import {ModalNaoPodeGerarAta} from "../../GeracaoDaAta/ModalNaoPodeGerarAta"; import Spinner from "../../../../assets/img/spinner.gif"; import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; import {faDownload} from "@fortawesome/free-solid-svg-icons"; @@ -11,22 +12,23 @@ export const BoxAtaRetificadora = ({ onClickVisualizarAta, uuidPrestacaoConta, uuidAtaRetificacao, - gerarAtaRetificadora, statusPc }) => { const [dadosAtaRetificadora, setDadosAtaRetificadora] = useState({}); + const [showNaoPodeGerarAta, setShowNaoPodeGerarAta] = useState(false); + const [textoModalAta, setTextoModalAta] = useState('

Você não pode gerar o PDF de uma ata incompleta.

'); useEffect(() => { if (uuidAtaRetificacao && dadosAtaRetificadora && dadosAtaRetificadora.status_geracao_pdf && dadosAtaRetificadora.status_geracao_pdf === 'EM_PROCESSAMENTO'){ const timer = setInterval(() => { - get_dados_ata(); + getDadosAta(); }, 5000); // clearing interval return () => clearInterval(timer); } }); - const get_dados_ata = useCallback(async ()=>{ + const getDadosAta = useCallback(async ()=>{ if (uuidAtaRetificacao){ let dados_ata = await getAtas(uuidAtaRetificacao); setDadosAtaRetificadora(dados_ata) @@ -34,12 +36,23 @@ export const BoxAtaRetificadora = ({ }, [uuidAtaRetificacao]) useEffect(()=>{ - get_dados_ata() - }, [get_dados_ata]) + getDadosAta() + }, [getDadosAta]) - const gerar_ata_pdf = async () => { - await getGerarAtaPdf(uuidPrestacaoConta, uuidAtaRetificacao) - get_dados_ata() + const gerarAtaPDF = async () => { + try { + await getGerarAtaPdf(uuidPrestacaoConta, uuidAtaRetificacao) + getDadosAta() + } + catch (e) { + let mensagem = '' + let camposInvalidos = e.response.data.campos_invalidos + camposInvalidos.map((element) => { + mensagem += typeof(element) === 'object' ? ` ${element['msg_presente']}` : ` ${element}, ` + }) + setTextoModalAta(`

Você não pode gerar o PDF de uma ata incompleta. Para completa-la ${camposInvalidos[0]['msg_presente'] ? mensagem : `preencha os campo(s) ${mensagem}`}.

`.replace(/,(?=[^,]*$)/, '')) // Regex remove espaço em branco e virgula no final. ⮕ (/,(?=[^,]*$)/,) '' + setShowNaoPodeGerarAta(true) + } } const download_ata_pdf = async () => { @@ -74,14 +87,24 @@ export const BoxAtaRetificadora = ({

+
+ { setShowNaoPodeGerarAta(false) }} + setShowNaoPodeGerarAta={setShowNaoPodeGerarAta} + titulo="Campo em ata incompletos" + texto={textoModalAta} + primeiroBotaoTexto="Fechar" + primeiroBotaoCss="outline-success" + /> +
{ statusPc !== 'DEVOLVIDA' && diff --git a/src/componentes/escolas/GeracaoAtaRetificadora/index.js b/src/componentes/escolas/GeracaoAtaRetificadora/index.js index 0887e7db8..2a58ec957 100644 --- a/src/componentes/escolas/GeracaoAtaRetificadora/index.js +++ b/src/componentes/escolas/GeracaoAtaRetificadora/index.js @@ -9,7 +9,6 @@ export const GeracaoAtaRetificadora = ({uuidPrestacaoConta, statusPrestacaoDeCon const [corBoxAtaRetificadora, setCorBoxAtaRetificadora] = useState(""); const [textoBoxAtaRetificadora, setTextoBoxAtaRetificadora] = useState(""); const [dataBoxAtaRetificadora, setDataBoxAtaRetificadora] = useState(""); - const [gerarAtaRetificadora, setGerarAtaRetificadora] = useState(false); const statusPC = statusPrestacaoDeConta && statusPrestacaoDeConta.prestacao_contas_status ? statusPrestacaoDeConta.prestacao_contas_status.status_prestacao : '' @@ -26,17 +25,14 @@ export const GeracaoAtaRetificadora = ({uuidPrestacaoConta, statusPrestacaoDeCon if (dados.alterado_em === null){ setCorBoxAtaRetificadora("vermelho"); setDataBoxAtaRetificadora("Ata não preenchida"); - setGerarAtaRetificadora(false) } else if (!dados.completa) { setCorBoxAtaRetificadora("vermelho"); setDataBoxAtaRetificadora("Ata incompleta"); - setGerarAtaRetificadora(false) } else { setCorBoxAtaRetificadora("verde"); setDataBoxAtaRetificadora("Último preenchimento em "+exibeDateTimePT_BR_Ata(dados.alterado_em)); - setGerarAtaRetificadora(true) } } catch (e) { if (statusPrestacaoDeConta.prestacao_contas_status.status_prestacao === "DEVOLVIDA" || statusPrestacaoDeConta.prestacao_contas_status.status_prestacao === "DEVOLVIDA_RETORNADA") { @@ -46,17 +42,14 @@ export const GeracaoAtaRetificadora = ({uuidPrestacaoConta, statusPrestacaoDeCon if (dados.alterado_em === null){ setCorBoxAtaRetificadora("vermelho"); setDataBoxAtaRetificadora("Ata não preenchida"); - setGerarAtaRetificadora(false) } else if (!dados.completa) { setCorBoxAtaRetificadora("vermelho"); setDataBoxAtaRetificadora("Ata incompleta"); - setGerarAtaRetificadora(false) } else { setCorBoxAtaRetificadora("verde"); setDataBoxAtaRetificadora("Último preenchimento em "+exibeDateTimePT_BR_Ata(dados.alterado_em)); - setGerarAtaRetificadora(true) } } } @@ -75,7 +68,6 @@ export const GeracaoAtaRetificadora = ({uuidPrestacaoConta, statusPrestacaoDeCon onClickVisualizarAta={onClickVisualizarAta} uuidPrestacaoConta={uuidPrestacaoConta} uuidAtaRetificacao={dadosAtaRetificadora ? dadosAtaRetificadora.uuid : ""} - gerarAtaRetificadora={gerarAtaRetificadora} statusPc={statusPC} /> } diff --git a/src/componentes/escolas/GeracaoDaAta/GeracaoAtaApresentacao/index.js b/src/componentes/escolas/GeracaoDaAta/GeracaoAtaApresentacao/index.js index 9d321089e..97d65d588 100644 --- a/src/componentes/escolas/GeracaoDaAta/GeracaoAtaApresentacao/index.js +++ b/src/componentes/escolas/GeracaoDaAta/GeracaoAtaApresentacao/index.js @@ -1,37 +1,37 @@ import React, {useCallback, useEffect, useState} from "react"; import "../geracao-da-ata.scss" import {getGerarAtaPdf, getAtas, getDownloadAtaPdf} from "../../../../services/escolas/AtasAssociacao.service"; +import {ModalNaoPodeGerarAta} from "../ModalNaoPodeGerarAta"; import Spinner from "../../../../assets/img/spinner.gif"; import {FontAwesomeIcon} from '@fortawesome/react-fontawesome' import {faDownload} from '@fortawesome/free-solid-svg-icons' export const GeracaoAtaApresentacao = ( { - gerarAta, uuidAtaApresentacao, uuidPrestacaoConta, corBoxAtaApresentacao, textoBoxAtaApresentacao, dataBoxAtaApresentacao, onClickVisualizarAta, - uuidAssociacao, - uuidPeriodo, } ) => { const [dadosAta, setDadosAta] = useState({}); + const [showNaoPodeGerarAta, setShowNaoPodeGerarAta] = useState(false); + const [textoModalAta, setTextoModalAta] = useState('

Você não pode gerar o PDF de uma ata incompleta.

'); useEffect(() => { if (uuidAtaApresentacao && dadosAta && dadosAta.status_geracao_pdf && dadosAta.status_geracao_pdf === 'EM_PROCESSAMENTO'){ const timer = setInterval(() => { - get_dados_ata(); + getDadosAta(); }, 5000); // clearing interval return () => clearInterval(timer); } }); - const get_dados_ata = useCallback(async ()=>{ + const getDadosAta = useCallback(async ()=>{ if (uuidAtaApresentacao){ let dados_ata = await getAtas(uuidAtaApresentacao); setDadosAta(dados_ata) @@ -39,17 +39,28 @@ export const GeracaoAtaApresentacao = ( }, [uuidAtaApresentacao]) useEffect(()=>{ - get_dados_ata() - }, [get_dados_ata]) + getDadosAta() + }, [getDadosAta]) - const gerar_ata_pdf = async () =>{ - await getGerarAtaPdf(uuidPrestacaoConta, uuidAtaApresentacao) - await get_dados_ata() + const gerarAta = async () =>{ + try { + await getGerarAtaPdf(uuidPrestacaoConta, uuidAtaApresentacao) + await getDadosAta() + } + catch (e) { + let mensagem = '' + let camposInvalidos = e.response.data.campos_invalidos + camposInvalidos.map((element) => { + mensagem += typeof(element) === 'object' ? ` ${element['msg_presente']}` : ` ${element}, ` + }) + setTextoModalAta(`

Você não pode gerar o PDF de uma ata incompleta. Para completa-la ${camposInvalidos[0]['msg_presente'] ? mensagem : `preencha os campo(s) ${mensagem}`}.

`.replace(/,(?=[^,]*$)/, '')) // Regex remove espaço em branco e virgula no final. ⮕ (/,(?=[^,]*$)/,) '' + setShowNaoPodeGerarAta(true) + } } const download_ata_pdf = async () =>{ await getDownloadAtaPdf(uuidAtaApresentacao) - await get_dados_ata() + await getDadosAta() } return ( @@ -81,15 +92,24 @@ export const GeracaoAtaApresentacao = ( }

- +
+ { setShowNaoPodeGerarAta(false) }} + setShowNaoPodeGerarAta={setShowNaoPodeGerarAta} + titulo="Campo em ata incompletos" + texto={textoModalAta} + primeiroBotaoTexto="Fechar" + primeiroBotaoCss="outline-success" + /> +
{uuidPrestacaoConta && diff --git a/src/componentes/escolas/GeracaoDaAta/ModalNaoPodeGerarAta.js b/src/componentes/escolas/GeracaoDaAta/ModalNaoPodeGerarAta.js new file mode 100644 index 000000000..d6b81711d --- /dev/null +++ b/src/componentes/escolas/GeracaoDaAta/ModalNaoPodeGerarAta.js @@ -0,0 +1,16 @@ +import React from 'react'; +import { ModalBootstrap } from '../../Globais/ModalBootstrap'; + +export const ModalNaoPodeGerarAta = (props) => { + return ( + props.setShowNaoPodeGerarAta(false)} + primeiroBotaoTexto={props.primeiroBotaoTexto} + primeiroBotaoCss={props.primeiroBotaoCss} + /> + ) +} \ No newline at end of file diff --git a/src/componentes/escolas/PrestacaoDeContas/DetalheDasPrestacoes/TabelaTransacoes/index.js b/src/componentes/escolas/PrestacaoDeContas/DetalheDasPrestacoes/TabelaTransacoes/index.js index b61dc24eb..e4074d3c3 100644 --- a/src/componentes/escolas/PrestacaoDeContas/DetalheDasPrestacoes/TabelaTransacoes/index.js +++ b/src/componentes/escolas/PrestacaoDeContas/DetalheDasPrestacoes/TabelaTransacoes/index.js @@ -94,6 +94,7 @@ const TabelaTransacoes = ({ ) } }; + const valorTemplate = (rowData = null, column = null, valor = null) => { let valor_para_formatar; if (valor) { @@ -107,32 +108,27 @@ const TabelaTransacoes = ({ }); valor_formatado = valor_formatado.replace(/R/, "").replace(/\$/, ""); - if (rowData && rowData.valor_transacao_na_conta !== rowData.valor_transacao_total) { - let texto_exibir = `
Valor total de despesa: ${Number(rowData.valor_transacao_total).toLocaleString('pt-BR', { - style: 'currency', - currency: 'BRL' - })}
`; - rowData.valores_por_conta.map((item) => ( - texto_exibir += `
Conta ${item.conta_associacao__tipo_conta__nome}: ${Number(item.valor_rateio__sum).toLocaleString('pt-BR', { - style: 'currency', - currency: 'BRL' - })}
` - )); - - return ( -
- - {valor_formatado} - - - -
- ) - } else { - return valor_formatado + let texto_exibir = rowData?.informacoes?.map(info => { + if (info.tag_nome === 'Parcial'){ + return info.tag_hint + }}).filter((texto) => texto !== undefined).join(', '); + + if (!texto_exibir){ + return ( +
+ + {valor_formatado} + + + +
+ ) + } + else { + return valor_formatado } }; diff --git a/src/componentes/escolas/PrestacaoDeContas/index.js b/src/componentes/escolas/PrestacaoDeContas/index.js index b6464e76c..dbbb862c3 100644 --- a/src/componentes/escolas/PrestacaoDeContas/index.js +++ b/src/componentes/escolas/PrestacaoDeContas/index.js @@ -31,7 +31,6 @@ export const PrestacaoDeContas = ({setStatusPC}) => { const [textoBoxAtaApresentacao, settextoBoxAtaApresentacao] = useState(""); const [dataBoxAtaApresentacao, setdataBoxAtaApresentacao] = useState(""); const [uuidAtaApresentacao, setUuidAtaApresentacao] = useState(""); - const [gerarAta, setGerarAta] = useState(false); const associacaoUuid = localStorage.getItem(ASSOCIACAO_UUID) @@ -216,16 +215,14 @@ export const PrestacaoDeContas = ({setStatusPC}) => { if (data_preenchimento.alterado_em === null){ setcorBoxAtaApresentacao("vermelho"); setdataBoxAtaApresentacao("Ata não preenchida"); - setGerarAta(false) } else if (!data_preenchimento.completa) { setcorBoxAtaApresentacao("vermelho"); setdataBoxAtaApresentacao("Ata incompleta"); - setGerarAta(false) } + } else { setcorBoxAtaApresentacao("verde"); - setdataBoxAtaApresentacao("Último preenchimento em "+exibeDateTimePT_BR_Ata(data_preenchimento.alterado_em)); - setGerarAta(true) + setdataBoxAtaApresentacao("Último preenchimento em "+exibeDateTimePT_BR_Ata(data_preenchimento.alterado_em)); } }catch (e) { @@ -235,7 +232,7 @@ export const PrestacaoDeContas = ({setStatusPC}) => { setcorBoxAtaApresentacao("vermelho"); settextoBoxAtaApresentacao(data_preenchimento.nome); setdataBoxAtaApresentacao("Ata não preenchida"); - setGerarAta(false) + } } @@ -250,11 +247,9 @@ export const PrestacaoDeContas = ({setStatusPC}) => { if (data_preenchimento.alterado_em === null) { setcorBoxAtaApresentacao("vermelho"); setdataBoxAtaApresentacao("Ata não preenchida"); - setGerarAta(false) } else { setcorBoxAtaApresentacao("verde"); setdataBoxAtaApresentacao("Último preenchimento em " + exibeDateTimePT_BR_Ata(data_preenchimento.alterado_em)); - setGerarAta(true) } } catch (e) { @@ -264,10 +259,8 @@ export const PrestacaoDeContas = ({setStatusPC}) => { setcorBoxAtaApresentacao("vermelho"); settextoBoxAtaApresentacao(data_preenchimento.nome); setdataBoxAtaApresentacao("Ata não preenchida"); - setGerarAta(false) } - } setLoading(false); } @@ -387,7 +380,6 @@ export const PrestacaoDeContas = ({setStatusPC}) => { dataBoxAtaApresentacao={dataBoxAtaApresentacao} uuidAtaApresentacao={uuidAtaApresentacao} uuidPrestacaoConta={uuidPrestacaoConta} - gerarAta={gerarAta} /> {localStorage.getItem('uuidPrestacaoConta') && exibeBoxAtaRetificadora() && diff --git a/src/componentes/escolas/Receitas/ListaDeReceitas/index.js b/src/componentes/escolas/Receitas/ListaDeReceitas/index.js index 91950aa63..c02ec959f 100644 --- a/src/componentes/escolas/Receitas/ListaDeReceitas/index.js +++ b/src/componentes/escolas/Receitas/ListaDeReceitas/index.js @@ -7,7 +7,6 @@ import {useHistory} from 'react-router-dom'; import '../../../../paginas/escolas/404/pagina-404.scss' import moment from 'moment'; import {getListaReceitas, getTotaisReceitas} from "../../../../services/escolas/Receitas.service"; -import {getBotaoValoresReprogramados} from "../../../../services/escolas/ValoresReprogramados.service"; import {MsgImgLadoDireito} from "../../../Globais/Mensagens/MsgImgLadoDireito" import {MsgImgCentralizada} from "../../../Globais/Mensagens/MsgImgCentralizada"; import Img404 from "../../../../assets/img/img-404.svg"; @@ -33,12 +32,10 @@ export const ListaDeReceitas = () => { const [buscaUtilizandoFiltro, setBuscaUtilizandoFiltro] = useState(false); const [btnMaisFiltros, setBtnMaisFiltros] = useState(false); const [loading, setLoading] = useState(true); - const [btnValoresReprogramados, setBtnValoresReprogramados] = useState(false); useEffect(() => { buscaTotaisReceitas() buscaListaReceitas() - botaoValoresReprogramados() }, []); @@ -54,11 +51,6 @@ export const ListaDeReceitas = () => { setTotais(listaTotais); }; - const botaoValoresReprogramados = async () => { - const botao = await getBotaoValoresReprogramados(); - setBtnValoresReprogramados(botao.permite_implantacao) - }; - const redirecionaDetalhe = value => { const url = '/edicao-de-receita/' + value.uuid; history.push(url); @@ -150,9 +142,7 @@ export const ListaDeReceitas = () => {
- {btnValoresReprogramados && - - } +
diff --git a/src/componentes/escolas/ValoresReprogramados/index.js b/src/componentes/escolas/ValoresReprogramados/index.js deleted file mode 100644 index 656660381..000000000 --- a/src/componentes/escolas/ValoresReprogramados/index.js +++ /dev/null @@ -1,446 +0,0 @@ -import React, {useEffect, useState} from "react"; -import {Formik, FieldArray} from "formik"; -import {round, exibeDataPT_BR} from "../../../utils/ValidacoesAdicionaisFormularios"; -import {SalvarValoresReprogramados} from "../../../utils/Modais"; -import {getTabelasReceita} from "../../../services/escolas/Receitas.service"; -import {getSaldosValoresReprogramados, criarValoresReprogramados} from "../../../services/escolas/ValoresReprogramados.service"; -import CurrencyInput from "react-currency-input"; -import {FontAwesomeIcon} from '@fortawesome/react-fontawesome' -import {faTrashAlt} from '@fortawesome/free-solid-svg-icons' -import "./valores-reprogramados.scss" -import Loading from "../../../utils/Loading"; -const findDuplicates = require('array-find-duplicates'); - - -export const ValoresReprogramados = () => { - - const tabelaInicial = { - tipos_receita: [], - acoes_associacao: [], - contas_associacao: [] - }; - - const initial = { - associacao: "", - periodo: {}, - saldos:[], - valor_total: 0, - }; - - const [tabelas, setTabelas] = useState(tabelaInicial); - const [initialValue, setInitialValue] = useState(initial); - const [showModalSalvar, setShowModalSalvar] = useState(false); - const [btnAddValoresReprogramadosReadonly, setBtnAddValoresReprogramadosReadonly] = useState(false); - const [camposObrigatorios, setCamposObrigatorios] = useState(false); - const [semSaldo, setSemSaldo] = useState(false); - const [loading, setLoading] = useState(true); - - useEffect(()=> { - const carregaTabelas = async () => { - getTabelasReceita().then(response => { - setTabelas(response.data); - }).catch(error => { - console.log(error); - }); - }; - carregaTabelas(); - }, []); - - useEffect(()=> { - setLoading(true) - const carregaSaldos = async () => { - let saldos = await getSaldosValoresReprogramados(); - setInitialValue(saldos); - }; - carregaSaldos(); - setLoading(false) - }, []); - - useEffect(()=>{ - setLoading(false) - }, []); - - const getPath = () => { - let path; - path = `/lista-de-receitas`; - window.location.assign(path) - }; - - const serviceSalvarValoresReprogramados = async (values, errors, setFieldValue) =>{ - setShowModalSalvar(false); - setFieldValue("periodo", values.periodo); - if (Object.entries(errors).length === 0 ) { - onSubmit(values) - } - }; - - const onShowModalSalvar = (errors, values) =>{ - if (Object.entries(errors).length <= 0){ - setShowModalSalvar(true); - } - }; - - const validateFormValoresReprogramados = async (values) => { - const errors = {}; - let valor_total_somado = 0; - - if(values && values.saldos && values.saldos.length > 0){ - setSemSaldo(false); - - values.saldos.map((item)=>{ - if (!item.acao_associacao || !item.conta_associacao || !item.aplicacao || !item.saldo || item.saldo === "0,00"){ - errors.campos_obrigatorios = "Todos os campos são obrigatórios"; - setCamposObrigatorios(true) - }else { - setCamposObrigatorios(false) - } - if (typeof item.saldo === "string") { - valor_total_somado = valor_total_somado + Number(item.saldo.replace(/\./gi, '').replace(/,/gi, '.')) - }else { - valor_total_somado = valor_total_somado + item.saldo - } - if (item.acao_associacao && item.acao_associacao.uuid){ - item.acao_associacao = item.acao_associacao.uuid; - }else{ - item.acao_associacao = item.acao_associacao ? item.acao_associacao : null; - } - if (item.conta_associacao && item.conta_associacao.uuid){ - item.conta_associacao = item.conta_associacao.uuid; - }else{ - item.conta_associacao = item.conta_associacao ? item.conta_associacao : null; - } - }) - }else{ - errors.sem_saldos = "É necessário ao menos um valor programado"; - setSemSaldo(true) - } - - values.valor_total = round(valor_total_somado, 2); - - // Verificando Lançamentos Duplicados - let duplicates; - duplicates = findDuplicates(values.saldos, (a, b) => a.acao_associacao === b.acao_associacao && a.aplicacao === b.aplicacao && a.conta_associacao === b.conta_associacao); - if (duplicates.length > 0){ - errors.lancamemto_duplicado = 'Não é permitido o lançamento duplicado de valores para a mesma conta, ação e tipo de aplicação'; - setBtnAddValoresReprogramadosReadonly(true) - }else { - setBtnAddValoresReprogramadosReadonly(false) - } - return errors; - }; - - const onSubmit = async (values) => { - setShowModalSalvar(false); - setLoading(true); - - values.saldos.map((saldo)=>{ - if (saldo.acao_associacao && saldo.acao_associacao.uuid){ - saldo.acao_associacao = saldo.acao_associacao.uuid; - }else{ - saldo.acao_associacao = saldo.acao_associacao ? saldo.acao_associacao : null; - } - if (saldo.conta_associacao && saldo.conta_associacao.uuid){ - saldo.conta_associacao = saldo.conta_associacao.uuid; - }else{ - saldo.conta_associacao = saldo.conta_associacao ? saldo.conta_associacao : null; - } - - saldo.aplicacao = saldo.aplicacao ? saldo.aplicacao : null; - - if (saldo.saldo && typeof saldo.saldo === "string"){ - saldo.saldo = Number(saldo.saldo.replace(/\./gi,'').replace(/,/gi,'.')) - } - }); - - const payload = { - saldos: values.saldos - }; - - try { - const response = await criarValoresReprogramados(payload); - if (response.status === 200 || response.status === 201 ){ - console.log("Salvar ", response); - console.log("Operação realizada com sucesso!"); - getPath(); - }else{ - console.log("Erro"); - setLoading(false) - } - } catch (error) { - console.log(error); - setLoading(false) - } - }; - - const retornaClassificacaoReceita = (uuid_acao) => { - if(tabelas.categorias_receita !== undefined && tabelas.categorias_receita.length > 0 && uuid_acao){ - return tabelas.categorias_receita.map((item, index) => { - return ( - - ); - }) - } - }; - - const getDisplayOptionClassificacaoReceita = (id_categoria_receita, uuid_acao) => { - let uuid = null; - if(uuid_acao && uuid_acao.acao){ - uuid = uuid_acao.uuid; - } - else{ - uuid = uuid_acao; - } - - let id_categoria_receita_lower = id_categoria_receita.toLowerCase(); - let aceitaClassificacao = eval('tabelas.acoes_associacao.find(element => element.uuid === uuid).acao.aceita_' + id_categoria_receita_lower); - - if(aceitaClassificacao){ - return "block" - } - else{ - return "none" - } - }; - - return ( - <> - {loading ? ( - - ) : - - {props => { - const { - values, - setFieldValue, - errors, - } = props; - return ( -
-
-
- - - {props.errors.periodo && - {props.errors.periodo}} -
- -
- - { - props.handleChange(e); - } - } - readOnly={true} - /> - {props.errors.valor_total && - {props.errors.valor_total}} -
-
- - ( - <> - {values.saldos && values.saldos.length > 0 && values.saldos.map((saldo, index) => { - return ( -
-
- -
- - - {props.errors.acao_associacao && {props.errors.acao_associacao}} -
- -
- - - {props.touched.conta_associacao && props.errors.conta_associacao && - {props.errors.conta_associacao}} -
- -
- - - {props.touched.aplicacao && props.errors.aplicacao && - {props.errors.aplicacao}} -
- -
- - { - props.handleChange(e); - } - } - /> - {props.touched.saldo && props.errors.saldo && {props.errors.saldo}} -
- - - {index >= 0 && values.saldos.length > 0 && ( -
- -
- )} -
-
/*div key*/ - ) - })} - {props.errors.lancamemto_duplicado && -
- {props.errors.lancamemto_duplicado} -
- } - {props.errors.campos_obrigatorios && -
- {props.errors.campos_obrigatorios} -
- } - {props.errors.sem_saldos && -
- {props.errors.sem_saldos} -
- } -
- -
- - )} - /> - -
- - -
- -
- setShowModalSalvar(false)} - onSalvarTrue={() => serviceSalvarValoresReprogramados(values, errors, setFieldValue)} - /> -
- - - ) - }} -
- } - - ); -}; \ No newline at end of file diff --git a/src/componentes/escolas/ValoresReprogramados/valores-reprogramados.scss b/src/componentes/escolas/ValoresReprogramados/valores-reprogramados.scss deleted file mode 100644 index 67d0cd52b..000000000 --- a/src/componentes/escolas/ValoresReprogramados/valores-reprogramados.scss +++ /dev/null @@ -1,13 +0,0 @@ -.container-campos-dinamicos { - - .btn-excluir-valores-reprogramados, .btn-excluir-valores-reprogramados:hover, .btn-excluir-valores-reprogramados:focus { - outline: none; - border: none; - background-color: transparent; - } - - .fa-trash-alt{ - color: #B40C02; - } - -} diff --git a/src/componentes/sme/ExtracaoDados/CardButton.js b/src/componentes/sme/ExtracaoDados/CardButton.js new file mode 100644 index 000000000..5e4cd93e1 --- /dev/null +++ b/src/componentes/sme/ExtracaoDados/CardButton.js @@ -0,0 +1,13 @@ +import React from 'react'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' +import { faDownload } from '@fortawesome/free-solid-svg-icons' +import './extracao-dados.scss' + +export const CardButton = ( { children, ...props }) => { + return ( + + ) +} \ No newline at end of file diff --git a/src/componentes/sme/ExtracaoDados/Cards.js b/src/componentes/sme/ExtracaoDados/Cards.js new file mode 100644 index 000000000..39d6ddae6 --- /dev/null +++ b/src/componentes/sme/ExtracaoDados/Cards.js @@ -0,0 +1,14 @@ +export const cards = [ + { + titulo: 'Créditos das Unidades Educacionais no período', + descricao: 'Arquivo com os créditos informados por todas as unidades educacionais no período. Arquivos: Principal e Motivos de estorno', + tags: ['CSV'], + endpoint: '/api/exportacoes-dados/creditos/' + }, + // { Para a criação de um novo card e feita a inserção de dados via objeto + // titulo: '', + // descricao: '', + // tags: [''], + // action: () => Exportar Dados + // } +] \ No newline at end of file diff --git a/src/componentes/sme/ExtracaoDados/ExtracaoCard.js b/src/componentes/sme/ExtracaoDados/ExtracaoCard.js new file mode 100644 index 000000000..708bc9743 --- /dev/null +++ b/src/componentes/sme/ExtracaoDados/ExtracaoCard.js @@ -0,0 +1,19 @@ +import React from 'react'; +import './extracao-dados.scss' + +export const ExtracaoCard = ({titulo, descricao, tags, action}) => { + return ( +
+
+

{ titulo }

+

{ descricao }

+
+ { tags.map(tag => {tag} ) } +
+
+
+ { action() } +
+
+ ) +} diff --git a/src/componentes/sme/ExtracaoDados/extracao-dados.scss b/src/componentes/sme/ExtracaoDados/extracao-dados.scss new file mode 100644 index 000000000..3d97e338c --- /dev/null +++ b/src/componentes/sme/ExtracaoDados/extracao-dados.scss @@ -0,0 +1,99 @@ +.extracao { + &-title { + margin-top: 15px; + color: #2B7D83; + font-weight: 700; + font-size: 20px; + line-height: 140%; + &-filter{ + padding-top: 18px; + font-weight: 700; + font-size: 16px; + line-height: 28px; + margin-bottom: 0px; + } + } + &-filter { + padding-top: 22px; + border-top: 1px solid #CCC; + &-datepicker { + width: 20%; + } + } + &-date { + display: block; + margin-top: 15px; + &-msg{ + color: #2B7D83; + font-weight: 700; + } + } + &-space { + width: 100% + } + +} + +.extracao-card { + margin-top: 8px; + padding: 16px; + border: 1.5px solid #CCC; + border-radius: 3px; + display: flex; + color: #42474A; + &-container{ + width: 70%; + height: 100%; + } + &-title { + font-weight: 700; + font-size: 16px; + line-height: 22px; + } + &-description { + font-size: 14px; + line-height: 22px; + } + &-tags { + display: flex; + } + &-tag { + background-color: #086397; + display: block; + color: #FFF; + padding: 4px 8px; + border-radius: 4px; + margin-right: 8px; + font-weight: 700; + } + &-action { + flex: 1; + margin-right: 15px; + display: flex; + align-items: center; + justify-content: flex-end; + } + &-button { + color: #00585E; + padding: 8px; + border: 2px solid #00585E; + border-radius: 3px; + outline: none; + background-color: inherit; + font-size: 14px; + font-weight: bold; + line-height: 22px; + letter-spacing: 0em; + + } +} + +.ant-picker-range-separator::before { + margin-top: 10px; + content: "até"; + color: #CBC1C9; +} + +.ant-picker-separator{ + display:none; +} \ No newline at end of file diff --git a/src/componentes/sme/ExtracaoDados/index.js b/src/componentes/sme/ExtracaoDados/index.js new file mode 100644 index 000000000..2f28b515f --- /dev/null +++ b/src/componentes/sme/ExtracaoDados/index.js @@ -0,0 +1,71 @@ +import React, {useState} from 'react'; +import {DatePicker, Space } from "antd"; +import {ExtracaoCard} from "./ExtracaoCard" +import {CardButton} from "./CardButton" +import {getExportaCreditos} from "../../../services/sme/ExtracaoDados.service" +import {toastCustom} from "../../Globais/ToastCustom"; +import {cards} from "./Cards" +import locale from 'antd/es/date-picker/locale/pt_BR'; +import moment from "moment"; +import './extracao-dados.scss' + +export const ExtracaoDados = () => { + const [dataInicial, setDataInicial] = useState('') + const [dataFinal, setDataFinal] = useState('') + + async function handleExportaDados(endpoint) { + try { + await getExportaCreditos(endpoint, dataInicial, dataFinal) + toastCustom.ToastCustomSuccess('Geração solicitada com sucesso.', 'A geração foi solicitada. Em breve você receberá um aviso na central de downloads com o resultado.') + } + catch (err) { + console.log(`erro ao exportar dados de creditos ${err}`) + } + } + + return ( + <> +
Dados disponíveis para extração
+

Filtrar por data

+
+ + Selecione o período de criação (vazio para todos) + ( + (date).startOf('day').toDate().valueOf() > + moment().startOf('day').toDate().valueOf() + )} + allowEmpty={[true, true]} + className='extracao-filter-datepicker' + placeholder={['data inicial', 'data final']} + name="data_range" + id="data_range" + onCalendarChange={(dates) => { + setDataInicial(dates?.[0] ? dates[0].format('YYYY-MM-DD'): '') + setDataFinal(dates?.[1] ? dates[1].format('YYYY-MM-DD'): '') + }} + /> + { + dataInicial && dataFinal ? + Exibindo dados de {moment(dataInicial).format('DD/MM/YYYY')} à  + {moment(dataFinal).format('DD/MM/YYYY')}. : + } + + { cards.map(( {titulo, descricao, tags, endpoint}, index ) => ( + handleExportaDados(endpoint)}> Exportar Dados + } + /> + ) )} + +
+ + ) +} \ No newline at end of file diff --git a/src/hooks/dres/PrestacaoDeContas/ConferenciaDeLancamentos/scss/rowExpansionTable.scss b/src/hooks/dres/PrestacaoDeContas/ConferenciaDeLancamentos/scss/rowExpansionTable.scss new file mode 100644 index 000000000..8bb6f84ae --- /dev/null +++ b/src/hooks/dres/PrestacaoDeContas/ConferenciaDeLancamentos/scss/rowExpansionTable.scss @@ -0,0 +1,3 @@ +#nav-conferencia-de-lancamentos-tabContent .p-datatable-tbody tr:not([class]) { + pointer-events: none; +} \ No newline at end of file diff --git a/src/hooks/dres/PrestacaoDeContas/ConferenciaDeLancamentos/scss/tagInformacaoTemplate.scss b/src/hooks/dres/PrestacaoDeContas/ConferenciaDeLancamentos/scss/tagInformacaoTemplate.scss new file mode 100644 index 000000000..2ccb94bab --- /dev/null +++ b/src/hooks/dres/PrestacaoDeContas/ConferenciaDeLancamentos/scss/tagInformacaoTemplate.scss @@ -0,0 +1,44 @@ +.tag-informacoes { + display: flex; + flex: 1; + max-width: 130px; + justify-content: center; + padding-left: 2px; + padding-right: 2px; + border-radius: 5px; + margin-bottom: 10px; + color: #fff; +} + +.tag-purple { + background-color: #9C33AD; +} + +.tag-darkblue { + background-color: #5C4EF8; +} + +.tag-orange { + background-color: #F2890D +} + +.tag-green { + background-color: #198459 +} + +.tag-blank{ + border: 2px solid #198459; + color: #198459; + background: inherit; +} + +#vinculo-atividade + span { + max-width: 130px; + padding-left: 6px; + padding-right: 6px; + border-radius: 5px; + margin-bottom: 10px; + color: #00585D; + background-color: #DADADA; +} + diff --git a/src/hooks/dres/PrestacaoDeContas/ConferenciaDeLancamentos/useRowExpansionDespesaTemplate.js b/src/hooks/dres/PrestacaoDeContas/ConferenciaDeLancamentos/useRowExpansionDespesaTemplate.js index 53fac9f9f..eea613207 100644 --- a/src/hooks/dres/PrestacaoDeContas/ConferenciaDeLancamentos/useRowExpansionDespesaTemplate.js +++ b/src/hooks/dres/PrestacaoDeContas/ConferenciaDeLancamentos/useRowExpansionDespesaTemplate.js @@ -7,6 +7,7 @@ import useConferidoRateioTemplate from "./useConferidoRateioTemplate"; import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; import {faInfoCircle} from "@fortawesome/free-solid-svg-icons"; import ReactTooltip from "react-tooltip"; +import './scss/rowExpansionTable.scss'; const useRowExpansionDespesaTemplate = (prestacaoDeContas) =>{ @@ -62,7 +63,7 @@ const useRowExpansionDespesaTemplate = (prestacaoDeContas) =>{
-
Despesa {index + 1} +
Despesas {(retornaToolTipRateio(rateio))}
@@ -102,7 +103,7 @@ const useRowExpansionDespesaTemplate = (prestacaoDeContas) =>{ {rateio.valor_rateio ? valor_template(null, null, rateio.valor_rateio) : 0}
-

Vínculo a atividade

+

Vínculo a atividade

{tagRateioTemplate(rateio)}
{ diff --git a/src/hooks/dres/PrestacaoDeContas/ConferenciaDeLancamentos/useTagInformacaoTemplate.js b/src/hooks/dres/PrestacaoDeContas/ConferenciaDeLancamentos/useTagInformacaoTemplate.js new file mode 100644 index 000000000..1032e84ab --- /dev/null +++ b/src/hooks/dres/PrestacaoDeContas/ConferenciaDeLancamentos/useTagInformacaoTemplate.js @@ -0,0 +1,43 @@ +import React from "react"; +import ReactTooltip from "react-tooltip"; +import '../ConferenciaDeLancamentos/scss/tagInformacaoTemplate.scss'; + +const types = { + 1: 'tag-purple', + 2: 'tag-darkblue', + 3: 'tag-orange', + 4: 'tag-green', + 5: 'tag-blank' +} + +function useTagInformacaoTemplate (){ + + function retornaTagInformacaoToolTip (informacao){ + if(typeof(informacao) === 'string'){ + return `

${informacao}

` + } else { + return informacao.reduce((acc, info) => (acc + `${info}
`), '

') + '

' + } + } + + function retornaTagInformacaoTemplate (rowData) { + return ( +
+ {rowData.informacoes ? rowData['informacoes']?.map((tag, index) => { + const toolTip = retornaTagInformacaoToolTip(tag.tag_hint) + return ( +
+ {tag.tag_nome} +
+ ) + }) : '-'} + +
+ ) + } + + return retornaTagInformacaoTemplate + +} + +export default useTagInformacaoTemplate diff --git a/src/hooks/dres/PrestacaoDeContas/ConferenciaDeLancamentos/useValorTemplate.js b/src/hooks/dres/PrestacaoDeContas/ConferenciaDeLancamentos/useValorTemplate.js index 813e39cd9..3db86c45a 100644 --- a/src/hooks/dres/PrestacaoDeContas/ConferenciaDeLancamentos/useValorTemplate.js +++ b/src/hooks/dres/PrestacaoDeContas/ConferenciaDeLancamentos/useValorTemplate.js @@ -1,8 +1,3 @@ -import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; -import {faInfoCircle} from "@fortawesome/free-solid-svg-icons"; -import ReactTooltip from "react-tooltip"; -import React from "react"; - function useValorTemplate (){ function retornaValor (rowData= null, column = null, valor = null) { @@ -18,33 +13,7 @@ function useValorTemplate (){ }); valor_formatado = valor_formatado.replace(/R/, "").replace(/\$/, ""); - if (rowData && rowData.valor_transacao_na_conta !== rowData.valor_transacao_total) { - let texto_exibir = `
Valor total de despesa: ${Number(rowData.valor_transacao_total).toLocaleString('pt-BR', { - style: 'currency', - currency: 'BRL' - })}
`; - rowData.valores_por_conta.map((item) => ( - texto_exibir += `
Conta ${item.conta_associacao__tipo_conta__nome}: ${Number(item.valor_rateio__sum).toLocaleString('pt-BR', { - style: 'currency', - currency: 'BRL' - })}
` - )); - - return ( -
- - {valor_formatado} - - - -
- ) - } else { - return valor_formatado - } + return valor_formatado } return retornaValor diff --git a/src/paginas/PaginasContainer.js b/src/paginas/PaginasContainer.js index 4870ca1b8..63cde2138 100644 --- a/src/paginas/PaginasContainer.js +++ b/src/paginas/PaginasContainer.js @@ -1,16 +1,17 @@ -import React, {useContext} from "react"; +import React, {useCallback, useContext, useEffect, useState} from "react"; import {SidebarContext} from "../context/Sidebar"; import {NotificacaoContext} from "../context/Notificacoes"; import {useHistory} from "react-router-dom"; import {notificaDevolucaoPCService} from "../services/NotificacaDevolucaoPC.service"; import { barraMensagemCustom } from "../componentes/Globais/BarraMensagem"; +import {BarraMensagemUnidadeEmSuporte} from "../componentes/Globais/BarraMensagemUnidadeEmSuporte"; + export const PaginasContainer = ({children}) => { const history = useHistory(); const sidebarStatus = useContext(SidebarContext); const notificacaoContext = useContext(NotificacaoContext); const mensagem = `A prestação de contas ${localStorage.getItem("NOTIFICAR_DEVOLUCAO_REFERENCIA")} foi devolvida para acertos pela DRE.` - const onVerAcertos = () => { notificacaoContext.setExibeMensagemFixaTemDevolucao(false) notificaDevolucaoPCService.marcaNotificacaoComoLidaERedirecianaParaVerAcertos(history) @@ -19,6 +20,7 @@ export const PaginasContainer = ({children}) => { return ( <>
+ { notificacaoContext.exibeMensagemFixaTemDevolucao && barraMensagemCustom.BarraMensagemSucessLaranja(mensagem, "Ver acertos", onVerAcertos, true) } diff --git a/src/paginas/SME/ExtracaoDados/index.js b/src/paginas/SME/ExtracaoDados/index.js new file mode 100644 index 000000000..08b9f5634 --- /dev/null +++ b/src/paginas/SME/ExtracaoDados/index.js @@ -0,0 +1,15 @@ +import React from "react"; +import {PaginasContainer} from "../../PaginasContainer"; +import {ExtracaoDados} from "../../../componentes/sme/ExtracaoDados"; + + +export const ExtracaoDadosPage = () =>{ + return ( + +

Extração de dados do sistema

+
+ +
+
+ ) +}; \ No newline at end of file diff --git a/src/paginas/SME/SuporteAsUnidades/index.js b/src/paginas/SME/SuporteAsUnidades/index.js new file mode 100644 index 000000000..7e62188ae --- /dev/null +++ b/src/paginas/SME/SuporteAsUnidades/index.js @@ -0,0 +1,12 @@ +import React from "react"; +import {PaginasContainer} from "../../PaginasContainer"; +import {SuporteAsUnidades} from "../../../componentes/Globais/SuporteAsUnidades" + +export const SuporteAsUnidadesSme = () =>{ + return ( + +

Suporte às unidades

+ +
+ ) +}; diff --git a/src/paginas/dres/RelatorioConsolidado/index.js b/src/paginas/dres/RelatorioConsolidado/index.js deleted file mode 100644 index a23b02f6e..000000000 --- a/src/paginas/dres/RelatorioConsolidado/index.js +++ /dev/null @@ -1,12 +0,0 @@ -import React from "react"; -import {PaginasContainer} from '../../PaginasContainer' -import {RelatorioConsolidado} from "../../../componentes/dres/RelatorioConsolidado"; - -export const RelatorioConsolidadoPage = () => { - return ( - -

Relatório consolidado

- -
- ) -}; \ No newline at end of file diff --git a/src/paginas/dres/SuporteAsUnidades/index.js b/src/paginas/dres/SuporteAsUnidades/index.js new file mode 100644 index 000000000..9115d86b7 --- /dev/null +++ b/src/paginas/dres/SuporteAsUnidades/index.js @@ -0,0 +1,13 @@ +import React from "react"; +import {PaginasContainer} from "../../PaginasContainer"; +import {SuporteAsUnidades} from "../../../componentes/Globais/SuporteAsUnidades" + + +export const SuporteAsUnidadesDre = () =>{ + return ( + +

Suporte às unidades da DRE

+ +
+ ) +}; \ No newline at end of file diff --git a/src/paginas/dres/ValoresReprogramadosDre/index.js b/src/paginas/dres/ValoresReprogramadosDre/index.js new file mode 100644 index 000000000..e500579ef --- /dev/null +++ b/src/paginas/dres/ValoresReprogramadosDre/index.js @@ -0,0 +1,14 @@ +import React from "react"; +import {PaginasContainer} from "../../PaginasContainer"; +import { ValoresReprogramadosDre } from "../../../componentes/dres/ValoresReprogramadosDre"; + +export const ValoresReprogramadosDrePage = () =>{ + return ( + +

Valores reprogramados

+
+ +
+
+ ) +}; \ No newline at end of file diff --git a/src/paginas/escolas/ValoresReprogramados/index.js b/src/paginas/escolas/ValoresReprogramados/index.js deleted file mode 100644 index 43c938b14..000000000 --- a/src/paginas/escolas/ValoresReprogramados/index.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from "react"; -import {PaginasContainer} from "../../PaginasContainer"; -import {ValoresReprogramados} from "../../../componentes/escolas/ValoresReprogramados"; - - -export const ValoresReprogramadosPage = () =>{ - - return ( - -

Cadastro de valores reprogramados

-
- -
-
- ) - -} \ No newline at end of file diff --git a/src/rotas/index.js b/src/rotas/index.js index 1719fcd8e..5f4e21f16 100644 --- a/src/rotas/index.js +++ b/src/rotas/index.js @@ -16,7 +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 {ValoresReprogramadosPage} from "../paginas/escolas/ValoresReprogramados"; +import { ValoresReprogramados } from "../componentes/Globais/ValoresReprogramados"; import {DadosDasContasPage} from "../paginas/escolas/DadosDasContasAssociacao"; import {EsqueciMinhaSenhaPage} from "../paginas/Login/EsqueciMinhaSenha"; import {RedefinirSenhaPage} from "../paginas/Login/RedefinirMinhaSenha"; @@ -33,7 +33,10 @@ import {GestaoDePerfisForm} from "../componentes/Globais/GestaoDePerfis/GestaoDe import {ConsultaDeSaldosBancarios} from "../componentes/sme/ConsultaDeSaldosBancarios"; import {ConsultaDeSaldosBancariosDetalhesAssociacoes} from "../componentes/sme/ConsultaDeSaldosBancarios/ConsultaDeSaldosBancariosDetalhesAssociacoes"; import {RegularidadeAssociacoesPage} from "../paginas/dres/RegularidadeAssociacoes"; +import { ValoresReprogramadosDrePage } from "../paginas/dres/ValoresReprogramadosDre"; import {AnalisesRegularidadeAssociacaoPage} from "../paginas/dres/RegularidadeAssociacoes/AnalisesRegularidadeDaAssociacao"; +import {SuporteAsUnidadesDre} from "../paginas/dres/SuporteAsUnidades" +import {SuporteAsUnidadesSme} from "../paginas/SME/SuporteAsUnidades" // Faz o redirect de acordo com a Visao Selecionada import {RedirectLoginVisaoUe} from "../utils/RedirectLoginVisaoUe"; import {DadosDaDiretoriaDrePage} from "../paginas/dres/Diretoria/DadosDaDiretoria"; @@ -45,8 +48,10 @@ import {DreDashboardPage} from "../paginas/dres/DreDashboard"; import {ListaPrestacaoDeContas} from "../componentes/dres/PrestacaoDeContas/ListaPrestacaoDeContas"; import {DetalhePrestacaoDeContas} from "../componentes/dres/PrestacaoDeContas/DetalhePrestacaoDeContas"; import {DetalhePrestacaoDeContasNaoApresentada} from "../componentes/dres/PrestacaoDeContas/DetalhePrestacaoDeContasNaoApresentada"; -import {RelatorioConsolidadoPage} from "../paginas/dres/RelatorioConsolidado"; +import RelatorioConsolidado from "../componentes/dres/RelatorioConsolidado"; +// TODO Remover RelatorioConsolidadoApuracao import {RelatorioConsolidadoApuracao} from "../componentes/dres/RelatorioConsolidado/RelatorioConsolidadoApuracao"; +import {RelatorioConsolidadoEmTela} from "../componentes/dres/RelatorioConsolidado/RelatorioConsolidadoEmTela"; import {RelatorioConsolidadoDadosDasUes} from "../componentes/dres/RelatorioConsolidado/RelatorioConsolidadoDadosDasUes"; import {PainelParametrizacoesPage} from "../paginas/SME/Parametrizacoes/PainelParametrizacoes"; import {AcompanhamentoPcsSmePage} from "../paginas/SME/AcompanhamentoPcsSme"; @@ -71,6 +76,7 @@ import {AnalisesRegularidadePage} from "../componentes/dres/RegularidadeAssociac import { VisualizacaoDaAtaParecerTecnico } from "../componentes/dres/RelatorioConsolidado/AtaParecerTecnico/VisualizacaoAtaParecerTecnico"; import { EdicaoAtaParecerTecnico } from "../componentes/dres/RelatorioConsolidado/AtaParecerTecnico/VisualizacaoAtaParecerTecnico/EdicaoAta"; import { ParametrizacoesMotivosDeEstorno } from "../componentes/sme/Parametrizacoees/Receitas/ParametrizacoesMotivosEstorno"; +import {ExtracaoDadosPage} from '../paginas/SME/ExtracaoDados' const routesConfig = [ { @@ -130,8 +136,8 @@ const routesConfig = [ { exact: true, path: "/cadastro-de-valores-reprogramados", - component: ValoresReprogramadosPage, - permissoes: ['add_valores_reprogramados'], + component: ValoresReprogramados, + permissoes: ['access_valores_reprogramados_ue', 'access_valores_reprogramados_dre'], }, { exact: true, @@ -187,6 +193,13 @@ const routesConfig = [ component: AssociacoesPage, permissoes: ['access_associacao_dre'], }, + { + exact: true, + path: "/dre-valores-reprogramados", + component: ValoresReprogramadosDrePage, + permissoes: ['access_valores_reprogramados_dre'], + }, + { exact: true, path: "/dre-detalhes-associacao/:origem?/:periodo_uuid?/:conta_uuid?", @@ -277,7 +290,12 @@ const routesConfig = [ component: ResumoDosAcertos, permissoes: ['access_acompanhamento_pcs_dre'], }, - + { + exact: true, + path: "/suporte-unidades-dre", + component: SuporteAsUnidadesDre, + permissoes: ['access_suporte_unidades_dre'], + }, { exact: true, path: "/sem-permissao-de-acesso", @@ -291,6 +309,12 @@ const routesConfig = [ component: GestaoDePerfisPage, permissoes: ['access_gestao_perfis_ue', 'access_gestao_perfis_dre', 'access_gestao_perfis_sme'], }, + { + exact: true, + path: "/extracoes-dados", + component: ExtracaoDadosPage, + permissoes: ['access_extracao_de_dados_sme'], + }, { exact: true, @@ -302,12 +326,12 @@ const routesConfig = [ { exact: true, path: "/dre-relatorio-consolidado", - component: RelatorioConsolidadoPage, + component: RelatorioConsolidado, permissoes: ['access_relatorio_consolidado_dre'], }, { exact: true, - path: "/visualizacao-da-ata-parecer-tecnico/:uuid_ata", + path: "/visualizacao-da-ata-parecer-tecnico/:uuid_ata/:ja_publicado?", component: VisualizacaoDaAtaParecerTecnico, permissoes: ['access_relatorio_consolidado_dre'], }, @@ -319,13 +343,19 @@ const routesConfig = [ }, { exact: true, - path: "/dre-relatorio-consolidado-apuracao/:periodo_uuid/:conta_uuid/", + path: "/dre-relatorio-consolidado-apuracao/:periodo_uuid/:conta_uuid/:ja_publicado?/:consolidado_dre_uuid?", component: RelatorioConsolidadoApuracao, permissoes: ['access_relatorio_consolidado_dre'], }, { exact: true, - path: "/dre-relatorio-consolidado-dados-das-ues/:periodo_uuid/:conta_uuid/", + path: "/dre-relatorio-consolidado-em-tela/:periodo_uuid/:ja_publicado?/:consolidado_dre_uuid?", + component: RelatorioConsolidadoEmTela, + permissoes: ['access_relatorio_consolidado_dre'], + }, + { + exact: true, + path: "/dre-relatorio-consolidado-dados-das-ues/:periodo_uuid/:conta_uuid/:ja_publicado?", component: RelatorioConsolidadoDadosDasUes, permissoes: ['access_relatorio_consolidado_dre'], }, @@ -455,6 +485,12 @@ const routesConfig = [ component: AnalisesRegularidadeAssociacaoPage, permissoes: ['access_regularidade_dre'], }, + { + exact: true, + path: "/suporte-unidades-sme", + component: SuporteAsUnidadesSme, + permissoes: ['access_suporte_unidades_sme'], + }, ]; diff --git a/src/services/SuporteAsUnidades.service.js b/src/services/SuporteAsUnidades.service.js new file mode 100644 index 000000000..b43d3ed38 --- /dev/null +++ b/src/services/SuporteAsUnidades.service.js @@ -0,0 +1,21 @@ +import api from './api' +import { TOKEN_ALIAS } from './auth.service.js'; + +const authHeader = { + headers: { + 'Authorization': `JWT ${localStorage.getItem(TOKEN_ALIAS)}`, + 'Content-Type': 'application/json' + } +}; + +export const geTextoExplicativoSuporteUnidades = async (visao) => { + if (visao === "DRE") { + return (await api.get(`/api/parametros-dre/texto-pagina-suporte/`, authHeader)).data + } + + if (visao === "SME") { + return (await api.get(`/api/parametros-sme/texto-pagina-suporte/`, authHeader)).data + } + + return {detail: "Erro. Visão não definida, esperado DRE ou SME."} +} diff --git a/src/services/ValoresReprogramados.service.js b/src/services/ValoresReprogramados.service.js new file mode 100644 index 000000000..b00dbe672 --- /dev/null +++ b/src/services/ValoresReprogramados.service.js @@ -0,0 +1,33 @@ +import api from './api'; +import {TOKEN_ALIAS} from "./auth.service"; + +const authHeader = { + headers: { + 'Authorization': `JWT ${localStorage.getItem(TOKEN_ALIAS)}`, + 'Content-Type': 'application/json' + } +}; + +export const getValoresReprogramados = async(associacao_uuid) => { + return (await api.get(`/api/valores-reprogramados/get-valores-reprogramados/?associacao_uuid=${associacao_uuid}`, authHeader)).data +} + +export const patchSalvarValoresReprogramados = async (payload) => { + return (await api.patch(`/api/valores-reprogramados/salvar-valores-reprogramados/`, payload, authHeader)).data +}; + +export const patchConcluirValoresReprogramados = async (payload) => { + return (await api.patch(`/api/valores-reprogramados/concluir-valores-reprogramados/`, payload, authHeader)).data +}; + +export const getStatusValoresReprogramados = async(associacao_uuid) => { + return (await api.get(`/api/valores-reprogramados/get-status-valores-reprogramados/?associacao_uuid=${associacao_uuid}`, authHeader)).data +} + +export const getTextoExplicativoUe = async() => { + return (await api.get(`/api/parametros-ue/texto-pagina-valores-reprogramados/`, authHeader)).data +} + +export const getTextoExplicativoDre = async() => { + return (await api.get(`/api/parametros-dre/texto-pagina-valores-reprogramados/`, authHeader)).data +} \ No newline at end of file diff --git a/src/services/auth.service.js b/src/services/auth.service.js index c2f39a111..15f60441c 100644 --- a/src/services/auth.service.js +++ b/src/services/auth.service.js @@ -16,6 +16,7 @@ export const USUARIO_EMAIL = "EMAIL"; export const USUARIO_CPF = "CPF"; export const USUARIO_LOGIN = "LOGIN"; export const DADOS_DA_ASSOCIACAO = "DADOS_DA_ASSOCIACAO"; +export const PERIODO_RELATORIO_CONSOLIDADO_DRE = "PERIODO_RELATORIO_CONSOLIDADO_DRE"; const authHeader = { 'Content-Type': 'application/json' @@ -39,6 +40,7 @@ const setDataLogin = async ()=>{ if (days >= 1){ localStorage.removeItem('DADOS_USUARIO_LOGADO'); localStorage.removeItem(ACOMPANHAMENTO_DE_PC); + localStorage.removeItem(PERIODO_RELATORIO_CONSOLIDADO_DRE); localStorage.setItem(DATA_LOGIN, moment(new Date(), "YYYY-MM-DD").format("YYYY-MM-DD")); localStorage.setItem(DATA_HORA_USUARIO_LOGADO, data_hora_atual); await logout(); @@ -131,6 +133,7 @@ const logout = () => { localStorage.removeItem(USUARIO_LOGIN); localStorage.removeItem(USUARIO_CPF); localStorage.removeItem(DADOS_DA_ASSOCIACAO); + localStorage.removeItem(PERIODO_RELATORIO_CONSOLIDADO_DRE); window.location.assign("/login") }; @@ -157,3 +160,22 @@ export const authService = { isLoggedIn, esqueciMinhaSenha, }; + + +export const getUsuarioLogado = () => { + return { + login: localStorage.getItem(USUARIO_LOGIN), + nome: localStorage.getItem(USUARIO_NOME) + } +} + +export const viabilizarAcessoSuporte = async (usuario, payload) => { + return (await api.post(`api/usuarios/${usuario}/viabilizar-acesso-suporte/`, payload, authHeaderAuthorization)) +}; + +export const encerrarAcessoSuporte = async (usuario, unidade_suporte_uuid) => { + const payload = { + unidade_suporte_uuid: unidade_suporte_uuid + } + return (await api.post(`api/usuarios/${usuario}/encerrar-acesso-suporte/`, payload, authHeaderAuthorization)) +}; diff --git a/src/services/dres/AtasParecerTecnico.service.js b/src/services/dres/AtasParecerTecnico.service.js index 883605af5..1549b0b98 100644 --- a/src/services/dres/AtasParecerTecnico.service.js +++ b/src/services/dres/AtasParecerTecnico.service.js @@ -12,8 +12,8 @@ export const getAtaParecerTecnico = async (uuid_ata) => { return (await api.get(`api/ata-parecer-tecnico/${uuid_ata}/`, authHeader)).data } -export const getInfoContas = async (dre_uuid, periodo_uuid) => { - return (await api.get(`api/ata-parecer-tecnico/info-ata/?dre=${dre_uuid}&periodo=${periodo_uuid}`, authHeader)).data +export const getInfoContas = async (dre_uuid, periodo_uuid, uuid_ata) => { + return (await api.get(`api/ata-parecer-tecnico/info-ata/?dre=${dre_uuid}&periodo=${periodo_uuid}&ata=${uuid_ata}`, authHeader)).data } export const getListaPresentesPadrao = async (dre_uuid, ata_uuid) => { @@ -24,17 +24,13 @@ export const postEdicaoAtaParecerTecnico = async (ata_uuid, payload) => { return (await api.patch(`/api/ata-parecer-tecnico/${ata_uuid}/`, payload, authHeader)).data }; -export const getGerarAta = async (ata_uuid, dre_uuid, periodo_uuid) => { - return (await api.get(`api/ata-parecer-tecnico/gerar-ata-parecer-tecnico/?ata=${ata_uuid}&dre=${dre_uuid}&periodo=${periodo_uuid}`, authHeader)).data -} - export const getStatusAta = async (dre_uuid, periodo_uuid) => { return (await api.get(`api/ata-parecer-tecnico/status-ata/?dre=${dre_uuid}&periodo=${periodo_uuid}`, authHeader)).data } export const getDownloadAtaParecerTecnico = async (ata_uuid) => { return api - .get(`api/ata-parecer-tecnico/download-ata-parecer-tecnico/?ata=${ata_uuid}`, { + .get(`api/consolidados-dre/download-ata-parecer-tecnico/?ata=${ata_uuid}`, { responseType: 'blob', timeout: 30000, headers: { diff --git a/src/services/dres/Laudas.service.js b/src/services/dres/Laudas.service.js new file mode 100644 index 000000000..8db219e4b --- /dev/null +++ b/src/services/dres/Laudas.service.js @@ -0,0 +1,32 @@ +import api from '../api' +import { TOKEN_ALIAS } from '../auth.service.js'; + +const authHeader = { + headers: { + 'Authorization': `JWT ${localStorage.getItem(TOKEN_ALIAS)}`, + 'Content-Type': 'application/json' + } +} + + +export const getDownloadLauda = async (lauda_uuid, filename) => { + return api + .get(`api/consolidados-dre/download-lauda/?lauda=${lauda_uuid}`, { + responseType: 'blob', + timeout: 30000, + headers: { + 'Authorization': `JWT ${localStorage.getItem(TOKEN_ALIAS)}`, + 'Content-Type': 'application/json', + } + }) + .then((response) => { + const url = window.URL.createObjectURL(new Blob([response.data])); + const link = document.createElement('a'); + link.href = url; + link.setAttribute('download', filename); + document.body.appendChild(link); + link.click(); + }).catch(error => { + return error.response; + }); +} \ No newline at end of file diff --git a/src/services/dres/PrestacaoDeContas.service.js b/src/services/dres/PrestacaoDeContas.service.js index 27b24c8dc..e1186733c 100644 --- a/src/services/dres/PrestacaoDeContas.service.js +++ b/src/services/dres/PrestacaoDeContas.service.js @@ -187,8 +187,8 @@ export const getDownloadArquivoDeReferencia = async (nome_do_arquivo, uuid, tipo ) }; -export const getLancamentosParaConferencia = async (prestacao_de_contas_uuid, analise_atual_uuid, conta_uuid, acao_associacao_uuid=null, tipo_lancamento=null, ordenar_por_imposto=null, filtrar_por_data_inicio=null, filtrar_por_data_fim=null, filtrar_por_numero_de_documento=null, filtrar_por_tipo_de_documento=null, filtrar_por_tipo_de_pagamento=null) => { - return (await api.get(`/api/prestacoes-contas/${prestacao_de_contas_uuid}/lancamentos/?analise_prestacao=${analise_atual_uuid}&conta_associacao=${conta_uuid}${acao_associacao_uuid ? '&acao_associacao='+acao_associacao_uuid : ''}${tipo_lancamento ? '&tipo='+tipo_lancamento : ''}${ordenar_por_imposto ? '&ordenar_por_imposto='+ordenar_por_imposto : ''}${filtrar_por_data_inicio ? '&filtrar_por_data_inicio='+filtrar_por_data_inicio : ''}${filtrar_por_data_fim ? '&filtrar_por_data_fim='+filtrar_por_data_fim : ''}${filtrar_por_numero_de_documento ? '&filtrar_por_numero_de_documento='+filtrar_por_numero_de_documento : ''}${filtrar_por_tipo_de_documento ? '&filtrar_por_tipo_de_documento='+filtrar_por_tipo_de_documento : ''}${filtrar_por_tipo_de_pagamento ? '&filtrar_por_tipo_de_pagamento='+filtrar_por_tipo_de_pagamento : ''}`, authHeader)).data +export const getLancamentosParaConferencia = async (prestacao_de_contas_uuid, analise_atual_uuid, conta_uuid, acao_associacao_uuid=null, tipo_lancamento=null, ordenar_por_imposto=null, filtrar_por_data_inicio=null, filtrar_por_data_fim=null, filtrar_por_nome_fornecedor=null, filtrar_por_numero_de_documento=null, filtrar_por_tipo_de_documento=null, filtrar_por_tipo_de_pagamento=null) => { + return (await api.get(`/api/prestacoes-contas/${prestacao_de_contas_uuid}/lancamentos/?analise_prestacao=${analise_atual_uuid}&conta_associacao=${conta_uuid}${acao_associacao_uuid ? '&acao_associacao='+acao_associacao_uuid : ''}${tipo_lancamento ? '&tipo='+tipo_lancamento : ''}${ordenar_por_imposto ? '&ordenar_por_imposto='+ordenar_por_imposto : ''}${filtrar_por_data_inicio ? '&filtrar_por_data_inicio='+filtrar_por_data_inicio : ''}${filtrar_por_data_fim ? '&filtrar_por_data_fim='+filtrar_por_data_fim : ''}${filtrar_por_nome_fornecedor ? '&filtrar_por_nome_fornecedor='+filtrar_por_nome_fornecedor : ''}${filtrar_por_numero_de_documento ? '&filtrar_por_numero_de_documento='+filtrar_por_numero_de_documento : ''}${filtrar_por_tipo_de_documento ? '&filtrar_por_tipo_de_documento='+filtrar_por_tipo_de_documento : ''}${filtrar_por_tipo_de_pagamento ? '&filtrar_por_tipo_de_pagamento='+filtrar_por_tipo_de_pagamento : ''}`, authHeader)).data }; export const getUltimaAnalisePc = async (prestacao_de_contas_uuid) => { @@ -239,14 +239,6 @@ export const postSolicitacoesParaAcertosDocumentos = async (prestacao_de_contas_ return (await api.post(`/api/prestacoes-contas/${prestacao_de_contas_uuid}/solicitacoes-de-acerto-documento/`, payload, authHeader)).data }; -export const getTemReajustes = async (analise_atual_uuid) => { - return (await api.get(`/api/analises-prestacoes-contas/${analise_atual_uuid}/verifica-reajustes/`, authHeader)).data -}; - -export const getSaldosIniciasAjustes = async (analise_atual_uuid, conta_uuid) => { - return (await api.get(`/api/analises-prestacoes-contas/${analise_atual_uuid}/saldos-iniciais-com-ajustes/?conta_associacao=${conta_uuid}`, authHeader)).data -}; - export const getExtratosBancariosAjustes = async (analise_atual_uuid, conta_uuid) => { return (await api.get(`/api/analises-prestacoes-contas/${analise_atual_uuid}/ajustes-extratos-bancarios/?conta_associacao=${conta_uuid}`, authHeader)).data }; @@ -315,18 +307,6 @@ export const downloadDocumentoPreviaPdf = async (analise_atual_uuid) => { }); }; -export const getAnaliseValorReprogramadoPorAcao = async (analise_prestacao_uuid, conta_associacao_uuid, acao_associacao_uuid) => { - return (await api.get(`/api/analises-valores-reprogramados/valores-reprogramados-acao/?analise_prestacao_conta=${analise_prestacao_uuid}&conta_associacao=${conta_associacao_uuid}&acao_associacao=${acao_associacao_uuid}`, authHeader)).data -}; - -export const patchAnaliseValorReprogramadoPorAcao = async (uuid_analise_de_valor_reprogramado, payload) => { - return (await api.patch(`/api/analises-valores-reprogramados/${uuid_analise_de_valor_reprogramado}/`, payload, authHeader)).data -}; - -export const postAnaliseValorReprogramadoPorAcao = async (payload) => { - return (await api.post(`/api/analises-valores-reprogramados/salvar-valores-reprogramados-acao/`, payload, authHeader)).data -}; - export const postAnaliseAjustesSaldoPorConta = async (payload) => { return (await api.post(`/api/analises-conta-prestacao-conta/salvar-ajustes-saldo-conta/`, payload, authHeader)).data }; diff --git a/src/services/dres/RelatorioConsolidado.service.js b/src/services/dres/RelatorioConsolidado.service.js index 4e24cb0de..4c02e1e13 100644 --- a/src/services/dres/RelatorioConsolidado.service.js +++ b/src/services/dres/RelatorioConsolidado.service.js @@ -9,6 +9,70 @@ const authHeader = { } }; +// Consolidado DRE + +export const getConsolidadoDre = async (dre_uuid, periodo_uuid) => { + return (await api.get(`/api/consolidados-dre/?dre=${dre_uuid}&periodo=${periodo_uuid}`, authHeader)).data +}; + +export const getConsolidadoDrePorUuidAtaDeParecerTecnico = async (ata_de_parecer_tecnico_uuid) => { + return (await api.get(`/api/consolidados-dre/consolidado-dre-por-ata-uuid/?ata=${ata_de_parecer_tecnico_uuid}`, authHeader)).data +}; + + +export const getConsolidadosDreJaPublicadosProximaPublicacao = async (dre_uuid, periodo_uuid) => { + return (await api.get(`/api/consolidados-dre/publicados-e-proxima-publicacao/?dre=${dre_uuid}&periodo=${periodo_uuid}`, authHeader)).data +}; + +export const getStatusConsolidadoDre = async (dre_uuid, periodo_uuid) => { + return (await api.get(`/api/consolidados-dre/status-consolidado-dre/?dre=${dre_uuid}&periodo=${periodo_uuid}`, authHeader)).data +}; + +export const postPublicarConsolidadoDre = async (payload) => { + return (await api.post(`/api/consolidados-dre/publicar/`, payload, authHeader)).data +}; + +export const postPublicarConsolidadoDePublicacoesParciais = async (payload) => { + return (await api.post(`/api/consolidados-dre/gerar-consolidado-de-publicacoes-parciais/`, payload, authHeader)).data +}; + +export const getStatusRelatorioConsolidadoDePublicacoesParciais = async (dre_uuid, periodo_uuid) => { + return (await api.get(`/api/consolidados-dre/retorna-status-relatorio-consolidado-de-publicacoes-parciais/?dre=${dre_uuid}&periodo=${periodo_uuid}`, authHeader)).data +}; + +export const postGerarPreviaConsolidadoDre = async (payload) => { + return (await api.post(`/api/consolidados-dre/gerar-previa/`, payload, authHeader)).data +}; + +export const postCriarAtaAtrelarAoConsolidadoDre = async (payload) => { + return (await api.post(`/api/consolidados-dre/criar-ata-e-atelar-ao-consolidado/`, payload, authHeader)).data +}; + +export const getDownloadRelatorio = async (relatorio_uuid, versao) => { + return api + .get(`/api/consolidados-dre/${relatorio_uuid}/download-relatorio-consolidado`, { + responseType: 'blob', + timeout: 30000, + headers: { + 'Authorization': `JWT ${localStorage.getItem(TOKEN_ALIAS)}`, + 'Content-Type': 'application/json', + } + }) + .then((response) => { + const url = window.URL.createObjectURL(new Blob([response.data])); + const filename = (versao === "FINAL" || versao === "CONSOLIDADA") ? 'relatorio_fisico_financeiro_dre.pdf' : 'previa_relatorio_fisico_financeiro_dre.pdf' + const link = document.createElement('a'); + link.href = url; + link.setAttribute('download', filename); + document.body.appendChild(link); + link.click(); + }).catch(error => { + return error.response; + }); +}; + +// FIM Consolidado DRE + export const getFiqueDeOlhoRelatoriosConsolidados = async () => { return (await api.get(`/api/relatorios-consolidados-dre/fique-de-olho/`, authHeader)).data }; @@ -21,8 +85,8 @@ export const getTiposConta = async () => { return (await api.get(`/api/tipos-conta/`, authHeader)).data }; -export const getExecucaoFinanceira = async (dre_uuid, periodo_uuid, conta_uuid) => { - return (await api.get(`/api/relatorios-consolidados-dre/info-execucao-financeira/?dre=${dre_uuid}&periodo=${periodo_uuid}&tipo_conta=${conta_uuid}`, authHeader)).data +export const getExecucaoFinanceira = async (dre_uuid, periodo_uuid, consolidado_dre_uuid='') => { + return (await api.get(`/api/relatorios-consolidados-dre/info-execucao-financeira/?dre=${dre_uuid}&periodo=${periodo_uuid}${consolidado_dre_uuid ? '&consolidado_dre=' + consolidado_dre_uuid : ""}`, authHeader)).data }; export const getDevolucoesContaPtrf = async (dre_uuid, periodo_uuid, conta_uuid) => { @@ -85,33 +149,14 @@ export const postGerarLauda = async (payload) => { return (await api.post(`/api/relatorios-consolidados-dre/gerar-lauda/`, payload, authHeader)).data }; -export const getDownloadRelatorio = async (dre_uuid, periodo_uuid, conta_uuid, versao) => { - return api - .get(`/api/relatorios-consolidados-dre/download/?dre=${dre_uuid}&periodo=${periodo_uuid}&tipo_conta=${conta_uuid}`, { - responseType: 'blob', - timeout: 30000, - headers: { - 'Authorization': `JWT ${localStorage.getItem(TOKEN_ALIAS)}`, - 'Content-Type': 'application/json', - } - }) - .then((response) => { - const url = window.URL.createObjectURL(new Blob([response.data])); - const filename = (versao === "FINAL") ? 'relatorio_dre.pdf' : 'previa_relatorio_dre.pdf' - const link = document.createElement('a'); - link.href = url; - link.setAttribute('download', filename); - document.body.appendChild(link); - link.click(); - }).catch(error => { - return error.response; - }); -}; - export const getListaAssociacoesNaoRegularizadas = async (dre_uuid) => { return (await api.get(`/api/associacoes/?unidade__dre__uuid=${dre_uuid}&status_regularidade=PENDENTE`, authHeader)).data }; export const getStatusAta = async (dre_uuid, periodo_uuid) => { return (await api.get(`/api/ata-parecer-tecnico/status-ata/?dre=${dre_uuid}&periodo=${periodo_uuid}`, authHeader)).data -} \ No newline at end of file +} + +export const getTrilhaStatus = async (dre_uuid, uuid_periodo) => { + return (await api.get(`/api/consolidados-dre/trilha-de-status/?dre=${dre_uuid}&periodo=${uuid_periodo}`, authHeader)).data +}; \ No newline at end of file diff --git a/src/services/dres/Unidades.service.js b/src/services/dres/Unidades.service.js index b2780ca55..4f7254805 100644 --- a/src/services/dres/Unidades.service.js +++ b/src/services/dres/Unidades.service.js @@ -15,4 +15,20 @@ export const getUnidade = async () => { export const salvaDadosDiretoria = async (uuid_unidade, payload) => { return (await api.patch(`api/unidades/${uuid_unidade}/`, payload, authHeader)).data -}; \ No newline at end of file +}; + +export const getUnidades = async (dreUuid, search) => { + + let url = 'api/unidades/' + if (dreUuid && search){ + url = `${url}?dre__uuid=${dreUuid}&search=${search}` + } + else if (dreUuid){ + url = `${url}?dre__uuid=${dreUuid}` + } + else if (search){ + url = `${url}?search=${search}` + } + console.log('URL:', url) + return (await api.get(url, authHeader)).data +}; diff --git a/src/services/dres/ValoresReprogramadosDre.service.js b/src/services/dres/ValoresReprogramadosDre.service.js new file mode 100644 index 000000000..dd6a00052 --- /dev/null +++ b/src/services/dres/ValoresReprogramadosDre.service.js @@ -0,0 +1,24 @@ +import api from '../api' +import { TOKEN_ALIAS } from '../auth.service.js'; + +const authHeader = { + headers: { + 'Authorization': `JWT ${localStorage.getItem(TOKEN_ALIAS)}`, + 'Content-Type': 'application/json' + } +}; + +export const getListaValoresReprogramados = async (dreUuid, status_padrao) => { + return ( + await api.get(`api/valores-reprogramados/lista-associacoes/?dre_uuid=${dreUuid}&status=${status_padrao}`, authHeader) + ).data +} + +export const filtrosListaValoresReprogramados = async(dreUuid, search=null, tipo_unidade=null, status_valores=null) => { + const url = `api/valores-reprogramados/lista-associacoes/?dre_uuid=${dreUuid}&search=${search}&tipo_unidade=${tipo_unidade}&status=${status_valores}` + return (await api.get(url, authHeader)).data +} + +export const getTabelaValoresReprogramados = async () => { + return (await api.get(`/api/valores-reprogramados/tabelas`, authHeader)).data +}; \ No newline at end of file diff --git a/src/services/escolas/Despesas.service.js b/src/services/escolas/Despesas.service.js index 14730ea13..87105fa3e 100644 --- a/src/services/escolas/Despesas.service.js +++ b/src/services/escolas/Despesas.service.js @@ -101,3 +101,7 @@ export const getMotivosPagamentoAntecipado = async () => { return (await api.get(`api/motivos-pagamento-antecipado/`, authHeader)).data }; +export const getTagInformacao = async () => { + return (await api.get(`api/despesas/tags-informacoes/`, authHeader)).data +} + diff --git a/src/services/mantemEstadoAcompanhamentoDePc.service.js b/src/services/mantemEstadoAcompanhamentoDePc.service.js index 4ce631437..91f27934a 100644 --- a/src/services/mantemEstadoAcompanhamentoDePc.service.js +++ b/src/services/mantemEstadoAcompanhamentoDePc.service.js @@ -16,6 +16,7 @@ const limpaAcompanhamentoDePcUsuarioLogado = (usuario) =>{ paginacao_atual: '', filtrar_por_data_inicio:'', filtrar_por_data_fim: '', + filtrar_por_nome_fornecedor: '', filtrar_por_numero_de_documento: '', filtrar_por_tipo_de_documento: '', filtrar_por_tipo_de_pagamento: '', @@ -52,6 +53,7 @@ const setAcompanhamentoDePc = async () =>{ filtrar_por_data_inicio: acompanhamento_de_pc_usuario_logado && acompanhamento_de_pc_usuario_logado.conferencia_de_lancamentos && acompanhamento_de_pc_usuario_logado.conferencia_de_lancamentos.filtrar_por_data_inicio ? acompanhamento_de_pc_usuario_logado.conferencia_de_lancamentos.filtrar_por_data_inicio : '', filtrar_por_data_fim: acompanhamento_de_pc_usuario_logado && acompanhamento_de_pc_usuario_logado.conferencia_de_lancamentos && acompanhamento_de_pc_usuario_logado.conferencia_de_lancamentos.filtrar_por_data_fim ? acompanhamento_de_pc_usuario_logado.conferencia_de_lancamentos.filtrar_por_data_fim : '', + filtrar_por_nome_fornecedor: acompanhamento_de_pc_usuario_logado && acompanhamento_de_pc_usuario_logado.conferencia_de_lancamentos && acompanhamento_de_pc_usuario_logado.conferencia_de_lancamentos.filtrar_por_nome_fornecedor ? acompanhamento_de_pc_usuario_logado.conferencia_de_lancamentos.filtrar_por_nome_fornecedor : '', filtrar_por_numero_de_documento: acompanhamento_de_pc_usuario_logado && acompanhamento_de_pc_usuario_logado.conferencia_de_lancamentos && acompanhamento_de_pc_usuario_logado.conferencia_de_lancamentos.filtrar_por_numero_de_documento ? acompanhamento_de_pc_usuario_logado.conferencia_de_lancamentos.filtrar_por_numero_de_documento : '', filtrar_por_tipo_de_documento: acompanhamento_de_pc_usuario_logado && acompanhamento_de_pc_usuario_logado.conferencia_de_lancamentos && acompanhamento_de_pc_usuario_logado.conferencia_de_lancamentos.filtrar_por_tipo_de_documento ? acompanhamento_de_pc_usuario_logado.conferencia_de_lancamentos.filtrar_por_tipo_de_documento : '', filtrar_por_tipo_de_pagamento: acompanhamento_de_pc_usuario_logado && acompanhamento_de_pc_usuario_logado.conferencia_de_lancamentos && acompanhamento_de_pc_usuario_logado.conferencia_de_lancamentos.filtrar_por_tipo_de_pagamento ? acompanhamento_de_pc_usuario_logado.conferencia_de_lancamentos.filtrar_por_tipo_de_pagamento : '', diff --git a/src/services/sme/ExtracaoDados.service.js b/src/services/sme/ExtracaoDados.service.js new file mode 100644 index 000000000..1dad0e6db --- /dev/null +++ b/src/services/sme/ExtracaoDados.service.js @@ -0,0 +1,16 @@ +import api from '../api' +import { TOKEN_ALIAS } from '../auth.service.js'; + +const authHeader = { + headers: { + 'Authorization': `JWT ${localStorage.getItem(TOKEN_ALIAS)}`, + 'Content-Type': 'application/json' + } +}; + +export const getExportaCreditos = async (url, dataInicio, dataFinal) => { + return (await api.get( + `${url}?data_inicio=${dataInicio}&data_final=${dataFinal}`, + authHeader + )).data +}; \ No newline at end of file diff --git a/src/services/visoes.service.js b/src/services/visoes.service.js index c7b181fe2..825c33ea1 100644 --- a/src/services/visoes.service.js +++ b/src/services/visoes.service.js @@ -4,7 +4,7 @@ import { ASSOCIACAO_TIPO_ESCOLA, ASSOCIACAO_NOME_ESCOLA, ASSOCIACAO_NOME, - authService, DATA_LOGIN + authService, DATA_LOGIN, PERIODO_RELATORIO_CONSOLIDADO_DRE } from "./auth.service"; import {redirect} from "../utils/redirect"; import moment from "moment"; @@ -22,6 +22,7 @@ const forcarNovoLogin = ()=>{ localStorage.setItem(DATA_HORA_USUARIO_LOGADO, data_hora_atual); localStorage.removeItem('DADOS_USUARIO_LOGADO'); localStorage.removeItem(ACOMPANHAMENTO_DE_PC); + localStorage.removeItem(PERIODO_RELATORIO_CONSOLIDADO_DRE); localStorage.setItem(DATA_LOGIN, moment(new Date(), "YYYY-MM-DD").format("YYYY-MM-DD")); authService.logout(); }else if (diferenca >= 600 && diferenca <= 1339){ // Equivale a 10 horas e menos que 24 horas @@ -246,6 +247,7 @@ const alternaVisoes = (visao, uuid_unidade, uuid_associacao, nome_associacao, un localStorage.removeItem('uuidPrestacaoConta'); localStorage.removeItem('uuidAta'); localStorage.removeItem('prestacao_de_contas_nao_apresentada'); + localStorage.removeItem(PERIODO_RELATORIO_CONSOLIDADO_DRE); localStorage.setItem("NOTIFICAR_DEVOLUCAO_REFERENCIA", notificar_devolucao_referencia) @@ -253,6 +255,39 @@ const alternaVisoes = (visao, uuid_unidade, uuid_associacao, nome_associacao, un } }; + +export const setarUnidadeProximoLoginAcessoSuporte = (visao, uuid_unidade, uuid_associacao, nome_associacao, unidade_tipo, unidade_nome) => { + let todos_os_dados_usuario_logado = localStorage.getItem(DADOS_USUARIO_LOGADO) ? JSON.parse(localStorage.getItem(DADOS_USUARIO_LOGADO)) : null; + let dados_usuario_logado = getDadosDoUsuarioLogado(); + + if (dados_usuario_logado) { + let novos_dados_usuario_logado = { + ...todos_os_dados_usuario_logado, + [`usuario_${getUsuarioLogin()}`]: { + ...dados_usuario_logado, + visao_selecionada: { + nome: converteNomeVisao(visao) + }, + unidade_selecionada: { + uuid: uuid_unidade, + tipo_unidade:unidade_tipo, + nome:unidade_nome, + notificar_devolucao_referencia:null, + notificar_devolucao_pc_uuid:null, + notificacao_uuid: null, + }, + + associacao_selecionada: { + uuid: unidade_tipo === "DRE" ? uuid_unidade: uuid_associacao, + nome: unidade_tipo === "DRE" ? unidade_nome: nome_associacao, + }, + } + }; + localStorage.setItem(DADOS_USUARIO_LOGADO, JSON.stringify(novos_dados_usuario_logado)); + } +}; + + const redirectVisao = (visao = null) => { let dados_usuario_logado = visoesService.getDadosDoUsuarioLogado(); if (visao === 'SME') { @@ -294,4 +329,3 @@ export const visoesService = { getItemUsuarioLogado, getUsuarioLogin, }; - diff --git a/src/utils/Modais.js b/src/utils/Modais.js index f65402a1b..50e549f6c 100644 --- a/src/utils/Modais.js +++ b/src/utils/Modais.js @@ -6,7 +6,8 @@ import { ModalBootstrapTipoRecursoNaoAceito, ModalBootstrapSaldoInsuficienteDaconta, ModalBootstrapFormMeusDadosSenha, - ModalBootstrapFormMeusDadosEmail + ModalBootstrapFormMeusDadosEmail, + ModalBootstrapConfirmarPublicacao } from "../componentes/Globais/ModalBootstrap"; import {FormAlterarSenha} from "../componentes/Globais/EdicaoDeSenha/FormAlterarSenha"; import {TextoValidacaoSenha} from "../componentes/Globais/MedidorForcaSenha/textoValidacaoSenha"; @@ -596,3 +597,103 @@ export const ModalConfirmarExportacao = (propriedades) => { /> ) }; + +export const ModalAtaNaoPreenchida = (propriedades) => { + return ( + + ) +}; + +export const ModalPublicarRelatorioConsolidado = (propriedades) => { + const bodyTextarea = () => { + return ( + <> +

+ Ao confirmar a publicação, o sistema bloqueará as alterações dos relatórios e da ata. +

+ +

+ Essa operação, não poderá ser revertida. +

+ +

+ Caso queira conferir as informações cadastradas, antes de concluir, volte e gere uma prévia dos documentos. +

+ +

Deseja concluir a publicação?

+ + ) + + }; + + return ( + + ) +}; + +export const ModalConclusaoValoresReprogramadosNaoPermitido = (propriedades) => { + return ( + + ) +}; + +export const ModalDescartarAlteracoesValoresReprogramados = (propriedades) => { + return ( + + ) +}; + +export const ModalConcluirValoresReprogramados = (propriedades) => { + return ( + + ) +}; diff --git a/src/utils/ValidacoesAdicionaisFormularios.js b/src/utils/ValidacoesAdicionaisFormularios.js index 52911f913..fbddd75cd 100644 --- a/src/utils/ValidacoesAdicionaisFormularios.js +++ b/src/utils/ValidacoesAdicionaisFormularios.js @@ -865,3 +865,19 @@ export const apenasNumero = (valor) => { } return false; } + +export const formataNomeDRE = (nome_dre) => { + if(nome_dre !== ""){ + nome_dre = nome_dre.toUpperCase(); + + if(nome_dre.indexOf("DIRETORIA REGIONAL DE EDUCACAO") !== -1){ + nome_dre = nome_dre.replace("DIRETORIA REGIONAL DE EDUCACAO", ""); + nome_dre = nome_dre.trim(); + + return nome_dre; + } + } + + + return nome_dre; +}