ajuste nos filtros
This commit is contained in:
parent
dbd6642303
commit
3b9f58b48c
|
|
@ -65,6 +65,7 @@ export default function Teste() {
|
||||||
codigoSubgrupo: '',
|
codigoSubgrupo: '',
|
||||||
codigoConta: '',
|
codigoConta: '',
|
||||||
});
|
});
|
||||||
|
const [linhaSelecionada, setLinhaSelecionada] = useState<string | null>(null);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
fetchData();
|
fetchData();
|
||||||
|
|
@ -126,7 +127,7 @@ export default function Teste() {
|
||||||
};
|
};
|
||||||
|
|
||||||
// Função para lidar com clique nas linhas
|
// Função para lidar com clique nas linhas
|
||||||
const handleRowClick = (row: HierarchicalRow) => {
|
const handleRowClick = (row: HierarchicalRow, mesSelecionado?: string) => {
|
||||||
if (!data.length) return;
|
if (!data.length) return;
|
||||||
|
|
||||||
// Pegar todas as datas disponíveis para definir o período
|
// Pegar todas as datas disponíveis para definir o período
|
||||||
|
|
@ -142,9 +143,19 @@ export default function Teste() {
|
||||||
row.subgrupo
|
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({
|
setAnaliticoFiltros({
|
||||||
dataInicio: dataInicioStr,
|
dataInicio: dataInicioFiltro,
|
||||||
dataFim: dataFimStr,
|
dataFim: dataFimFiltro,
|
||||||
centroCusto: row.centro_custo || '',
|
centroCusto: row.centro_custo || '',
|
||||||
codigoGrupo,
|
codigoGrupo,
|
||||||
codigoSubgrupo,
|
codigoSubgrupo,
|
||||||
|
|
@ -430,17 +441,29 @@ export default function Teste() {
|
||||||
const getRowStyle = (row: HierarchicalRow) => {
|
const getRowStyle = (row: HierarchicalRow) => {
|
||||||
const baseStyle = 'transition-colors hover:bg-muted/50';
|
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) {
|
switch (row.type) {
|
||||||
case 'grupo':
|
case 'grupo':
|
||||||
return `${baseStyle} bg-primary/5 font-semibold`;
|
return `${style} bg-primary/5 font-semibold`;
|
||||||
case 'subgrupo':
|
case 'subgrupo':
|
||||||
return `${baseStyle} bg-primary/10 font-medium`;
|
return `${style} bg-primary/10 font-medium`;
|
||||||
case 'centro_custo':
|
case 'centro_custo':
|
||||||
return `${baseStyle} bg-secondary/30 font-medium`;
|
return `${style} bg-secondary/30 font-medium`;
|
||||||
case 'conta':
|
case 'conta':
|
||||||
return `${baseStyle} bg-muted/20`;
|
return `${style} bg-muted/20`;
|
||||||
default:
|
default:
|
||||||
return baseStyle;
|
return style;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -607,14 +630,18 @@ export default function Teste() {
|
||||||
{mesesDisponiveis.map((mes) => (
|
{mesesDisponiveis.map((mes) => (
|
||||||
<div
|
<div
|
||||||
key={mes}
|
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]
|
{row.valoresPorMes && row.valoresPorMes[mes]
|
||||||
? formatCurrency(row.valoresPorMes[mes])
|
? formatCurrency(row.valoresPorMes[mes])
|
||||||
: '-'}
|
: '-'}
|
||||||
</div>
|
</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!)}
|
{formatCurrency(row.total!)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -19,8 +19,8 @@ export async function GET(request: NextRequest) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
let whereConditions = [];
|
const whereConditions = [];
|
||||||
let params = [dataInicio, dataFim];
|
const params = [dataInicio, dataFim];
|
||||||
|
|
||||||
if (centroCusto) {
|
if (centroCusto) {
|
||||||
whereConditions.push(`ffa.codigo_centrocusto = $${params.length + 1}`);
|
whereConditions.push(`ffa.codigo_centrocusto = $${params.length + 1}`);
|
||||||
|
|
@ -52,9 +52,52 @@ export async function GET(request: NextRequest) {
|
||||||
conditions.push(`ffa.codigo_centrocusto = '${centroCusto}'`);
|
conditions.push(`ffa.codigo_centrocusto = '${centroCusto}'`);
|
||||||
if (codigoConta) conditions.push(`ffa.codigo_conta = '${codigoConta}'`);
|
if (codigoConta) conditions.push(`ffa.codigo_conta = '${codigoConta}'`);
|
||||||
|
|
||||||
const whereClause =
|
// Para grupo e subgrupo, vamos usar uma abordagem mais simples
|
||||||
conditions.length > 0 ? `AND ${conditions.join(' AND ')}` : '';
|
let whereClause = '';
|
||||||
|
if (conditions.length > 0) {
|
||||||
|
whereClause = `AND ${conditions.join(' AND ')}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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`
|
query = sql`
|
||||||
SELECT
|
SELECT
|
||||||
ffa.codigo_fornecedor,
|
ffa.codigo_fornecedor,
|
||||||
|
|
@ -78,6 +121,7 @@ export async function GET(request: NextRequest) {
|
||||||
WHERE to_char(ffa.data_competencia, 'YYYY-MM') BETWEEN ${dataInicio} AND ${dataFim}
|
WHERE to_char(ffa.data_competencia, 'YYYY-MM') BETWEEN ${dataInicio} AND ${dataFim}
|
||||||
${sql.raw(whereClause)}
|
${sql.raw(whereClause)}
|
||||||
`;
|
`;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// Query sem filtros específicos
|
// Query sem filtros específicos
|
||||||
query = sql`
|
query = sql`
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue