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 a676d3da..77d980ce 100644 --- a/src/controllers/tombos-controller.js +++ b/src/controllers/tombos-controller.js @@ -22,6 +22,21 @@ 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 [anoStr, mesStr, diaStr] = 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); + } + return null; + } + return null; +} + export const cadastro = (request, response, next) => { const { principal, @@ -277,7 +292,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 +494,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 171eb141..f5e984f2 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,6 +35,12 @@ export default { }, isInt: true, }, + 'json.principal.data_tombo': { + in: 'body', + custom: { + options: validaDataTombo, + }, + }, 'json.principal.data_coleta': { in: 'body', custom: { diff --git a/src/validators/tombo-cadastro.js b/src/validators/tombo-cadastro.js index e8d4c3c0..945700cc 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,6 +24,12 @@ export default { }, isInt: true, }, + 'json.principal.data_tombo': { + in: 'body', + custom: { + options: validaDataTombo, + }, + }, 'json.principal.data_coleta': { in: 'body', custom: { 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; +}