Skip to content

Commit

Permalink
Merge pull request #2430 from prefeiturasp/release/9.6.0
Browse files Browse the repository at this point in the history
Release 9.6.0
  • Loading branch information
alcfernandes authored Jun 6, 2024
2 parents af66dda + 2b889fb commit 27815de
Show file tree
Hide file tree
Showing 14 changed files with 551 additions and 440 deletions.
747 changes: 386 additions & 361 deletions package-lock.json

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "ptrf",
"version": "9.5.0",
"version": "9.6.0",
"private": true,
"dependencies": {
"@dnd-kit/core": "^6.1.0",
Expand All @@ -10,8 +10,8 @@
"@fortawesome/react-fontawesome": "^0.2.0",
"@sentry/browser": "^6.19.7",
"@sentry/react": "^6.19.7",
"@tanstack/react-query": "^4.29.25",
"@tanstack/react-query-devtools": "^4.29.25",
"@tanstack/react-query": "^4.32.0",
"@tanstack/react-query-devtools": "^4.32.0",
"@testing-library/jest-dom": "^5.17.0",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
Expand Down
41 changes: 31 additions & 10 deletions src/componentes/Globais/ArquivosDeCarga/ModalFormArquivosDeCarga.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
import React, {memo} from "react";
import React, {memo, useEffect} from "react";
import {ModalFormBodyText} from "../ModalBootstrap";
import {Formik} from "formik";
import {YupSignupSchemaArquivosDeCarga} from "./YupSignupSchemaArquivosDeCarga";

const ModalFormArquivosDeCarga = ({show, stateFormModal, handleClose, handleSubmitModalForm, tabelaArquivos, statusTemplate, dadosDeOrigem, periodos, verificaSeArquivoRequerPeriodo}) => {
const ModalFormArquivosDeCarga = ({show, stateFormModal, handleClose, handleSubmitModalForm, tabelaArquivos, statusTemplate, dadosDeOrigem, periodos, arquivoRequerPeriodo, tiposDeContas, arquivoRequerTipoDeConta}) => {
const bodyTextarea = () => {
return (
<>
<Formik
initialValues={stateFormModal}
validationSchema={YupSignupSchemaArquivosDeCarga(verificaSeArquivoRequerPeriodo)}
validationSchema={YupSignupSchemaArquivosDeCarga(arquivoRequerPeriodo, arquivoRequerTipoDeConta, stateFormModal.operacao === 'edit')}
validateOnBlur={true}
enableReinitialize={true}
onSubmit={handleSubmitModalForm}
Expand All @@ -21,10 +21,13 @@ const ModalFormArquivosDeCarga = ({show, stateFormModal, handleClose, handleSubm
} = props;
return(
<form onSubmit={props.handleSubmit} >
<div className="mb-3" style={{ textAlign: 'right' }}>
<span>* Campos obrigatórios</span>
</div>
<div className='row'>
<div className='col'>
<div className="form-group">
<label htmlFor="identificador">Identificador</label>
<label htmlFor="identificador">Identificador *</label>
<input
type="text"
value={props.values.identificador}
Expand All @@ -33,15 +36,15 @@ const ModalFormArquivosDeCarga = ({show, stateFormModal, handleClose, handleSubm
className="form-control"
onChange={props.handleChange}
/>
{props.touched.identificador && props.errors.identificador && <span className="span_erro text-danger mt-1"> {props.errors.identificador} </span>}
{props.touched.identificador && props.errors.identificador && <small className="span_erro text-danger mt-1"> * {props.errors.identificador} </small>}
</div>
</div>
</div>

<div className='row'>
<div className='col'>
<div className="form-group">
<label className='mb-0' htmlFor="conteudo">Conteúdo</label>
<label className='mb-0' htmlFor="conteudo">Conteúdo *</label>
{props.values.nome_arquivo && props.values.operacao === 'edit' &&
<p className='mb-1'><small><strong>Atualmente: </strong>{props.values.nome_arquivo.split('/').pop()}</small></p>
}
Expand All @@ -55,11 +58,11 @@ const ModalFormArquivosDeCarga = ({show, stateFormModal, handleClose, handleSubm
setFieldValue("conteudo", event.currentTarget.files[0]);
}}
/>
{props.touched.conteudo && props.errors.conteudo && <span className="span_erro text-danger mt-1"> {props.errors.conteudo} </span>}
{props.touched.conteudo && props.errors.conteudo && <small className="span_erro text-danger mt-1"> * {props.errors.conteudo} </small>}
</div>
</div>
</div>
{verificaSeArquivoRequerPeriodo() && <div className='row'>
{arquivoRequerPeriodo && <div className='row'>
<div className='col'>
<label htmlFor="tipo_periodo">Período *</label>
<select
Expand All @@ -74,7 +77,25 @@ const ModalFormArquivosDeCarga = ({show, stateFormModal, handleClose, handleSubm
<option key={periodo.uuid} value={periodo.uuid}>{periodo.referencia}</option>
)}
</select>
{props.errors && props.errors.periodo && props.errors.periodo && <span className="span_erro text-danger mt-1"> {props.errors.periodo} </span>}
{props.errors && props.errors.periodo && props.errors.periodo && <small className="span_erro text-danger mt-1"> * {props.errors.periodo} </small>}
</div>
</div>}
{arquivoRequerTipoDeConta && <div className='row mt-3'>
<div className='col'>
<label htmlFor="tipo_de_conta">Tipo de conta *</label>
<select
value={props.values.tipo_de_conta && props.values.tipo_de_conta ? props.values.tipo_de_conta : ""}
onChange={props.handleChange}
name="tipo_de_conta"
id="tipo_de_conta"
className="form-control"
>
<option value=''>Selecione o tipo de conta</option>
{tiposDeContas && tiposDeContas.length > 0 && tiposDeContas.map((tipoDeConta) =>
<option key={tipoDeConta.uuid} value={tipoDeConta.uuid}>{tipoDeConta.nome}</option>
)}
</select>
{props.errors && props.errors.tipo_de_conta && props.errors.tipo_de_conta && <small className="span_erro text-danger mt-1"> * {props.errors.tipo_de_conta} </small>}
</div>
</div>}
<div className='row mt-3'>
Expand Down Expand Up @@ -155,7 +176,7 @@ const ModalFormArquivosDeCarga = ({show, stateFormModal, handleClose, handleSubm
return (
<ModalFormBodyText
show={show}
titulo={stateFormModal && stateFormModal && stateFormModal.operacao === 'edit' ? `Editar ${dadosDeOrigem.titulo}` : `Adicionar ${dadosDeOrigem.titulo}`}
titulo={stateFormModal && stateFormModal && stateFormModal.operacao === 'edit' ? `Editar ${dadosDeOrigem.titulo_modal}` : `Adicionar ${dadosDeOrigem.titulo_modal}`}
onHide={handleClose}
size='lg'
bodyText={bodyTextarea()}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import * as yup from "yup";

export const YupSignupSchemaArquivosDeCarga = (verificaSeArquivoRequerPeriodo) => {
export const YupSignupSchemaArquivosDeCarga = (verificaSeArquivoRequerPeriodo, arquivoRequerTipoDeConta, edicao) => {
return yup.object().shape({
identificador: yup.string().required("Identificador é obrigatório"),
valida_conteudo: yup.boolean(),
conteudo: yup.mixed()
conteudo: edicao === 'edit' ? '' : yup.mixed()
.when('valida_conteudo', {
is: true,
then: yup.mixed().required("Arquivo de Carga é obrigatório")
Expand All @@ -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()
}),
});
}
69 changes: 54 additions & 15 deletions src/componentes/Globais/ArquivosDeCarga/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down Expand Up @@ -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"},
Expand All @@ -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"},
Expand All @@ -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"},
Expand All @@ -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"},
Expand All @@ -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"},
Expand All @@ -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"},
Expand All @@ -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(() => {
Expand All @@ -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 {
Expand Down Expand Up @@ -217,27 +235,32 @@ const ArquivosDeCarga = () => {
const [stateFormModal, setStateFormModal] = useState(initialStateFormModal);
const [showModalConfirmDeleteArquivosDeCarga, setShowModalConfirmDeleteArquivosDeCarga] = useState(false);


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,
uuid: rowData.uuid,
id: rowData.id,
log: rowData.log,
operacao: 'edit',
periodo: rowData.periodo
}
)
periodo: rowData.periodo,
tipo_de_conta: rowData.tipo_de_conta,
};

const url = rowData.conteudo;
const nome_arquivo = url.split('/').pop();
stateFormModalValues.nome_arquivo = nome_arquivo;

setStateFormModal(stateFormModalValues);
}, [stateFormModal]);


const handleClickDeleteArquivoDeCarga = useCallback((uuid_arquivo_de_carga)=>{
setStateFormModal({
Expand Down Expand Up @@ -319,10 +342,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 {
Expand All @@ -336,6 +355,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);
Expand All @@ -362,9 +385,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");
Expand Down Expand Up @@ -412,7 +439,6 @@ const ArquivosDeCarga = () => {
}

const [periodos, setPeriodos] = useState([]);

const carregaPeriodos = async () => {
try {
let response = await getPeriodos();
Expand All @@ -422,8 +448,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 (
Expand Down Expand Up @@ -480,7 +517,9 @@ const ArquivosDeCarga = () => {
handleSubmitModalForm={handleSubmitModalForm}
dadosDeOrigem={dadosDeOrigem}
periodos={periodos}
verificaSeArquivoRequerPeriodo={verificaSeArquivoRequerPeriodo}
arquivoRequerPeriodo={arquivoRequerPeriodo}
tiposDeContas={tiposDeContas}
arquivoRequerTipoDeConta={arquivoRequerTipoDeConta}
/>
</section>
<section>
Expand Down
Loading

0 comments on commit 27815de

Please sign in to comment.