diff --git a/README.md b/README.md index 399e32473..f7779383a 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,22 @@ Front da aplicação _SIG.Escola_ da Secretaria de Educação da cidade de São License: MIT -Versão: 1.3.0 +Versão: 1.4.0 ## Release Notes +### 1.4.0 - 07/01/2021 - Entregas da Sprint 13 +* Visão SME +* SME > Painel de parâmetros do sistema +* SME > Acompanhamento de prestações de conta > Resumo Geral +* SME > Acompanhamento de prestações de conta > Resumo por DRE (lista) +* Lançamento de Créditos não relativos ao PTRF +* Melhorias na Ata de Retificação +* Seleção de repasses ao cadastrar créditos +* Recurso de exclusão de membros da associação +* Melhorias no acompanhamento de prestações de contas da DRE +* 🐞 Correção de alguns poucos bugs ;-) + ### 1.3.0 - 08/12/2020 - Entregas da Sprint 12 * Carga de previsões de repasse da SME; * Carga de quantidade de alunos do último celso; diff --git a/package.json b/package.json index 994a64acc..0ea4bbbc5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ptrf", - "version": "1.3.0", + "version": "1.4.0", "private": true, "dependencies": { "@fortawesome/fontawesome-svg-core": "^1.2.27", diff --git a/src/assets/img/icon-und-educacional.svg b/src/assets/img/icon-und-educacional.svg new file mode 100644 index 000000000..929957cdf --- /dev/null +++ b/src/assets/img/icon-und-educacional.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/img/icone-menu-parametrizacoes.svg b/src/assets/img/icone-menu-parametrizacoes.svg new file mode 100644 index 000000000..7364f52b2 --- /dev/null +++ b/src/assets/img/icone-menu-parametrizacoes.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/img/icone-parametro-acoes-associacoes.svg b/src/assets/img/icone-parametro-acoes-associacoes.svg new file mode 100644 index 000000000..c74c052aa --- /dev/null +++ b/src/assets/img/icone-parametro-acoes-associacoes.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/img/icone-parametro-associacoes.svg b/src/assets/img/icone-parametro-associacoes.svg new file mode 100644 index 000000000..5f59e0d9b --- /dev/null +++ b/src/assets/img/icone-parametro-associacoes.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/img/icone-parametro-contas-associacoes.svg b/src/assets/img/icone-parametro-contas-associacoes.svg new file mode 100644 index 000000000..5ad073861 --- /dev/null +++ b/src/assets/img/icone-parametro-contas-associacoes.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/img/icone-parametro-especificacoes.svg b/src/assets/img/icone-parametro-especificacoes.svg new file mode 100644 index 000000000..b8a7a0f06 --- /dev/null +++ b/src/assets/img/icone-parametro-especificacoes.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/img/icone-parametro-periodos.svg b/src/assets/img/icone-parametro-periodos.svg new file mode 100644 index 000000000..6e35becec --- /dev/null +++ b/src/assets/img/icone-parametro-periodos.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/assets/img/icone-parametro-tags.svg b/src/assets/img/icone-parametro-tags.svg new file mode 100644 index 000000000..a77302967 --- /dev/null +++ b/src/assets/img/icone-parametro-tags.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/img/icone-parametro-tipos-acao.svg b/src/assets/img/icone-parametro-tipos-acao.svg new file mode 100644 index 000000000..7ab4835e6 --- /dev/null +++ b/src/assets/img/icone-parametro-tipos-acao.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/assets/img/icone-parametro-tipos-conta.svg b/src/assets/img/icone-parametro-tipos-conta.svg new file mode 100644 index 000000000..7ae6c32c8 --- /dev/null +++ b/src/assets/img/icone-parametro-tipos-conta.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/img/icone-parametro-tipos-custeio.svg b/src/assets/img/icone-parametro-tipos-custeio.svg new file mode 100644 index 000000000..65f179f99 --- /dev/null +++ b/src/assets/img/icone-parametro-tipos-custeio.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/img/icone-parametro-tipos-documento.svg b/src/assets/img/icone-parametro-tipos-documento.svg new file mode 100644 index 000000000..7a6a0645a --- /dev/null +++ b/src/assets/img/icone-parametro-tipos-documento.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/assets/img/icone-parametro-tipos-receita.svg b/src/assets/img/icone-parametro-tipos-receita.svg new file mode 100644 index 000000000..be0b1b791 --- /dev/null +++ b/src/assets/img/icone-parametro-tipos-receita.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/assets/img/icone-parametro-tipos-transacao.svg b/src/assets/img/icone-parametro-tipos-transacao.svg new file mode 100644 index 000000000..97bcd58d6 --- /dev/null +++ b/src/assets/img/icone-parametro-tipos-transacao.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/img/icone-parametro-usuarios.svg b/src/assets/img/icone-parametro-usuarios.svg new file mode 100644 index 000000000..5656ac2a0 --- /dev/null +++ b/src/assets/img/icone-parametro-usuarios.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/componentes/Globais/Cabecalho/index.js b/src/componentes/Globais/Cabecalho/index.js index a56294109..57e32f091 100644 --- a/src/componentes/Globais/Cabecalho/index.js +++ b/src/componentes/Globais/Cabecalho/index.js @@ -26,13 +26,6 @@ export const Cabecalho = () => { qtdeNotificacoesNaoLidas() }, []); - - useEffect(()=>{ - if (dados_usuario_logado.visoes.find(visao=> visao === 'SME')){ - setExibeMenu(false); - } - }, []); - const qtdeNotificacoesNaoLidas = async () =>{ await notificacaoContext.getQtdeNotificacoesNaoLidas() }; @@ -52,7 +45,7 @@ export const Cabecalho = () => { const retornaVisaoConvertida = (visao, uuid_unidade, uuid_associacao, nome_associacao, unidade_tipo, unidade_nome) =>{ let visao_convertida = visoesService.converteNomeVisao(visao); let obj; - if (visao === "DRE"){ + if (visao === "DRE" || visao === "SME"){ obj = JSON.stringify({ visao: visao_convertida , uuid_unidade:uuid_unidade, @@ -141,7 +134,7 @@ export const Cabecalho = () => { unidade.tipo_unidade, unidade.uuid, unidade.associacao.uuid, - unidade.tipo_unidade === "DRE" ? unidade.nome : unidade.associacao.nome, + unidade.tipo_unidade === "DRE" || unidade.tipo_unidade === "SME" ? unidade.nome : unidade.associacao.nome, unidade.tipo_unidade, unidade.nome, )} diff --git a/src/componentes/Globais/SidebarLeft/getUrls.js b/src/componentes/Globais/SidebarLeft/getUrls.js index 3c6cdbf9f..f306ff9f1 100644 --- a/src/componentes/Globais/SidebarLeft/getUrls.js +++ b/src/componentes/Globais/SidebarLeft/getUrls.js @@ -12,6 +12,7 @@ import IconePainel from "../../../assets/img/icone-menu-dre-painel.svg" import IconeRelatorio from "../../../assets/img/icone-menu-dre-relatorio.svg" import IconeApoioDiretoria from "../../../assets/img/icone-apoio-a-diretoria.svg" import IconeGestaoDePerfis from "../../../assets/img/icone-menu-gestao-de-perfis.svg" +import IconeMenuParametrizacoes from "../../../assets/img/icone-menu-parametrizacoes.svg" const getDadosUsuario = () =>{ let usuario = localStorage.getItem(USUARIO_NOME); @@ -40,10 +41,10 @@ const UrlsMenuEscolas ={ {label: "Prestação de contas", url: "prestacao-de-contas", dataFor:"prestacao_de_contas", icone:IconeMenuPrestacaoDeContas, permissoes: ['view_prestacaoconta'], subItens: [ { - label: "Conciliação Bancária", url: "detalhe-das-prestacoes", dataFor:"detalhe_das_prestacoes", icone:"" + label: "Conciliação Bancária", url: "detalhe-das-prestacoes", dataFor:"detalhe_das_prestacoes", icone:"", permissoes: ['view_conciliacao_bancaria', ] }, { - label: "Geração de documentos", url: "prestacao-de-contas", dataFor:"prestacao_de_contas", icone:"" + label: "Geração de documentos", url: "prestacao-de-contas", dataFor:"prestacao_de_contas", icone:"", permissoes: ['view_default'] }, ] }, @@ -62,12 +63,12 @@ const UrlsMenuDres ={ /*{label: "Painel", url: "dre-dashboard", dataFor:"dre_dashboard", icone:IconePainel, permissoes: ['view_dashboard_dre'],},*/ {label: "Associações", url: "dre-associacoes", dataFor:"dre_associacoes", icone:IconeMenuGastosDaEscola, permissoes: ['view_associacao_dre'],}, {label: "Acompanhamento de PC", url: "dre-dashboard", dataFor:"dre_dashboard", icone:IconeAcompanhamento, permissoes: ['view_dadosdiretoria_dre'],}, - {label: "Relatório consolidado", url: "dre-relatorio-consolidado", dataFor:"dre_relatorio_consolidado", icone:IconeRelatorio, permissoes: ['view_dashboard_dre']}, + {label: "Relatório consolidado", url: "dre-relatorio-consolidado", dataFor:"dre_relatorio_consolidado", icone:IconeRelatorio, permissoes: ['view_relatorio_consolidado_dre']}, {label: "Dados da Diretoria", url: "dre-dados-da-diretoria", dataFor:"dre_dados_da_diretoria", icone:IconeDadosDaDiretoria, permissoes: ['view_dadosdiretoria_dre']}, {label: "Apoio à Diretoria", url: "dre-dados-da-diretoria", dataFor:"dre_dados_da_diretoria", icone:IconeApoioDiretoria, permissoes: ['view_dadosdiretoria_dre'], subItens: [ { - label: "Perguntas Frequentes", url: "dre-faq", dataFor:"dre_dados_da_diretoria", icone:IconeDadosDaDiretoria + label: "Perguntas Frequentes", url: "dre-faq", dataFor:"dre_dados_da_diretoria", icone:IconeDadosDaDiretoria, permissoes: ['view_default'] } ] }, @@ -75,31 +76,35 @@ const UrlsMenuDres ={ ] }; -const UrlsMenuSme ={ +const UrlsMenuSME ={ dados_iniciais: { - default_selected: "undefined", + default_selected: "acompanhamento-pcs-sme", usuario: getDadosUsuario(), associacao_tipo_escola: getDadosUnidade().tipo_escola, associacao_nome_escola: getDadosUnidade().nome_escola }, lista_de_urls:[ - {}, + {label: "Parametrizações", url: "painel-parametrizacoes", dataFor:"sme_painel_parametrizacoes", icone:IconeMenuParametrizacoes, permissoes: ['view_default'],}, + {label: "Acompanhamento de PCs", url: "acompanhamento-pcs-sme", dataFor:"acompanhamento_pcs_sme", icone:IconeAcompanhamento, permissoes: ['view_default'],}, + {label: "Gestão de perfis", url: "gestao-de-perfis", dataFor:"gestao_de_perfis", icone:IconeGestaoDePerfis, permissoes: ['view_default'],}, ] }; + + const GetUrls = () =>{ let dados_usuario_logado = visoesService.getDadosDoUsuarioLogado(); if (dados_usuario_logado.visao_selecionada.nome === 'SME'){ - return UrlsMenuSme + return UrlsMenuSME }else if(dados_usuario_logado.visao_selecionada.nome === 'DRE'){ return UrlsMenuDres }else if (dados_usuario_logado.visao_selecionada.nome === 'UE'){ return UrlsMenuEscolas }else { if ( dados_usuario_logado.visoes.find(visao=> visao.tipo === 'SME')){ - return UrlsMenuSme + return UrlsMenuSME }else if (dados_usuario_logado.visoes.find(visao=> visao.tipo === 'DRE')){ return UrlsMenuDres }else if (dados_usuario_logado.visoes.find(visao=> visao.tipo === 'UE')){ diff --git a/src/componentes/Globais/SidebarLeft/index.js b/src/componentes/Globais/SidebarLeft/index.js index 210e64c89..5069f04b7 100644 --- a/src/componentes/Globais/SidebarLeft/index.js +++ b/src/componentes/Globais/SidebarLeft/index.js @@ -95,6 +95,7 @@ export const SidebarLeft = () => { {} {url.subItens && url.subItens.length > 0 && url.subItens.map((subItem, index) => + visoesService.getPermissoes(subItem.permissoes) ? ( { {subItem.label} - + ): null )} ) : null diff --git a/src/componentes/dres/Associacoes/TabelaAssociacoes.js b/src/componentes/dres/Associacoes/TabelaAssociacoes.js index 54ad7d1f3..018abe894 100644 --- a/src/componentes/dres/Associacoes/TabelaAssociacoes.js +++ b/src/componentes/dres/Associacoes/TabelaAssociacoes.js @@ -10,13 +10,12 @@ export const TabelaAssociacoes = ({associacoes, rowsPerPage, unidadeEscolarTempl paginator={associacoes.length > rowsPerPage} rows={rowsPerPage} paginatorTemplate="PrevPageLink PageLinks NextPageLink" - //paginatorTemplate="FirstPageLink PrevPageLink PageLinks NextPageLink LastPageLink" autoLayout={true} selectionMode="single" > diff --git a/src/componentes/dres/Associacoes/index.js b/src/componentes/dres/Associacoes/index.js index 540b78b97..afccce287 100644 --- a/src/componentes/dres/Associacoes/index.js +++ b/src/componentes/dres/Associacoes/index.js @@ -74,7 +74,7 @@ export const Associacoes = () =>{ const unidadeEscolarTemplate = (rowData) =>{ return (
- {rowData['nome'] ? {rowData['nome']} : ''} + {rowData['unidade']['nome_com_tipo'] ? {rowData['unidade']['nome_com_tipo']} : ''}
) }; diff --git a/src/componentes/dres/PrestacaoDeContas/DetalhePrestacaoDeContas/InformacoesDevolucaoAoTesouro.js b/src/componentes/dres/PrestacaoDeContas/DetalhePrestacaoDeContas/InformacoesDevolucaoAoTesouro.js index b3e4345d8..c77abbc39 100644 --- a/src/componentes/dres/PrestacaoDeContas/DetalhePrestacaoDeContas/InformacoesDevolucaoAoTesouro.js +++ b/src/componentes/dres/PrestacaoDeContas/DetalhePrestacaoDeContas/InformacoesDevolucaoAoTesouro.js @@ -24,6 +24,40 @@ export const InformacoesDevolucaoAoTesouro = ({formRef, informacoesPrestacaoDeCo setShowConfirmaRemocao(false); }; + const clear = (index, setFieldValue) => { + setFieldValue(`devolucoes_ao_tesouro_da_prestacao[${index}].despesa`, ''); + setFieldValue(`devolucoes_ao_tesouro_da_prestacao[${index}].devolucao_total`, ''); + setFieldValue(`devolucoes_ao_tesouro_da_prestacao[${index}].valor`, '0,00'); + } + + const exibeDespesaSelecionada = (index, values, despesas, devolucao) => { + if (values.devolucoes_ao_tesouro_da_prestacao[index].despesa) { + let uuid_despesa = values.devolucoes_ao_tesouro_da_prestacao[index].despesa; + let desp = eval('despesas.devolucao_'+index).find(item => item.uuid === uuid_despesa); + + return ( + + + {/* eslint-disable-next-line no-eval */} + + {/* eslint-disable-next-line no-eval */} + {desp.nome_fornecedor} + {/* eslint-disable-next-line no-eval */} + {desp.cpf_cnpj_fornecedor} + {/* eslint-disable-next-line no-eval */} + {desp.tipo_documento && desp.tipo_documento.nome ? desp.tipo_documento.nome : ''} + {/* eslint-disable-next-line no-eval */} + {desp.numero_documento} + {/* eslint-disable-next-line no-eval */} + R$ {valorTemplate(desp.valor_total)} + {/* eslint-disable-next-line no-eval */} + {desp.data_documento ? exibeDataPT_BR(desp.data_documento) : ''} + + + ) + } + } + return( <> {informacoesPrestacaoDeContas && informacoesPrestacaoDeContas.devolucao_ao_tesouro !== "Não" && @@ -111,7 +145,7 @@ export const InformacoesDevolucaoAoTesouro = ({formRef, informacoesPrestacaoDeCo
- +
@@ -123,13 +157,15 @@ export const InformacoesDevolucaoAoTesouro = ({formRef, informacoesPrestacaoDeCo 0 ? 'table-bordered' : ''}`}> {/* eslint-disable-next-line no-eval */} - {despesas && eval('despesas.devolucao_'+index) && eval('despesas.devolucao_'+index).length > 0 ? + {values.devolucoes_ao_tesouro_da_prestacao[index].despesa !== "" && despesas && eval('despesas.devolucao_'+index) && eval('despesas.devolucao_'+index).length > 0? + exibeDespesaSelecionada(index, values, despesas, devolucao) + : despesas && eval('despesas.devolucao_'+index) && eval('despesas.devolucao_'+index).length > 0 ? // eslint-disable-next-line no-eval eval('despesas.devolucao_'+index).map((despesa, index_interno)=> {/* eslint-disable-next-line no-eval */} - + {/* eslint-disable-next-line no-eval */} {/* eslint-disable-next-line no-eval */} @@ -183,8 +219,8 @@ export const InformacoesDevolucaoAoTesouro = ({formRef, informacoesPrestacaoDeCo {props.errors.data && {props.errors.data}} @@ -197,6 +233,10 @@ export const InformacoesDevolucaoAoTesouro = ({formRef, informacoesPrestacaoDeCo value={devolucao.devolucao_total} onChange={async (e) => { props.handleChange(e); + if (values.devolucoes_ao_tesouro_da_prestacao[index].despesa && e.target.value === 'true') { + let desp = eval('despesas.devolucao_'+index).find(item => item.uuid === values.devolucoes_ao_tesouro_da_prestacao[index].despesa); + setFieldValue(`devolucoes_ao_tesouro_da_prestacao[${index}].valor`, valorTemplate(desp.valor_total)); + } } } className='form-control' @@ -226,21 +266,6 @@ export const InformacoesDevolucaoAoTesouro = ({formRef, informacoesPrestacaoDeCo disabled={setDisabledCampos(devolucao) } /> -
- - -
{visoesService.getItemUsuarioLogado('visao_selecionada.nome') === "UE" || (index >= 1 && values.devolucoes_ao_tesouro_da_prestacao.length > 1) ? (
diff --git a/src/componentes/dres/PrestacaoDeContas/DetalhePrestacaoDeContas/index.js b/src/componentes/dres/PrestacaoDeContas/DetalhePrestacaoDeContas/index.js index 76f6586a6..6aae5fa68 100644 --- a/src/componentes/dres/PrestacaoDeContas/DetalhePrestacaoDeContas/index.js +++ b/src/componentes/dres/PrestacaoDeContas/DetalhePrestacaoDeContas/index.js @@ -53,6 +53,7 @@ export const DetalhePrestacaoDeContas = () =>{ const initialConcluirAnalise = { status: "", resalvas: '', + motivos_reprovacao: '', data_limite_devolucao:'', }; @@ -530,6 +531,7 @@ export const DetalhePrestacaoDeContas = () =>{ devolucao_tesouro: informacoesPrestacaoDeContas.devolucao_ao_tesouro === 'Sim', analises_de_conta_da_prestacao: analisesDeContaDaPrestacao, resultado_analise: stateConcluirAnalise.status, + motivos_reprovacao: stateConcluirAnalise.motivos_reprovacao, devolucoes_ao_tesouro_da_prestacao:devolucao_ao_tesouro_tratado } } @@ -608,7 +610,7 @@ export const DetalhePrestacaoDeContas = () =>{ const validateFormDevolucaoAoTesouro = async (values) => { const errors = {}; values.devolucoes_ao_tesouro_da_prestacao.map((devolucao)=>{ - if (!devolucao.data || !devolucao.despesa || devolucao.devolucao_total === '' || !devolucao.motivo || !devolucao.tipo || !devolucao.valor){ + if (!devolucao.despesa || devolucao.devolucao_total === '' || !devolucao.tipo || !devolucao.valor){ setCamposObrigatorios(true); errors.campos_obrigatorios = "Todos os campos são obrigatórios"; }else { diff --git a/src/componentes/dres/PrestacaoDeContas/ListaPrestacaoDeContas/index.js b/src/componentes/dres/PrestacaoDeContas/ListaPrestacaoDeContas/index.js index 1b2f36b4c..8b7e1d224 100644 --- a/src/componentes/dres/PrestacaoDeContas/ListaPrestacaoDeContas/index.js +++ b/src/componentes/dres/PrestacaoDeContas/ListaPrestacaoDeContas/index.js @@ -161,10 +161,10 @@ export const ListaPrestacaoDeContas = () => { ) }; - const dataTemplate = (rowData) => { + const dataTemplate = (rowData, column) => { return (
- {rowData['data_recebimento'] ? moment(rowData['data_recebimento']).format('DD/MM/YYYY') : rowData['data_ultima_analise'] ? moment(rowData['data_ultima_analise']).format('DD/MM/YYYY') : '-'} + {rowData[column.field] ? moment(rowData[column.field]).format('DD/MM/YYYY') : '-'}
) }; diff --git a/src/componentes/dres/PrestacaoDeContas/ModalConcluirAnalise.js b/src/componentes/dres/PrestacaoDeContas/ModalConcluirAnalise.js index af526438e..f7e8dc372 100644 --- a/src/componentes/dres/PrestacaoDeContas/ModalConcluirAnalise.js +++ b/src/componentes/dres/PrestacaoDeContas/ModalConcluirAnalise.js @@ -35,6 +35,17 @@ export const ModalConcluirAnalise = (props) => { />
} + {props.stateConcluirAnalise.status === 'REPROVADA' && +
+ +
- - + +
} diff --git a/src/componentes/dres/RelatorioConsolidado/RelatorioConsolidadoApuracao/TopoComBotoes.js b/src/componentes/dres/RelatorioConsolidado/RelatorioConsolidadoApuracao/TopoComBotoes.js index a3b334c58..0d2f4a595 100644 --- a/src/componentes/dres/RelatorioConsolidado/RelatorioConsolidadoApuracao/TopoComBotoes.js +++ b/src/componentes/dres/RelatorioConsolidado/RelatorioConsolidadoApuracao/TopoComBotoes.js @@ -1,4 +1,5 @@ import React from "react"; +import {visoesService} from "../../../../services/visoes.service"; export const TopoComBotoes = ({periodoNome, contaNome, onClickGerarRelatorio}) =>{ return( @@ -8,9 +9,12 @@ export const TopoComBotoes = ({periodoNome, contaNome, onClickGerarRelatorio}) =
-
- -
+ {visoesService.getPermissoes(['gerar_relatorio_consolidado_dre']) + ? +
+ +
+ : null} ) diff --git a/src/componentes/escolas/Associacao/Membros/ConfirmaDeleteMembroDialog.js b/src/componentes/escolas/Associacao/Membros/ConfirmaDeleteMembroDialog.js new file mode 100644 index 000000000..2e8976661 --- /dev/null +++ b/src/componentes/escolas/Associacao/Membros/ConfirmaDeleteMembroDialog.js @@ -0,0 +1,20 @@ +import {ModalBootstrap} from "../../../Globais/ModalBootstrap"; + +import React from "react"; + +export const ConfirmaDeleteMembro = (propriedades) => { + return ( + + ) +}; diff --git a/src/componentes/escolas/Associacao/Membros/index.js b/src/componentes/escolas/Associacao/Membros/index.js index acd916946..c570ea44b 100644 --- a/src/componentes/escolas/Associacao/Membros/index.js +++ b/src/componentes/escolas/Associacao/Membros/index.js @@ -2,12 +2,13 @@ import React, {useEffect, useState, useMemo} from "react"; import {MenuInterno} from "../../../Globais/MenuInterno"; import {TabelaMembros} from "../TabelaMembros"; import {EditarMembro} from "../ModalMembros"; -import {getMembrosAssociacao, criarMembroAssociacao, editarMembroAssociacao, consultarRF, consultarCodEol, consultarCpfResponsavel, getUsuarios} from "../../../../services/escolas/Associacao.service"; +import {getMembrosAssociacao, criarMembroAssociacao, editarMembroAssociacao, consultarRF, consultarCodEol, consultarCpfResponsavel, getUsuarios, deleteMembroAssociacao} from "../../../../services/escolas/Associacao.service"; import {ASSOCIACAO_UUID} from '../../../../services/auth.service'; import Loading from "../../../../utils/Loading"; import {UrlsMenuInterno} from "../UrlsMenuInterno"; import {ExportaDadosDaAsssociacao} from "../ExportaDadosAssociacao"; import {visoesService} from "../../../../services/visoes.service"; +import {ConfirmaDeleteMembro} from "./ConfirmaDeleteMembroDialog"; export const MembrosDaAssociacao = () =>{ @@ -53,6 +54,7 @@ export const MembrosDaAssociacao = () =>{ const [stateFormEditarMembro, setStateFormEditarMembro] = useState(initFormMembro); const [btnSalvarReadOnly, setBtnSalvarReadOnly] = useState(false); const [loading, setLoading] = useState(true); + const [showConfirmDelete, setShowConfirmDelete] = useState(false); useEffect(()=>{ carregaMembros(); @@ -72,13 +74,11 @@ export const MembrosDaAssociacao = () =>{ const carregaMembros = async ()=>{ let membros = await getMembrosAssociacao(); - //console.log("Carrega Membros ", membros) setMembros(membros) }; const carregaUsuarios = async ()=>{ let usuarios = await getUsuarios(); - //console.log('carregaUsuarios ', usuarios) setUsuarios(usuarios); }; @@ -112,6 +112,9 @@ export const MembrosDaAssociacao = () =>{ ]; setInitialValuesMembrosDiretoria(cargos_e_infos_diretoria); setInitialValuesMembrosConselho(cargos_e_infos_conselho); + } else { + setInitialValuesMembrosDiretoria(initDiretoria); + setInitialValuesMembrosConselho(initConselho); } }; @@ -185,6 +188,7 @@ export const MembrosDaAssociacao = () =>{ setInfosMembroSelecionado(infoMembroSelecionado) }; + const toggleIcon = (id) => { setClickIconeToogle({ ...clickIconeToogle, @@ -372,6 +376,38 @@ export const MembrosDaAssociacao = () =>{ setLoading(false) }; + const handleDeleteMembroAction = (infoMembroSelecionado) => { + setInfosMembroSelecionado(infoMembroSelecionado) + setShowConfirmDelete(true); + }; + + const handleDeleteConfirmation = async () => { + setShowConfirmDelete(false); + await deleteMembro(infosMembroSelecionado.infos.uuid); + }; + + const closeConfirmDeleteDialog = () => { + setShowConfirmDelete(false); + }; + + const deleteMembro = async (uuid) => { + if (uuid) { + try { + const response = await deleteMembroAssociacao(uuid); + if (response.status === 204) { + console.log("Exclusão realizada com sucesso!"); + await carregaMembros(); + } else { + console.log("Erro ao excluir Membro") + } + } catch (error) { + console.log(error) + } + + } + }; + + return(
@@ -393,6 +429,7 @@ export const MembrosDaAssociacao = () =>{ clickIconeToogle={clickIconeToogle} toggleIcon={toggleIcon} onShowEditarMembro={onShowEditarMembro} + onDeleteMembro={handleDeleteMembroAction} cargos={initialValuesMembrosDiretoria} converteNomeRepresentacao={converteNomeRepresentacao} retornaDadosAdicionaisTabela={retornaDadosAdicionaisTabela} @@ -404,6 +441,7 @@ export const MembrosDaAssociacao = () =>{ clickIconeToogle={clickIconeToogle} toggleIcon={toggleIcon} onShowEditarMembro={onShowEditarMembro} + onDeleteMembro={handleDeleteMembroAction} cargos={initialValuesMembrosConselho} converteNomeRepresentacao={converteNomeRepresentacao} retornaDadosAdicionaisTabela={retornaDadosAdicionaisTabela} @@ -428,6 +466,14 @@ export const MembrosDaAssociacao = () =>{ /> +
+ +
+
); }; \ No newline at end of file diff --git a/src/componentes/escolas/Associacao/TabelaMembros/index.js b/src/componentes/escolas/Associacao/TabelaMembros/index.js index eae2e1bf8..1d5a0f4ab 100644 --- a/src/componentes/escolas/Associacao/TabelaMembros/index.js +++ b/src/componentes/escolas/Associacao/TabelaMembros/index.js @@ -1,8 +1,8 @@ import React, {Fragment} from "react"; import {FontAwesomeIcon} from '@fortawesome/react-fontawesome' -import {faAngleDown, faAngleUp, faEdit} from '@fortawesome/free-solid-svg-icons' +import {faAngleDown, faAngleUp, faEdit, faTrash} from '@fortawesome/free-solid-svg-icons' -export const TabelaMembros = ({titulo, clickIconeToogle, toggleIcon, onShowEditarMembro, cargos, converteNomeRepresentacao, retornaDadosAdicionaisTabela}) => { +export const TabelaMembros = ({titulo, clickIconeToogle, toggleIcon, onShowEditarMembro, cargos, converteNomeRepresentacao, retornaDadosAdicionaisTabela, onDeleteMembro}) => { return( <> @@ -36,12 +36,19 @@ export const TabelaMembros = ({titulo, clickIconeToogle, toggleIcon, onShowEdita
diff --git a/src/componentes/escolas/Despesas/CadastroDeDespesas/CadastroSaidaForm.js b/src/componentes/escolas/Despesas/CadastroDeDespesas/CadastroSaidaForm.js new file mode 100644 index 000000000..e55ae7893 --- /dev/null +++ b/src/componentes/escolas/Despesas/CadastroDeDespesas/CadastroSaidaForm.js @@ -0,0 +1,314 @@ +import React, {useContext, useEffect, useState} from "react"; +import {Formik} from "formik"; +import { + YupSignupSchemaCadastroDespesaSaida, + validaPayloadDespesas, + cpfMaskContitional, +} from "../../../../utils/ValidacoesAdicionaisFormularios"; +import MaskedInput from 'react-text-mask'; +import {getDespesasTabelas, criarDespesa} from "../../../../services/escolas/Despesas.service"; +import {DatePickerField} from "../../../Globais/DatePickerField"; +import {useParams} from 'react-router-dom'; +import {DespesaContext} from "../../../../context/Despesa"; +import "./cadastro-de-despesas.scss"; +import {metodosAuxiliares} from "../metodosAuxiliares"; +import {trataNumericos} from "../../../../utils/ValidacoesAdicionaisFormularios"; +import Loading from "../../../../utils/Loading"; +import CurrencyInput from "react-currency-input"; +import HTTP_STATUS from "http-status-codes"; +import {getReceita} from '../../../../services/escolas/Receitas.service'; + + +export const CadastroSaidaForm = (props) => { + const aux = metodosAuxiliares; + + let {uuid} = useParams(); + const despesaContext = useContext(DespesaContext); + const [cssEscondeDocumentoTransacao, setCssEscondeDocumentoTransacao] = useState('escondeItem'); + const [labelDocumentoTransacao, setLabelDocumentoTransacao] = useState(''); + const [numeroDocumentoReadOnly, setNumeroDocumentoReadOnly] = useState(false); + const [despesasTabelas, setDespesasTabelas] = useState([]); + const [exibeMsgErroValorOriginal, setExibeMsgErroValorOriginal] = useState(false); + const [loading, setLoading] = useState(true); + const [receita, setReceita] = useState(true); + + useEffect(() => { + const carregaTabelasDespesas = async () => { + const resp = await getDespesasTabelas(); + setDespesasTabelas(resp); + }; + + const buscaReceita = async () => { + if (uuid) { + getReceita(uuid).then(response => { + const resp = response.data; + setReceita(resp); + }).catch(error => { + console.log(error); + }); + } + }; + buscaReceita(); + carregaTabelasDespesas(); + setLoading(false); + }, []) + + const initialValues = () => { + return despesaContext.initialValues; + }; + + + const onSubmit = async (values) => { + setLoading(true); + validaPayloadDespesas(values, despesasTabelas); + + values.rateios[0].acao_associacao = receita.acao_associacao.uuid; + values.rateios[0].conta_associacao = receita.conta_associacao.uuid; + values.rateios[0].valor_original = values.valor_original + values.rateios[0].valor_rateio = values.valor_original + + try { + + const response = await criarDespesa(values); + if (response.status === HTTP_STATUS.CREATED) { + console.log("Operação realizada com sucesso!"); + aux.getPath(); + } else { + setLoading(false); + } + } catch (error) { + console.log(error); + setLoading(false); + } + + }; + + const onCancelarTrue = () => { + aux.getPath(); + }; + + return ( + <> + {loading ? + + : + + {props => { + const { + values, + setFieldValue, + resetForm, + errors, + } = props; + + return ( + <> +
+
+
+ + cpfMaskContitional(valor)} + value={props.values.cpf_cnpj_fornecedor} + onChange={(e) => { + props.handleChange(e); + aux.get_nome_razao_social(e.target.value, setFieldValue) + } + } + onBlur={props.handleBlur} + name="cpf_cnpj_fornecedor" id="cpf_cnpj_fornecedor" type="text" + className={`${!props.values.cpf_cnpj_fornecedor && despesaContext.verboHttp === "PUT" && "is_invalid "} form-control`} + placeholder="Digite o número do CNPJ ou CPF (apenas algarismos)" + /> + {props.errors.cpf_cnpj_fornecedor && {props.errors.cpf_cnpj_fornecedor}} +
+
+ + + {props.errors.nome_fornecedor && {props.errors.nome_fornecedor}} +
+
+ +
+
+ + + {props.errors.tipo_documento && {props.errors.tipo_documento}} +
+ +
+ + + {props.errors.data_documento && {props.errors.data_documento}} +
+ +
+ + + {props.errors.numero_documento && {props.errors.numero_documento}} +
+ +
+ + + {props.errors.tipo_transacao && {props.errors.tipo_transacao}} +
+ +
+ + + {props.errors.data_transacao && + {props.errors.data_transacao}} +
+ +
+
+ + + {props.errors.documento_transacao && {props.errors.documento_transacao}} +
+
+
+ +
+
+ + { + props.handleChange(e); + aux.setValorRealizado(setFieldValue, e.target.value); + }} + /> + {props.errors.valor_original && exibeMsgErroValorOriginal && A soma dos valores originais do rateio não está correspondendo ao valor total original utilizado com recursos do Programa.} +
+ +
+ + { + props.handleChange(e); + }} + /> + {props.errors.valor_total && + {props.errors.valor_total}} +
+
+
+ + + +
+ + + ) + }} +
} + ) +} \ No newline at end of file diff --git a/src/componentes/escolas/GeracaoDaAta/VisualizacaoDaAta/index.js b/src/componentes/escolas/GeracaoDaAta/VisualizacaoDaAta/index.js index ea9f6c8e8..d66c600a5 100644 --- a/src/componentes/escolas/GeracaoDaAta/VisualizacaoDaAta/index.js +++ b/src/componentes/escolas/GeracaoDaAta/VisualizacaoDaAta/index.js @@ -73,6 +73,7 @@ export const VisualizacaoDaAta = () => { let dados_ata = await getAtas(uuid_ata); let prestacao = await getPrestacaoDeContasDetalhe(dados_ata.prestacao_conta); setPrestacaoDeContasDetalhe(prestacao); + console.log(prestacao.devolucoes_ao_tesouro_da_prestacao); let data_da_reuniao = dados_ata.data_reuniao ? dados_ata.data_reuniao : ""; setStateFormEditarAta({ comentarios: dados_ata.comentarios, @@ -258,6 +259,7 @@ export const VisualizacaoDaAta = () => {
+ @@ -267,6 +269,7 @@ export const VisualizacaoDaAta = () => { + ))} diff --git a/src/componentes/escolas/PrestacaoDeContas/DemonstrativoFinanceiro/index.js b/src/componentes/escolas/PrestacaoDeContas/DemonstrativoFinanceiro/index.js index 9b33099d0..135702b11 100644 --- a/src/componentes/escolas/PrestacaoDeContas/DemonstrativoFinanceiro/index.js +++ b/src/componentes/escolas/PrestacaoDeContas/DemonstrativoFinanceiro/index.js @@ -66,11 +66,11 @@ export class DemonstrativoFinanceiro extends Component { let data_inicio = this.props.periodoPrestacaoDeConta.data_inicial; let data_fim = this.props.periodoPrestacaoDeConta.data_final; this.setState({data_inicio: data_inicio, data_fim: data_fim}) - } + }; onHide = () => { this.setState({show: false}); - } + }; handleChange = (name, value) => { this.setState({ @@ -81,6 +81,9 @@ export class DemonstrativoFinanceiro extends Component { }; gerarPrevia = async () => { + + + if (this.state.data_fim === null || this.state.data_fim === "") { this.setState({mensagemErro: "Data final não pode ser vazia!"}); return @@ -93,8 +96,10 @@ export class DemonstrativoFinanceiro extends Component { return } - let data_fim_periodo = new Date(this.props.periodoPrestacaoDeConta.data_final) - if (data_fim.getTime() > data_fim_periodo.getTime()) { + let data_fim_periodo_verifica = this.props.periodoPrestacaoDeConta.data_final; + let data_fim_periodo = new Date(this.props.periodoPrestacaoDeConta.data_final); + + if (data_fim_periodo_verifica && data_fim.getTime() > data_fim_periodo.getTime()) { this.setState({mensagemErro: "Data final não pode ser maior que a data final do período."}); return } diff --git a/src/componentes/escolas/PrestacaoDeContas/DetalheDasPrestacoes/Justivicativa/index.js b/src/componentes/escolas/PrestacaoDeContas/DetalheDasPrestacoes/Justivicativa/index.js index 0deda3362..799b0827e 100644 --- a/src/componentes/escolas/PrestacaoDeContas/DetalheDasPrestacoes/Justivicativa/index.js +++ b/src/componentes/escolas/PrestacaoDeContas/DetalheDasPrestacoes/Justivicativa/index.js @@ -1,4 +1,5 @@ import React from "react"; +import {visoesService} from "../../../../../services/visoes.service"; export const Justificativa = ({textareaJustificativa, handleChangeTextareaJustificativa, periodoFechado}) => { return( @@ -12,7 +13,7 @@ export const Justificativa = ({textareaJustificativa, handleChangeTextareaJustif id="justificativa" name="justificativa" placeholder="Escreva o comentário" - disabled={periodoFechado} + disabled={periodoFechado | !visoesService.getPermissoes(['change_conciliacao_bancaria'])} > diff --git a/src/componentes/escolas/PrestacaoDeContas/DetalheDasPrestacoes/TabelaDeLancamentosReceitas/index.js b/src/componentes/escolas/PrestacaoDeContas/DetalheDasPrestacoes/TabelaDeLancamentosReceitas/index.js index 6c2734995..010cad078 100644 --- a/src/componentes/escolas/PrestacaoDeContas/DetalheDasPrestacoes/TabelaDeLancamentosReceitas/index.js +++ b/src/componentes/escolas/PrestacaoDeContas/DetalheDasPrestacoes/TabelaDeLancamentosReceitas/index.js @@ -6,6 +6,7 @@ import moment from "moment"; import {RedirectModalTabelaLancamentos} from "../../../../../utils/Modais"; import IconeNaoDemonstrado from "../../../../../assets/img/icone-nao-demonstrado.svg"; import ReactTooltip from "react-tooltip"; +import {visoesService} from "../../../../../services/visoes.service"; export const TabelaDeLancamentosReceitas = ({conciliados, receitas, checkboxReceitas, handleChangeCheckboxReceitas, dataTip, periodoFechado}) => { @@ -53,7 +54,7 @@ export const TabelaDeLancamentosReceitas = ({conciliados, receitas, checkboxRece const conferidoTemplate = (rowData) => { return ( -
+
handleChangeCheckboxReceitas(e, rowData.uuid)} name="checkConferido" id="checkConferido" - disabled={periodoFechado} + disabled={periodoFechado | !visoesService.getPermissoes(['change_conciliacao_bancaria'])} />
) diff --git a/src/componentes/escolas/PrestacaoDeContas/DetalheDasPrestacoes/TopoComBotoes/index.js b/src/componentes/escolas/PrestacaoDeContas/DetalheDasPrestacoes/TopoComBotoes/index.js index dc819e960..619ca6424 100644 --- a/src/componentes/escolas/PrestacaoDeContas/DetalheDasPrestacoes/TopoComBotoes/index.js +++ b/src/componentes/escolas/PrestacaoDeContas/DetalheDasPrestacoes/TopoComBotoes/index.js @@ -1,4 +1,5 @@ import React from "react"; +import {visoesService} from "../../../../../services/visoes.service"; export const TopoComBotoes = ({handleClickCadastrar, btnCadastrarTexto, onSalvarTrue, contaConciliacao, showSalvar}) => { return ( @@ -8,8 +9,12 @@ export const TopoComBotoes = ({handleClickCadastrar, btnCadastrarTexto, onSalvar
{btnCadastrarTexto &&
- - + {(btnCadastrarTexto.includes('Receita') & visoesService.getPermissoes(['add_receita'])) | (btnCadastrarTexto.includes('Despesa') & visoesService.getPermissoes(['add_despesa'])) + ? + : null} + {visoesService.getPermissoes(['change_conciliacao_bancaria']) + ? + : null}
} diff --git a/src/componentes/escolas/PrestacaoDeContas/RelacaoDeBens/index.js b/src/componentes/escolas/PrestacaoDeContas/RelacaoDeBens/index.js index 79bbcd534..3eda18a52 100644 --- a/src/componentes/escolas/PrestacaoDeContas/RelacaoDeBens/index.js +++ b/src/componentes/escolas/PrestacaoDeContas/RelacaoDeBens/index.js @@ -49,14 +49,13 @@ export default class RelacaoDeBens extends Component { let data_inicio = this.props.periodoPrestacaoDeConta.data_inicial; let data_fim = this.props.periodoPrestacaoDeConta.data_final; this.setState({data_inicio: data_inicio, data_fim: data_fim}) - } + }; onHide = () => { this.setState({show: false}); - } + }; handleChange = (name, value) => { - console.log("") this.setState({ ...this.state, [name]: value !== "" && value !== null ? moment(value, "YYYY-MM-DD").format("YYYY-MM-DD"): "" @@ -77,8 +76,10 @@ export default class RelacaoDeBens extends Component { return } - let data_fim_periodo = new Date(this.props.periodoPrestacaoDeConta.data_final) - if (data_fim.getTime() > data_fim_periodo.getTime()) { + let data_fim_periodo_verifica = this.props.periodoPrestacaoDeConta.data_final; + let data_fim_periodo = new Date(this.props.periodoPrestacaoDeConta.data_final); + + if (data_fim_periodo_verifica && data_fim.getTime() > data_fim_periodo.getTime()) { this.setState({mensagemErro: "Data final não pode ser maior que a data final do período."}); return } diff --git a/src/componentes/escolas/Receitas/Formularios/index.js b/src/componentes/escolas/Receitas/Formularios/index.js index 8277d88bc..2f03ed50e 100644 --- a/src/componentes/escolas/Receitas/Formularios/index.js +++ b/src/componentes/escolas/Receitas/Formularios/index.js @@ -9,23 +9,28 @@ import { deletarReceita, getReceita, getTabelasReceita, - getRepasse + getRepasses } from '../../../../services/escolas/Receitas.service'; import {round, trataNumericos, periodoFechado, comparaObjetos} from "../../../../utils/ValidacoesAdicionaisFormularios"; import {ReceitaSchema} from '../Schemas'; import moment from "moment"; import {useParams} from 'react-router-dom'; import {ASSOCIACAO_UUID} from '../../../../services/auth.service'; -import {DeletarModalReceitas, PeriodoFechado, ErroGeral} from "../../../../utils/Modais"; +import {DeletarModalReceitas, PeriodoFechado, ErroGeral, SalvarReceita} from "../../../../utils/Modais"; import {CancelarModalReceitas} from "../CancelarModalReceitas"; import {ModalReceitaConferida} from "../ModalReceitaJaConferida"; +import {ModalSelecionaRepasse} from "../ModalSelecionaRepasse"; import {visoesService} from "../../../../services/visoes.service"; + export const ReceitaForm = () => { let {origem} = useParams(); let {uuid} = useParams(); - const [loading, setLoading] = useState(true) + const [loading, setLoading] = useState(true); + + const [redirectTo, setRedirectTo] = useState(''); + const [uuid_receita, setUuidReceita] = useState(null); const tabelaInicial = { tipos_receita: [], @@ -50,11 +55,16 @@ export const ReceitaForm = () => { const [showDelete, setShowDelete] = useState(false); const [showPeriodoFechado, setShowPeriodoFechado] = useState(false); const [showErroGeral, setShowErroGeral] = useState(false); + const [showCadastrarSaida, setShowCadastrarSaida] = useState(false); + const [showSalvarReceita, setShowSalvarReceita] = useState(false); const [initialValue, setInitialValue] = useState(initial); const [objetoParaComparacao, setObjetoParaComparacao] = useState({}); const [receita, setReceita] = useState({}); const [readOnlyValor, setReadOnlyValor] = useState(false); const [readOnlyClassificacaoReceita, setreadOnlyClassificacaoReceita] = useState(false); + const [readOnlyAcaoAssociacaoReceita, setreadOnlyAcaoAssociacaoReceita] = useState(false); + const [readOnlyContaAssociacaoReceita, setreadOnlyContaAssociacaoReceita] = useState(false); + const [readOnlyTipoReceita, setreadOnlyTipoReceita] = useState(false); const [readOnlyBtnAcao, setReadOnlyBtnAcao] = useState(false); const [readOnlyCampos, setReadOnlyCampos] = useState(false); @@ -64,6 +74,9 @@ export const ReceitaForm = () => { const [showReceitaConferida, setShowReceitaConferida] = useState(false); + const [repasses, setRepasses] = useState([]); + const [showSelecionaRepasse, setShowSelecionaRepasse] = useState(false); + useEffect(() => { const carregaTabelas = async () => { getTabelasReceita().then(response => { @@ -96,6 +109,12 @@ export const ReceitaForm = () => { setInitialValue(init); setReceita(resp); periodoFechado(resp.data, setReadOnlyBtnAcao, setShowPeriodoFechado, setReadOnlyCampos, onShowErroGeral) + if (resp.repasse !== null) { + setRepasse(resp.repasse); + setReadOnlyValor(true); + setreadOnlyClassificacaoReceita(true); + setreadOnlyTipoReceita(true); + } }).catch(error => { console.log(error); }); @@ -136,15 +155,24 @@ export const ReceitaForm = () => { const payload = { ...values, associacao: localStorage.getItem(ASSOCIACAO_UUID), - detalhe_tipo_receita: values.detalhe_tipo_receita && values.detalhe_tipo_receita.id !== undefined ? values.detalhe_tipo_receita.id : values.detalhe_tipo_receita + detalhe_tipo_receita: values.detalhe_tipo_receita && values.detalhe_tipo_receita.id !== undefined ? values.detalhe_tipo_receita.id : values.detalhe_tipo_receita, }; + + if (Object.keys(repasse).length !== 0) { + payload['repasse'] = repasse.uuid; + } + setLoading(true); if (uuid) { - await atualizar(uuid, payload); + await atualizar(uuid, payload).then(response => { + setShowSalvarReceita(true); + }); } else { - await cadastrar(payload); + cadastrar(payload).then(response => { + setShowSalvarReceita(true); + setUuidReceita(response); + }); } - getPath(); setLoading(false); }; @@ -153,6 +181,7 @@ export const ReceitaForm = () => { const response = await criarReceita(payload); if (response.status === HTTP_STATUS.CREATED) { console.log("Operação realizada com sucesso!"); + return response.data.uuid; } else { console.log(response) } @@ -161,7 +190,7 @@ export const ReceitaForm = () => { } }; - const atualizar = async (uid, payload) => { + const atualizar = async (uuid, payload) => { try { const response = await atualizaReceita(uuid, payload); if (response.status === HTTP_STATUS.CREATED) { @@ -176,6 +205,7 @@ export const ReceitaForm = () => { const onCancelarTrue = () => { setShow(false); + setRedirectTo(''); getPath(); }; @@ -184,8 +214,14 @@ export const ReceitaForm = () => { setShowDelete(false); setShowPeriodoFechado(false); setShowErroGeral(false); + }; + const fecharSalvarCredito = () => { + setShowSalvarReceita(false); + getPath(); + } + const onShowModal = () => { setShow(true); }; @@ -211,34 +247,41 @@ export const ReceitaForm = () => { const getPath = () => { let path; - if (origem === undefined) { + if (redirectTo !== '') { + path = `${redirectTo}/${uuid_receita}`; + } else if (origem === undefined) { path = `/lista-de-receitas`; } else { path = `/detalhe-das-prestacoes`; } - window.location.assign(path) + window.location.assign(path); }; - const setaRepasse = async (values)=>{ - let local_repasse; - if (values && values.acao_associacao && values.data) { - let data_receita = moment(new Date(values.data), "YYYY-MM-DD").format("DD/MM/YYYY"); - if (uuid) { + const setaRepasse = async (value)=>{ + if (value) { + setRepasse(value); + } + + }; + + const consultaRepasses = async (value) => { + if (value) { + let tipo_receita = tabelas.tipos_receita.find(item => item.id == value); + if (tipo_receita.e_repasse === true) { try { - local_repasse = await getRepasse(values.acao_associacao, data_receita, uuid); - setRepasse(local_repasse) + let listaRepasses = await getRepasses(); + setRepasses(listaRepasses); + setShowSelecionaRepasse(true); } catch (e) { - console.log("Erro ao obter o repasse ", e) + console.log("Erro ao obter a listagem de repasses", e); } + } else { - try { - local_repasse = await getRepasse(values.acao_associacao, data_receita); - setRepasse(local_repasse) - } catch (e) { - console.log("Erro ao obter o repasse ", e) - } + setaRepasse({}); + setreadOnlyAcaoAssociacaoReceita(false); + setreadOnlyContaAssociacaoReceita(false); + setReadOnlyValor(false); } - return local_repasse; } }; @@ -308,10 +351,45 @@ export const ReceitaForm = () => { return false }; - const retornaClassificacaoReceita = (values, setFieldValue) => { + const e_repasse = (values) => { + return tabelas.tipos_receita.find(element => element.id === Number(values.tipo_receita)).e_repasse + } + + const retornaAcoes = (values) => { + if (tabelas.acoes_associacao !== undefined && tabelas.acoes_associacao.length > 0 && values.tipo_receita && e_repasse(values) && Object.keys(repasse).length !== 0) { + let acao_associacao = tabelas.acoes_associacao.find(item => item.uuid == repasse.acao_associacao.uuid); + setreadOnlyAcaoAssociacaoReceita(true); + return ( + + ) + } else if (tabelas.acoes_associacao !== undefined && tabelas.acoes_associacao.length > 0 && values.tipo_receita) { + let e_recurso_proprio = tabelas.tipos_receita.find(element => element.id === Number(values.tipo_receita)).e_recursos_proprios + + return (tabelas.acoes_associacao.filter(item => item.e_recursos_proprios == e_recurso_proprio).map((item, key) => ( + + ))) + } - if (tabelas.categorias_receita !== undefined && tabelas.categorias_receita.length > 0 && values.acao_associacao && values.tipo_receita && Object.entries(repasse).length > 0) { + return tabelas.acoes_associacao !== undefined && tabelas.acoes_associacao.length > 0 ?(tabelas.acoes_associacao.map((item, key) => ( + + ))): null + } + + const showBotaoCadastrarSaida = (uuid_acao_associacao, values) => { + if (tabelas.acoes_associacao !== undefined && tabelas.acoes_associacao.length > 0 && uuid_acao_associacao && values && values.tipo_receita) { + let e_recurso_proprio = tabelas.tipos_receita.find(element => element.id === Number(values.tipo_receita)).e_recursos_proprios + let acao = tabelas.acoes_associacao.find(item => item.uuid == uuid_acao_associacao) + if (acao && acao.e_recursos_proprios && e_recurso_proprio) { + setShowCadastrarSaida(true); + } + return acao; + } else { + setShowCadastrarSaida(false); + } + } + const retornaClassificacaoReceita = (values, setFieldValue) => { + if (tabelas.categorias_receita !== undefined && tabelas.categorias_receita.length > 0 && values !== undefined && values.acao_associacao && values.tipo_receita && Object.entries(repasse).length > 0 && uuid === undefined) { return tabelas.categorias_receita.map((item, index) => { let id_categoria_receita_lower = item.id.toLowerCase(); @@ -347,10 +425,11 @@ export const ReceitaForm = () => { } }) }else{ - if (tabelas.categorias_receita && tabelas.categorias_receita.length > 0){ + if (tabelas.categorias_receita && tabelas.categorias_receita.length > 0 && values.tipo_receita){ return tabelas.categorias_receita.map((item)=>{ return ( + ) + } else if (tabelas.contas_associacao !== undefined && tabelas.contas_associacao.length > 0 && values.tipo_receita) { const tipoReceita = tabelas.tipos_receita.find(element => element.id === Number(values.tipo_receita)); @@ -374,13 +459,12 @@ export const ReceitaForm = () => { // Filtra as contas pelos tipos aceitos return ( tabelas.contas_associacao.filter(conta => (tipos_conta.includes(conta.nome))).map((item, key) => ( - ) + ) )) } }; const validateFormReceitas = async (values) => { - const errors = {}; // Verifica se é devolucao e setando erro caso referencia devolucao vazio @@ -411,49 +495,8 @@ export const ReceitaForm = () => { errors.data = "Data do crédito não pode ser maior que a data de hoje" } - if (e_repasse_tipo_receita !== false && e_repasse_acao !== "" && e_repasse_acao !== "Escolha uma ação" && values.data) { - - try { - - let repasse = await setaRepasse(values); - - let data_digitada = moment(values.data); - let data_inicio = moment(repasse.periodo.data_inicio_realizacao_despesas); - let data_fim = repasse.periodo.data_fim_realizacao_despesas; - - if (data_fim === null) { - data_fim = moment(new Date()); - } else { - data_fim = moment(repasse.periodo.data_fim_realizacao_despesas); - } - - if (data_digitada > data_fim || data_digitada < data_inicio) { - errors.data = `Data inválida. A data tem que ser entre ${data_inicio.format("DD/MM/YYYY")} e ${data_fim.format("DD/MM/YYYY")}`; - } - - let id_categoria_receita_lower = values.categoria_receita.toLowerCase(); - - let valor_da_receita = eval('repasse.valor_' + id_categoria_receita_lower); - - const init = { - ...initialValue, - tipo_receita: values.tipo_receita, - detalhe_tipo_receita: values.detalhe_tipo_receita, - detalhe_outros: values.detalhe_outros, - data: values.data, - valor: Number(valor_da_receita), - acao_associacao: values.acao_associacao, - conta_associacao: repasse.conta_associacao.uuid, - categoria_receita: values.categoria_receita, - conferido: values.conferido, - referencia_devolucao: values.referencia_devolucao, - }; - setInitialValue(init); - setReadOnlyValor(true); - } catch (e) { - console.log("Erro: ", e); - errors.acao_associacao = 'Não existem repasses pendentes para a Associação nesta ação'; - } + if (tabelas.tipos_receita !== undefined && tabelas.tipos_receita.length > 0 && values.tipo_receita && e_repasse(values) && Object.keys(repasse).length !== 0) { + setReadOnlyValor(true); } else { setReadOnlyValor(false) } @@ -475,6 +518,29 @@ export const ReceitaForm = () => { } }; + const trataRepasse = (repasse_row, setFieldValue) => { + setaRepasse(repasse_row); + setFieldValue('acao_associacao', repasse_row.acao_associacao.uuid); + setFieldValue('conta_associacao', repasse_row.conta_associacao.uuid); + setFieldValue('valor', '0,00'); + setReadOnlyValor(true); + setShowSelecionaRepasse(false); + + } + + const atualizaValorRepasse = (value, setFieldValue) => { + if (Object.keys(repasse).length !== 0) { + let valor_formatado = new Number(repasse[`valor_${value.toLowerCase()}`]).toLocaleString('pt-BR', { + style: 'currency', + currency: 'BRL' + }); + + setFieldValue('valor', valor_formatado); + } + } + + + return ( <> { { props.handleChange(e); - setaRepasse(values) + showBotaoCadastrarSaida(e.target.value, props.values); } } onBlur={props.handleBlur} @@ -645,10 +719,8 @@ export const ReceitaForm = () => { > {receita.acao_associacao ? null - : } - {tabelas.acoes_associacao !== undefined && tabelas.acoes_associacao.length > 0 ? (tabelas.acoes_associacao.map((item, key) => ( - - ))) : null} + : } + {retornaAcoes(props.values)} {props.touched.acao_associacao && props.errors.acao_associacao && { id="categoria_receita" name="categoria_receita" value={props.values.categoria_receita} - onChange={props.handleChange} + onChange={ (e) => { + props.handleChange(e); + atualizaValorRepasse(e.target.value, setFieldValue); + } + } onBlur={props.handleBlur} className="form-control" disabled={readOnlyClassificacaoReceita || readOnlyCampos || ![['add_receita'], ['change_receita']].some(visoesService.getPermissoes)} @@ -702,6 +778,14 @@ export const ReceitaForm = () => { {/*Botões*/}
+ {showCadastrarSaida == true ? + : null} + + + + ) +}; \ No newline at end of file diff --git a/src/componentes/sme/AcompanhamentoPcsSme/BarraDeStatus.js b/src/componentes/sme/AcompanhamentoPcsSme/BarraDeStatus.js new file mode 100644 index 000000000..eb5e7d855 --- /dev/null +++ b/src/componentes/sme/AcompanhamentoPcsSme/BarraDeStatus.js @@ -0,0 +1,22 @@ +import React from "react"; + +export const BarraDeStatus = ({statusRelatorio}) =>{ + const BarraStyle = { + paddingLeft: "16px", + paddingRight: "16px", + paddingTop: "16px", + }; + + const BarraCor = { + 1: {backgroundColor: '#D06D12'}, + 2: {backgroundColor: '#297805'} + }; + + return( +
+
+

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

+
+
+ ); +}; \ No newline at end of file diff --git a/src/componentes/sme/AcompanhamentoPcsSme/BarraTotalUnidades.js b/src/componentes/sme/AcompanhamentoPcsSme/BarraTotalUnidades.js new file mode 100644 index 000000000..38f2ed575 --- /dev/null +++ b/src/componentes/sme/AcompanhamentoPcsSme/BarraTotalUnidades.js @@ -0,0 +1,10 @@ +import React from "react"; +export const BarraTotalUnidades = ({totalUnidades}) => { + return ( + <> +
+

Total de associações das Unidades Educacionais: {totalUnidades} unidades

+
+ + ) +}; \ No newline at end of file diff --git a/src/componentes/sme/AcompanhamentoPcsSme/DashboardCard.js b/src/componentes/sme/AcompanhamentoPcsSme/DashboardCard.js new file mode 100644 index 000000000..ed2f1e7bd --- /dev/null +++ b/src/componentes/sme/AcompanhamentoPcsSme/DashboardCard.js @@ -0,0 +1,68 @@ +import React from "react"; + +export const DashboardCard = ({itensDashboard, statusPeriodo}) => { + + const cardQuantidadeStyleByStatus = { + 1: { + fontFamily: "Roboto", + fontStyle: "normal", + fontWeight: "700", + fontSize: "32px", + lineHeight: "37.5px", + color: "#D06D12", + textAlign: "left" + }, + 2: { + fontFamily: "Roboto", + fontStyle: "normal", + fontWeight: "700", + fontSize: "32px", + lineHeight: "37.5px", + color: "#42474A", + textAlign: "left" + }, + 'TOTAL': { + fontFamily: "Roboto", + fontStyle: "normal", + fontWeight: "700", + fontSize: "32px", + lineHeight: "37.5px", + color: "#FFFFFF", + textAlign: "left" + } + }; + + const cardTotalStyle = { + fontFamily: "Roboto", + fontStyle: "normal", + fontWeight: "700", + fontSize: "32px", + lineHeight: "37.5px", + color: "#FFFFFF", + textAlign: "left", + backgroundColor:"#2B7D83", + }; + + const idxStyle = statusPeriodo ? statusPeriodo.cor_idx : 1; + + return ( + <> +
+ {itensDashboard && itensDashboard && itensDashboard.length > 0 && itensDashboard.map((card, index) => +
+
+
+ {card.titulo} +
+
+
+

{card.quantidade_prestacoes}

+
+
+
+ )} +
+ + ) +}; \ No newline at end of file diff --git a/src/componentes/sme/AcompanhamentoPcsSme/ResumoPorDre.js b/src/componentes/sme/AcompanhamentoPcsSme/ResumoPorDre.js new file mode 100644 index 000000000..17a8e925c --- /dev/null +++ b/src/componentes/sme/AcompanhamentoPcsSme/ResumoPorDre.js @@ -0,0 +1,139 @@ +import React from "react"; + +import {DataTable} from 'primereact/datatable'; + +import {Column} from 'primereact/column'; + +import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; +import {faEye, faCheckCircle, faTimesCircle} from "@fortawesome/free-solid-svg-icons"; + + +export const ResumoPorDre = ({resumoPorDre, statusPeriodo}) => { + + const periodoEmAndamento = statusPeriodo ? statusPeriodo.cor_idx == 1 : true; + + const estiloLinhaCompleta = { + font: 'Roboto', + fontWeight: 'bold', + fontSize: '14px', + lineHeight: '22px', + }; + + const estiloLinhaIcompleta = { + font: 'Roboto', + fontWeight: 'normal', + fontSize: '14px', + lineHeight: '22px', + }; + + const siglaDreTemplate = (rowData) => { + const estiloIconeCompleto = { + marginRight: "0", + color: '#297805', + size: '14px' + }; + + const estiloIconeIncompleto = { + marginRight: "0", + color: '#B40C02', + size: '14px' + }; + + + return ( +
+ + {rowData.dre.sigla} + +
+ ) + }; + + const acoesTemplate = (rowData) => { + + return ( +
+ +
+ ) + }; + + const colunaTemplate = (completo, valor) => { + return ( + {valor} + ) + }; + + const totalUnidadesTemplate = (rowData) => { + return colunaTemplate(rowData.periodo_completo, rowData.cards.TOTAL_UNIDADES) + }; + + const naoRecebidaTemplate = (rowData) => { + return colunaTemplate(rowData.periodo_completo, rowData.cards.NAO_RECEBIDA) + }; + + const naoApresentadaTemplate = (rowData) => { + return colunaTemplate(rowData.periodo_completo, rowData.cards.NAO_APRESENTADA) + }; + + const recebidaTemplate = (rowData) => { + return colunaTemplate(rowData.periodo_completo, rowData.cards.RECEBIDA) + }; + + const emAnaliseTemplate = (rowData) => { + return colunaTemplate(rowData.periodo_completo, rowData.cards.EM_ANALISE) + }; + + const devolvidaTemplate = (rowData) => { + return colunaTemplate(rowData.periodo_completo, rowData.cards.DEVOLVIDA) + }; + + const aprovadaTemplate = (rowData) => { + return colunaTemplate(rowData.periodo_completo, rowData.cards.APROVADA) + }; + + const aprovadaRessalvaTemplate = (rowData) => { + return colunaTemplate(rowData.periodo_completo, rowData.cards.APROVADA_RESSALVA) + }; + + const reprovadaTemplate = (rowData) => { + return colunaTemplate(rowData.periodo_completo, rowData.cards.REPROVADA) + }; + + + return ( + <> + + + + + {periodoEmAndamento && } + {!periodoEmAndamento && } + {periodoEmAndamento && } + {periodoEmAndamento && } + {periodoEmAndamento && } + + + + + + + + + ) +} \ No newline at end of file diff --git a/src/componentes/sme/AcompanhamentoPcsSme/SelectPeriodo.js b/src/componentes/sme/AcompanhamentoPcsSme/SelectPeriodo.js new file mode 100644 index 000000000..a8da249a8 --- /dev/null +++ b/src/componentes/sme/AcompanhamentoPcsSme/SelectPeriodo.js @@ -0,0 +1,35 @@ +import React from "react"; +import {exibeDataPT_BR} from "../../../utils/ValidacoesAdicionaisFormularios"; + +export const SelectPeriodo = ({periodos, periodoEscolhido, handleChangePeriodos}) => { + return ( + <> +
+
+
+
+
+ +
+
+ +
+
+
+ + +
+ + + ) +}; \ No newline at end of file diff --git a/src/componentes/sme/AcompanhamentoPcsSme/dashboard.scss b/src/componentes/sme/AcompanhamentoPcsSme/dashboard.scss new file mode 100644 index 000000000..6a2248cb5 --- /dev/null +++ b/src/componentes/sme/AcompanhamentoPcsSme/dashboard.scss @@ -0,0 +1,38 @@ +.barra-de-status{ + padding-top: 1rem; + padding-bottom: 1rem; + background-color: #2B7D83; + color: #fff; +} + +.container-cards-dre-dashboard{ + .card-header{ + height: 48%; + font-weight: bold; + font-size: 16px; + background-color: transparent; + border-bottom: none; + line-height: 19px; + + .borda-bottom{ + border-bottom: 1px solid #DADADA; + display: block; + } + } + .card-body{ + + .card-qtde-associacoes{ + font-weight: bold; + font-size: 28px; + color: #2B7D83; + } + } + + .btn-ver-prestacoes:hover svg path { + //filter: invert(27%) sepia(51%) saturate(2878%) hue-rotate(346deg) brightness(104%) contrast(97%); + fill: #fff; + + } + +} + diff --git a/src/componentes/sme/AcompanhamentoPcsSme/index.js b/src/componentes/sme/AcompanhamentoPcsSme/index.js new file mode 100644 index 000000000..8a7fe41d2 --- /dev/null +++ b/src/componentes/sme/AcompanhamentoPcsSme/index.js @@ -0,0 +1,107 @@ +import React, {useEffect, useState} from "react"; +import {Redirect} from 'react-router-dom' +import {getPeriodos, getItensDashboard} from "../../../services/sme/DashboardSme.service"; +import {SelectPeriodo} from "./SelectPeriodo"; +import "./dashboard.scss" +import {BarraDeStatus} from "./BarraDeStatus"; +import {BarraTotalUnidades} from "./BarraTotalUnidades"; +import {DashboardCard} from "./DashboardCard"; +import {ResumoPorDre} from "./ResumoPorDre"; +import Loading from "../../../utils/Loading"; + +export const AcompanhamentoPcsSme = () => { + + const [periodos, setPeriodos] = useState(false); + const [periodoEscolhido, setPeriodoEsolhido] = useState(false); + const [itensDashboard, setItensDashboard] = useState(false); + const [resumoPorDre, setResumoPorDre] = useState([]); + const [loading, setLoading] = useState(false); + const [statusPeriodo, setStatusPeriodo] = useState(false); + const [totalUnidades, setTotalUnidades] = useState(0); + + useEffect(() => { + carregaPeriodos(); + }, []); + + useEffect(() => { + carregaItensDashboard(); + }, [periodoEscolhido]); + + const carregaPeriodos = async () => { + setLoading(true); + let periodos = await getPeriodos(); + setPeriodos(periodos); + if (periodos && periodos.length > 0){ + setPeriodoEsolhido(periodos[0].uuid) + } + setLoading(false); + }; + + const carregaItensDashboard = async () =>{ + setLoading(true); + if (periodoEscolhido){ + let itens = await getItensDashboard(periodoEscolhido); + let cards = itens.cards; + let totalCard = cards.shift(); + let totalUnidades = totalCard ? totalCard.quantidade_prestacoes : 0; + let resumoPorDre = itens && itens.resumo_por_dre ? itens.resumo_por_dre : []; + setItensDashboard(cards); + setStatusPeriodo(itens.status); + setTotalUnidades(totalUnidades); + setResumoPorDre(resumoPorDre); + } + setLoading(false); + }; + + const handleChangePeriodos = async (uuid_periodo) => { + setPeriodoEsolhido(uuid_periodo) + }; + + + const TituloStyle = { + fontFamily: "Roboto", + fontStyle: "normal", + fontWeight: "700", + fontSize: "18px", + lineHeight: "32px", + color: "#42474A", + paddingTop: "16px", + }; + + return ( + <> + + + {loading ? ( + + ) : + <> + {statusPeriodo && + + } +

Resumo geral do período

+ + +

Resumo por diretoria regional

+ + + } + + ) +}; \ No newline at end of file diff --git a/src/componentes/sme/PainelParametrizacoes/ParametrizacaoCard.js b/src/componentes/sme/PainelParametrizacoes/ParametrizacaoCard.js new file mode 100644 index 000000000..4db1f3c32 --- /dev/null +++ b/src/componentes/sme/PainelParametrizacoes/ParametrizacaoCard.js @@ -0,0 +1,87 @@ +import React from "react"; +import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; +import {faArrowRight} from "@fortawesome/free-solid-svg-icons"; + +import { + Card, + CardBody, + CardTitle, + CardSubtitle, + CardImg, +} from "reactstrap"; +import {redirect} from "../../../utils/redirect"; + +const cardStyle = { + cursor: "pointer", + paddingTop: "16px" +}; + + +const cardTitleStyle = { + fontFamily: "Roboto", + fontStyle: "normal", + fontWeight: "bold", + fontSize: "15px", + lineHeight: "18px", + color: "#2B7D83", + textAlign:"center" +}; + +const cardSubTitleStyle = { + fontFamily: "Roboto", + fontStyle: "normal", + fontWeight: "bold", + fontSize: "15px", + lineHeight: "18px", + color: "#2B7D83", + textAlign:"right" +}; + + +const GrupoTituloStyle = { + fontFamily: "Roboto", + fontStyle: "normal", + fontWeight: "bold", + fontSize: "20px", + lineHeight: "23px", + color: "#2B7D83", +}; + + +const IconeSetaStyle = { + fontStyle: "normal", + fontWeight: "900", + fontSize: "14px", + lineHeight: "16px", + color: "#42474A", +}; + +export const ParametrizacaoCard = ({itensParametrizacao, nomeGrupo}) => { + return ( + <> +

{nomeGrupo}

+
+ {itensParametrizacao && itensParametrizacao.length > 0 && itensParametrizacao.map((card, index) => +
+
+ + redirect("#/contratos-continuos/?equipamento=CEU")} + + > + + + {card.parametro} + + + + +
+
+ )} +
+ + ) +}; \ No newline at end of file diff --git a/src/componentes/sme/PainelParametrizacoes/index.js b/src/componentes/sme/PainelParametrizacoes/index.js new file mode 100644 index 000000000..5f0279aa9 --- /dev/null +++ b/src/componentes/sme/PainelParametrizacoes/index.js @@ -0,0 +1,117 @@ +import React, {useEffect, useState} from "react"; +import "./parametrizacoes.scss" +import {ParametrizacaoCard} from "./ParametrizacaoCard"; +import IconeAssociacoes from "../../../assets/img/icone-parametro-associacoes.svg" +import IconeAcoesAssociacoes from "../../../assets/img/icone-parametro-acoes-associacoes.svg" +import IconeContasAssociacoes from "../../../assets/img/icone-parametro-contas-associacoes.svg" +import IconePeriodos from "../../../assets/img/icone-parametro-periodos.svg" +import IconeTags from "../../../assets/img/icone-parametro-tags.svg" +import IconeTiposAcao from "../../../assets/img/icone-parametro-tipos-acao.svg" +import IconeTiposConta from "../../../assets/img/icone-parametro-tipos-conta.svg" +import IconeEspecificacoes from "../../../assets/img/icone-parametro-especificacoes.svg" +import IconeTiposCusteio from "../../../assets/img/icone-parametro-tipos-custeio.svg" +import IconeTiposDocumento from "../../../assets/img/icone-parametro-tipos-documento.svg" +import IconeTiposTransacao from "../../../assets/img/icone-parametro-tipos-transacao.svg" +import IconeTiposReceita from "../../../assets/img/icone-parametro-tipos-receita.svg" +import IconeUsuarios from "../../../assets/img/icone-parametro-usuarios.svg" + +export const PainelParametrizacoes = () => { + + const itensParametrizacaoEstrutura = [ + { + parametro: 'Associações', + url: 'parametro-associacoes', + icone: IconeAssociacoes, + }, + { + parametro: 'Ações das Associações', + url: 'parametro-acoes-associacoes', + icone: IconeAcoesAssociacoes, + }, + { + parametro: 'Contas das Associações', + url: 'parametro-contas-associacoes', + icone: IconeContasAssociacoes, + }, + { + parametro: 'Períodos', + url: 'parametro-periodos', + icone: IconePeriodos, + }, + { + parametro: 'Etiquetas/Tags', + url: 'parametro-tags', + icone: IconeTags, + }, + { + parametro: 'Tipos de Ação', + url: 'parametro-tipos-acao', + icone: IconeTiposAcao, + }, + { + parametro: 'Tipos de Conta', + url: 'parametro-tipos-conta', + icone: IconeTiposConta, + } + ]; + + const itensParametrizacaoDespesas = [ + { + parametro: 'Especificações', + url: 'parametro-especificacoes', + icone: IconeEspecificacoes, + }, + { + parametro: 'Tipos de Custeio', + url: 'parametro-tipos-custeio', + icone: IconeTiposCusteio, + }, + { + parametro: 'Tipos de Documento', + url: 'parametro-tipos-documento', + icone: IconeTiposDocumento, + }, + { + parametro: 'Tipos de Transação', + url: 'parametro-tipos-transacao', + icone: IconeTiposTransacao, + } + ]; + + const itensParametrizacaoReceitas = [ + { + parametro: 'Tipos de Receita', + url: 'parametro-tipos-receita', + icone: IconeTiposReceita, + } + ]; + + const itensParametrizacaoGestaoSme = [ + { + parametro: 'Usuários', + url: 'parametro-usuarios', + icone: IconeUsuarios, + } + ]; + + return ( + <> + + + + + + ) +}; \ No newline at end of file diff --git a/src/componentes/sme/PainelParametrizacoes/parametrizacoes.scss b/src/componentes/sme/PainelParametrizacoes/parametrizacoes.scss new file mode 100644 index 000000000..6a2248cb5 --- /dev/null +++ b/src/componentes/sme/PainelParametrizacoes/parametrizacoes.scss @@ -0,0 +1,38 @@ +.barra-de-status{ + padding-top: 1rem; + padding-bottom: 1rem; + background-color: #2B7D83; + color: #fff; +} + +.container-cards-dre-dashboard{ + .card-header{ + height: 48%; + font-weight: bold; + font-size: 16px; + background-color: transparent; + border-bottom: none; + line-height: 19px; + + .borda-bottom{ + border-bottom: 1px solid #DADADA; + display: block; + } + } + .card-body{ + + .card-qtde-associacoes{ + font-weight: bold; + font-size: 28px; + color: #2B7D83; + } + } + + .btn-ver-prestacoes:hover svg path { + //filter: invert(27%) sepia(51%) saturate(2878%) hue-rotate(346deg) brightness(104%) contrast(97%); + fill: #fff; + + } + +} + diff --git a/src/context/Despesa/index.js b/src/context/Despesa/index.js index a1c80b507..8fdd99226 100644 --- a/src/context/Despesa/index.js +++ b/src/context/Despesa/index.js @@ -12,6 +12,7 @@ export const DespesaContext = createContext( { setInitialValues(){}, valores_iniciais:[], + valores_iniciais_recursos_proprios:[], }); @@ -84,7 +85,7 @@ export const DespesaContextProvider = ({children}) => { tag:"", conta_associacao: "", acao_associacao: "", - aplicacao_recurso: "", + aplicacao_recurso: "CUSTEIO", tipo_custeio: "", especificacao_material_servico: "", valor_rateio: "", diff --git a/src/paginas/SME/AcompanhamentoPcsSme/index.js b/src/paginas/SME/AcompanhamentoPcsSme/index.js new file mode 100644 index 000000000..30420a731 --- /dev/null +++ b/src/paginas/SME/AcompanhamentoPcsSme/index.js @@ -0,0 +1,14 @@ +import React from "react"; +import {PaginasContainer} from '../../PaginasContainer' +import {AcompanhamentoPcsSme} from "../../../componentes/sme/AcompanhamentoPcsSme"; + +export const AcompanhamentoPcsSmePage = () => { + return ( + +

Acompanhamento das Prestações de Contas

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

Painel de Parametrizações

+
+ +
+
+ ) +}; \ No newline at end of file diff --git a/src/paginas/escolas/Despesas/CadastroSaida/index.js b/src/paginas/escolas/Despesas/CadastroSaida/index.js new file mode 100644 index 000000000..b04f5ab20 --- /dev/null +++ b/src/paginas/escolas/Despesas/CadastroSaida/index.js @@ -0,0 +1,19 @@ +import React, {useContext, useEffect} from "react"; +import {PaginasContainer} from "../../../PaginasContainer"; +import {CadastroSaidaForm} from "../../../../componentes/escolas/Despesas/CadastroDeDespesas/CadastroSaidaForm"; + +export const CadastroSaida = () => { + + return ( + +

Cadastro de Saída

+
+

Dados do documento

+ +
+
+ + ); +} \ No newline at end of file diff --git a/src/rotas/index.js b/src/rotas/index.js index d2e58f6a3..5cf5e188a 100644 --- a/src/rotas/index.js +++ b/src/rotas/index.js @@ -5,7 +5,8 @@ import {Pagina404} from "../paginas/escolas/404"; import {DashboardPage} from "../paginas/Dashboard"; import {CadastroDeDespesa} from "../paginas/escolas/Despesas/CadastroDeDespesas"; import {EdicaoDeDespesa} from "../paginas/escolas/Despesas/EdicaoDeDespesa"; -import {ListaDeDespesasPage} from '../paginas/escolas/Despesas/ListaDeDespesas' +import {ListaDeDespesasPage} from '../paginas/escolas/Despesas/ListaDeDespesas'; +import {CadastroSaida} from "../paginas/escolas/Despesas/CadastroSaida"; import {CadastroDeReceita} from '../paginas/escolas/Receitas/CadastroReceita'; import {EdicaoDeReceita} from '../paginas/escolas/Receitas/EdicaoReceita'; import {ListaDeReceitasPage} from "../paginas/escolas/Receitas/ListaDeReceitas"; @@ -44,7 +45,8 @@ import {DetalhePrestacaoDeContasNaoApresentada} from "../componentes/dres/Presta import {RelatorioConsolidadoPage} from "../paginas/dres/RelatorioConsolidado"; import {RelatorioConsolidadoApuracao} from "../componentes/dres/RelatorioConsolidado/RelatorioConsolidadoApuracao"; import {RelatorioConsolidadoDadosDasUes} from "../componentes/dres/RelatorioConsolidado/RelatorioConsolidadoDadosDasUes"; - +import {PainelParametrizacoesPage} from "../paginas/SME/Parametrizacoes/PainelParametrizacoes"; +import {AcompanhamentoPcsSmePage} from "../paginas/SME/AcompanhamentoPcsSme"; const routesConfig = [ { exact: true, @@ -64,6 +66,12 @@ const routesConfig = [ component: CadastroDeDespesa, permissoes: ['view_despesa'], }, + { + exact: true, + path: "/cadastro-de-despesa-recurso-proprio/:uuid?", + component: CadastroSaida, + permissoes: ['view_receita'] + }, { exact: true, path: "/lista-de-despesas", @@ -251,7 +259,7 @@ const routesConfig = [ exact: true, path: "/dre-relatorio-consolidado", component: RelatorioConsolidadoPage, - permissoes: ['view_dashboard_dre'], + permissoes: ['view_relatorio_consolidado_dre'], }, { @@ -266,7 +274,18 @@ const routesConfig = [ component: RelatorioConsolidadoDadosDasUes, permissoes: ['view_dashboard_dre'], }, - + { + exact: true, + path: "/painel-parametrizacoes", + component: PainelParametrizacoesPage, + permissoes: ['view_default'], + }, + { + exact: true, + path: "/acompanhamento-pcs-sme", + component: AcompanhamentoPcsSmePage, + permissoes: ['view_default'], + }, { exact: true, path: "/", diff --git a/src/services/escolas/Associacao.service.js b/src/services/escolas/Associacao.service.js index 62369ceff..6b7aceb6b 100644 --- a/src/services/escolas/Associacao.service.js +++ b/src/services/escolas/Associacao.service.js @@ -37,6 +37,16 @@ export const editarMembroAssociacao = async (payload, uuid) => { return (await api.put(`/api/membros-associacao/${uuid}/?associacao_uuid=${localStorage.getItem(ASSOCIACAO_UUID)}`, payload, authHeader)) }; + +export const deleteMembroAssociacao = async (uuid_membro) => { + return api.delete(`api/membros-associacao/${uuid_membro}/?associacao_uuid=${localStorage.getItem(ASSOCIACAO_UUID)}`, authHeader).then(response => { + return response; + }).catch(error => { + return error.response; + }); +}; + + export const consultarRF = async (rf) => { return (await api.get(`/api/membros-associacao/codigo-identificacao/?rf=${rf}&associacao_uuid=${localStorage.getItem(ASSOCIACAO_UUID)}`, authHeader)) }; diff --git a/src/services/escolas/Receitas.service.js b/src/services/escolas/Receitas.service.js index 95e61916b..08167437c 100644 --- a/src/services/escolas/Receitas.service.js +++ b/src/services/escolas/Receitas.service.js @@ -80,6 +80,10 @@ export const getRepasse = async (acao_associacao_uuid, data_receita, uuid="") => return (await api.get(`/api/repasses/pendentes/?acao-associacao=${acao_associacao_uuid}&data=${data_receita}&uuid-receita=${uuid}`, authHeader)).data }; +export const getRepasses = async () => { + return (await api.get(`/api/repasses/pendentes/?associacao=${localStorage.getItem(ASSOCIACAO_UUID)}`, authHeader)).data +}; + export const getPeriodoFechadoReceita = async (palavra, aplicacao_recurso, acao_associacao__uuid, despesa__status) => { return (await api.get(`api/rateios-despesas/totais/?search=${palavra}&aplicacao_recurso=${aplicacao_recurso}&acao_associacao__uuid=${acao_associacao__uuid}&despesa__status=${despesa__status}&associacao__uuid=${localStorage.getItem(ASSOCIACAO_UUID)}`, authHeader)).data }; \ No newline at end of file diff --git a/src/services/sme/DashboardSme.service.js b/src/services/sme/DashboardSme.service.js new file mode 100644 index 000000000..6d20963f7 --- /dev/null +++ b/src/services/sme/DashboardSme.service.js @@ -0,0 +1,17 @@ +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 getPeriodos = async () => { + return (await api.get(`/api/periodos/`, authHeader)).data +}; + +export const getItensDashboard = async (uuid_periodo) => { + return (await api.get(`/api/prestacoes-contas/dashboard-sme/?periodo=${uuid_periodo}`, authHeader)).data +}; \ No newline at end of file diff --git a/src/services/visoes.service.js b/src/services/visoes.service.js index 2ac8c05f3..4130b35b6 100644 --- a/src/services/visoes.service.js +++ b/src/services/visoes.service.js @@ -1,3 +1,4 @@ + import { USUARIO_LOGIN, ASSOCIACAO_UUID, @@ -48,10 +49,11 @@ const setDadosPrimeiroAcesso = async (resp) =>{ nome_associacao = usuario_logado.associacao_selecionada.nome; }else { if (resp.visoes.find(visao=> visao === 'SME')){ + let unidade = resp.unidades.find(unidade => unidade.tipo_unidade === "SME"); visao="SME"; - uuid_unidade = ""; - uuid_associacao = ""; - nome_associacao = "ASSOCIACAO SME"; + uuid_unidade = unidade.uuid; + uuid_associacao = unidade.uuid; + nome_associacao = unidade.nome; }else if (resp.visoes.find(visao=> visao === 'DRE')){ let unidade = resp.unidades.find(unidade => unidade.tipo_unidade === "DRE"); visao="DRE"; @@ -71,7 +73,8 @@ const setDadosPrimeiroAcesso = async (resp) =>{ unidade_nome = usuario_logado.unidade_selecionada.nome; }else{ if (resp.visoes.find(visao=> visao === 'SME')){ - unidade_nome = "Unidade Visão SME"; + let unidade = resp.unidades.find(unidade => unidade.tipo_unidade === "SME"); + unidade_nome = unidade.nome; }else if (resp.visoes.find(visao=> visao === 'DRE')){ let unidade = resp.unidades.find(unidade => unidade.tipo_unidade === "DRE"); unidade_nome = unidade.nome; @@ -198,17 +201,16 @@ const alternaVisoes = (visao, uuid_unidade, uuid_associacao, nome_associacao, un }; const redirectVisao = (visao = null) => { - let dados_usuario_logado = visoesService.getDadosDoUsuarioLogado(); if (visao === 'SME') { - redirect('/undefined') + redirect('/acompanhamento-pcs-sme') } else if (visao === 'DRE') { redirect('/dre-dashboard') } else if (visao === 'UE') { redirect('/dados-da-associacao') } else { if (dados_usuario_logado.visoes.find(visao => visao.tipo === 'SME')) { - redirect('/undefined') + redirect('/acompanhamento-pcs-sme') } else if (dados_usuario_logado.visoes.find(visao => visao.tipo === 'DRE')) { redirect('/dre-dashboard') } else if (dados_usuario_logado.visoes.find(visao => visao.tipo === 'UE')) { diff --git a/src/utils/Modais.js b/src/utils/Modais.js index 30004ed59..0066002cf 100644 --- a/src/utils/Modais.js +++ b/src/utils/Modais.js @@ -101,6 +101,19 @@ export const SalvarModalAssociacao = (propriedades) => { ) }; +export const SalvarReceita = (propriedades) => { + return ( + + ) +}; + export const RedirectModalTabelaLancamentos = (propriedades) => { return ( { data = moment(data, "YYYY-MM-DD").format("YYYY-MM-DD"); try {
values.devolucoes_ao_tesouro_da_prestacao[index].devolucao_total === "true" ? setFieldValue(`devolucoes_ao_tesouro_da_prestacao[${index}].valor`, valorTemplate(despesa.valor_total)): null}/>{despesa.nome_fornecedor}{item.infos && item.infos.representacao ? converteNomeRepresentacao(item.infos.representacao) : ""}
- +
Data de devolução Número de documento CPF/CNPJ do fornecedorValor da devolução
{devolucao.data ? exibeDataPT_BR(devolucao.data) : ''} {devolucao.despesa.numero_documento} {devolucao.despesa.cpf_cnpj_fornecedor}{devolucao.valor ? valorTemplate(devolucao.valor) : ''}