From a733aa125cca48758c7335bd4f58156daa53878a Mon Sep 17 00:00:00 2001
From: Agostinho
Date: Fri, 10 Jan 2025 14:18:35 -0300
Subject: [PATCH 1/2] =?UTF-8?q?feature(124182):=20Inclus=C3=A3o=20de=20Par?=
=?UTF-8?q?ametriza=C3=A7=C3=B5es=20Tipos=20de=20Documentos?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Despesas/TiposDocumento/BtnAdd.js | 20 ++
.../Despesas/TiposDocumento/Filtros.js | 28 ++
.../TiposDocumento/ModalConfirmDelete.js | 19 ++
.../Despesas/TiposDocumento/ModalForm.js | 252 ++++++++++++++
.../TiposDocumento/ModalInfoNaoPodeExcluir.js | 16 +
.../ModalInfoUpdateNaoPermitido.js | 16 +
.../Despesas/TiposDocumento/Tabela.js | 23 ++
.../TiposDocumento/YupSignupSchemaTags.js | 5 +
.../Despesas/TiposDocumento/index.js | 312 ++++++++++++++++++
src/rotas/index.js | 7 +
src/services/sme/Parametrizacoes.service.js | 17 +
11 files changed, 715 insertions(+)
create mode 100644 src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/BtnAdd.js
create mode 100644 src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/Filtros.js
create mode 100644 src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/ModalConfirmDelete.js
create mode 100644 src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/ModalForm.js
create mode 100644 src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/ModalInfoNaoPodeExcluir.js
create mode 100644 src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/ModalInfoUpdateNaoPermitido.js
create mode 100644 src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/Tabela.js
create mode 100644 src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/YupSignupSchemaTags.js
create mode 100644 src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/index.js
diff --git a/src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/BtnAdd.js b/src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/BtnAdd.js
new file mode 100644
index 000000000..9a3a79bbb
--- /dev/null
+++ b/src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/BtnAdd.js
@@ -0,0 +1,20 @@
+import React from "react";
+import {RetornaSeTemPermissaoEdicaoPainelParametrizacoes} from "../../../Parametrizacoes/RetornaSeTemPermissaoEdicaoPainelParametrizacoes"
+
+export const BtnAdd = ({FontAwesomeIcon, faPlus, setShowModalForm, initialStateFormModal, setStateFormModal}) =>{
+ const TEM_PERMISSAO_EDICAO_PAINEL_PARAMETRIZACOES = RetornaSeTemPermissaoEdicaoPainelParametrizacoes()
+ return(
+
+
+
+ );
+};
diff --git a/src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/Filtros.js b/src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/Filtros.js
new file mode 100644
index 000000000..c9e4d835a
--- /dev/null
+++ b/src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/Filtros.js
@@ -0,0 +1,28 @@
+import React from "react";
+
+export const Filtros = ({stateFiltros, handleChangeFiltros, handleSubmitFiltros, limpaFiltros}) => {
+ return (
+ <>
+
+ >
+ );
+};
diff --git a/src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/ModalConfirmDelete.js b/src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/ModalConfirmDelete.js
new file mode 100644
index 000000000..1bc5365a6
--- /dev/null
+++ b/src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/ModalConfirmDelete.js
@@ -0,0 +1,19 @@
+import {ModalBootstrap} from "../../../../Globais/ModalBootstrap";
+import React from "react";
+
+export const ModalConfirmDelete = (props) => {
+ return (
+
+ )
+};
diff --git a/src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/ModalForm.js b/src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/ModalForm.js
new file mode 100644
index 000000000..69eb131ea
--- /dev/null
+++ b/src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/ModalForm.js
@@ -0,0 +1,252 @@
+import React, {memo} from "react";
+import {ModalFormBodyText} from "../../../../Globais/ModalBootstrap";
+import {Formik} from "formik";
+import ReactTooltip from "react-tooltip";
+import {FontAwesomeIcon} from "@fortawesome/react-fontawesome";
+import {faInfoCircle} from "@fortawesome/free-solid-svg-icons";
+import {YupSignupSchemaTags} from "./YupSignupSchemaTags";
+import {RetornaSeTemPermissaoEdicaoPainelParametrizacoes} from "../../../Parametrizacoes/RetornaSeTemPermissaoEdicaoPainelParametrizacoes"
+
+const ModalForm = ({show, stateFormModal, handleClose, handleSubmitModalForm, setShowModalConfirmDelete}) => {
+ const TEM_PERMISSAO_EDICAO_PAINEL_PARAMETRIZACOES = RetornaSeTemPermissaoEdicaoPainelParametrizacoes()
+ const bodyTextarea = () => {
+ return (
+ <>
+
+ {props => {
+ const { values, setFieldValue } = props;
+ return(
+
+ );
+ }}
+
+ >
+ )
+ };
+
+ return (
+
+ )
+};
+
+export default memo(ModalForm)
diff --git a/src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/ModalInfoNaoPodeExcluir.js b/src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/ModalInfoNaoPodeExcluir.js
new file mode 100644
index 000000000..52583562f
--- /dev/null
+++ b/src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/ModalInfoNaoPodeExcluir.js
@@ -0,0 +1,16 @@
+import {ModalBootstrap} from "../../../../Globais/ModalBootstrap";
+import React from "react";
+
+export const ModalInfoNaoPodeExcluir = (props) => {
+ return (
+
+ )
+};
diff --git a/src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/ModalInfoUpdateNaoPermitido.js b/src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/ModalInfoUpdateNaoPermitido.js
new file mode 100644
index 000000000..1a526595c
--- /dev/null
+++ b/src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/ModalInfoUpdateNaoPermitido.js
@@ -0,0 +1,16 @@
+import {ModalBootstrap} from "../../../../Globais/ModalBootstrap";
+import React from "react";
+
+export const ModalInfoUpdateNaoPermitido = (props) => {
+ return (
+
+ )
+};
diff --git a/src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/Tabela.js b/src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/Tabela.js
new file mode 100644
index 000000000..b8e8ab8a0
--- /dev/null
+++ b/src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/Tabela.js
@@ -0,0 +1,23 @@
+import React, {memo} from "react";
+import { DataTable } from 'primereact/datatable';
+import { Column } from 'primereact/column';
+
+const Tabela = ({rowsPerPage, lista, acoesTemplate})=>{
+ return(
+ rowsPerPage}
+ paginatorTemplate="PrevPageLink PageLinks NextPageLink"
+ >
+
+
+
+ );
+};
+export default memo(Tabela)
diff --git a/src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/YupSignupSchemaTags.js b/src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/YupSignupSchemaTags.js
new file mode 100644
index 000000000..de1d0c9af
--- /dev/null
+++ b/src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/YupSignupSchemaTags.js
@@ -0,0 +1,5 @@
+import * as yup from "yup";
+
+export const YupSignupSchemaTags = yup.object().shape({
+ nome: yup.string().required("Nome é obrigatório"),
+});
diff --git a/src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/index.js b/src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/index.js
new file mode 100644
index 000000000..fb81b1fdd
--- /dev/null
+++ b/src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/index.js
@@ -0,0 +1,312 @@
+import React, {useCallback, useEffect, useMemo, useState} from "react";
+import {PaginasContainer} from "../../../../../paginas/PaginasContainer";
+import ReactTooltip from "react-tooltip";
+import {
+ getTodosTiposDeDocumento,
+ getFiltrosTiposDeDocumento,
+ postCreateTipoDeDocumento,
+ patchAlterarTipoDeDocumento,
+ deleteTipoDeDocumento,
+} from "../../../../../services/sme/Parametrizacoes.service";
+import Tabela from "./Tabela";
+import {Filtros} from "./Filtros";
+import {FontAwesomeIcon} from "@fortawesome/react-fontawesome";
+import {faEdit, faPlus} from "@fortawesome/free-solid-svg-icons";
+import Img404 from "../../../../../assets/img/img-404.svg"
+import ModalForm from "./ModalForm";
+import {ModalInfoUpdateNaoPermitido} from "./ModalInfoUpdateNaoPermitido";
+import {ModalConfirmDelete} from "./ModalConfirmDelete";
+import {BtnAdd} from "./BtnAdd";
+import Loading from "../../../../../utils/Loading";
+import {ModalInfoNaoPodeExcluir} from "../../Estrutura/Acoes/ModalInfoNaoPodeExcluir";
+import {toastCustom} from "../../../../Globais/ToastCustom";
+import { MsgImgCentralizada } from "../../../../Globais/Mensagens/MsgImgCentralizada";
+export const TiposDocumento = ()=>{
+
+ const [listaDeTipos, setListaDeTipos] = useState([]);
+ const [loading, setLoading] = useState(true);
+
+ const carregaTodos = useCallback(async ()=>{
+ setLoading(true);
+ let todos = await getTodosTiposDeDocumento();
+ setListaDeTipos(todos);
+ setLoading(false);
+ }, []);
+
+ useEffect(()=>{
+ carregaTodos()
+ }, [carregaTodos]);
+
+ // Quando a state da lista sofrer alteração
+ const totalDeTipos = useMemo(() => (listaDeTipos||[]).length, [listaDeTipos]);
+
+ // Filtros
+ const initialStateFiltros = {
+ filtrar_por_nome: "",
+ };
+ const [stateFiltros, setStateFiltros] = useState(initialStateFiltros);
+
+ const handleChangeFiltros = useCallback((name, value) => {
+ setStateFiltros({
+ ...stateFiltros,
+ [name]: value
+ });
+ }, [stateFiltros]);
+
+ const handleSubmitFiltros = async () => {
+ setLoading(true);
+ let filtrados = await getFiltrosTiposDeDocumento(stateFiltros.filtrar_por_nome);
+ setListaDeTipos(filtrados);
+ setLoading(false);
+ };
+
+ const limpaFiltros = async () => {
+ setLoading(true);
+ setStateFiltros(initialStateFiltros);
+ await carregaTodos();
+ setLoading(false);
+ };
+
+ // Tabela
+ const rowsPerPage = 20;
+ const statusTemplate = (rowData) => {
+ return rowData.status && rowData.status === 'ATIVO' ? 'Ativo' : 'Inativo'
+ };
+ const apenasDigitoTemplate = (rowData) => {
+ // Apenas Dígitos
+ return rowData.apenas_digitos ? 'Sim': 'Não'
+ }
+
+ // Modal
+ const initialStateFormModal = {
+ nome: "",
+ uuid:"",
+ id:"",
+ apenas_digitos: false,
+ numero_documento_digitado: false,
+ pode_reter_imposto: false,
+ eh_documento_de_retencao_de_imposto: false,
+ documento_comprobatorio_de_despesa: false,
+ operacao: 'create',
+ };
+
+ const [showModalForm, setShowModalForm] = useState(false);
+ const [showModalInfoUpdateNaoPermitido, setShowModalInfoUpdateNaoPermitido] = useState(false);
+ const [showModalConfirmDelete, setShowModalConfirmDelete] = useState(false);
+ const [erroExclusaoNaoPermitida, setErroExclusaoNaoPermitida] = useState('');
+ const [stateFormModal, setStateFormModal] = useState(initialStateFormModal);
+ const [showModalInfoNaoPodeExcluir, setShowModalInfoNaoPodeExcluir] = useState(false);
+ const [mensagemModalInfoNaoPodeExcluir, setMensagemModalInfoNaoPodeExcluir] = useState("");
+ const handleEditFormModal = useCallback( async (rowData) =>{
+ console.log(stateFormModal, rowData)
+ setStateFormModal({
+ ...stateFormModal,
+ nome: rowData.nome,
+ uuid: rowData.uuid,
+ id: rowData.id,
+ apenas_digitos: rowData.apenas_digitos,
+ numero_documento_digitado: rowData.numero_documento_digitado,
+ pode_reter_imposto: rowData.pode_reter_imposto,
+ eh_documento_de_retencao_de_imposto: rowData.eh_documento_de_retencao_de_imposto,
+ documento_comprobatorio_de_despesa: rowData.documento_comprobatorio_de_despesa,
+ operacao: 'edit',
+ });
+ setShowModalForm(true)
+ }, [stateFormModal]);
+
+ const acoesTemplate = useCallback((rowData) =>{
+ return (
+
+
+
+ )
+ }, [handleEditFormModal]);
+
+ const handleSubmitModalForm = useCallback(async (values)=>{
+ let payload = {
+ ...values
+ };
+
+ if (values.operacao === 'create'){
+ try{
+ await postCreateTipoDeDocumento(payload);
+ toastCustom.ToastCustomSuccess('Inclusão de tipo de documento realizado com sucesso.', 'O tipo de documento foi adicionado ao sistema com sucesso.')
+ setShowModalForm(false);
+ await carregaTodos();
+ }catch (e) {
+ console.log('Erro ao criar Tipo de Documento ', e.response.data);
+ if (e.response.data && e.response.data.non_field_errors) {
+ setErroExclusaoNaoPermitida('Este tipo de documento já existe.');
+ setShowModalInfoUpdateNaoPermitido(true)
+ } else {
+ console.log(e.response)
+ setErroExclusaoNaoPermitida('Houve um erro ao tentar fazer essa atualização.');
+ setShowModalInfoUpdateNaoPermitido(true)
+ }
+ }
+ }else {
+ try {
+ await patchAlterarTipoDeDocumento(values.uuid, payload);
+ toastCustom.ToastCustomSuccess('Edição do tipo de documento realizado com sucesso.', 'O tipo de documento foi editado no sistema com sucesso.')
+ setShowModalForm(false);
+ await carregaTodos();
+ }catch (e) {
+ console.log('Erro ao alterar tipo de documento ', e.response.data);
+ if (e.response.data && e.response.data.non_field_errors) {
+ setErroExclusaoNaoPermitida('Este tipo de documento já existe.');
+ setShowModalInfoUpdateNaoPermitido(true);
+ } else {
+ setErroExclusaoNaoPermitida('Houve um erro ao tentar fazer essa atualização.');
+ setShowModalInfoUpdateNaoPermitido(true);
+ }
+ }
+ setLoading(false);
+ }
+ }, [carregaTodos]);
+
+ const onDeleteTrue = useCallback(async ()=>{
+ setLoading(true);
+ try {
+ setShowModalConfirmDelete(false);
+ await deleteTipoDeDocumento(stateFormModal.uuid);
+ toastCustom.ToastCustomSuccess('Remoção do tipo de documento efetuado com sucesso.', 'O tipo de documento foi removido do sistema com sucesso.')
+ setShowModalForm(false);
+ await carregaTodos();
+ }catch (e) {
+ if (e.response && e.response.data && e.response.data.mensagem){
+ setMensagemModalInfoNaoPodeExcluir(e.response.data.mensagem);
+ setShowModalInfoNaoPodeExcluir(true);
+ console.log(e.response.data.mensagem)
+ }else {
+ setMensagemModalInfoNaoPodeExcluir('Houve um erro ao tentar fazer essa atualização.');
+ setShowModalInfoNaoPodeExcluir(true);
+ }
+ }
+ setLoading(false);
+ }, [stateFormModal, carregaTodos]);
+
+ const handleCloseFormModal = useCallback(()=>{
+ setStateFormModal(initialStateFormModal);
+ setShowModalForm(false)
+ }, [initialStateFormModal]);
+
+ const handleCloseModalInfoUpdateNaoPermitido = useCallback(()=>{
+ setShowModalInfoUpdateNaoPermitido(false);
+ }, []);
+
+ const handleCloseInfoNaoPodeExcluir = () => {
+ setShowModalInfoNaoPodeExcluir(false);
+ setMensagemModalInfoNaoPodeExcluir("");
+ };
+
+ const handleCloseConfirmDelete = useCallback(()=>{
+ setShowModalConfirmDelete(false)
+ }, []);
+
+ return(
+
+ Tipo de documento
+ {loading ? (
+
+
+
+ ) :
+ <>
+
+
+ {
+ (listaDeTipos || []).length ?
+ <>
+
+
Exibindo {totalDeTipos} tipo(s) de documento
+
+ >
+ :
+
+ }
+
+
+
+ ${erroExclusaoNaoPermitida}
`}
+ primeiroBotaoTexto="Fechar"
+ primeiroBotaoCss="success"
+ />
+
+
+
+ >
+ }
+
+ )
+};
diff --git a/src/rotas/index.js b/src/rotas/index.js
index f1011963c..9ce836e21 100644
--- a/src/rotas/index.js
+++ b/src/rotas/index.js
@@ -73,6 +73,7 @@ import {TiposConta} from "../componentes/sme/Parametrizacoes/Estrutura/TiposCont
import {FiqueDeOlho} from "../componentes/sme/Parametrizacoes/EdicaoDeTextos/FiqueDeOlho";
import ArquivosDeCarga from "../componentes/Globais/ArquivosDeCarga";
import {EspecificacoesMateriaisServicos} from "../componentes/sme/Parametrizacoes/Despesas/EspecificacoesMateriaisServicos";
+import {TiposDocumento} from "../componentes/sme/Parametrizacoes/Despesas/TiposDocumento";
import {TiposDeCusteio} from "../componentes/sme/Parametrizacoes/Despesas/TiposDeCusteio"
import {Fornecedores} from "../componentes/sme/Parametrizacoes/Despesas/Fornecedores";
import {AnaliseDre} from "../componentes/escolas/AnaliseDre";
@@ -489,6 +490,12 @@ const routesConfig = [
component: TiposConta,
permissoes: ['access_painel_parametrizacoes', 'change_painel_parametrizacoes'],
},
+ {
+ exact: true,
+ path: "/parametro-tipos-documento",
+ component: TiposDocumento,
+ permissoes: ['access_painel_parametrizacoes', 'change_painel_parametrizacoes'],
+ },
{
exact: true,
path: "/parametro-mandato",
diff --git a/src/services/sme/Parametrizacoes.service.js b/src/services/sme/Parametrizacoes.service.js
index 507a2e990..0fc18da3c 100644
--- a/src/services/sme/Parametrizacoes.service.js
+++ b/src/services/sme/Parametrizacoes.service.js
@@ -346,6 +346,23 @@ export const deleteTipoDeCusteio = async (tag_uuid) => {
return (await api.delete(`/api/tipos-custeio/${tag_uuid}/`, authHeader))
};
+// Tipos de Documento
+export const getTodosTiposDeDocumento = async () => {
+ return (await api.get(`/api/tipos-documento/`, authHeader)).data
+};
+export const getFiltrosTiposDeDocumento = async (nome) => {
+ return (await api.get(`/api/tipos-documento/?nome=${nome}`, authHeader)).data
+};
+export const postCreateTipoDeDocumento = async (payload) => {
+ return (await api.post(`/api/tipos-documento/`, payload, authHeader)).data
+};
+export const patchAlterarTipoDeDocumento = async (tag_uuid, payload) => {
+ return (await api.patch(`/api/tipos-documento/${tag_uuid}/`, payload, authHeader)).data
+};
+export const deleteTipoDeDocumento = async (tag_uuid) => {
+ return (await api.delete(`/api/tipos-documento/${tag_uuid}/`, authHeader))
+};
+
// Fornecedores
export const getFornecedores = async () => {
return (await api.get(`/api/fornecedores/`, authHeader)).data
From 28cedb35ea2b71bf6909164a9372c21fe64db415 Mon Sep 17 00:00:00 2001
From: Agostinho
Date: Fri, 10 Jan 2025 14:21:06 -0300
Subject: [PATCH 2/2] =?UTF-8?q?feature(124182):=20Remo=C3=A7=C3=A3o=20de?=
=?UTF-8?q?=20console=20logs?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../sme/Parametrizacoes/Despesas/TiposDocumento/index.js | 1 -
1 file changed, 1 deletion(-)
diff --git a/src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/index.js b/src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/index.js
index fb81b1fdd..71272e579 100644
--- a/src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/index.js
+++ b/src/componentes/sme/Parametrizacoes/Despesas/TiposDocumento/index.js
@@ -98,7 +98,6 @@ export const TiposDocumento = ()=>{
const [showModalInfoNaoPodeExcluir, setShowModalInfoNaoPodeExcluir] = useState(false);
const [mensagemModalInfoNaoPodeExcluir, setMensagemModalInfoNaoPodeExcluir] = useState("");
const handleEditFormModal = useCallback( async (rowData) =>{
- console.log(stateFormModal, rowData)
setStateFormModal({
...stateFormModal,
nome: rowData.nome,