From b7d12e7e75a664ad3efcaf5878c79b2d00ebbe9b Mon Sep 17 00:00:00 2001 From: Moran Date: Mon, 2 Mar 2026 19:35:15 -0300 Subject: [PATCH 1/4] =?UTF-8?q?Fix/=20Ap=C3=B3s=20tirar=20a=20coluna=20de?= =?UTF-8?q?=20complemento=20da=20tabela=20de=20locais=5Fcoleta=20foi=20nec?= =?UTF-8?q?essario=20ajustar=20as=20logicas=20para=20nao=20mais=20consider?= =?UTF-8?q?ar=20o=20complemento?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/locais-coleta-controller.js | 4 ++-- src/controllers/relatorios-controller.js | 4 ++-- src/helpers/formata-dados-relatorio.js | 4 +--- src/models/LocalColeta.js | 5 +---- src/validators/localColeta-cadastro.js | 6 +----- src/views/ficha-tombo.ejs | 4 +--- 6 files changed, 8 insertions(+), 19 deletions(-) diff --git a/src/controllers/locais-coleta-controller.js b/src/controllers/locais-coleta-controller.js index 9c000201..7ca28e0e 100644 --- a/src/controllers/locais-coleta-controller.js +++ b/src/controllers/locais-coleta-controller.js @@ -208,7 +208,7 @@ export const buscarFasesSucessionais = (request, response, next) => { export const cadastrarLocalColeta = async (request, response, next) => { try { - const dados = pick(request.body, ['descricao', 'complemento', 'cidade_id', 'fase_sucessional_id']); + const dados = pick(request.body, ['descricao', 'cidade_id', 'fase_sucessional_id']); const localColeta = await LocalColeta.create(dados); response.status(201).json(localColeta); } catch (error) { @@ -321,7 +321,7 @@ export const buscarLocalColetaPorId = async (request, response, next) => { export const atualizarLocalColeta = async (request, response, next) => { try { const { id } = request.params; - const dados = pick(request.body, ['descricao', 'complemento', 'cidade_id', 'fase_sucessional_id']); + const dados = pick(request.body, ['descricao', 'cidade_id', 'fase_sucessional_id']); const [updated] = await LocalColeta.update(dados, { where: { id }, }); diff --git a/src/controllers/relatorios-controller.js b/src/controllers/relatorios-controller.js index c019c380..ee4cc3b6 100644 --- a/src/controllers/relatorios-controller.js +++ b/src/controllers/relatorios-controller.js @@ -213,7 +213,7 @@ export const obtemDadosDoRelatorioDeColetaPorLocalEIntervaloDeData = async (req, }, { model: LocalColeta, - attributes: ['id', 'descricao', 'complemento'], + attributes: ['id', 'descricao'], where: whereLocal, required: true, }, @@ -578,7 +578,7 @@ export const obtemDadosDoRelatorioDeLocalDeColeta = async (req, res, next) => { }, { model: LocalColeta, - attributes: ['id', 'descricao', 'complemento'], + attributes: ['id', 'descricao'], where: whereLocal, required: true, include: { diff --git a/src/helpers/formata-dados-relatorio.js b/src/helpers/formata-dados-relatorio.js index 5a011564..da688bf0 100644 --- a/src/helpers/formata-dados-relatorio.js +++ b/src/helpers/formata-dados-relatorio.js @@ -58,9 +58,7 @@ const defineNomeCientifico = dado => { export const formatarDadosParaRelatorioDeColetaPorLocalEIntervaloDeData = dados => { const romanos = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII']; const dadosFormatados = dados.map(dado => ({ - local: dado.locais_coletum?.complemento - ? `${dado.locais_coletum.descricao} ${dado.locais_coletum.complemento}` - : dado.locais_coletum?.descricao, + local: dado.locais_coletum?.descricao, data: `${String(dado.data_coleta_dia).padStart(2, '0')}/${romanos[dado.data_coleta_mes - 1]}/${dado.data_coleta_ano}`, tombo: dado?.hcf, numeroColeta: dado.numero_coleta || '-', diff --git a/src/models/LocalColeta.js b/src/models/LocalColeta.js index 62c7589a..d9652c44 100644 --- a/src/models/LocalColeta.js +++ b/src/models/LocalColeta.js @@ -35,10 +35,7 @@ export default (Sequelize, DataTypes) => { type: DataTypes.TEXT, allowNull: true, }, - complemento: { - type: DataTypes.TEXT, - allowNull: true, - }, + cidade_id: { type: DataTypes.INTEGER, allowNull: true, diff --git a/src/validators/localColeta-cadastro.js b/src/validators/localColeta-cadastro.js index 6f1c8530..c88a8a33 100644 --- a/src/validators/localColeta-cadastro.js +++ b/src/validators/localColeta-cadastro.js @@ -5,11 +5,7 @@ export default { notEmpty: true, errorMessage: 'Descrição é obrigatória.', }, - complemento: { - in: ['body'], - isString: true, - optional: true, - }, + cidade_id: { in: ['body'], isInt: true, diff --git a/src/views/ficha-tombo.ejs b/src/views/ficha-tombo.ejs index 28615bcd..4b7bcb95 100644 --- a/src/views/ficha-tombo.ejs +++ b/src/views/ficha-tombo.ejs @@ -213,9 +213,7 @@
Local de Coleta: - <% if (localColeta && localColeta.complemento) { %> - <%- localColeta.complemento %> - <% } %> + <% if (localColeta && localColeta.descricao) { %> <%- localColeta.descricao %> <% } %> From f348531fd65b3b37189bdb5976b0448ff2993bb5 Mon Sep 17 00:00:00 2001 From: Moran Date: Wed, 4 Mar 2026 15:08:58 -0300 Subject: [PATCH 2/4] =?UTF-8?q?Convers=C3=A3o=20SMALLINT=20para=20Boolean?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/fichas-tombos-controller.js | 2 +- src/controllers/pendencias-controller.js | 12 ++++---- src/controllers/tombos-controller.js | 14 ++++----- ...60304120000_convert_smallint_to_boolean.ts | 29 +++++++++++++++++++ src/herbarium/herbariumdatabase.js | 2 +- src/models/Alteracao.js | 4 +-- 6 files changed, 46 insertions(+), 17 deletions(-) create mode 100644 src/database/migration/20260304120000_convert_smallint_to_boolean.ts diff --git a/src/controllers/fichas-tombos-controller.js b/src/controllers/fichas-tombos-controller.js index 6ecdb7d8..0addb97c 100644 --- a/src/controllers/fichas-tombos-controller.js +++ b/src/controllers/fichas-tombos-controller.js @@ -166,7 +166,7 @@ export default function fichaTomboController(request, response, next) { }; const where = { - identificacao: 1, + identificacao: true, status: 'APROVADO', tombo_hcf: tombo.hcf, }; diff --git a/src/controllers/pendencias-controller.js b/src/controllers/pendencias-controller.js index 520a3fa9..993ac8f6 100644 --- a/src/controllers/pendencias-controller.js +++ b/src/controllers/pendencias-controller.js @@ -42,7 +42,7 @@ export const listagem = (request, response, next) => { resultado: {}, }; let where = { - ativo: 1, + ativo: true, }; let whereUsuario = {}; if (status) { @@ -113,7 +113,7 @@ export const desativar = (request, response, next) => { const callback = transaction => Promise.resolve() .then(() => Alteracao.findOne({ where: { - ativo: 1, + ativo: true, id, }, transaction, @@ -123,7 +123,7 @@ export const desativar = (request, response, next) => { throw new BadRequestExeption(800); } return Alteracao.update({ - ativo: 0, + ativo: false, }, { where: { id, @@ -1738,7 +1738,7 @@ export async function visualizar(request, response, next) { try { const id = request.params.pendencia_id; const alteracao = await Alteracao.findOne({ - where: { ativo: 1, id }, + where: { ativo: true, id }, }); if (!alteracao) { @@ -2151,14 +2151,14 @@ export function aceitarPendencia(request, response, next) { status, }, { where: { - ativo: 1, + ativo: true, id, }, transaction, })) .then(() => Alteracao.findOne({ where: { - ativo: 1, + ativo: true, id, }, transaction, diff --git a/src/controllers/tombos-controller.js b/src/controllers/tombos-controller.js index 52293f2b..671ac3fc 100644 --- a/src/controllers/tombos-controller.js +++ b/src/controllers/tombos-controller.js @@ -397,8 +397,8 @@ export const cadastro = (request, response, next) => { usuario_id: request.usuario.id, status, tombo_json: JSON.stringify(tomboData), - ativo: 1, - identificacao: 1, + ativo: true, + identificacao: true, }; tomboCriado = tombo; @@ -486,8 +486,8 @@ function alteracaoIdentificador(request, transaction) { usuario_id: request.usuario.id, status: 'ESPERANDO', tombo_json: JSON.stringify(update), - ativo: 1, - identificacao: 1, + ativo: true, + identificacao: true, }, { transaction })) .then(alteracaoIdent => { if (request.usuario.tipo_usuario_id === 3) { @@ -612,8 +612,8 @@ function alteracaoCuradorouOperador(request, response, transaction) { usuario_id: request.usuario.id, status: 'ESPERANDO', tombo_json: JSON.stringify(update), - ativo: 1, - identificacao: 1, + ativo: true, + identificacao: true, }, { transaction }) .then(alteracaoCriada => { if (request.usuario.tipo_usuario_id === 1) { @@ -1472,7 +1472,7 @@ export const obterTombo = async (request, response, next) => { where: { tombo_hcf: dadosTombo.hcf, status: 'APROVADO', - identificacao: 1, + identificacao: true, }, order: [['created_at', 'DESC']], }), diff --git a/src/database/migration/20260304120000_convert_smallint_to_boolean.ts b/src/database/migration/20260304120000_convert_smallint_to_boolean.ts new file mode 100644 index 00000000..c99cbd64 --- /dev/null +++ b/src/database/migration/20260304120000_convert_smallint_to_boolean.ts @@ -0,0 +1,29 @@ +import { Knex } from 'knex' + +export async function run(knex: Knex): Promise { + await knex.transaction(async trx => { + await trx.schema.alterTable('alteracoes', table => { + table.smallint('ativo_backup').nullable() + table.smallint('identificacao_backup').nullable() + }) + + await trx.raw('UPDATE alteracoes SET ativo_backup = ativo, identificacao_backup = identificacao') + + await trx.schema.alterTable('alteracoes', table => { + table.dropColumn('ativo') + table.dropColumn('identificacao') + }) + + await trx.schema.alterTable('alteracoes', table => { + table.boolean('ativo').nullable() + table.boolean('identificacao').nullable() + }) + + await trx.raw('UPDATE alteracoes SET ativo = (ativo_backup = 1), identificacao = (identificacao_backup = 1)') + + await trx.schema.alterTable('alteracoes', table => { + table.dropColumn('ativo_backup') + table.dropColumn('identificacao_backup') + }) + }) +} diff --git a/src/herbarium/herbariumdatabase.js b/src/herbarium/herbariumdatabase.js index b87f3fd3..fe0a9855 100644 --- a/src/herbarium/herbariumdatabase.js +++ b/src/herbarium/herbariumdatabase.js @@ -796,7 +796,7 @@ export function insereAlteracaoSugerida(idUsuario, statusAlteracao, idTombo, tom status: statusAlteracao, tombo_hcf: idTombo, tombo_json: tomboJson, - identificacao: 1, + identificacao: true, data_identificacao_dia: diaIdentificacao, data_identificacao_mes: mesIdentificacao, data_identificacao_ano: anoIdentificacao, diff --git a/src/models/Alteracao.js b/src/models/Alteracao.js index dc9af655..a9ca6974 100644 --- a/src/models/Alteracao.js +++ b/src/models/Alteracao.js @@ -41,11 +41,11 @@ export default (Sequelize, DataTypes) => { allowNull: false, }, ativo: { - type: DataTypes.SMALLINT, + type: DataTypes.BOOLEAN, allowNull: true, }, identificacao: { - type: DataTypes.SMALLINT, + type: DataTypes.BOOLEAN, allowNull: true, }, }; From 54d6c0a80e6ebe3325933adb4acd78f5bcf3ff55 Mon Sep 17 00:00:00 2001 From: Moran Date: Mon, 2 Mar 2026 19:35:15 -0300 Subject: [PATCH 3/4] =?UTF-8?q?Fix/=20Ap=C3=B3s=20tirar=20a=20coluna=20de?= =?UTF-8?q?=20complemento=20da=20tabela=20de=20locais=5Fcoleta=20foi=20nec?= =?UTF-8?q?essario=20ajustar=20as=20logicas=20para=20nao=20mais=20consider?= =?UTF-8?q?ar=20o=20complemento?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/locais-coleta-controller.js | 4 ++-- src/controllers/relatorios-controller.js | 4 ++-- src/helpers/formata-dados-relatorio.js | 4 +--- src/models/LocalColeta.js | 5 +---- src/validators/localColeta-cadastro.js | 6 +----- src/views/ficha-tombo.ejs | 4 +--- 6 files changed, 8 insertions(+), 19 deletions(-) diff --git a/src/controllers/locais-coleta-controller.js b/src/controllers/locais-coleta-controller.js index 9c000201..7ca28e0e 100644 --- a/src/controllers/locais-coleta-controller.js +++ b/src/controllers/locais-coleta-controller.js @@ -208,7 +208,7 @@ export const buscarFasesSucessionais = (request, response, next) => { export const cadastrarLocalColeta = async (request, response, next) => { try { - const dados = pick(request.body, ['descricao', 'complemento', 'cidade_id', 'fase_sucessional_id']); + const dados = pick(request.body, ['descricao', 'cidade_id', 'fase_sucessional_id']); const localColeta = await LocalColeta.create(dados); response.status(201).json(localColeta); } catch (error) { @@ -321,7 +321,7 @@ export const buscarLocalColetaPorId = async (request, response, next) => { export const atualizarLocalColeta = async (request, response, next) => { try { const { id } = request.params; - const dados = pick(request.body, ['descricao', 'complemento', 'cidade_id', 'fase_sucessional_id']); + const dados = pick(request.body, ['descricao', 'cidade_id', 'fase_sucessional_id']); const [updated] = await LocalColeta.update(dados, { where: { id }, }); diff --git a/src/controllers/relatorios-controller.js b/src/controllers/relatorios-controller.js index c019c380..ee4cc3b6 100644 --- a/src/controllers/relatorios-controller.js +++ b/src/controllers/relatorios-controller.js @@ -213,7 +213,7 @@ export const obtemDadosDoRelatorioDeColetaPorLocalEIntervaloDeData = async (req, }, { model: LocalColeta, - attributes: ['id', 'descricao', 'complemento'], + attributes: ['id', 'descricao'], where: whereLocal, required: true, }, @@ -578,7 +578,7 @@ export const obtemDadosDoRelatorioDeLocalDeColeta = async (req, res, next) => { }, { model: LocalColeta, - attributes: ['id', 'descricao', 'complemento'], + attributes: ['id', 'descricao'], where: whereLocal, required: true, include: { diff --git a/src/helpers/formata-dados-relatorio.js b/src/helpers/formata-dados-relatorio.js index 5a011564..da688bf0 100644 --- a/src/helpers/formata-dados-relatorio.js +++ b/src/helpers/formata-dados-relatorio.js @@ -58,9 +58,7 @@ const defineNomeCientifico = dado => { export const formatarDadosParaRelatorioDeColetaPorLocalEIntervaloDeData = dados => { const romanos = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII']; const dadosFormatados = dados.map(dado => ({ - local: dado.locais_coletum?.complemento - ? `${dado.locais_coletum.descricao} ${dado.locais_coletum.complemento}` - : dado.locais_coletum?.descricao, + local: dado.locais_coletum?.descricao, data: `${String(dado.data_coleta_dia).padStart(2, '0')}/${romanos[dado.data_coleta_mes - 1]}/${dado.data_coleta_ano}`, tombo: dado?.hcf, numeroColeta: dado.numero_coleta || '-', diff --git a/src/models/LocalColeta.js b/src/models/LocalColeta.js index 62c7589a..d9652c44 100644 --- a/src/models/LocalColeta.js +++ b/src/models/LocalColeta.js @@ -35,10 +35,7 @@ export default (Sequelize, DataTypes) => { type: DataTypes.TEXT, allowNull: true, }, - complemento: { - type: DataTypes.TEXT, - allowNull: true, - }, + cidade_id: { type: DataTypes.INTEGER, allowNull: true, diff --git a/src/validators/localColeta-cadastro.js b/src/validators/localColeta-cadastro.js index 6f1c8530..c88a8a33 100644 --- a/src/validators/localColeta-cadastro.js +++ b/src/validators/localColeta-cadastro.js @@ -5,11 +5,7 @@ export default { notEmpty: true, errorMessage: 'Descrição é obrigatória.', }, - complemento: { - in: ['body'], - isString: true, - optional: true, - }, + cidade_id: { in: ['body'], isInt: true, diff --git a/src/views/ficha-tombo.ejs b/src/views/ficha-tombo.ejs index 28615bcd..4b7bcb95 100644 --- a/src/views/ficha-tombo.ejs +++ b/src/views/ficha-tombo.ejs @@ -213,9 +213,7 @@
Local de Coleta: - <% if (localColeta && localColeta.complemento) { %> - <%- localColeta.complemento %> - <% } %> + <% if (localColeta && localColeta.descricao) { %> <%- localColeta.descricao %> <% } %> From df6cb81916f9d74d05bd7fa90adec19328735c27 Mon Sep 17 00:00:00 2001 From: Moran Date: Wed, 4 Mar 2026 15:08:58 -0300 Subject: [PATCH 4/4] =?UTF-8?q?Convers=C3=A3o=20SMALLINT=20para=20Boolean?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/fichas-tombos-controller.js | 2 +- src/controllers/pendencias-controller.js | 12 ++++---- src/controllers/tombos-controller.js | 14 ++++----- ...60304120000_convert_smallint_to_boolean.ts | 29 +++++++++++++++++++ src/herbarium/herbariumdatabase.js | 2 +- src/models/Alteracao.js | 4 +-- 6 files changed, 46 insertions(+), 17 deletions(-) create mode 100644 src/database/migration/20260304120000_convert_smallint_to_boolean.ts diff --git a/src/controllers/fichas-tombos-controller.js b/src/controllers/fichas-tombos-controller.js index 6ecdb7d8..0addb97c 100644 --- a/src/controllers/fichas-tombos-controller.js +++ b/src/controllers/fichas-tombos-controller.js @@ -166,7 +166,7 @@ export default function fichaTomboController(request, response, next) { }; const where = { - identificacao: 1, + identificacao: true, status: 'APROVADO', tombo_hcf: tombo.hcf, }; diff --git a/src/controllers/pendencias-controller.js b/src/controllers/pendencias-controller.js index 520a3fa9..993ac8f6 100644 --- a/src/controllers/pendencias-controller.js +++ b/src/controllers/pendencias-controller.js @@ -42,7 +42,7 @@ export const listagem = (request, response, next) => { resultado: {}, }; let where = { - ativo: 1, + ativo: true, }; let whereUsuario = {}; if (status) { @@ -113,7 +113,7 @@ export const desativar = (request, response, next) => { const callback = transaction => Promise.resolve() .then(() => Alteracao.findOne({ where: { - ativo: 1, + ativo: true, id, }, transaction, @@ -123,7 +123,7 @@ export const desativar = (request, response, next) => { throw new BadRequestExeption(800); } return Alteracao.update({ - ativo: 0, + ativo: false, }, { where: { id, @@ -1738,7 +1738,7 @@ export async function visualizar(request, response, next) { try { const id = request.params.pendencia_id; const alteracao = await Alteracao.findOne({ - where: { ativo: 1, id }, + where: { ativo: true, id }, }); if (!alteracao) { @@ -2151,14 +2151,14 @@ export function aceitarPendencia(request, response, next) { status, }, { where: { - ativo: 1, + ativo: true, id, }, transaction, })) .then(() => Alteracao.findOne({ where: { - ativo: 1, + ativo: true, id, }, transaction, diff --git a/src/controllers/tombos-controller.js b/src/controllers/tombos-controller.js index 52293f2b..671ac3fc 100644 --- a/src/controllers/tombos-controller.js +++ b/src/controllers/tombos-controller.js @@ -397,8 +397,8 @@ export const cadastro = (request, response, next) => { usuario_id: request.usuario.id, status, tombo_json: JSON.stringify(tomboData), - ativo: 1, - identificacao: 1, + ativo: true, + identificacao: true, }; tomboCriado = tombo; @@ -486,8 +486,8 @@ function alteracaoIdentificador(request, transaction) { usuario_id: request.usuario.id, status: 'ESPERANDO', tombo_json: JSON.stringify(update), - ativo: 1, - identificacao: 1, + ativo: true, + identificacao: true, }, { transaction })) .then(alteracaoIdent => { if (request.usuario.tipo_usuario_id === 3) { @@ -612,8 +612,8 @@ function alteracaoCuradorouOperador(request, response, transaction) { usuario_id: request.usuario.id, status: 'ESPERANDO', tombo_json: JSON.stringify(update), - ativo: 1, - identificacao: 1, + ativo: true, + identificacao: true, }, { transaction }) .then(alteracaoCriada => { if (request.usuario.tipo_usuario_id === 1) { @@ -1472,7 +1472,7 @@ export const obterTombo = async (request, response, next) => { where: { tombo_hcf: dadosTombo.hcf, status: 'APROVADO', - identificacao: 1, + identificacao: true, }, order: [['created_at', 'DESC']], }), diff --git a/src/database/migration/20260304120000_convert_smallint_to_boolean.ts b/src/database/migration/20260304120000_convert_smallint_to_boolean.ts new file mode 100644 index 00000000..c99cbd64 --- /dev/null +++ b/src/database/migration/20260304120000_convert_smallint_to_boolean.ts @@ -0,0 +1,29 @@ +import { Knex } from 'knex' + +export async function run(knex: Knex): Promise { + await knex.transaction(async trx => { + await trx.schema.alterTable('alteracoes', table => { + table.smallint('ativo_backup').nullable() + table.smallint('identificacao_backup').nullable() + }) + + await trx.raw('UPDATE alteracoes SET ativo_backup = ativo, identificacao_backup = identificacao') + + await trx.schema.alterTable('alteracoes', table => { + table.dropColumn('ativo') + table.dropColumn('identificacao') + }) + + await trx.schema.alterTable('alteracoes', table => { + table.boolean('ativo').nullable() + table.boolean('identificacao').nullable() + }) + + await trx.raw('UPDATE alteracoes SET ativo = (ativo_backup = 1), identificacao = (identificacao_backup = 1)') + + await trx.schema.alterTable('alteracoes', table => { + table.dropColumn('ativo_backup') + table.dropColumn('identificacao_backup') + }) + }) +} diff --git a/src/herbarium/herbariumdatabase.js b/src/herbarium/herbariumdatabase.js index b87f3fd3..fe0a9855 100644 --- a/src/herbarium/herbariumdatabase.js +++ b/src/herbarium/herbariumdatabase.js @@ -796,7 +796,7 @@ export function insereAlteracaoSugerida(idUsuario, statusAlteracao, idTombo, tom status: statusAlteracao, tombo_hcf: idTombo, tombo_json: tomboJson, - identificacao: 1, + identificacao: true, data_identificacao_dia: diaIdentificacao, data_identificacao_mes: mesIdentificacao, data_identificacao_ano: anoIdentificacao, diff --git a/src/models/Alteracao.js b/src/models/Alteracao.js index dc9af655..a9ca6974 100644 --- a/src/models/Alteracao.js +++ b/src/models/Alteracao.js @@ -41,11 +41,11 @@ export default (Sequelize, DataTypes) => { allowNull: false, }, ativo: { - type: DataTypes.SMALLINT, + type: DataTypes.BOOLEAN, allowNull: true, }, identificacao: { - type: DataTypes.SMALLINT, + type: DataTypes.BOOLEAN, allowNull: true, }, };