diff --git a/src/controllers/relatorios-controller.js b/src/controllers/relatorios-controller.js index ee4cc3b6..d2527171 100644 --- a/src/controllers/relatorios-controller.js +++ b/src/controllers/relatorios-controller.js @@ -40,6 +40,8 @@ const { Estado, Pais, TomboFoto, + Variedade, + Subespecie, } = models; /// ////// Relatório de Inventário de Espécies ////////// @@ -291,7 +293,7 @@ export const obtemDadosDoRelatorioDeColetaIntervaloDeData = async (req, res, nex { [Op.between]: [ Sequelize.literal(`TO_DATE('${dataInicio.slice(0, 10)}', 'YYYY-MM-DD')`), - Sequelize.literal(`TO_DATE('${(dataFim || new Date().toISOString().slice(0, 10))}', 'YYYY-MM-DD')`), + Sequelize.literal(`TO_DATE('${(dataFim ? dataFim.slice(0, 10) : new Date().toISOString().slice(0, 10))}', 'YYYY-MM-DD')`), ], }, ), @@ -403,7 +405,7 @@ export const obtemDadosDoRelatorioDeColetaPorColetorEIntervaloDeData = async (re { [Op.between]: [ Sequelize.literal(`TO_DATE('${dataInicio.slice(0, 10)}', 'YYYY-MM-DD')`), - Sequelize.literal(`TO_DATE('${(dataFim || new Date().toISOString().slice(0, 10))}', 'YYYY-MM-DD')`), + Sequelize.literal(`TO_DATE('${(dataFim ? dataFim.slice(0, 10) : new Date().toISOString().slice(0, 10))}', 'YYYY-MM-DD')`), ], }, ), @@ -530,7 +532,7 @@ export const obtemDadosDoRelatorioDeLocalDeColeta = async (req, res, next) => { { [Op.between]: [ Sequelize.literal(`TO_DATE('${dataInicio.slice(0, 10)}', 'YYYY-MM-DD')`), - Sequelize.literal(`TO_DATE('${(dataFim || new Date().toISOString().slice(0, 10))}', 'YYYY-MM-DD')`), + Sequelize.literal(`TO_DATE('${(dataFim ? dataFim.slice(0, 10) : new Date().toISOString().slice(0, 10))}', 'YYYY-MM-DD')`), ], }, ), @@ -546,6 +548,8 @@ export const obtemDadosDoRelatorioDeLocalDeColeta = async (req, res, next) => { 'familia_id', 'especie_id', 'genero_id', + 'variedade_id', + 'sub_especie_id', 'nome_cientifico', 'data_coleta_ano', 'data_coleta_mes', @@ -576,6 +580,28 @@ export const obtemDadosDoRelatorioDeLocalDeColeta = async (req, res, next) => { }, ], }, + { + model: Variedade, + attributes: ['id', 'nome'], + include: [ + { + model: Autor, + attributes: ['id', 'nome'], + as: 'autor', + }, + ], + }, + { + model: Subespecie, + attributes: ['id', 'nome'], + include: [ + { + model: Autor, + attributes: ['id', 'nome'], + as: 'autor', + }, + ], + }, { model: LocalColeta, attributes: ['id', 'descricao'], @@ -748,7 +774,7 @@ export const obtemDadosDoRelatorioDeCodigoDeBarras = async (req, res, next) => { { [Op.between]: [ Sequelize.literal(`TO_DATE('${dataInicio.slice(0, 10)}', 'YYYY-MM-DD')`), - Sequelize.literal(`TO_DATE('${(dataFim || new Date().toISOString().slice(0, 10))}', 'YYYY-MM-DD')`), + Sequelize.literal(`TO_DATE('${(dataFim ? dataFim.slice(0, 10) : new Date().toISOString().slice(0, 10))}', 'YYYY-MM-DD')`), ], }, ), @@ -815,7 +841,7 @@ export const obtemDadosDoRelatorioDeQuantidade = async (req, res, next) => { { [Op.between]: [ Sequelize.literal(`TO_DATE('${dataInicio.slice(0, 10)}', 'YYYY-MM-DD')`), - Sequelize.literal(`TO_DATE('${(dataFim || new Date().toISOString().slice(0, 10))}', 'YYYY-MM-DD')`), + Sequelize.literal(`TO_DATE('${(dataFim ? dataFim.slice(0, 10) : new Date().toISOString().slice(0, 10))}', 'YYYY-MM-DD')`), ], }, ), diff --git a/src/helpers/formata-dados-relatorio.js b/src/helpers/formata-dados-relatorio.js index ed9e7e80..a43e04d9 100644 --- a/src/helpers/formata-dados-relatorio.js +++ b/src/helpers/formata-dados-relatorio.js @@ -246,13 +246,13 @@ export function agruparPorLocal(dados) { let quantidadeTotal = 0; dados.sort((a, b) => { - const familia = a?.familia?.nome.localeCompare(b?.familia?.nome); + const familia = (a?.familia?.nome || '').localeCompare(b?.familia?.nome || ''); if (familia !== 0) return familia; - const genero = a?.genero?.nome.localeCompare(b?.genero?.nome); + const genero = (a?.genero?.nome || '').localeCompare(b?.genero?.nome || ''); if (genero !== 0) return genero; - return a?.especy?.nome.localeCompare(b?.especy?.nome); + return (a?.especy?.nome || '').localeCompare(b?.especy?.nome || ''); }).forEach(entradaOriginal => { const locaisColetum = entradaOriginal.locais_coletum; const cidade = locaisColetum?.cidade; @@ -267,7 +267,8 @@ export function agruparPorLocal(dados) { ...entradaOriginal, latitude: entradaOriginal?.latitude || null, longitude: entradaOriginal?.longitude || null, - autor: entradaOriginal.especy?.autor?.nome || '', + variedade: entradaOriginal.variedade || null, + sub_especie: entradaOriginal.sub_especy || null, }; if (!agrupado[chave]) { diff --git a/src/reports/templates/LocaisColeta.tsx b/src/reports/templates/LocaisColeta.tsx index 7ed88c51..2f73ed82 100644 --- a/src/reports/templates/LocaisColeta.tsx +++ b/src/reports/templates/LocaisColeta.tsx @@ -8,6 +8,7 @@ interface Registro { data_coleta_dia: number; especy: { nome: string; + autor?: { nome: string } | null; genero: { nome: string; } @@ -21,9 +22,16 @@ interface Registro { genero: { nome: string; } + variedade?: { + nome: string; + autor?: { nome: string } | null; + } | null; + sub_especie?: { + nome: string; + autor?: { nome: string } | null; + } | null; latitude: number | null; longitude: number | null; - autor?: string; } interface LocaisColeta { @@ -103,6 +111,30 @@ function RelacaoLocaisColeta({ dados, total, textoFiltro, showCoord = false }: R }; } + const renderNomeCientifico = (item: Registro) => { + const { especy, genero } = item; + return ( + <> + {genero?.nome} {especy?.nome} + {especy?.autor?.nome && ` ${especy.autor.nome}`} + {item.sub_especie && ( + <> + {' subsp. '} + {item.sub_especie.nome} + {item.sub_especie.autor?.nome && ` ${item.sub_especie.autor.nome}`} + > + )} + {item.variedade && ( + <> + {' var. '} + {item.variedade.nome} + {item.variedade.autor?.nome && ` ${item.variedade.autor.nome}`} + > + )} + > + ); + } + const renderTable = (registros: Registro[]) => { return (
| Data Coleta | Família | -Espécie | - {/*Autor | */} +Nome Científico | {showCoord &&Latitude | } {showCoord &&Longitude | }Nº do Tombo | @@ -119,13 +150,13 @@ function RelacaoLocaisColeta({ dados, total, textoFiltro, showCoord = false }: R
|---|---|---|---|---|---|---|---|
| {criaData(item)} | {familia?.nome} | -{genero?.nome} {especy?.nome} {item.autor} |
+ {renderNomeCientifico(item)} | {showCoord &&{cordenadas.latitude} | } {showCoord &&{cordenadas.longitude} | }{item.hcf} |