ajuste nos filtros
This commit is contained in:
parent
dbd6642303
commit
3b9f58b48c
|
|
@ -65,6 +65,7 @@ export default function Teste() {
|
|||
codigoSubgrupo: '',
|
||||
codigoConta: '',
|
||||
});
|
||||
const [linhaSelecionada, setLinhaSelecionada] = useState<string | null>(null);
|
||||
|
||||
useEffect(() => {
|
||||
fetchData();
|
||||
|
|
@ -126,7 +127,7 @@ export default function Teste() {
|
|||
};
|
||||
|
||||
// Função para lidar com clique nas linhas
|
||||
const handleRowClick = (row: HierarchicalRow) => {
|
||||
const handleRowClick = (row: HierarchicalRow, mesSelecionado?: string) => {
|
||||
if (!data.length) return;
|
||||
|
||||
// Pegar todas as datas disponíveis para definir o período
|
||||
|
|
@ -142,9 +143,19 @@ export default function Teste() {
|
|||
row.subgrupo
|
||||
);
|
||||
|
||||
// Criar um identificador único para a linha
|
||||
const linhaId = `${row.type}-${row.grupo || ''}-${row.subgrupo || ''}-${
|
||||
row.centro_custo || ''
|
||||
}-${row.codigo_conta || ''}`;
|
||||
setLinhaSelecionada(linhaId);
|
||||
|
||||
// Se um mês específico foi selecionado, usar apenas esse mês
|
||||
const dataInicioFiltro = mesSelecionado || dataInicioStr;
|
||||
const dataFimFiltro = mesSelecionado || dataFimStr;
|
||||
|
||||
setAnaliticoFiltros({
|
||||
dataInicio: dataInicioStr,
|
||||
dataFim: dataFimStr,
|
||||
dataInicio: dataInicioFiltro,
|
||||
dataFim: dataFimFiltro,
|
||||
centroCusto: row.centro_custo || '',
|
||||
codigoGrupo,
|
||||
codigoSubgrupo,
|
||||
|
|
@ -430,17 +441,29 @@ export default function Teste() {
|
|||
const getRowStyle = (row: HierarchicalRow) => {
|
||||
const baseStyle = 'transition-colors hover:bg-muted/50';
|
||||
|
||||
// Criar identificador único para a linha
|
||||
const linhaId = `${row.type}-${row.grupo || ''}-${row.subgrupo || ''}-${
|
||||
row.centro_custo || ''
|
||||
}-${row.codigo_conta || ''}`;
|
||||
const isSelected = linhaSelecionada === linhaId;
|
||||
|
||||
let style = baseStyle;
|
||||
|
||||
if (isSelected) {
|
||||
style += ' bg-blue-100 border-l-4 border-blue-500 shadow-md';
|
||||
}
|
||||
|
||||
switch (row.type) {
|
||||
case 'grupo':
|
||||
return `${baseStyle} bg-primary/5 font-semibold`;
|
||||
return `${style} bg-primary/5 font-semibold`;
|
||||
case 'subgrupo':
|
||||
return `${baseStyle} bg-primary/10 font-medium`;
|
||||
return `${style} bg-primary/10 font-medium`;
|
||||
case 'centro_custo':
|
||||
return `${baseStyle} bg-secondary/30 font-medium`;
|
||||
return `${style} bg-secondary/30 font-medium`;
|
||||
case 'conta':
|
||||
return `${baseStyle} bg-muted/20`;
|
||||
return `${style} bg-muted/20`;
|
||||
default:
|
||||
return baseStyle;
|
||||
return style;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -607,14 +630,18 @@ export default function Teste() {
|
|||
{mesesDisponiveis.map((mes) => (
|
||||
<div
|
||||
key={mes}
|
||||
className="flex-1 min-w-[120px] max-w-[150px] text-right font-medium p-1 border-b px-1 text-xs"
|
||||
className="flex-1 min-w-[120px] max-w-[150px] text-right font-medium p-1 border-b px-1 text-xs cursor-pointer hover:bg-blue-50"
|
||||
onClick={() => handleRowClick(row, mes)}
|
||||
>
|
||||
{row.valoresPorMes && row.valoresPorMes[mes]
|
||||
? formatCurrency(row.valoresPorMes[mes])
|
||||
: '-'}
|
||||
</div>
|
||||
))}
|
||||
<div className="flex-1 min-w-[120px] max-w-[150px] text-right font-medium p-1 border-b px-1 text-xs">
|
||||
<div
|
||||
className="flex-1 min-w-[120px] max-w-[150px] text-right font-medium p-1 border-b px-1 text-xs cursor-pointer hover:bg-blue-50"
|
||||
onClick={() => handleRowClick(row)}
|
||||
>
|
||||
{formatCurrency(row.total!)}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -19,8 +19,8 @@ export async function GET(request: NextRequest) {
|
|||
);
|
||||
}
|
||||
|
||||
let whereConditions = [];
|
||||
let params = [dataInicio, dataFim];
|
||||
const whereConditions = [];
|
||||
const params = [dataInicio, dataFim];
|
||||
|
||||
if (centroCusto) {
|
||||
whereConditions.push(`ffa.codigo_centrocusto = $${params.length + 1}`);
|
||||
|
|
@ -52,32 +52,76 @@ export async function GET(request: NextRequest) {
|
|||
conditions.push(`ffa.codigo_centrocusto = '${centroCusto}'`);
|
||||
if (codigoConta) conditions.push(`ffa.codigo_conta = '${codigoConta}'`);
|
||||
|
||||
const whereClause =
|
||||
conditions.length > 0 ? `AND ${conditions.join(' AND ')}` : '';
|
||||
// Para grupo e subgrupo, vamos usar uma abordagem mais simples
|
||||
let whereClause = '';
|
||||
if (conditions.length > 0) {
|
||||
whereClause = `AND ${conditions.join(' AND ')}`;
|
||||
}
|
||||
|
||||
query = sql`
|
||||
SELECT
|
||||
ffa.codigo_fornecedor,
|
||||
ffa.nome_fornecedor,
|
||||
ffa.id,
|
||||
ffa.codfilial,
|
||||
ffa.recnum,
|
||||
ffa.data_competencia,
|
||||
ffa.data_vencimento,
|
||||
ffa.data_pagamento,
|
||||
ffa.data_caixa,
|
||||
ffa.codigo_conta,
|
||||
ffa.conta,
|
||||
ffa.codigo_centrocusto,
|
||||
ffa.valor,
|
||||
ffa.historico,
|
||||
ffa.historico2,
|
||||
ffa.created_at,
|
||||
ffa.updated_at
|
||||
FROM fato_financeiro_analitico AS ffa
|
||||
WHERE to_char(ffa.data_competencia, 'YYYY-MM') BETWEEN ${dataInicio} AND ${dataFim}
|
||||
${sql.raw(whereClause)}
|
||||
`;
|
||||
// Se temos filtros de grupo ou subgrupo, precisamos fazer join com a view
|
||||
if (codigoGrupo || codigoSubgrupo) {
|
||||
query = sql`
|
||||
SELECT
|
||||
ffa.codigo_fornecedor,
|
||||
ffa.nome_fornecedor,
|
||||
ffa.id,
|
||||
ffa.codfilial,
|
||||
ffa.recnum,
|
||||
ffa.data_competencia,
|
||||
ffa.data_vencimento,
|
||||
ffa.data_pagamento,
|
||||
ffa.data_caixa,
|
||||
ffa.codigo_conta,
|
||||
ffa.conta,
|
||||
ffa.codigo_centrocusto,
|
||||
ffa.valor,
|
||||
ffa.historico,
|
||||
ffa.historico2,
|
||||
ffa.created_at,
|
||||
ffa.updated_at
|
||||
FROM fato_financeiro_analitico AS ffa
|
||||
INNER JOIN public.view_dre_gerencial AS dre
|
||||
ON ffa.codigo_conta = dre.codigo_conta::text
|
||||
AND ffa.codigo_centrocusto = dre.centro_custo
|
||||
AND to_char(ffa.data_competencia, 'YYYY-MM') = to_char(dre.data_competencia, 'YYYY-MM')
|
||||
WHERE to_char(ffa.data_competencia, 'YYYY-MM') BETWEEN ${dataInicio} AND ${dataFim}
|
||||
${sql.raw(whereClause)}
|
||||
${
|
||||
codigoGrupo
|
||||
? sql`AND SUBSTRING(dre.grupo FROM '^\\s*(\\d+)\\s*\\.') = ${codigoGrupo}`
|
||||
: sql``
|
||||
}
|
||||
${
|
||||
codigoSubgrupo
|
||||
? sql`AND (SUBSTRING(dre.subgrupo FROM '^\\s*(\\d+(?:\\.\\d+)+)\\s*-') = ${codigoSubgrupo} OR dre.subgrupo ILIKE '%${codigoSubgrupo}%')`
|
||||
: sql``
|
||||
}
|
||||
`;
|
||||
} else {
|
||||
query = sql`
|
||||
SELECT
|
||||
ffa.codigo_fornecedor,
|
||||
ffa.nome_fornecedor,
|
||||
ffa.id,
|
||||
ffa.codfilial,
|
||||
ffa.recnum,
|
||||
ffa.data_competencia,
|
||||
ffa.data_vencimento,
|
||||
ffa.data_pagamento,
|
||||
ffa.data_caixa,
|
||||
ffa.codigo_conta,
|
||||
ffa.conta,
|
||||
ffa.codigo_centrocusto,
|
||||
ffa.valor,
|
||||
ffa.historico,
|
||||
ffa.historico2,
|
||||
ffa.created_at,
|
||||
ffa.updated_at
|
||||
FROM fato_financeiro_analitico AS ffa
|
||||
WHERE to_char(ffa.data_competencia, 'YYYY-MM') BETWEEN ${dataInicio} AND ${dataFim}
|
||||
${sql.raw(whereClause)}
|
||||
`;
|
||||
}
|
||||
} else {
|
||||
// Query sem filtros específicos
|
||||
query = sql`
|
||||
|
|
|
|||
Loading…
Reference in New Issue