From 2bdf26766739a4d9319e68d81cdfe25cde9d0487 Mon Sep 17 00:00:00 2001 From: Matheus Coitinho Date: Tue, 2 Sep 2025 15:16:43 -0300 Subject: [PATCH 1/3] =?UTF-8?q?adiciona=20suporte=20para=20o=20campo=20dat?= =?UTF-8?q?a=5Ftombo=20nas=20opera=C3=A7=C3=B5es=20de=20cadastro=20e=20alt?= =?UTF-8?q?era=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/pendencias-controller.js | 4 ++++ src/controllers/tombos-controller.js | 19 ++++++++++++++++++- src/validators/tombo-alteracao.js | 5 +++++ src/validators/tombo-cadastro.js | 5 +++++ 4 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/controllers/pendencias-controller.js b/src/controllers/pendencias-controller.js index ae01e015..78f07a73 100644 --- a/src/controllers/pendencias-controller.js +++ b/src/controllers/pendencias-controller.js @@ -1135,6 +1135,10 @@ export const aprovarPendencia = async (alteracao, hcf, transaction) => { updateTombo.cor = alteracao.cor ? alteracao.cor.toUpperCase() : null; } + if(alteracao.data_tombo !== undefined){ + updateTombo.data_tombo = alteracao.data_tombo; + } + if (alteracao.data_coleta_dia !== undefined) { updateTombo.data_coleta_dia = alteracao.data_coleta_dia; } diff --git a/src/controllers/tombos-controller.js b/src/controllers/tombos-controller.js index d40af638..7149fd20 100644 --- a/src/controllers/tombos-controller.js +++ b/src/controllers/tombos-controller.js @@ -22,6 +22,19 @@ const { ColecaoAnexa, Especie, Herbario, Tombo, Alteracao, TomboIdentificador, ColetorComplementar, Sequelize: { Op }, } = models; +function parseDataTombo(valor) { + const partes = valor.split(/[/-]/).map(p => p.trim()); + if (partes.length >= 3) { + const [diaStr, mesStr, anoStr] = partes; + const dia = parseInt(diaStr, 10); + const mes = parseInt(mesStr, 10) - 1; + const ano = parseInt(anoStr, 10); + if (!Number.isNaN(dia) && !Number.isNaN(mes) && !Number.isNaN(ano)) { + return new Date(ano, mes, dia, 12, 0, 0, 0); + } + } +} + export const cadastro = (request, response, next) => { const { principal, @@ -277,7 +290,8 @@ export const cadastro = (request, response, next) => { local_coleta_id: localidade.local_coleta_id, cor: principal.cor, coletor_id: coletor, - }; + data_tombo: parseDataTombo(principal.data_tombo), + }; if (paisagem?.descricao) { jsonTombo.descricao = paisagem.descricao; @@ -478,6 +492,9 @@ function alteracaoCuradorouOperador(request, response, transaction) { const { cor } = body.principal || {}; if (cor !== undefined) update.cor = cor; + const dataTombo = body?.principal?.data_tombo; + if(dataTombo !== undefined) update.data_tombo = parseDataTombo(dataTombo); + const familiaId = body?.taxonomia?.familia_id; if (familiaId !== undefined) update.familia_id = familiaId; diff --git a/src/validators/tombo-alteracao.js b/src/validators/tombo-alteracao.js index 9b3085e1..ed7e4a7c 100644 --- a/src/validators/tombo-alteracao.js +++ b/src/validators/tombo-alteracao.js @@ -32,6 +32,11 @@ export default { isEmpty: false, isInt: true, }, + 'json.principal.data_tombo': { + in: 'body', + isString: true, + isEmpty: false, + }, 'json.principal.data_coleta': { in: 'body', custom: { diff --git a/src/validators/tombo-cadastro.js b/src/validators/tombo-cadastro.js index fafc4c1f..8ed59830 100644 --- a/src/validators/tombo-cadastro.js +++ b/src/validators/tombo-cadastro.js @@ -38,6 +38,11 @@ export default { isEmpty: false, isInt: true, }, + 'json.principal.data_tombo': { + in: 'body', + isString: true, + isEmpty: false, + }, 'json.principal.data_coleta': { in: 'body', custom: { From 3a4e796eb9c972ce911cd73309c32dcd8a38ba85 Mon Sep 17 00:00:00 2001 From: Matheus Coitinho Date: Tue, 2 Sep 2025 15:24:02 -0300 Subject: [PATCH 2/3] =?UTF-8?q?corrige=20fun=C3=A7=C3=A3o=20parseDataTombo?= =?UTF-8?q?=20para=20retornar=20null=20em=20caso=20de=20dados=20inv=C3=A1l?= =?UTF-8?q?idos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/tombos-controller.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/controllers/tombos-controller.js b/src/controllers/tombos-controller.js index 7149fd20..3c26d623 100644 --- a/src/controllers/tombos-controller.js +++ b/src/controllers/tombos-controller.js @@ -32,7 +32,9 @@ function parseDataTombo(valor) { if (!Number.isNaN(dia) && !Number.isNaN(mes) && !Number.isNaN(ano)) { return new Date(ano, mes, dia, 12, 0, 0, 0); } + return null; } + return null; } export const cadastro = (request, response, next) => { From 1c0cb3c6ff82f4522113962e4c762b7242a6bc1b Mon Sep 17 00:00:00 2001 From: Matheus Coitinho Date: Thu, 4 Sep 2025 20:19:52 -0300 Subject: [PATCH 3/3] =?UTF-8?q?adiciona=20valida=C3=A7=C3=A3o=20para=20o?= =?UTF-8?q?=20campo=20data=5Ftombo=20e=20corrige=20a=20fun=C3=A7=C3=A3o=20?= =?UTF-8?q?parseDataTombo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/tombos-controller.js | 4 ++-- src/validators/tombo-alteracao.js | 6 ++++-- src/validators/tombo-cadastro.js | 23 ++++------------------- src/validators/tombo-data-tombo.js | 20 ++++++++++++++++++++ 4 files changed, 30 insertions(+), 23 deletions(-) create mode 100644 src/validators/tombo-data-tombo.js diff --git a/src/controllers/tombos-controller.js b/src/controllers/tombos-controller.js index 3c26d623..2758a700 100644 --- a/src/controllers/tombos-controller.js +++ b/src/controllers/tombos-controller.js @@ -23,9 +23,9 @@ const { } = models; function parseDataTombo(valor) { - const partes = valor.split(/[/-]/).map(p => p.trim()); + const partes = valor.split(/[-]/).map(p => p.trim()); if (partes.length >= 3) { - const [diaStr, mesStr, anoStr] = partes; + const [anoStr, mesStr, diaStr] = partes; const dia = parseInt(diaStr, 10); const mes = parseInt(mesStr, 10) - 1; const ano = parseInt(anoStr, 10); diff --git a/src/validators/tombo-alteracao.js b/src/validators/tombo-alteracao.js index ed7e4a7c..5333871f 100644 --- a/src/validators/tombo-alteracao.js +++ b/src/validators/tombo-alteracao.js @@ -1,6 +1,7 @@ import validaColecoesAnexas from './tombo-colecoes-anexas'; import validaCor from './tombo-cor'; import validaData from './tombo-data'; +import validaDataTombo from './tombo-data-tombo'; const validaColetores = coletores => { if (!Array.isArray(coletores) || coletores.length < 1) { @@ -34,8 +35,9 @@ export default { }, 'json.principal.data_tombo': { in: 'body', - isString: true, - isEmpty: false, + custom: { + options: validaDataTombo, + }, }, 'json.principal.data_coleta': { in: 'body', diff --git a/src/validators/tombo-cadastro.js b/src/validators/tombo-cadastro.js index 8ed59830..cc22cb06 100644 --- a/src/validators/tombo-cadastro.js +++ b/src/validators/tombo-cadastro.js @@ -1,23 +1,7 @@ import validaColecoesAnexas from './tombo-colecoes-anexas'; import validaCor from './tombo-cor'; import validaData from './tombo-data'; - -// const validaColetores = coletores => { -// if (!Array.isArray(coletores)) { -// return false; -// } - -// if (coletores.length <= 0) { -// return false; -// } - -// for (let i = 0; i < coletores.length; i += 1) { -// if (!Number.isInteger(coletores[i])) { -// return false; -// } -// } -// return true; -// }; +import validaDataTombo from './tombo-data-tombo'; export default { 'json.principal.nome_popular': { @@ -40,8 +24,9 @@ export default { }, 'json.principal.data_tombo': { in: 'body', - isString: true, - isEmpty: false, + custom: { + options: validaDataTombo, + }, }, 'json.principal.data_coleta': { in: 'body', diff --git a/src/validators/tombo-data-tombo.js b/src/validators/tombo-data-tombo.js new file mode 100644 index 00000000..fa4d3bf4 --- /dev/null +++ b/src/validators/tombo-data-tombo.js @@ -0,0 +1,20 @@ +export default (data) => { + if (typeof data !== 'string') { + return false; + } + + const isoRegex = /^\d{4}-\d{2}-\d{2}$/; + if (!isoRegex.test(data)) { + return false; + } + + const [, mesStr, diaStr] = data.split('-'); + const mes = Number(mesStr); + const dia = Number(diaStr); + + if (mes < 1 || mes > 12) return false; + if (dia < 1 || dia > 31) return false; + + + return true; +}