{pathName === '/login' ? ( - ) : pathName === '/detalhe-das-prestacoes' ? ( + ) : pathName === '/detalhe-das-prestacoes' || pathName === "/visualizacao-da-ata" ? ( <> diff --git a/src/assets/css/styles.scss b/src/assets/css/styles.scss index a4a4c51a0..4a93ebd3d 100644 --- a/src/assets/css/styles.scss +++ b/src/assets/css/styles.scss @@ -7,6 +7,24 @@ body { #main { color: $corFonte; + // Fontes + + .fonte-10 { + font-size: 10px; + } + + .fonte-12 { + font-size: 12px; + } + + .fonte-14 { + font-size: 14px; + } + + .fonte-16 { + font-size: 16px; + } + .btn-success { background-color: $corBtnSuccess; border-color: $corBtnSuccess; diff --git a/src/assets/css/variaveis.scss b/src/assets/css/variaveis.scss index 0933fe1f5..9005b91b8 100644 --- a/src/assets/css/variaveis.scss +++ b/src/assets/css/variaveis.scss @@ -6,6 +6,7 @@ $corBtnSuccess: #00585E; $mainColor: #00585E; $whiteColor: #ffffff; $hoverBackgroundColor: #2B7D83; +$verdeClaro: #29d612; // Fontes diff --git a/src/componentes/Cabecalho/cabecalho.scss b/src/componentes/Cabecalho/cabecalho.scss index 6fa717648..1711a061d 100644 --- a/src/componentes/Cabecalho/cabecalho.scss +++ b/src/componentes/Cabecalho/cabecalho.scss @@ -1,4 +1,5 @@ .cabecalho{ + box-shadow: 0px 4px 20px rgba(0, 0, 0, 0.05); background-color: #fff; .logo-cabecalho{ width: 100px; diff --git a/src/componentes/DatePickerField/index.js b/src/componentes/DatePickerField/index.js index c4677072d..a24299c55 100644 --- a/src/componentes/DatePickerField/index.js +++ b/src/componentes/DatePickerField/index.js @@ -10,10 +10,13 @@ registerLocale("pt", pt ); export const DatePickerField = ({ name, about, value, onChange, disabled }) => { + return ( { onChange(name, val); }} diff --git a/src/componentes/Despesas/CadastroDeDespesas/CadastroForm.js b/src/componentes/Despesas/CadastroDeDespesas/CadastroForm.js index 37860e953..d280d3687 100644 --- a/src/componentes/Despesas/CadastroDeDespesas/CadastroForm.js +++ b/src/componentes/Despesas/CadastroDeDespesas/CadastroForm.js @@ -1,13 +1,6 @@ import React, {useContext, useEffect, useState} from "react"; import {Formik, FieldArray, Field} from "formik"; -import { - YupSignupSchemaCadastroDespesa, - validaPayloadDespesas, - cpfMaskContitional, - calculaValorRecursoAcoes, - round, - periodoFechado, -} from "../../../utils/ValidacoesAdicionaisFormularios"; +import {YupSignupSchemaCadastroDespesa, validaPayloadDespesas, cpfMaskContitional, calculaValorRecursoAcoes, round, periodoFechado} from "../../../utils/ValidacoesAdicionaisFormularios"; import MaskedInput from 'react-text-mask' import { getDespesasTabelas, criarDespesa, alterarDespesa, deleteDespesa, getEspecificacoesCapital, getEspecificacoesCusteio, getNomeRazaoSocial} from "../../../services/Despesas.service"; import {getVerificarSaldo} from "../../../services/RateiosDespesas.service"; @@ -19,14 +12,7 @@ import {DespesaContext} from "../../../context/Despesa"; import HTTP_STATUS from "http-status-codes"; import {ASSOCIACAO_UUID} from "../../../services/auth.service"; import CurrencyInput from "react-currency-input"; -import { - AvisoCapitalModal, - CancelarModal, - DeletarModal, - ErroGeral, - PeriodoFechado, - SaldoInsuficiente -} from "../../../utils/Modais" +import {AvisoCapitalModal, CancelarModal, DeletarModal, ErroGeral, PeriodoFechado, SaldoInsuficiente, SaldoInsuficienteConta} from "../../../utils/Modais" import "./cadastro-de-despesas.scss" import {trataNumericos} from "../../../utils/ValidacoesAdicionaisFormularios"; @@ -41,20 +27,26 @@ export const CadastroForm = ({verbo_http}) => { const [showAvisoCapital, setShowAvisoCapital] = useState(false); const [showDelete, setShowDelete] = useState(false); const [showSaldoInsuficiente, setShowSaldoInsuficiente] = useState(false); + const [showSaldoInsuficienteConta, setShowSaldoInsuficienteConta] = useState(false); const [showPeriodoFechado, setShowPeriodoFechado] = useState(false); const [showErroGeral, setShowErroGeral] = useState(false); const [especificaoes_capital, set_especificaoes_capital] = useState(""); const [especificacoes_custeio, set_especificacoes_custeio] = useState([]); const [btnSubmitDisable, setBtnSubmitDisable] = useState(false); const [saldosInsuficientesDaAcao, setSaldosInsuficientesDaAcao] = useState([]); + const [saldosInsuficientesDaConta, setSaldosInsuficientesDaConta] = useState([]); const [readOnlyBtnAcao, setReadOnlyBtnAcao] = useState(false); const [readOnlyCampos, setReadOnlyCampos] = useState(false); + const [cssEscondeDocumentoTransacao, setCssEscondeDocumentoTransacao] = useState('escondeItem'); + const [labelDocumentoTransacao, setLabelDocumentoTransacao] = useState(''); useEffect(()=>{ + if (despesaContext.initialValues.tipo_transacao && verbo_http === "PUT"){ + exibeDocumentoTransacao(despesaContext.initialValues.tipo_transacao.id) + } if (despesaContext.initialValues.data_documento && verbo_http === "PUT"){ periodoFechado(despesaContext.initialValues.data_documento, setReadOnlyBtnAcao, setShowPeriodoFechado, setReadOnlyCampos, onShowErroGeral) - //periodoFechado(despesaContext.initialValues.data_documento) } }, [despesaContext.initialValues]) @@ -72,10 +64,8 @@ export const CadastroForm = ({verbo_http}) => { }) set_especificacoes_custeio(let_especificacoes_custeio) - }; carregaTabelasDespesas(); - }, []) @@ -87,7 +77,7 @@ export const CadastroForm = ({verbo_http}) => { }, []); const initialValues = () => { - return despesaContext.initialValues + return despesaContext.initialValues; } const getPath = () => { @@ -117,6 +107,7 @@ export const CadastroForm = ({verbo_http}) => { setShowAvisoCapital(false); setShowSaldoInsuficiente(false) setShowPeriodoFechado(false) + setShowSaldoInsuficienteConta(false) } const onShowModal = () => { @@ -170,7 +161,11 @@ export const CadastroForm = ({verbo_http}) => { let retorno_saldo = await verificarSaldo(values); - if (retorno_saldo.situacao_do_saldo === "saldo_insuficiente") { + if (retorno_saldo.situacao_do_saldo === "saldo_conta_insuficiente"){ + setSaldosInsuficientesDaConta(retorno_saldo) + setShowSaldoInsuficienteConta(true) + + }else if (retorno_saldo.situacao_do_saldo === "saldo_insuficiente") { setSaldosInsuficientesDaAcao(retorno_saldo.saldos_insuficientes) setShowSaldoInsuficiente(true); } else { @@ -184,7 +179,7 @@ export const CadastroForm = ({verbo_http}) => { setBtnSubmitDisable(true); setShowSaldoInsuficiente(false); - validaPayloadDespesas(values) + validaPayloadDespesas(values, despesasTabelas) if( despesaContext.verboHttp === "POST"){ try { @@ -225,7 +220,6 @@ export const CadastroForm = ({verbo_http}) => { // Verifica período fechado para a receita if (values.data_documento){ - //await periodoFechado(values.data_documento) await periodoFechado(values.data_documento, setReadOnlyBtnAcao, setShowPeriodoFechado, setReadOnlyCampos, onShowErroGeral) } @@ -247,12 +241,25 @@ export const CadastroForm = ({verbo_http}) => { var_valor_total_dos_rateios = var_valor_total_dos_rateios_capital + var_valor_total_dos_rateios_custeio if (round(var_valor_recursos_acoes,2) !== round(var_valor_total_dos_rateios,2)) { - errors.valor_recusos_acoes = 'O total das classificações deve corresponder ao valor total da nota'; + errors.valor_recusos_acoes = 'O total das despesas classificadas deve corresponder ao valor total dos recursos do Programa.'; } return errors; }; + const exibeDocumentoTransacao = (valor) => { + if (valor){ + let exibe_documento_transacao = despesasTabelas.tipos_transacao.find(element => element.id === Number(valor)) + if (exibe_documento_transacao.tem_documento){ + setCssEscondeDocumentoTransacao("") + setLabelDocumentoTransacao(exibe_documento_transacao.nome) + }else { + setCssEscondeDocumentoTransacao("escondeItem") + } + }else { + setCssEscondeDocumentoTransacao("escondeItem") + } + } return ( <> @@ -276,11 +283,9 @@ export const CadastroForm = ({verbo_http}) => { return ( <> {props.values.qtde_erros_form_despesa > 0 && despesaContext.verboHttp === "PUT" && - -
-

O cadastro possui {props.values.qtde_erros_form_despesa} campos não preechidos, você pode completá-los agora ou terminar depois.

-
- +
+

O cadastro possui {props.values.qtde_erros_form_despesa} campos não preechidos, você pode completá-los agora ou terminar depois.

+
}
@@ -341,20 +346,6 @@ export const CadastroForm = ({verbo_http}) => {
-
- - -
-
{ {props.errors.data_documento && {props.errors.data_documento}}
-
+
+ + +
+ +
-
-
{ {props.errors.data_transacao}}
+
+
+ + + {props.errors.documento_transacao && {props.errors.documento_transacao}} +
+
+ +
+ +
+ +
{
- {
- {({ field, form, meta }) => ( { /> )} - {errors.valor_recusos_acoes && {errors.valor_recusos_acoes}} + {errors.valor_recusos_acoes && A soma dos valores do rateio não está correspondendo ao valor total utilizado com recursos do Programa.}
@@ -486,7 +514,6 @@ export const CadastroForm = ({verbo_http}) => {
- ( @@ -531,31 +558,34 @@ export const CadastroForm = ({verbo_http}) => { especificacoes_custeio={especificacoes_custeio} verboHttp={despesaContext.verboHttp} disabled={readOnlyCampos} + errors={errors} /> ): - rateio.aplicacao_recurso && rateio.aplicacao_recurso === 'CAPITAL' ? ( - - ): null} - - {index >= 1 && values.rateios.length > 1 && ( -
- -
+ rateio.aplicacao_recurso && rateio.aplicacao_recurso === 'CAPITAL' ? ( + + ): null} + + {index >= 1 && values.rateios.length > 1 && ( +
+ +
)} + /*div key*/ ) })} @@ -595,9 +625,15 @@ export const CadastroForm = ({verbo_http}) => { : null} +
+ {errors.valor_recusos_acoes && {errors.valor_recusos_acoes}} +
onSubmit(values, {resetForm})}/>
+
+ onSubmit(values, {resetForm})}/> +
@@ -611,7 +647,6 @@ export const CadastroForm = ({verbo_http}) => {
- {despesaContext.idDespesa ? diff --git a/src/componentes/Despesas/CadastroDeDespesas/CadastroFormCapital.js b/src/componentes/Despesas/CadastroDeDespesas/CadastroFormCapital.js index 6af3db877..dbba84813 100644 --- a/src/componentes/Despesas/CadastroDeDespesas/CadastroFormCapital.js +++ b/src/componentes/Despesas/CadastroDeDespesas/CadastroFormCapital.js @@ -4,7 +4,7 @@ import {calculaValorRateio, trataNumericos,} from "../../../utils/ValidacoesAdic import CurrencyInput from "react-currency-input"; export const CadastroFormCapital = (propriedades) => { - const {formikProps, rateio, index, despesasTabelas, especificaoes_capital, verboHttp, disabled} = propriedades + const {formikProps, rateio, index, despesasTabelas, especificaoes_capital, verboHttp, disabled, errors} = propriedades return ( <> @@ -136,7 +136,7 @@ export const CadastroFormCapital = (propriedades) => { onChangeEvent={formikProps.handleChange} disabled={disabled} /> - + {errors.valor_recusos_acoes && A soma dos valores do rateio não está correspondendo ao valor total utilizado com recursos do Programa.} diff --git a/src/componentes/Despesas/CadastroDeDespesas/CadastroFormCusteio.js b/src/componentes/Despesas/CadastroDeDespesas/CadastroFormCusteio.js index fa48ca46f..3513244ec 100644 --- a/src/componentes/Despesas/CadastroDeDespesas/CadastroFormCusteio.js +++ b/src/componentes/Despesas/CadastroDeDespesas/CadastroFormCusteio.js @@ -4,7 +4,7 @@ import {trataNumericos} from "../../../utils/ValidacoesAdicionaisFormularios"; export const CadastroFormCusteio = (propriedades) => { - const {formikProps, rateio, index, despesasTabelas, especificacoes_custeio, verboHttp, disabled} = propriedades + const {formikProps, rateio, index, despesasTabelas, especificacoes_custeio, verboHttp, disabled, errors} = propriedades return ( <> @@ -121,6 +121,7 @@ export const CadastroFormCusteio = (propriedades) => { onChangeEvent={formikProps.handleChange} disabled={disabled} /> + {errors.valor_recusos_acoes && A soma dos valores do rateio não está correspondendo ao valor total utilizado com recursos do Programa.} diff --git a/src/componentes/GeracaoDaAta/BoxPrestacaoDeContasPorPeriodo/index.js b/src/componentes/GeracaoDaAta/BoxPrestacaoDeContasPorPeriodo/index.js new file mode 100644 index 000000000..b03967d09 --- /dev/null +++ b/src/componentes/GeracaoDaAta/BoxPrestacaoDeContasPorPeriodo/index.js @@ -0,0 +1,28 @@ +import React from "react"; +import "../geracao-da-ata.scss" + +export const BoxPrestacaoDeContasPorPeriodo = ({corBoxPrestacaoDeContasPorPeriodo, textoBoxPrestacaoDeContasPorPeriodo, dataBoxPrestacaoDeContasPorPeriodo}) => { + + const onClickVisualizarAta = () =>{ + window.location.assign('/visualizacao-da-ata') + } + + return ( +
+
+

Ata de apresentação da prestação de contas por período

+
+
+
+

{textoBoxPrestacaoDeContasPorPeriodo}

+

{dataBoxPrestacaoDeContasPorPeriodo}

+
+
+ +
+
+
+
+
+ ) +}; \ No newline at end of file diff --git a/src/componentes/GeracaoDaAta/VisualizacaoDaAta/TabelaDinamica/index.js b/src/componentes/GeracaoDaAta/VisualizacaoDaAta/TabelaDinamica/index.js new file mode 100644 index 000000000..86305dc7f --- /dev/null +++ b/src/componentes/GeracaoDaAta/VisualizacaoDaAta/TabelaDinamica/index.js @@ -0,0 +1,78 @@ +import React from "react"; +import {TextoDespesas} from "../TextoDespesas"; + +export const TabelaDinamica = ({infoAta, valorTemplate})=> { + return( + <> + {infoAta.acoes && infoAta.acoes.length > 0 && infoAta.acoes.map((info)=>( +
+

+ {info.acao_associacao_nome} +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Custeio (R$)Capital (R$)Total (R$)
Saldo anterior{valorTemplate(info.saldo_reprogramado_custeio)}{valorTemplate(info.saldo_reprogramado_capital)}{valorTemplate(info.saldo_reprogramado)}
Recebimento{valorTemplate(info.repasses_no_periodo_custeio)}{valorTemplate(info.repasses_no_periodo_capital)}{valorTemplate(info.repasses_no_periodo)}
Demais créditos (rendimento e outros){valorTemplate(info.outras_receitas_no_periodo_custeio)}{valorTemplate(info.outras_receitas_no_periodo_capital)}{valorTemplate(info.outras_receitas_no_periodo)}
Despesas{valorTemplate(info.despesas_no_periodo_custeio)}{valorTemplate(info.despesas_no_periodo_capital)}{valorTemplate(info.despesas_no_periodo)}
Saldo atual{valorTemplate(info.saldo_atual_custeio)}{valorTemplate(info.saldo_atual_capital)}{valorTemplate(info.saldo_atual_total)}
Pagamentos a compensar{valorTemplate(info.despesas_nao_conciliadas_custeio)}{valorTemplate(info.despesas_nao_conciliadas_capital)}{valorTemplate(info.despesas_nao_conciliadas)}
Crédito não demonstrado{valorTemplate(info.receitas_nao_conciliadas_custeio)}{valorTemplate(info.receitas_nao_conciliadas_capital)}{valorTemplate(info.receitas_nao_conciliadas)}
+ +
+ ))} + + + ) +} \ No newline at end of file diff --git a/src/componentes/GeracaoDaAta/VisualizacaoDaAta/TabelaTotais/index.js b/src/componentes/GeracaoDaAta/VisualizacaoDaAta/TabelaTotais/index.js new file mode 100644 index 000000000..a7a1f0a6f --- /dev/null +++ b/src/componentes/GeracaoDaAta/VisualizacaoDaAta/TabelaTotais/index.js @@ -0,0 +1,69 @@ +import React from "react"; + +export const TabelaTotais = ({infoAta, valorTemplate}) => { + return ( + <> + {infoAta.totais && Object.entries(infoAta.totais).length > 0 && + <> +

+ Totais +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Custeio (R$)Capital (R$)Total (R$)
Saldo anterior{valorTemplate(infoAta.totais.saldo_reprogramado_custeio)}{valorTemplate(infoAta.totais.saldo_reprogramado_capital)}{valorTemplate(infoAta.totais.saldo_reprogramado)}
Recebimento{valorTemplate(infoAta.totais.repasses_no_periodo_custeio)}{valorTemplate(infoAta.totais.repasses_no_periodo_capital)}{valorTemplate(infoAta.totais.repasses_no_periodo)}
Demais créditos (rendimento e outros){valorTemplate(infoAta.totais.outras_receitas_no_periodo_custeio)}{valorTemplate(infoAta.totais.outras_receitas_no_periodo_capital)}{valorTemplate(infoAta.totais.outras_receitas_no_periodo)}
Despesas{valorTemplate(infoAta.totais.despesas_no_periodo_custeio)}{valorTemplate(infoAta.totais.despesas_no_periodo_capital)}{valorTemplate(infoAta.totais.despesas_no_periodo)}
Saldo atual{valorTemplate(infoAta.totais.saldo_atual_custeio)}{valorTemplate(infoAta.totais.saldo_atual_capital)}{valorTemplate(infoAta.totais.saldo_atual_total)}
Pagamentos a compensar{valorTemplate(infoAta.totais.despesas_nao_conciliadas_custeio)}{valorTemplate(infoAta.totais.despesas_nao_conciliadas_capital)}{valorTemplate(infoAta.totais.despesas_nao_conciliadas)}
Crédito não demonstrado{valorTemplate(infoAta.totais.receitas_nao_conciliadas_custeio)}{valorTemplate(infoAta.totais.receitas_nao_conciliadas_capital)}{valorTemplate(infoAta.totais.receitas_nao_conciliadas)}
+ + } + + ) +}; \ No newline at end of file diff --git a/src/componentes/GeracaoDaAta/VisualizacaoDaAta/TextoDespesas/index.js b/src/componentes/GeracaoDaAta/VisualizacaoDaAta/TextoDespesas/index.js new file mode 100644 index 000000000..31717ecb5 --- /dev/null +++ b/src/componentes/GeracaoDaAta/VisualizacaoDaAta/TextoDespesas/index.js @@ -0,0 +1,59 @@ +import React from "react"; + +export const TextoDespesas = ({especificaoesDespesaCusteio, especificaoesDespesaCapital, despesasPeriodoCusteio, despesasPeriodoCapital, valorTemplate}) => { + + const divideArrayColunas = (array, cols) => { + + let indexAtual = 0; + + let ret = []; + if (cols == 1 || array.length <= 5) { + ret.push(array); + } else { + let size = Math.ceil(array.length / cols); + for (let i = 0; i < cols; i++) { + let start = i * size; + ret.push(array.slice(start, start + size)); + } + } + + return ret.map((item, index) => { + return ( +
+ {item.map((textoDespesa, textoDespesaIndex) => { + indexAtual = indexAtual + 1; + return ( +

{indexAtual}-{textoDespesa}

+ ) + })} +
+ ); + }) + } + + return ( + <> + {especificaoesDespesaCusteio && especificaoesDespesaCusteio.length > 0 ? ( +
+

Despesas de custeio: R${valorTemplate(despesasPeriodoCusteio)}

+
+ {divideArrayColunas(especificaoesDespesaCusteio, 3)} +
+
+ ) : +

Despesas de custeio: Não foram realizadas despesas de Custeio no período.

+ } + + {especificaoesDespesaCapital && especificaoesDespesaCapital.length > 0 ? ( + <> +

Despesas de capital: R${valorTemplate(despesasPeriodoCapital)}

+
+ {divideArrayColunas(especificaoesDespesaCapital, 3)} +
+ + ) : +

Despesas de capital: Não foram realizadas despesas de Capital no período.

+ } + + ) +} \ No newline at end of file diff --git a/src/componentes/GeracaoDaAta/VisualizacaoDaAta/TextoDinamicoInferior/index.js b/src/componentes/GeracaoDaAta/VisualizacaoDaAta/TextoDinamicoInferior/index.js new file mode 100644 index 000000000..bddead634 --- /dev/null +++ b/src/componentes/GeracaoDaAta/VisualizacaoDaAta/TextoDinamicoInferior/index.js @@ -0,0 +1,34 @@ +import React from "react"; + +export const TextoDinamicoInferior = ({dadosAta, retornaDadosAtaFormatado, infoAta, valorTemplate})=>{ + return( +
+
+

O(a) Senhor(a) {dadosAta.presidente_reuniao ? dadosAta.presidente_reuniao : "___"} esclareceu que as despesas atenderam às prioridades registradas na(s) ata(a) da(s) reunião(ões) da Associação e em seguida informou que ao término do período de realização das despesas do {retornaDadosAtaFormatado("periodo.referencia")}, restaram na conta nº {dadosAta.conta_associacao.numero_conta ? dadosAta.conta_associacao.numero_conta : "___"} do {dadosAta.conta_associacao.banco_nome ? dadosAta.conta_associacao.banco_nome : "___"}, agência {dadosAta.conta_associacao.agencia ? dadosAta.conta_associacao.agencia : "___"} os valores de R${valorTemplate(infoAta.totais.saldo_atual_custeio)} para despesas de custeio e R${valorTemplate(infoAta.totais.saldo_atual_capital)}, para despesas de capital, totalizando de R${valorTemplate(infoAta.totais.saldo_atual_total)}, valores estes que foram reprogramados.

+

{dadosAta.comentarios ? dadosAta.comentarios : ""}

+

{retornaDadosAtaFormatado("parecer_conselho")} Esgotados os assuntos o(a) senhor(a) presidente ofereceu a palavra a quem dela desejasse fazer uso e, como não houve manifestação agradeceu a presença de todos, considerando encerrada a reunião, a qual eu, {dadosAta.secretario_reuniao ? dadosAta.secretario_reuniao : "___"} lavrei a presente ata, que vai por mim assinada e pelos demais presentes.

+

{retornaDadosAtaFormatado("data_reuniao_texto_inferior")}

+
+ +
+
+
+

_____________________________________________

+

{dadosAta.presidente_reuniao ? dadosAta.presidente_reuniao : "___"}

+

{dadosAta.cargo_presidente_reuniao ? dadosAta.cargo_presidente_reuniao : "___"}

+
+
+
+ +
+
+
+

_____________________________________________

+

{dadosAta.secretario_reuniao ? dadosAta.secretario_reuniao : "___"}

+

{dadosAta.cargo_secretaria_reuniao ? dadosAta.cargo_secretaria_reuniao : "___"}

+
+
+
+
+ ) +}; diff --git a/src/componentes/GeracaoDaAta/VisualizacaoDaAta/TextoDinamicoSuperior/index.js b/src/componentes/GeracaoDaAta/VisualizacaoDaAta/TextoDinamicoSuperior/index.js new file mode 100644 index 000000000..881d9a13c --- /dev/null +++ b/src/componentes/GeracaoDaAta/VisualizacaoDaAta/TextoDinamicoSuperior/index.js @@ -0,0 +1,16 @@ +import React from "react"; + +export const TextoDinamicoSuperior = ({dadosAta, retornaDadosAtaFormatado}) => { + let primeiro_paragrafo = `ATA DA REUNIÃO ${retornaDadosAtaFormatado("tipo_reuniao")} DA Associação ${dadosAta.associacao.nome ? dadosAta.associacao.nome : "___"} DO(A) Unidade Educacional ${dadosAta.associacao.unidade.nome ? dadosAta.associacao.unidade.nome : "___"}`.toUpperCase(); + return( + <> +

+ {primeiro_paragrafo} +

+

+ Aos {retornaDadosAtaFormatado("data_reuniao")}, reuniram-se os membros da Associação {dadosAta.associacao.nome ? dadosAta.associacao.nome : "___"} do(a) Unidade Educacional {dadosAta.associacao.unidade.nome ? dadosAta.associacao.unidade.nome : "___"} no(a) {dadosAta.local_reuniao ? dadosAta.local_reuniao : "___"} , para tratar da seguinte pauta: Apresentação ao Conselho Fiscal da prestação de contas da verba do PTRF + e suas ações agregadas, do período de {retornaDadosAtaFormatado("periodo.data_inicio_realizacao_despesas")} até {retornaDadosAtaFormatado("periodo.data_fim_realizacao_despesas")}, referente ao {retornaDadosAtaFormatado("periodo.referencia")}. Aberta a reunião em {retornaDadosAtaFormatado("convocacao")}, pelo(a) Senhor(a) {dadosAta.presidente_reuniao ? dadosAta.presidente_reuniao : "___"}, {dadosAta.cargo_presidente_reuniao ? dadosAta.cargo_presidente_reuniao : "___"} e verificada a existência de número legal de membros presentes, o(a) senhor(a) {dadosAta.presidente_reuniao ? dadosAta.presidente_reuniao : "___"} apresentou os documentos fiscais referentes às despesas realizadas no período para análise dos presentes, conforme segue: +

+ + ) +} \ No newline at end of file diff --git a/src/componentes/GeracaoDaAta/VisualizacaoDaAta/TopoComBotoes/index.js b/src/componentes/GeracaoDaAta/VisualizacaoDaAta/TopoComBotoes/index.js new file mode 100644 index 000000000..1d6756f9e --- /dev/null +++ b/src/componentes/GeracaoDaAta/VisualizacaoDaAta/TopoComBotoes/index.js @@ -0,0 +1,17 @@ +import React from "react"; + +export const TopoComBotoes = ({handleClickEditarAta, handleClickFecharAta, handleClickCopiarAta}) =>{ + return( +
+
+

Visualização da ata

+
+ +
+ + + +
+
+ ) +} \ No newline at end of file diff --git a/src/componentes/GeracaoDaAta/VisualizacaoDaAta/index.js b/src/componentes/GeracaoDaAta/VisualizacaoDaAta/index.js new file mode 100644 index 000000000..08848d22a --- /dev/null +++ b/src/componentes/GeracaoDaAta/VisualizacaoDaAta/index.js @@ -0,0 +1,270 @@ +import React, {useEffect, useState} from "react"; +import "../geracao-da-ata.scss" +import {TopoComBotoes} from "./TopoComBotoes"; +import {TextoDinamicoSuperior} from "./TextoDinamicoSuperior"; +import {TabelaDinamica} from "./TabelaDinamica"; +import {TabelaTotais} from "./TabelaTotais"; +import {TextoDinamicoInferior} from "./TextoDinamicoInferior"; +import {EditarAta, TextoCopiado} from "../../../utils/Modais"; +import {getInfoAta} from "../../../services/PrestacaoDeContas.service"; +import {getTabelasAtas, atualizarInfoAta, getAtas} from "../../../services/AtasAssociacao.service"; +import moment from "moment"; +moment.updateLocale('pt', { + months : [ + "janeiro", "fevereiro", "março", "abril", "maio", "junho", "julho", + "agosto", "setembro", "outubro", "novembro", "dezembro" + ] +}); + +const numero = require('numero-por-extenso'); + +export const VisualizacaoDaAta = () => { + const [showEditarAta, setShowEditarAta] = useState(false); + const [showTextoCopiado, setShowTextoCopiado] = useState(false); + const [stateFormEditarAta, setStateFormEditarAta] = useState({ + comentarios:"", + parecer_conselho:"", + tipo_reuniao:"ORDINARIA", + local_reuniao:"", + presidente_reuniao:"", + secretario_reuniao:"", + data_reuniao:"", + convocacao:"PRIMEIRA", + cargo_presidente_reuniao:"", + cargo_secretaria_reuniao:"", + }); + + const [infoAta, setInfoAta]= useState({}); + const [tabelas, setTabelas]= useState({}); + const [dadosAta, setDadosAta]= useState({}); + + useEffect(()=>{ + const infoAta = async ()=>{ + let info_ata = await getInfoAta(); + setInfoAta(info_ata); + + await getDadosAta() + }; + + const tabelasAta = async ()=>{ + let tabelas = await getTabelasAtas(); + setTabelas(tabelas) + }; + + infoAta(); + tabelasAta(); + }, []); + + const getDadosAta = async () =>{ + + let dados_ata = await getAtas(); + + let data_da_reuniao = dados_ata.data_reuniao ? dados_ata.data_reuniao : ""; + + setStateFormEditarAta({ + comentarios:dados_ata.comentarios, + parecer_conselho:dados_ata.parecer_conselho, + tipo_reuniao:dados_ata.tipo_reuniao, + local_reuniao:dados_ata.local_reuniao, + presidente_reuniao:dados_ata.presidente_reuniao, + secretario_reuniao:dados_ata.secretario_reuniao, + data_reuniao:data_da_reuniao, + convocacao:dados_ata.convocacao, + cargo_presidente_reuniao:dados_ata.cargo_presidente_reuniao, + cargo_secretaria_reuniao:dados_ata.cargo_secretaria_reuniao, + }); + + setDadosAta(dados_ata); + }; + + const onHandleClose = () => { + setShowEditarAta(false); + setShowTextoCopiado(false) + }; + + const handleClickEditarAta = () => { + setShowEditarAta(true); + }; + + const handleChangeEditarAta = (name, value) => { + setStateFormEditarAta({ + ...stateFormEditarAta, + [name]: value + }); + }; + + const handleClickFecharAta = () => { + window.location.assign("/prestacao-de-contas") + }; + + const handleClickCopiarAta = ()=> { + + let doc = document, text = doc.getElementById("copiar"); + let range, selection; + + if(doc.body.createTextRange){ + range = document.body.createTextRange(); + range.moveToElementText(text); + range.select(); + } + else if(window.getSelection){ + selection = window.getSelection(); + range = document.createRange(); + range.selectNodeContents(text); + selection.removeAllRanges(); + selection.addRange(range); + } + document.execCommand('copy'); + if (range){ + setShowTextoCopiado(true) + } + }; + + const onSubmitEditarAta = async () =>{ + let data_da_reuniao = stateFormEditarAta.data_reuniao ? moment(stateFormEditarAta.data_reuniao).format("YYYY-MM-DD") : null; + const payload = { + "tipo_reuniao": stateFormEditarAta.tipo_reuniao, + "convocacao": stateFormEditarAta.convocacao, + "data_reuniao": data_da_reuniao, + "local_reuniao": stateFormEditarAta.local_reuniao, + "presidente_reuniao": stateFormEditarAta.presidente_reuniao, + "cargo_presidente_reuniao": stateFormEditarAta.cargo_presidente_reuniao, + "secretario_reuniao": stateFormEditarAta.secretario_reuniao, + "cargo_secretaria_reuniao": stateFormEditarAta.cargo_secretaria_reuniao, + "parecer_conselho": stateFormEditarAta.parecer_conselho, + "comentarios": stateFormEditarAta.comentarios, + }; + + try { + await atualizarInfoAta(payload); + getDadosAta(); + setShowEditarAta(false); + }catch (e) { + console.log("Erro ao atualizar a Ata ", e) + } + }; + + 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 dataPorExtenso = (data)=>{ + if (!data){ + return "___ dias do mês de ___ de ___" + }else { + let dia_por_extenso = numero.porExtenso(moment(new Date(data), "YYYY-MM-DD").add(1, 'days').format("DD")); + let mes_por_extenso = moment(new Date(data), "YYYY-MM-DD").add(1, 'days').format("MMMM"); + let ano_por_extenso = numero.porExtenso(moment(new Date(data),"DD/MM/YYYY").add(1, 'days').year()); + let data_por_extenso = dia_por_extenso +" dias do mês de "+ mes_por_extenso +" de "+ ano_por_extenso; + return data_por_extenso; + } + }; + + const retornaDadosAtaFormatado = (campo) => { + if (campo === "tipo_reuniao"){ + let tipo_de_reuniao = tabelas.tipos_reuniao ? tabelas.tipos_reuniao.find(element => element.id === dadosAta.tipo_reuniao) : ""; + return tipo_de_reuniao.nome ? tipo_de_reuniao.nome : "___"; + + }else if (campo === "data_reuniao"){ + return dataPorExtenso(dadosAta.data_reuniao); + + }else if (campo === "data_reuniao_texto_inferior"){ + let data = dadosAta.data_reuniao ? "São Paulo, dia "+moment(new Date(dadosAta.data_reuniao), "YYYY-MM-DD").add(1, 'days').format("DD [de] MMMM [de] YYYY") : ""; + return data; + + }else if (campo === "periodo.data_inicio_realizacao_despesas") { + return dadosAta.periodo.data_inicio_realizacao_despesas ? moment(new Date(dadosAta.periodo.data_inicio_realizacao_despesas), "YYYY-MM-DD").add(1, 'days').format("DD/MM/YYYY") : ""; + + }else if(campo === "periodo.data_fim_realizacao_despesas"){ + return dadosAta.periodo.data_fim_realizacao_despesas ? moment(new Date(dadosAta.periodo.data_fim_realizacao_despesas), "YYYY-MM-DD").add(1, 'days').format("DD/MM/YYYY") : ""; + + }else if(campo === "periodo.referencia"){ + let periodo_referencia = dadosAta.periodo.referencia ? dadosAta.periodo.referencia.split(".") : ""; + let string = periodo_referencia[1]+"° repasse de "+periodo_referencia[0]; + return string; + + }else if (campo === "convocacao"){ + let convocacao = tabelas.convocacoes ? tabelas.convocacoes.find(element => element.id === dadosAta.convocacao): ""; + return convocacao.nome ? convocacao.nome : "___"; + + }else if (campo === "parecer_conselho"){ + let parecer_conselho = tabelas.pareceres ? tabelas.pareceres.find(element => element.id === dadosAta.parecer_conselho) : ""; + if (parecer_conselho.id === "APROVADA"){ + return "Os membros do Conselho Fiscal, à vista dos registros contábeis e verificando nos documentos apresentados a exatidão das despesas realizadas, julgaram exata a presente prestação de contas considerando-a em condições de ser aprovada e emitindo parecer favorável à sua aprovação." + }else if (parecer_conselho.id === "REJEITADA"){ + return "Os membros do Conselho Fiscal, à vista dos registros contábeis e verificando nos documentos apresentados, não consideram a presente prestação de contas em condições de ser aprovada emitindo parecer contrário à sua aprovação." + }else if (parecer_conselho.id === "RESSALVAS"){ + return "Os membros do Conselho Fiscal, à vista dos registros contábeis e verificando nos documentos apresentados, consideram a presente prestação de contas em condições de ser aprovada com ressalvas emitindo parecer favorável à sua aprovação com ressalvas." + } + + } + + }; + + return( +
+
+ +
+ +
+ {dadosAta && Object.entries(dadosAta).length > 0 && + + } + + {infoAta && + <> + + + + + } +
+ {dadosAta && Object.entries(dadosAta).length > 0 && + + } +
+ +
+ +
+ +
+ +
+
+ ) +}; \ No newline at end of file diff --git a/src/componentes/GeracaoDaAta/geracao-da-ata.scss b/src/componentes/GeracaoDaAta/geracao-da-ata.scss new file mode 100644 index 000000000..03132748b --- /dev/null +++ b/src/componentes/GeracaoDaAta/geracao-da-ata.scss @@ -0,0 +1,57 @@ +.titulo-box-prestacao-de-contas-por-periodo{ + font-weight: bold; + font-size: 20px; +} + +.status-data-verde{ + color: rgba(19, 139, 0, 0.97); +} +.status-data-vermelho{ + color: #B40C02; +} + +.container-visualizacao-da-ata{ + margin-top: 69px; + + .titulo-visualizacao-da-ata{ + font-size: 24px; + font-weight: bold; + } + + .titulo-tabela-acoes{ + color: #00585E; + font-weight: bold; + font-size: 18px; + } + + .tabela-acoes{ + max-width: 100%; + .tr-titulo{ + background-color: #E0F7F9; + } + td{ + width: calc(100% / 4) !important; + } + } + + .texto-despesas-titulo{ + font-size: 14px; + font-weight: bold; + + .texto-despesas-valor{ + color: #00585e; + } + + } + + .tabela-totais{ + .tr-titulo{ + background-color: #2B7D83; + color: #fff; + } + + td{ + width: calc(100% / 4) !important; + } + } +} \ No newline at end of file diff --git a/src/componentes/ModalBootstrap/index.js b/src/componentes/ModalBootstrap/index.js index b90a9c475..84602b272 100644 --- a/src/componentes/ModalBootstrap/index.js +++ b/src/componentes/ModalBootstrap/index.js @@ -25,7 +25,7 @@ export const ModalBootstrap = (propriedades) =>{ ) -} +}; export const ModalBootstrapReverConciliacao = (propriedades) =>{ return ( @@ -50,7 +50,7 @@ export const ModalBootstrapReverConciliacao = (propriedades) =>{ ) -} +}; export const ModalBootstrapSaldoInsuficiente = (propriedades) =>{ return ( @@ -75,4 +75,56 @@ export const ModalBootstrapSaldoInsuficiente = (propriedades) =>{ ) -} \ No newline at end of file +}; + +export const ModalBootstrapSaldoInsuficienteDaconta = (propriedades) =>{ + return ( + + + + {propriedades.titulo} + + + {propriedades.bodyText} + + + {propriedades.aceitarLancamento && + + } + {propriedades.segundoBotaoOnclick && propriedades.segundoBotaoTexto ? ( + + ):null} + + + + ) +}; + +export const ModalBootstrapEditarAta = (propriedades) =>{ + return ( + + + + {propriedades.titulo} + + + {propriedades.bodyText} + + + + {propriedades.segundoBotaoOnclick && propriedades.segundoBotaoTexto ? ( + + ):null} + + + + ) +}; \ No newline at end of file diff --git a/src/componentes/PrestacaoDeContas/DemonstrativoFinanceiro/index.js b/src/componentes/PrestacaoDeContas/DemonstrativoFinanceiro/index.js index fbff6871c..8914a8027 100644 --- a/src/componentes/PrestacaoDeContas/DemonstrativoFinanceiro/index.js +++ b/src/componentes/PrestacaoDeContas/DemonstrativoFinanceiro/index.js @@ -1,52 +1,71 @@ -import React, {useEffect, useState} from "react"; +import React, {Component, useEffect, useState} from "react"; import {DataTable} from "primereact/datatable"; import {Column} from "primereact/column"; import {ASSOCIACAO_UUID} from "../../../services/auth.service"; import {getAcoes, previa, documentoFinal, getDemonstrativoInfo} from "../../../services/DemonstrativoFinanceiro.service"; -export const DemonstrativoFinanceiro = () => { - const rowsPerPage = 7; +export class DemonstrativoFinanceiro extends Component { + _isMounted = false; - const [estado, setEstado] = useState(''); + state = { + rowsPerPage: 7, + estado: [], + } + + componentDidMount() { + this._isMounted = true; + this.buscaAcoes() + } - useEffect(() => { - buscaAcoes(); - }, [estado]) + componentDidUpdate(prevProps) { + if (prevProps.periodoConta !== this.props.periodoConta) { + this.buscaAcoes() + } + } - const buscaAcoes = async () => { - const periodo_uuid = JSON.parse(localStorage.getItem('periodoConta')).periodo; + componentWillUnmount() { + this._isMounted = false; + } + + buscaAcoes = async () => { + const periodo_uuid = this.props.periodoConta.periodo; + const conta_uuid = this.props.periodoConta.conta; const associacao_uuid = localStorage.getItem(ASSOCIACAO_UUID); const result = await getAcoes(associacao_uuid, periodo_uuid); - - let est_result = await Promise.all(result.info_acoes.map(async (info) => { - const msg = await getDemonstrativoInfo(info.acao_associacao_uuid); + + Promise.all(result.info_acoes.map(async (info) => { + const msg = await getDemonstrativoInfo(info.acao_associacao_uuid, conta_uuid, periodo_uuid); return { - nomeAcao: info.acao_associacao_nome, + nomeAcao: info.acao_associacao_nome, acaoUuid: info.acao_associacao_uuid, - receitaDeclarada: info.receitas_no_periodo, + receitaDeclarada: info.receitas_no_periodo, despesaDeclarada: info.despesas_no_periodo, - mensagem: msg} - })); - setEstado(est_result); + mensagem: msg} + })).then((result) => { + if(this._isMounted) { + this.setState({estado: result}); + } + + }); } - const gerarPrevia = async (acaoUuid) => { + gerarPrevia = async (acaoUuid) => { const periodo_uuid = JSON.parse(localStorage.getItem('periodoConta')).periodo const conta_uuid = JSON.parse(localStorage.getItem('periodoConta')).conta - + await previa(acaoUuid, conta_uuid, periodo_uuid); } - const gerarDocumentoFinal = async (acaoUuid) => { + gerarDocumentoFinal = async (acaoUuid) => { const periodo_uuid = JSON.parse(localStorage.getItem('periodoConta')).periodo const conta_uuid = JSON.parse(localStorage.getItem('periodoConta')).conta - + await documentoFinal(acaoUuid, conta_uuid, periodo_uuid); - await buscaAcoes(); + await this.buscaAcoes(); } - const getNomeAcao = (rowData) => { + getNomeAcao = (rowData) => { return (

{rowData['nomeAcao']}

@@ -55,16 +74,16 @@ export const DemonstrativoFinanceiro = () => { ) } - const getBotoes = (rowData) => { + getBotoes = (rowData) => { return (
- - + +
) } - const valorReceita = (rowData, column) => { + valorReceita = (rowData, column) => { const valor = rowData['receitaDeclarada'] ? new Number(rowData['receitaDeclarada']).toLocaleString('pt-BR', { style: 'currency', @@ -75,7 +94,7 @@ export const DemonstrativoFinanceiro = () => { return ({valorFormatado}) } - const valorDespesa = (rowData, column) => { + valorDespesa = (rowData, column) => { const valor = rowData['despesaDeclarada'] ? new Number(rowData['despesaDeclarada']).toLocaleString('pt-BR', { style: 'currency', @@ -86,41 +105,43 @@ export const DemonstrativoFinanceiro = () => { return ({valorFormatado}) } - return ( -
-

Demontrativo Financeiro

- -
- rowsPerPage} - rows={rowsPerPage} - paginatorTemplate="PrevPageLink PageLinks NextPageLink" - autoLayout={true} - selectionMode="single" - //onRowClick={e => redirecionaDetalhe(e.data)} - > - - - - - -
-
- ); + render() { + const {estado, rowsPerPage} = this.state; + return ( +
+

Demontrativo Financeiro

+ +
+ rowsPerPage} + rows={rowsPerPage} + paginatorTemplate="PrevPageLink PageLinks NextPageLink" + autoLayout={true} + selectionMode="single" + //onRowClick={e => redirecionaDetalhe(e.data)} + > + + + + + +
+
); + } } \ No newline at end of file diff --git a/src/componentes/PrestacaoDeContas/DetalheDasPrestacoes/TabelaValoresPendentesPorAcao/index.js b/src/componentes/PrestacaoDeContas/DetalheDasPrestacoes/TabelaValoresPendentesPorAcao/index.js index e4ea63ced..da7adcc59 100644 --- a/src/componentes/PrestacaoDeContas/DetalheDasPrestacoes/TabelaValoresPendentesPorAcao/index.js +++ b/src/componentes/PrestacaoDeContas/DetalheDasPrestacoes/TabelaValoresPendentesPorAcao/index.js @@ -1,27 +1,97 @@ -import React from "react"; +import React, {Component} from "react"; +import 'primeicons/primeicons.css'; import {DataTable} from "primereact/datatable"; import {Column} from "primereact/column"; import {ColumnGroup} from 'primereact/columngroup'; import {Row} from 'primereact/row'; +import {tabelaValoresPendentes} from '../../../../services/TabelaValoresPendentesPorAcao.service' -export const TabelaValoresPendentesPorAcao = () => { - const rowsPerPage = 7; +import "./styles.css"; - const sales = [ +export class TabelaValoresPendentesPorAcao extends Component { + _isMounted = false - {acao: 'PTRF Básico', totalReceitas: 'R$ 2.353,30', conciliadoReceitas: 'R$ 1954,54', aconciliarReceitas: 'R$ 54,406.00', totalDespesas: 'R$ 43,34', conciliadoDespesas: '$43,342', aconciliarDespesas: 'R$ 54,406.00'}, - {acao: 'Volta às aulas', totalReceitas: 'R$ 8,00', conciliadoReceitas: 'R$ 0,00', aconciliarReceitas: 'R$ 423,132', totalDespesas: 'R$ 312,12', conciliadoDespesas: '$43,342', aconciliarDespesas: 'R$ 54,406.00'}, - {acao: 'Fazendo Futuro', totalReceitas: 'R$ 234,74', conciliadoReceitas: 'R$ 234,74', aconciliarReceitas: 'R$ 12,321', totalDespesas: 'R$ 8,50', conciliadoDespesas: '$43,342', aconciliarDespesas: '$R$ 4,406.00'}, - {acao: 'Rolê Cultural', totalReceitas: 'R$ 234,74', conciliadoReceitas: 'R$ 234,74', aconciliarReceitas: 'R$ 745,232', totalDespesas: 'R$ 650,32,', conciliadoDespesas: '$43,342', aconciliarDespesas: 'R$ 54,406.00'}, - {acao: 'Orçamento Grêmio Estudantil', totalReceitas: 'R$ 40,45', conciliadoReceitas: 'R$ 40,45', aconciliarReceitas: 'R$ 643,242', totalDespesas: 'R$ 500,32', conciliadoDespesas: '$43,342', aconciliarDespesas: 'R$ 54,406.00'}, - {acao: 'Educom - Imprensa Jovem', totalReceitas: 'R$ 765,43', conciliadoReceitas: 'R$ 765,43', aconciliarReceitas: 'R$ 421,13', totalDespesas: 'R$ 150,05', conciliadoDespesas: '$43,342', aconciliarDespesas: 'R$ 54,406.00'}, - {acao: 'Mais Escola', totalReceitas: 'R$ 10,54', conciliadoReceitas: 'R$ 10,54', aconciliarReceitas: 'R$ 10,54', totalDespesas: 'R$ 100,21', conciliadoDespesas: 'R$ 43,34', aconciliarDespesas: 'R$ 54,406.00'}, - {acao: 'Formação', totalReceitas: 'R$ 4,54', conciliadoReceitas: 'R$ 0,00', aconciliarReceitas: 'R$ 4,54', totalDespesas: 'R$ 296,23', conciliadoDespesas: 'R$ 43,32', aconciliarDespesas: 'R$ 54,406.00'}, - ]; + constructor() { + super(); - let headerGroup = + this.state = { + sales: [], + rowsPerPage: 7, + periodo: JSON.parse(localStorage.getItem('periodoConta')).periodo, + totais: {}, + expandedRows: false, + chevron: "pi pi-chevron-right" + } + } + + componentDidMount() { + this._isMounted = true; + this.getTabelaValoresPendentes(); + } + + componentWillUnmount() { + this._isMounted = false; + } + + getValorFormatado = (rowValue, green=false) => { + const valor = rowValue + ? new Number(rowValue).toLocaleString('pt-BR', { + style: 'currency', + currency: 'BRL' + }) + : 0 + const valorFormatado = (valor !== 0 && valor.includes('R$')) ? valor : `R$ ${valor}` + return ({valorFormatado}) + } + + getTabelaValoresPendentes = async () => { + tabelaValoresPendentes(localStorage.getItem('uuidPrestacaoConta')).then((result) => { + const valoresPendentes = result.map(tabelaInfo => ( + { + acao: tabelaInfo.acao_associacao_nome, + totalReceitas: tabelaInfo.receitas_no_periodo, + conciliadoReceitas: tabelaInfo.receitas_no_periodo - tabelaInfo.receitas_nao_conciliadas, + aconciliarReceitas: tabelaInfo.receitas_nao_conciliadas, + totalDespesas: tabelaInfo.despesas_no_periodo, + conciliadoDespesas: tabelaInfo.despesas_no_periodo - tabelaInfo.despesas_nao_conciliadas, + aconciliarDespesas: tabelaInfo.despesas_nao_conciliadas + } + )) + if(this._isMounted){ + this.setState({sales: valoresPendentes}); + const totais = { + totalReceitas: this.state.sales.map(sale => (sale.totalReceitas)).reduce((a,b) => a+b, 0), + totalReceitasConciliadas: this.state.sales.map(sale => (sale.conciliadoReceitas)).reduce((a,b) => a+b, 0), + totalReceitasNaoConciliadas: this.state.sales.map(sale => (sale.aconciliarReceitas)).reduce((a,b) => a+b, 0), + totalDespesas: this.state.sales.map(sale => (sale.totalDespesas)).reduce((a,b) => a+b, 0), + totalDespesasConciliadas: this.state.sales.map(sale => (sale.conciliadoDespesas)).reduce((a,b) => a+b, 0), + totalDespesasNaoConciliadas: this.state.sales.map(sale => (sale.aconciliarDespesas)).reduce((a,b) => a+b, 0), + } + this.setState({totais: totais}); + } + + }) + } + + openBody = () => { + this.setState({ + expandedRows: !this.state.expandedRows, + chevron: (!this.state.expandedRows ? "pi pi-chevron-down": "pi pi-chevron-right") + }); + } + + header = () => { + return ( +
+ Ação +
) + } + + headerGroup() { + return ( + - + Ação nossa @@ -37,49 +107,53 @@ export const TabelaValoresPendentesPorAcao = () => { - ; +
) + } - let footerGroup = + footerGroup() { + return ( + - - - - - - + + + + + + - ; - - - return( -
-
-

Valores pendentes de conciliação por ação

- -
- rowsPerPage} - rows={rowsPerPage} - paginatorTemplate="PrevPageLink PageLinks NextPageLink" - autoLayout={true} - //selectionMode="single" - > - - - - - - - - -
+ ); + } + render() { + const {sales, rowsPerPage} = this.state; + return ( +
+
+

Valores pendentes de conciliação por ação

-
-
- ); -} \ No newline at end of file +
+ rowsPerPage} + rows={rowsPerPage} + paginatorTemplate="PrevPageLink PageLinks NextPageLink" + autoLayout={true} + > + + (this.getValorFormatado(row['totalReceitas']))} /> + (this.getValorFormatado(row['conciliadoReceitas']))} /> + (this.getValorFormatado(row['aconciliarReceitas'], true))} /> + (this.getValorFormatado(row['totalDespesas']))} /> + (this.getValorFormatado(row['conciliadoDespesas']))} /> + (this.getValorFormatado(row['aconciliarDespesas'], true))} /> + +
+ +
+
+ ) + } +} diff --git a/src/componentes/PrestacaoDeContas/DetalheDasPrestacoes/TabelaValoresPendentesPorAcao/styles.css b/src/componentes/PrestacaoDeContas/DetalheDasPrestacoes/TabelaValoresPendentesPorAcao/styles.css new file mode 100644 index 000000000..e07073f31 --- /dev/null +++ b/src/componentes/PrestacaoDeContas/DetalheDasPrestacoes/TabelaValoresPendentesPorAcao/styles.css @@ -0,0 +1,3 @@ +.datatable-header-cursor { + cursor: pointer; +} \ No newline at end of file diff --git a/src/componentes/PrestacaoDeContas/DetalheDasPrestacoes/index.js b/src/componentes/PrestacaoDeContas/DetalheDasPrestacoes/index.js index dc87e9bc7..d3bad9af3 100644 --- a/src/componentes/PrestacaoDeContas/DetalheDasPrestacoes/index.js +++ b/src/componentes/PrestacaoDeContas/DetalheDasPrestacoes/index.js @@ -3,6 +3,7 @@ import {TopoComBotoes} from "./TopoComBotoes"; import {SelectAcaoLancamento} from "./SelectAcaoLancamento"; import {TabelaDeLancamentosDespesas} from "./TabelaDeLancamentosDespesas"; import {TabelaDeLancamentosReceitas} from "./TabelaDeLancamentosReceitas"; +import {TabelaValoresPendentesPorAcao} from "./TabelaValoresPendentesPorAcao"; import {Justificativa} from "./Justivicativa"; import {getTabelasReceita} from "../../../services/Receitas.service"; import { @@ -128,7 +129,7 @@ export const DetalheDasPrestacoes = () => { } const conciliarReceitas = async (uuid_receita) => { - await getConciliarReceita(uuid_receita) + await getConciliarReceita(uuid_receita, localStorage.getItem('uuidPrestacaoConta')) } const desconciliarReceitas = async (uuid_receita) => { @@ -136,7 +137,7 @@ export const DetalheDasPrestacoes = () => { } const conciliarDespesas = async (uuid_receita) => { - await getConciliarDespesa(uuid_receita) + await getConciliarDespesa(uuid_receita, localStorage.getItem('uuidPrestacaoConta')) } const desconciliarDespesas = async (uuid_receita) => { @@ -213,7 +214,7 @@ export const DetalheDasPrestacoes = () => { window.location.assign('/prestacao-de-contas') } catch (e) { onShowErroGeral(); - console.log("Erro: ", e.message()) + console.log("Erro: ", e.message) } } @@ -270,14 +271,14 @@ export const DetalheDasPrestacoes = () => { onHandleClose={onHandleClose} /> + + - {/**/} - {!receitasNaoConferidas.length > 0 && !receitasConferidas.length > 0 && acaoLancamento.lancamento === "receitas-lancadas" &&

Não existem lançamentos conciliados/não conciliados...

} diff --git a/src/componentes/PrestacaoDeContas/RelacaoDeBens/index.js b/src/componentes/PrestacaoDeContas/RelacaoDeBens/index.js new file mode 100644 index 000000000..9e99589f9 --- /dev/null +++ b/src/componentes/PrestacaoDeContas/RelacaoDeBens/index.js @@ -0,0 +1,69 @@ +import React, {Component} from "react"; +import {previa, documentoFinal, getRelacaoBensInfo} from "../../../services/RelacaoDeBens.service"; + +export default class RelacaoDeBens extends Component { + _isMounted = false; + + state = { + mensagem: "", + } + + async componentDidMount() { + this._isMounted = true; + await this.relacaoBensInfo(); + } + + async componentDidUpdate(prevProps) { + if (prevProps.periodoConta !== this.props.periodoConta) { + await this.relacaoBensInfo(); + } + } + + componentWillUnmount() { + this._isMounted = false; + } + + relacaoBensInfo = async () => { + const {periodo, conta} = this.props.periodoConta; + getRelacaoBensInfo(conta, periodo).then( + (mensagem) => { + if(this._isMounted) { + this.setState({mensagem: mensagem}); + } + } + ); + ; + } + + gerarPrevia = async () => { + const {periodo, conta} = this.props.periodoConta; + + await previa(conta, periodo); + } + + gerarDocumentoFinal = async () => { + const {periodo, conta} = this.props.periodoConta; + + await documentoFinal(conta, periodo); + await this.relacaoBensInfo(); + } + + render() { + const {mensagem} = this.state; + return ( +
+

Relação de Bens adquiridos ou produzidos por período

+
+
+

Bens adquiridos ou produzidos

+

{mensagem}

+
+
+ + +
+
+
+ ) + } +} \ No newline at end of file diff --git a/src/componentes/PrestacaoDeContas/index.js b/src/componentes/PrestacaoDeContas/index.js index 5b99557c9..4ae4a426d 100644 --- a/src/componentes/PrestacaoDeContas/index.js +++ b/src/componentes/PrestacaoDeContas/index.js @@ -10,13 +10,20 @@ import {DataUltimaConciliacao} from "./DataUltimaConciliacao"; import {getTabelasReceita} from "../../services/Receitas.service"; import { getPeriodos, + getPeriodosNaoFuturos, getStatus, getIniciarPrestacaoDeContas, - getReabrirPeriodo + getReabrirPeriodo, + getDataPreenchimentoAta, + getIniciarAta, } from "../../services/PrestacaoDeContas.service"; -import {exibeDateTimePT_BR} from "../../utils/ValidacoesAdicionaisFormularios"; +import {exibeDateTimePT_BR, exibeDateTimePT_BR_Ata} from "../../utils/ValidacoesAdicionaisFormularios"; import {ReverConciliacao} from "../../utils/Modais"; +import {BoxPrestacaoDeContasPorPeriodo} from "../GeracaoDaAta/BoxPrestacaoDeContasPorPeriodo"; + +import RelacaoDeBens from "./RelacaoDeBens"; + export const PrestacaoDeContas = () => { @@ -31,6 +38,7 @@ export const PrestacaoDeContas = () => { const [botaoConciliacaoReadonly, setBotaoConciliacaoReadonly] = useState(true); const [linkBotaoConciliacao, setLinkBotaoConciliacao] = useState(''); const [demonstrativoFinanceiro, setDemonstrativoFinanceiro] = useState(false); + const [boxPrestacaoDeContasPorPeriodo, setBoxPrestacaoDeContasPorPeriodo] = useState(false); const [contasAssociacao, setContasAssociacao] = useState(false); const [periodosAssociacao, setPeriodosAssociacao] = useState(false); @@ -38,6 +46,10 @@ export const PrestacaoDeContas = () => { const [show, setShow] = useState(false); const [textareaModalReverConciliacao, setTextareaModalReverConciliacao] = useState(""); + const [corBoxPrestacaoDeContasPorPeriodo, setCorBoxPrestacaoDeContasPorPeriodo] = useState(""); + const [textoBoxPrestacaoDeContasPorPeriodo, setTextoBoxPrestacaoDeContasPorPeriodo] = useState(""); + const [dataBoxPrestacaoDeContasPorPeriodo, setDataBoxPrestacaoDeContasPorPeriodo] = useState(""); + useEffect(() => { getPeriodoConta(); }, []) @@ -52,9 +64,9 @@ export const PrestacaoDeContas = () => { }; const carregaPeriodos = async () => { - let periodos = await getPeriodos(); + let periodos = await getPeriodosNaoFuturos(); setPeriodosAssociacao(periodos); - } + }; carregaTabelas(); carregaPeriodos(); @@ -64,15 +76,15 @@ export const PrestacaoDeContas = () => { localStorage.setItem('periodoConta', JSON.stringify(periodoConta)) if (periodoConta.periodo !== undefined && periodoConta.periodo !== "" && periodoConta.conta !== undefined && periodoConta.conta !== "") { setExibeMensagem(false) - //setDemonstrativoFinanceiro(true) getStatusPrestacaoDeConta(periodoConta.periodo, periodoConta.conta) } else { setExibeMensagem(true) - setDemonstrativoFinanceiro(false) + setDemonstrativoFinanceiro(false); + setBoxPrestacaoDeContasPorPeriodo(false); setStatusPrestacaoConta(undefined) localStorage.setItem("uuidPrestacaoConta", undefined) } - }, [periodoConta]) + }, [periodoConta]); const getPeriodoConta = () => { if (localStorage.getItem('periodoConta')) { @@ -92,12 +104,30 @@ export const PrestacaoDeContas = () => { setConfDataUltimaConciliacao(status); setBotaoConciliacaoReadonly(false); - if (localStorage.getItem('uuidPrestacaoConta') !== 'undefined' - && localStorage.getItem('uuidPrestacaoConta') !== undefined - && (status !== undefined ? (status.status === null || status.conciliado) : false)) { - setDemonstrativoFinanceiro(true) + if (localStorage.getItem('uuidPrestacaoConta') !== 'undefined' && localStorage.getItem('uuidPrestacaoConta') !== undefined && (status !== undefined ? (status.status === null || status.conciliado) : false)) { + setDemonstrativoFinanceiro(true); + setBoxPrestacaoDeContasPorPeriodo(true); } else { - setDemonstrativoFinanceiro(false) + setDemonstrativoFinanceiro(false); + setBoxPrestacaoDeContasPorPeriodo(false); + } + } + + const setConfBoxPrestacaoDeContasPorPeriodo = async (status)=>{ + let data_preenchimento; + try { + data_preenchimento = await getDataPreenchimentoAta(status.uuid); + localStorage.setItem("uuidAta", data_preenchimento.uuid); + setCorBoxPrestacaoDeContasPorPeriodo("verde"); + setTextoBoxPrestacaoDeContasPorPeriodo(data_preenchimento.nome); + setDataBoxPrestacaoDeContasPorPeriodo("Último preenchimento em "+exibeDateTimePT_BR_Ata(data_preenchimento.alterado_em)); + + }catch (e) { + data_preenchimento = await getIniciarAta(status.uuid); + localStorage.setItem("uuidAta", data_preenchimento.uuid); + setCorBoxPrestacaoDeContasPorPeriodo("vermelho"); + setTextoBoxPrestacaoDeContasPorPeriodo(data_preenchimento.nome); + setDataBoxPrestacaoDeContasPorPeriodo("Ata não preenchida"); } } @@ -105,9 +135,13 @@ export const PrestacaoDeContas = () => { if (status.status === "FECHADO") { setCorBarraDeStatusPrestacaoDeContas('verde'); setTextoBarraDeStatusPrestacaoDeContas("A geração dos documentos da conciliação desse período foi efetuada, clique no botão “Rever conciliação” para fazer alterações") + setConfBoxPrestacaoDeContasPorPeriodo(status) + } else if (status.status === "ABERTO" && status.conciliado) { setCorBarraDeStatusPrestacaoDeContas('amarelo') setTextoBarraDeStatusPrestacaoDeContas("A prestação de contas deste período está aberta.") + setConfBoxPrestacaoDeContasPorPeriodo(status) + } else if (status.status === null || !status.conciliado) { setCorBarraDeStatusPrestacaoDeContas('vermelho') setTextoBarraDeStatusPrestacaoDeContas("A prestação de contas deste período ainda não foi iniciada.") @@ -181,6 +215,7 @@ export const PrestacaoDeContas = () => { window.location.assign(linkBotaoConciliacao) } + return ( <> { handleClickBotaoConciliacao={handleClickBotaoConciliacao} />
+ {demonstrativoFinanceiro === true && statusPrestacaoConta !== undefined && ( - + <> + + + )} + + {boxPrestacaoDeContasPorPeriodo === true && statusPrestacaoConta !== undefined && ( + + )} + {exibeMensagem && ( { let {origem} = useParams(); let {uuid} = useParams(); + const [loading, setLoading] = useState(true) const tabelaInicial = { tipos_receita: [], @@ -82,6 +84,7 @@ export const ReceitaForm = props => { }; carregaTabelas(); buscaReceita(); + setLoading(false); }, []) const onSubmit = async (values) => { @@ -92,13 +95,14 @@ export const ReceitaForm = props => { ...values, associacao: localStorage.getItem(ASSOCIACAO_UUID) } - + setLoading(true); if (uuid) { await atualizar(uuid, payload); } else { await cadastrar(payload); } getPath(); + setLoading(false); } const cadastrar = async (payload) => { diff --git a/src/componentes/Receitas/ListaDeReceitas/index.js b/src/componentes/Receitas/ListaDeReceitas/index.js index f487e528b..5aefbdb70 100644 --- a/src/componentes/Receitas/ListaDeReceitas/index.js +++ b/src/componentes/Receitas/ListaDeReceitas/index.js @@ -14,6 +14,7 @@ import Img404 from "../../../assets/img/img-404.svg"; import "./lista-de-receitas.scss" import {FormFiltrosAvancados} from "../FormFiltrosAvancados"; import Loading from "../../../utils/Loading"; +import { set } from "date-fns"; export const ListaDeReceitas = () => { @@ -24,7 +25,7 @@ export const ListaDeReceitas = () => { const [inputPesquisa, setInputPesquisa] = useState("") const [buscaUtilizandoFiltro, setBuscaUtilizandoFiltro] = useState(false) const [btnMaisFiltros, setBtnMaisFiltros] = useState(false) - const [loading, setLoading] = useState(false) + const [loading, setLoading] = useState(true) useEffect(() => { buscaListaReceitas() @@ -34,6 +35,8 @@ export const ListaDeReceitas = () => { const buscaListaReceitas = async () => { const listaReceitas = await getListaReceitas() setReceitas(listaReceitas) + + setLoading(false); } const redirecionaDetalhe = value => { diff --git a/src/context/Despesa/index.js b/src/context/Despesa/index.js index 239eb07e8..54130adb3 100644 --- a/src/context/Despesa/index.js +++ b/src/context/Despesa/index.js @@ -29,6 +29,7 @@ export const DespesaContextProvider = ({children}) => { cpf_cnpj_fornecedor: "", nome_fornecedor: "", data_transacao: "", + documento_transacao: "", valor_total: "", valor_recursos_proprios: "", // Auxiliares @@ -61,6 +62,7 @@ export const DespesaContextProvider = ({children}) => { cpf_cnpj_fornecedor: "", nome_fornecedor: "", data_transacao: "", + documento_transacao: "", valor_total: "", valor_recursos_proprios: "", // Auxiliares diff --git a/src/rotas/index.js b/src/rotas/index.js index 6a053499d..eb61c36d7 100644 --- a/src/rotas/index.js +++ b/src/rotas/index.js @@ -12,6 +12,7 @@ import { ListaDeReceitasPage } from "../paginas/Receitas/ListaDeReceitas"; import {DadosDaAssociacaoPage} from "../paginas/Associacao"; import {PrestacaoDeContasPage} from "../paginas/PrestacaoDeContas"; import {DetalheDasPrestacoes} from "../componentes/PrestacaoDeContas/DetalheDasPrestacoes"; +import {VisualizacaoDaAta} from "../componentes/GeracaoDaAta/VisualizacaoDaAta"; import { authService } from '../services/auth.service'; @@ -66,6 +67,11 @@ const routesConfig = [ path: "/detalhe-das-prestacoes", component: DetalheDasPrestacoes }, + { + exact: true, + path: "/visualizacao-da-ata", + component: VisualizacaoDaAta + }, { exact: true, path: "/", diff --git a/src/services/AtasAssociacao.service.js b/src/services/AtasAssociacao.service.js new file mode 100644 index 000000000..b7277b1d2 --- /dev/null +++ b/src/services/AtasAssociacao.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 atualizarInfoAta = async (payload) => { + return (await api.patch(`api/atas-associacao/${localStorage.getItem("uuidAta")}/`, payload, authHeader)) +} + +export const getTabelasAtas = async () => { + return (await api.get(`api/atas-associacao/tabelas/`, authHeader)).data +} + +export const getAtas = async () => { + return (await api.get(`api/atas-associacao/${localStorage.getItem("uuidAta")}/`, authHeader)).data +} diff --git a/src/services/DemonstrativoFinanceiro.service.js b/src/services/DemonstrativoFinanceiro.service.js index 2b76aa305..abd78de7f 100644 --- a/src/services/DemonstrativoFinanceiro.service.js +++ b/src/services/DemonstrativoFinanceiro.service.js @@ -13,8 +13,8 @@ export const getAcoes = async (associacao_uuid, periodo_uuid) => { return (await api.get(`/api/demonstrativo-financeiro/acoes/?associacao_uuid=${associacao_uuid}&periodo_uuid=${periodo_uuid}`, authHeader)).data } -export const getDemonstrativoInfo = async (acao_associacao_uuid) => { - return (await api.get(`/api/demonstrativo-financeiro/demonstrativo-info/?acao-associacao=${acao_associacao_uuid}`, authHeader)).data +export const getDemonstrativoInfo = async (acao_associacao_uuid, conta_associacao_uuid, periodo_uuid) => { + return (await api.get(`/api/demonstrativo-financeiro/demonstrativo-info/?acao-associacao=${acao_associacao_uuid}&conta-associacao=${conta_associacao_uuid}&periodo=${periodo_uuid}`, authHeader)).data } export const previa = async (acao_associacao, conta_associacao, periodo) => { diff --git a/src/services/PrestacaoDeContas.service.js b/src/services/PrestacaoDeContas.service.js index 9faa5d3f9..b53cbcf0d 100644 --- a/src/services/PrestacaoDeContas.service.js +++ b/src/services/PrestacaoDeContas.service.js @@ -1,58 +1,145 @@ -import api from "./Api"; -import {TOKEN_ALIAS} from "./auth.service"; +import api from './Api' +import { TOKEN_ALIAS } from './auth.service' const authHeader = { - headers: { - 'Authorization': `JWT ${localStorage.getItem(TOKEN_ALIAS)}`, - 'Content-Type': 'application/json' - } + headers: { + Authorization: `JWT ${localStorage.getItem(TOKEN_ALIAS)}`, + 'Content-Type': 'application/json', + }, } - export const getPeriodos = async () => { - return (await api.get(`/api/periodos/lookup/`, authHeader)).data + return (await api.get(`/api/periodos/lookup/`, authHeader)).data +} + +export const getPeriodosNaoFuturos = async () => { + return(await api.get('/api/periodos/lookup-until-now/', authHeader)).data } export const getStatus = async (periodo_uuid, conta_uuid) => { - return (await api.get(`/api/prestacoes-contas/por-conta-e-periodo/?conta_associacao_uuid=${conta_uuid}&periodo_uuid=${periodo_uuid}`, authHeader)).data + return ( + await api.get( + `/api/prestacoes-contas/por-conta-e-periodo/?conta_associacao_uuid=${conta_uuid}&periodo_uuid=${periodo_uuid}`, + authHeader + ) + ).data } export const getIniciarPrestacaoDeContas = async (conta_uuid, periodo_uuid) => { - return (await api.post(`/api/prestacoes-contas/iniciar/?conta_associacao_uuid=${conta_uuid}&periodo_uuid=${periodo_uuid}`, authHeader)).data + return ( + await api.post( + `/api/prestacoes-contas/iniciar/?conta_associacao_uuid=${conta_uuid}&periodo_uuid=${periodo_uuid}`, + authHeader + ) + ).data } export const getReabrirPeriodo = async (uuid, payload) => { - return (await api.patch(`/api/prestacoes-contas/${uuid}/revisar/`, payload, authHeader)) + return await api.patch( + `/api/prestacoes-contas/${uuid}/revisar/`, + payload, + authHeader + ) } -export const getDespesasPrestacaoDeContas = async (uuidPrestacaoDeContas, acao_associacao__uuid, conferido) => { - return (await api.get(`/api/prestacoes-contas/${uuidPrestacaoDeContas}/despesas/?acao_associacao_uuid=${acao_associacao__uuid}&conferido=${conferido}`, authHeader)).data +export const getDespesasPrestacaoDeContas = async ( + uuidPrestacaoDeContas, + acao_associacao__uuid, + conferido +) => { + return ( + await api.get( + `/api/prestacoes-contas/${uuidPrestacaoDeContas}/despesas/?acao_associacao_uuid=${acao_associacao__uuid}&conferido=${conferido}`, + authHeader + ) + ).data } -export const getReceitasPrestacaoDeContas = async (uuidPrestacaoDeContas, acao_associacao__uuid, conferido) => { - return (await api.get(`/api/prestacoes-contas/${uuidPrestacaoDeContas}/receitas/?acao_associacao_uuid=${acao_associacao__uuid}&conferido=${conferido}`, authHeader)).data +export const getReceitasPrestacaoDeContas = async ( + uuidPrestacaoDeContas, + acao_associacao__uuid, + conferido +) => { + return ( + await api.get( + `/api/prestacoes-contas/${uuidPrestacaoDeContas}/receitas/?acao_associacao_uuid=${acao_associacao__uuid}&conferido=${conferido}`, + authHeader + ) + ).data } -export const getConciliarReceita = async (uuid_receita) => { - return (await api.patch(`/api/receitas/${uuid_receita}/conciliar/`, authHeader)).data +export const getConciliarReceita = async ( + uuid_receita, + prestacao_conta_uuid +) => { + return ( + await api.patch( + `/api/receitas/${uuid_receita}/conciliar/?prestacao_conta_uuid=${prestacao_conta_uuid}`, + authHeader + ) + ).data } export const getDesconciliarReceita = async (uuid_receita) => { - return (await api.patch(`/api/receitas/${uuid_receita}/desconciliar/`, authHeader)).data + return ( + await api.patch(`/api/receitas/${uuid_receita}/desconciliar/`, authHeader) + ).data } -export const getConciliarDespesa = async (uuid_receita) => { - return (await api.patch(`/api/rateios-despesas/${uuid_receita}/conciliar/`, authHeader)).data +export const getConciliarDespesa = async ( + uuid_receita, + prestacao_conta_uuid +) => { + return ( + await api.patch( + `/api/rateios-despesas/${uuid_receita}/conciliar/?prestacao_conta_uuid=${prestacao_conta_uuid}`, + authHeader + ) + ).data } export const getDesconciliarDespesa = async (uuid_receita) => { - return (await api.patch(`/api/rateios-despesas/${uuid_receita}/desconciliar/`, authHeader)).data + return ( + await api.patch( + `/api/rateios-despesas/${uuid_receita}/desconciliar/`, + authHeader + ) + ).data +} + +export const getSalvarPrestacaoDeConta = async ( + uuidPrestacaoDeContas, + payload +) => { + return ( + await api.patch( + `/api/prestacoes-contas/${uuidPrestacaoDeContas}/salvar/`, + payload, + authHeader + ) + ).data } -export const getSalvarPrestacaoDeConta = async (uuidPrestacaoDeContas, payload) => { - return (await api.patch(`/api/prestacoes-contas/${uuidPrestacaoDeContas}/salvar/`,payload, authHeader)).data +export const getDataPreenchimentoAta = async (uuidPrestacaoDeContas) => { + return (await api.get(`/api/prestacoes-contas/${uuidPrestacaoDeContas}/ata/`,authHeader)).data } -export const getConcluirPrestacaoDeConta = async (uuidPrestacaoDeContas, payload) => { - return (await api.patch(`/api/prestacoes-contas/${uuidPrestacaoDeContas}/concluir/`,payload, authHeader)).data -} \ No newline at end of file +export const getIniciarAta = async (uuidPrestacaoDeContas) => { + return (await api.post(`/api/prestacoes-contas/${uuidPrestacaoDeContas}/iniciar-ata/`,authHeader)).data +} + +export const getInfoAta = async () => { + return (await api.get(`/api/prestacoes-contas/${localStorage.getItem("uuidPrestacaoConta")}/info-para-ata/`,authHeader)).data +} +export const getConcluirPrestacaoDeConta = async ( + uuidPrestacaoDeContas, + payload +) => { + return ( + await api.patch( + `/api/prestacoes-contas/${uuidPrestacaoDeContas}/concluir/`, + payload, + authHeader + ) + ).data +} diff --git a/src/services/RelacaoDeBens.service.js b/src/services/RelacaoDeBens.service.js new file mode 100644 index 000000000..f1bfe8291 --- /dev/null +++ b/src/services/RelacaoDeBens.service.js @@ -0,0 +1,50 @@ +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 previa = async (conta_associacao, periodo) => { + return api + .get(`/api/relacao-bens/previa/?conta-associacao=${conta_associacao}&periodo=${periodo}`, { + responseType: 'blob', + timeout: 30000, + }) + .then((response) => { + const url = window.URL.createObjectURL(new Blob([response.data])); + const link = document.createElement('a'); + link.href = url; + link.setAttribute('download', 'relacao-bens.xlsx'); + document.body.appendChild(link); + link.click(); + }).catch(error => { + return error.response; + }); +} + +export const documentoFinal = async (conta_associacao, periodo) => { + return api + .get(`/api/relacao-bens/documento-final/?conta-associacao=${conta_associacao}&periodo=${periodo}`, { + responseType: 'blob', + timeout: 30000, + }) + .then((response) => { + const url = window.URL.createObjectURL(new Blob([response.data])); + const link = document.createElement('a'); + link.href = url; + link.setAttribute('download', 'relacao-bens.xlsx'); + document.body.appendChild(link); + link.click(); + }).catch(error => { + return error.response; + }); +} + +export const getRelacaoBensInfo = async (conta_associacao, periodo) => { + return (await api.get(`/api/relacao-bens/relacao-bens-info/?conta-associacao=${conta_associacao}&periodo=${periodo}`, authHeader)).data +} \ No newline at end of file diff --git a/src/services/TabelaValoresPendentesPorAcao.service.js b/src/services/TabelaValoresPendentesPorAcao.service.js new file mode 100644 index 000000000..6644416dd --- /dev/null +++ b/src/services/TabelaValoresPendentesPorAcao.service.js @@ -0,0 +1,15 @@ +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 tabelaValoresPendentes = async (prestacaoContaUuid) => { + return (await api.get(`/api/prestacoes-contas/${prestacaoContaUuid}/tabela-valores-pendentes/`, authHeader)).data +} \ No newline at end of file diff --git a/src/services/auth.service.js b/src/services/auth.service.js index 309ea962d..601eaf11e 100644 --- a/src/services/auth.service.js +++ b/src/services/auth.service.js @@ -71,6 +71,8 @@ const logout = () => { localStorage.removeItem(ASSOCIACAO_NOME); localStorage.removeItem('periodoConta'); localStorage.removeItem('uuidPrestacaoConta'); + localStorage.removeItem('acaoLancamento'); + localStorage.removeItem('uuidAta'); //window.location.reload(); window.location.assign("/login") }; diff --git a/src/utils/Modais.js b/src/utils/Modais.js index 6e362f95a..fda79d90b 100644 --- a/src/utils/Modais.js +++ b/src/utils/Modais.js @@ -2,8 +2,11 @@ import React from "react"; import { ModalBootstrap, ModalBootstrapReverConciliacao, - ModalBootstrapSaldoInsuficiente + ModalBootstrapSaldoInsuficiente, + ModalBootstrapSaldoInsuficienteDaconta, + ModalBootstrapEditarAta } from "../componentes/ModalBootstrap"; +import {DatePickerField} from "../componentes/DatePickerField"; export const AvisoCapitalModal = (propriedades) => { return ( @@ -17,7 +20,7 @@ capital é a mesma utilizada no Sistema de Bens Patrimoniais Móveis (SBPM) da P primeiroBotaoTexto="Estou Ciente" /> ) -} +}; export const CancelarModal = (propriedades) => { return ( @@ -32,7 +35,7 @@ export const CancelarModal = (propriedades) => { segundoBotaoTexto="Fechar" /> ) -} +}; export const CancelarModalReceitas = (propriedades) => { return ( @@ -47,7 +50,7 @@ export const CancelarModalReceitas = (propriedades) => { segundoBotaoTexto="Fechar" /> ) -} +}; export const DeletarModal = (propriedades) => { return ( @@ -62,7 +65,7 @@ export const DeletarModal = (propriedades) => { segundoBotaoTexto="Fechar" /> ) -} +}; export const DeletarModalReceitas = (propriedades) => { return ( { segundoBotaoTexto="Fechar" /> ) -} +}; export const CancelarModalAssociacao = (propriedades) => { return ( @@ -91,7 +94,7 @@ export const CancelarModalAssociacao = (propriedades) => { segundoBotaoTexto="Fechar" /> ) -} +}; export const SalvarModalAssociacao = (propriedades) => { return ( @@ -104,7 +107,7 @@ export const SalvarModalAssociacao = (propriedades) => { primeiroBotaoTexto="OK" /> ) -} +}; export const RedirectModalTabelaLancamentos = (propriedades) => { return ( @@ -121,7 +124,7 @@ export const RedirectModalTabelaLancamentos = (propriedades) => { segundoBotaoCss="success" /> ) -} +}; export const CancelarPrestacaoDeContas = (propriedades) => { @@ -137,7 +140,7 @@ export const CancelarPrestacaoDeContas = (propriedades) => { segundoBotaoTexto="Fechar" /> ) -} +}; export const SalvarPrestacaoDeContas = (propriedades) => { return ( @@ -152,7 +155,7 @@ export const SalvarPrestacaoDeContas = (propriedades) => { segundoBotaoTexto="Fechar" /> ) -} +}; export const ConcluirPrestacaoDeContas = (propriedades) => { return ( @@ -167,7 +170,7 @@ export const ConcluirPrestacaoDeContas = (propriedades) => { segundoBotaoTexto="Fechar" /> ) -} +}; export const ErroGeral = (propriedades) => { return ( @@ -180,7 +183,7 @@ export const ErroGeral = (propriedades) => { primeiroBotaoTexto="Fechar" /> ) -} +}; export const ReverConciliacao = (propriedades) => { const bodyTextarea = () => { @@ -196,13 +199,12 @@ export const ReverConciliacao = (propriedades) => { value={propriedades.textareaModalReverConciliacao} onChange={propriedades.handleChangeModalReverConciliacao} name="reabrir-periodo" - type='text' className="form-control" /> ) - } + }; return ( { /> ) -} +}; export const SaldoInsuficiente = (propriedades) => { @@ -237,17 +239,23 @@ export const SaldoInsuficiente = (propriedades) => { Aplicacao: {item.aplicacao}
  • - Saldo Disponível: {item.saldo_disponivel} + Saldo Disponível: {item.saldo_disponivel.toLocaleString('pt-BR', { + style: 'currency', + currency: 'BRL' + })}
  • - Total dos rateios: {item.total_rateios} + Total dos rateios: {item.total_rateios.toLocaleString('pt-BR', { + style: 'currency', + currency: 'BRL' + })}
  • ) } ) - } + }; return ( { segundoBotaoTexto="Fechar" /> ) -} +}; + +export const SaldoInsuficienteConta = (propriedades) => { + + const listaDeSaldosInsuficientes = () => { + + return ( + <> +

    Não há saldo disponível para a despesa cadastrada na conta selecionada. {propriedades.saldosInsuficientesDaConta.aceitar_lancamento ? "Deseja salvar assim mesmo?" : ""}

    + {propriedades.saldosInsuficientesDaConta.saldos_insuficientes && propriedades.saldosInsuficientesDaConta.saldos_insuficientes.length > 0 && propriedades.saldosInsuficientesDaConta.saldos_insuficientes.map((item, index) => +
      +
    • + Conta: {item.conta} +
    • +
    • + Saldo Disponível: {item.saldo_disponivel.toLocaleString('pt-BR', { + style: 'currency', + currency: 'BRL' + })} +
    • +
    • + Total dos rateios: {item.total_rateios.toLocaleString('pt-BR', { + style: 'currency', + currency: 'BRL' + })} +
    • +
    + ) + } + + ) + }; + return ( + + ) +}; export const PeriodoFechado = (propriedades) => { return ( @@ -273,4 +326,152 @@ export const PeriodoFechado = (propriedades) => { primeiroBotaoTexto="Fechar" /> ) -} +}; + +export const EditarAta = ({show, handleClose, onSubmitEditarAta, onChange, stateFormEditarAta, tabelas}) => { + const bodyTextarea = () => { + return ( +
    +
    + +
    + + + + + onChange(e.target.name, e.target.value)} + name="local_reuniao" + className="form-control" + /> + + + onChange(e.target.name, e.target.value)} + name="presidente_reuniao" + className="form-control" + /> + + + onChange(e.target.name, e.target.value)} + name="secretario_reuniao" + className="form-control" + /> + +
    + +
    + + + + + + + + onChange(e.target.name, e.target.value)} + name="cargo_presidente_reuniao" + className="form-control" + /> + + + onChange(e.target.name, e.target.value)} + name="cargo_secretaria_reuniao" + className="form-control" + /> + +
    + + +
    +
    + +

    Utilize esse campo para registrar possíveis dúvidas, discussões, esclarecimentos aparecidos durante a reunião

    +