From f688274f576916ccd22fb01f15f53d56c8710291 Mon Sep 17 00:00:00 2001 From: Lucas Santos Rocha Date: Mon, 20 May 2024 14:50:10 -0300 Subject: [PATCH 1/7] feat(122650): Processo SEI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adiciona controle de permissão aos campos do formulário --- .../ProcessosSei/ProcessoSeiPrestacaoDeContaForm.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/componentes/dres/Associacoes/DadosDasAssociacoes/ProcessosSei/ProcessoSeiPrestacaoDeContaForm.js b/src/componentes/dres/Associacoes/DadosDasAssociacoes/ProcessosSei/ProcessoSeiPrestacaoDeContaForm.js index 7ef157ebc..3ba2ac5aa 100644 --- a/src/componentes/dres/Associacoes/DadosDasAssociacoes/ProcessosSei/ProcessoSeiPrestacaoDeContaForm.js +++ b/src/componentes/dres/Associacoes/DadosDasAssociacoes/ProcessosSei/ProcessoSeiPrestacaoDeContaForm.js @@ -73,6 +73,7 @@ export const ProcessoSeiPrestacaoDeContaForm = ({show, handleClose, onSubmit, ha className="form-control" placeholder="Número do processo SEI" value={props.values.numero_processo ? props.values.numero_processo : ""} + disabled={!visoesService.getPermissoes(['change_processo_sei'])} /> {props.errors.numero_processo && {props.errors.numero_processo}} @@ -96,7 +97,7 @@ export const ProcessoSeiPrestacaoDeContaForm = ({show, handleClose, onSubmit, ha className="form-control" placeholder="Ano do processo" value={props.values.ano ? props.values.ano : ""} - disabled={!!initialValues.uuid} + disabled={!!initialValues.uuid || !visoesService.getPermissoes(['change_processo_sei'])} /> {props.errors.ano && {props.errors.ano}} @@ -118,7 +119,7 @@ export const ProcessoSeiPrestacaoDeContaForm = ({show, handleClose, onSubmit, ha value={loadingPeriodos ? null : props.values.periodos} onChange={handleChangeSelectPeriodos} className='multiselect-lista-valores-reprogramados' - disabled={!props.values.ano || props.values.ano.replaceAll("_","").length < 4 || loadingPeriodos} + disabled={!props.values.ano || props.values.ano.replaceAll("_","").length < 4 || loadingPeriodos || !visoesService.getPermissoes(['change_processo_sei'])} > {periodosDisponiveis && periodosDisponiveis.length > 0 && periodosDisponiveis.map(item => ( From 69746bf84d05d3836aae2e09e3f41c12e1f04e80 Mon Sep 17 00:00:00 2001 From: ollyvergithub Date: Thu, 23 May 2024 08:07:58 -0300 Subject: [PATCH 2/7] =?UTF-8?q?feat(121888):=20Implementa=20despesas=20de?= =?UTF-8?q?=20per=C3=ADodos=20anteriores=20n=C3=A3o=20edit=C3=A1veis?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 2 +- .../CadastroDeDespesas/CadastroFormCapital.js | 4 +- .../CadastroFormDespesaImposto.js | 18 +++--- .../CadastroDeDespesas/CadastroFormFormik.js | 59 ++++++++++--------- src/context/Despesa/index.js | 12 ++++ 5 files changed, 54 insertions(+), 41 deletions(-) diff --git a/package-lock.json b/package-lock.json index 10859d05f..c869244f6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,7 +6,7 @@ "packages": { "": { "name": "ptrf", - "version": "9.4.0", + "version": "9.5.0", "dependencies": { "@dnd-kit/core": "^6.1.0", "@dnd-kit/sortable": "^8.0.0", diff --git a/src/componentes/escolas/Despesas/CadastroDeDespesas/CadastroFormCapital.js b/src/componentes/escolas/Despesas/CadastroDeDespesas/CadastroFormCapital.js index 7b1807ce1..7f012eae7 100644 --- a/src/componentes/escolas/Despesas/CadastroDeDespesas/CadastroFormCapital.js +++ b/src/componentes/escolas/Despesas/CadastroDeDespesas/CadastroFormCapital.js @@ -49,8 +49,7 @@ export const CadastroFormCapital = (propriedades) => { <>
- + - {props.touched.identificador && props.errors.identificador && {props.errors.identificador} } + {props.touched.identificador && props.errors.identificador && * {props.errors.identificador} }
@@ -41,7 +44,7 @@ const ModalFormArquivosDeCarga = ({show, stateFormModal, handleClose, handleSubm
- + {props.values.nome_arquivo && props.values.operacao === 'edit' &&

Atualmente: {props.values.nome_arquivo.split('/').pop()}

} @@ -55,11 +58,11 @@ const ModalFormArquivosDeCarga = ({show, stateFormModal, handleClose, handleSubm setFieldValue("conteudo", event.currentTarget.files[0]); }} /> - {props.touched.conteudo && props.errors.conteudo && {props.errors.conteudo} } + {props.touched.conteudo && props.errors.conteudo && * {props.errors.conteudo} }
- {verificaSeArquivoRequerPeriodo() &&
+ {arquivoRequerPeriodo &&
- {props.errors && props.errors.periodo && props.errors.periodo && {props.errors.periodo} } + {props.errors && props.errors.periodo && props.errors.periodo && * {props.errors.periodo} } +
+
} + {arquivoRequerTipoDeConta &&
+
+ + + {props.errors && props.errors.tipo_de_conta && props.errors.tipo_de_conta && * {props.errors.tipo_de_conta} }
}
@@ -155,7 +176,7 @@ const ModalFormArquivosDeCarga = ({show, stateFormModal, handleClose, handleSubm return ( { +export const YupSignupSchemaArquivosDeCarga = (verificaSeArquivoRequerPeriodo, arquivoRequerTipoDeConta) => { return yup.object().shape({ identificador: yup.string().required("Identificador é obrigatório"), valida_conteudo: yup.boolean(), @@ -29,6 +29,11 @@ export const YupSignupSchemaArquivosDeCarga = (verificaSeArquivoRequerPeriodo) = is: verificaSeArquivoRequerPeriodo, then: yup.string().required('Período é obrigatório'), otherwise: yup.string() - }) + }), + tipo_de_conta: yup.string().when('valida_conteudo', { + is: arquivoRequerTipoDeConta, + then: yup.string().required('Tipo de conta é obrigatório'), + otherwise: yup.string() + }), }); } diff --git a/src/componentes/Globais/ArquivosDeCarga/index.js b/src/componentes/Globais/ArquivosDeCarga/index.js index 4d4bc1d72..287499b2c 100644 --- a/src/componentes/Globais/ArquivosDeCarga/index.js +++ b/src/componentes/Globais/ArquivosDeCarga/index.js @@ -4,7 +4,7 @@ import "../../dres/Associacoes/associacoes.scss" import {Redirect, useParams} from 'react-router-dom' import {BotoesTopo} from "./BotoesTopo"; import {PaginasContainer} from "../../../paginas/PaginasContainer"; -import {getTabelaArquivosDeCarga, getArquivosDeCargaFiltros, postCreateArquivoDeCarga, patchAlterarArquivoDeCarga, deleteArquivoDeCarga, getDownloadArquivoDeCarga, postProcessarArquivoDeCarga, getDownloadModeloArquivoDeCarga} from "../../../services/sme/Parametrizacoes.service"; +import {getTabelaArquivosDeCarga, getArquivosDeCargaFiltros, postCreateArquivoDeCarga, patchAlterarArquivoDeCarga, deleteArquivoDeCarga, getDownloadArquivoDeCarga, postProcessarArquivoDeCarga, getDownloadModeloArquivoDeCarga, getTiposContas} from "../../../services/sme/Parametrizacoes.service"; import moment from "moment"; import TabelaArquivosDeCarga from "./TabelaArquivosDeCarga"; import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; @@ -34,6 +34,7 @@ const ArquivosDeCarga = () => { if (url_params.tipo_de_carga === 'CARGA_ASSOCIACOES') { obj = { titulo: 'Associações', + titulo_modal: 'associação', acesso_permitido: true, UrlsMenuInterno:[ {label: "Dados das associações", url: "parametro-associacoes"}, @@ -43,6 +44,7 @@ const ArquivosDeCarga = () => { }else if (url_params.tipo_de_carga === 'CARGA_USUARIOS' && url_params.versao === 'V2'){ obj = { titulo: 'Usuários', + titulo_modal: 'usuário', acesso_permitido: true, UrlsMenuInterno:[ {label: "Dados dos usuários", url: "gestao-de-usuarios-list"}, @@ -52,6 +54,7 @@ const ArquivosDeCarga = () => { }else if (url_params.tipo_de_carga === 'CARGA_USUARIOS'){ obj = { titulo: 'Usuários', + titulo_modal: 'usuário', acesso_permitido: true, UrlsMenuInterno:[ {label: "Dados dos perfis", url: "gestao-de-perfis"}, @@ -61,6 +64,7 @@ const ArquivosDeCarga = () => { }else if (url_params.tipo_de_carga === 'CARGA_MATERIAIS_SERVICOS') { obj = { titulo: 'Especificações de Materiais e Serviços', + titulo_modal: 'Especificações de Materiais e Serviços', acesso_permitido: true, UrlsMenuInterno:[ {label: "Dados especificações de Materiais e Serviços", url: "parametro-especificacoes"}, @@ -70,6 +74,7 @@ const ArquivosDeCarga = () => { }else if (url_params.tipo_de_carga === 'REPASSE_PREVISTO') { obj = { titulo: 'Repasses', + titulo_modal: 'repasse previsto', acesso_permitido: true, UrlsMenuInterno:[ {label: "Repasses", url: "parametro-repasse"}, @@ -80,6 +85,7 @@ const ArquivosDeCarga = () => { }else if (url_params.tipo_de_carga === 'REPASSE_REALIZADO') { obj = { titulo: 'Repasses', + titulo_modal: 'repasse realizado', acesso_permitido: true, UrlsMenuInterno:[ {label: "Repasses", url: "parametro-repasse"}, @@ -96,6 +102,9 @@ const ArquivosDeCarga = () => { const [arquivos, setArquivos] = useState([]); const [clickProcessar, setClickProcessar] = useState(false); + const [arquivoRequerPeriodo, setArquivoRequerPeriodo] = useState(false); + const [arquivoRequerTipoDeConta, setArquivoRequerTipoDeConta] = useState(false); + useEffect(() => { if (arquivos && arquivos.length > 0 && arquivos.filter(arquivo=> arquivo.status === 'PROCESSANDO' ).length > 0){ const timer = setInterval(() => { @@ -117,6 +126,15 @@ const ArquivosDeCarga = () => { carregaTabelaArquivos(); }, [carregaTabelaArquivos]); + useEffect(() => { + if(tabelaArquivos && tabelaArquivos.tipos_cargas) { + const requerPeriodo = tabelaArquivos.tipos_cargas.find(tipo => tipo.id === url_params.tipo_de_carga)?.requer_periodo; + setArquivoRequerPeriodo(requerPeriodo); + const requerTipoConta = tabelaArquivos.tipos_cargas.find(tipo => tipo.id === url_params.tipo_de_carga)?.requer_tipo_de_conta + setArquivoRequerTipoDeConta(requerTipoConta); + } + }, [url_params.tipo_de_carga, tabelaArquivos]) + const carregaArquivosPeloTipoDeCarga = useCallback(async () => { if (dadosDeOrigem.acesso_permitido) { try { @@ -217,27 +235,48 @@ const ArquivosDeCarga = () => { const [stateFormModal, setStateFormModal] = useState(initialStateFormModal); const [showModalConfirmDeleteArquivosDeCarga, setShowModalConfirmDeleteArquivosDeCarga] = useState(false); + const fetchFileFromUrl = async (url) => { + const response = await fetch(url); + if (!response.ok) { + throw new Error('Erro ao tentar resgatar arquivo.'); + } + const blob = await response.blob(); + return new File([blob], url.split('/').pop(), { type: blob.type }); + }; const handleClickEditarArquivos = useCallback(async (rowData) => { setShowModalForm(true); - setStateFormModal({ + + let stateFormModalValues = { ...stateFormModal, identificador: rowData.identificador, tipo_carga: rowData.tipo_carga, tipo_delimitador: rowData.tipo_delimitador, ultima_execucao: rowData.ultima_execucao ? moment(rowData.ultima_execucao).format('DD/MM/YYYY') : '-', status: rowData.status, - conteudo: '', - valida_conteudo: false, - nome_arquivo: rowData.conteudo, + valida_conteudo: true, uuid: rowData.uuid, id: rowData.id, log: rowData.log, operacao: 'edit', - periodo: rowData.periodo + periodo: rowData.periodo, + tipo_de_conta: rowData.tipo_de_conta, + }; + + try { + if (rowData.conteudo) { + const file = await fetchFileFromUrl(rowData.conteudo); + + stateFormModalValues.nome_arquivo = file.name; + stateFormModalValues.conteudo = file; } - ) + } catch (error) { + console.error('Error fetching file:', error); + } + + setStateFormModal(stateFormModalValues); }, [stateFormModal]); + const handleClickDeleteArquivoDeCarga = useCallback((uuid_arquivo_de_carga)=>{ setStateFormModal({ @@ -319,10 +358,6 @@ const ArquivosDeCarga = () => { ) }, [handleClickDeleteArquivoDeCarga, handleClickDownloadArquivoDeCarga, handleClickEditarArquivos, handleClickProcessarArquivoDeCarga]); - const verificaSeArquivoRequerPeriodo = () => { - return tabelaArquivos.tipos_cargas.find(tipo => tipo.id === url_params.tipo_de_carga)?.requer_periodo; - } - const handleSubmitModalForm = useCallback(async (values) => { if (values.operacao === 'create'){ try { @@ -336,6 +371,10 @@ const ArquivosDeCarga = () => { if(url_params.tipo_de_carga === 'REPASSE_PREVISTO') { payload.periodo = values.periodo; } + if(url_params.tipo_de_carga === 'REPASSE_PREVISTO') { + payload.tipo_de_conta = values.tipo_de_conta; + } + await postCreateArquivoDeCarga(payload); console.log("Arquivo de carga criado com sucesso"); setShowModalForm(false); @@ -362,9 +401,13 @@ const ArquivosDeCarga = () => { 'tipo_delimitador': values.tipo_delimitador, }; } - if(verificaSeArquivoRequerPeriodo()) { + if(url_params.tipo_de_carga === 'REPASSE_PREVISTO') { payload.periodo = values.periodo; }; + if(url_params.tipo_de_carga === 'REPASSE_PREVISTO') { + payload.tipo_de_conta = values.tipo_de_conta; + }; + try { await patchAlterarArquivoDeCarga(values.uuid, payload); console.log("Arquivo de carga alterado com sucesso"); @@ -412,7 +455,6 @@ const ArquivosDeCarga = () => { } const [periodos, setPeriodos] = useState([]); - const carregaPeriodos = async () => { try { let response = await getPeriodos(); @@ -422,8 +464,19 @@ const ArquivosDeCarga = () => { } } + const [tiposDeContas, setTiposDeContas] = useState([]); + const carregaTiposDeContas = async () => { + try { + let response = await getTiposContas(); + setTiposDeContas(response); + } catch (error) { + console.log("Erro ao tentar resgatar tipos de conta: ", error) + } + } + useEffect(() => { carregaPeriodos(); + carregaTiposDeContas(); }, []); return ( @@ -480,7 +533,9 @@ const ArquivosDeCarga = () => { handleSubmitModalForm={handleSubmitModalForm} dadosDeOrigem={dadosDeOrigem} periodos={periodos} - verificaSeArquivoRequerPeriodo={verificaSeArquivoRequerPeriodo} + arquivoRequerPeriodo={arquivoRequerPeriodo} + tiposDeContas={tiposDeContas} + arquivoRequerTipoDeConta={arquivoRequerTipoDeConta} />
diff --git a/src/componentes/sme/Parametrizacoes/Receitas/ParametrizacoesRepasses/components/Lista.js b/src/componentes/sme/Parametrizacoes/Receitas/ParametrizacoesRepasses/components/Lista.js index 3679dd98b..3315f9ceb 100644 --- a/src/componentes/sme/Parametrizacoes/Receitas/ParametrizacoesRepasses/components/Lista.js +++ b/src/componentes/sme/Parametrizacoes/Receitas/ParametrizacoesRepasses/components/Lista.js @@ -166,7 +166,7 @@ export const Lista = () => { return "Realizado" } else if(rowData.status === 'PENDENTE'){ - return "Pendente" + return "Previsto" } } @@ -202,7 +202,7 @@ export const Lista = () => { diff --git a/src/componentes/sme/Parametrizacoes/Receitas/ParametrizacoesRepasses/components/ModalForm.js b/src/componentes/sme/Parametrizacoes/Receitas/ParametrizacoesRepasses/components/ModalForm.js index 94c19e4a9..2bb6b7834 100644 --- a/src/componentes/sme/Parametrizacoes/Receitas/ParametrizacoesRepasses/components/ModalForm.js +++ b/src/componentes/sme/Parametrizacoes/Receitas/ParametrizacoesRepasses/components/ModalForm.js @@ -203,9 +203,9 @@ export const ModalForm = ({handleSubmitFormModal, todasAsAssociacoesAutoComplete
- +