Merge pull request #61 from JurunenseDevInterno/feat-dre-filial-analitico
hotfix: Correção de travamento
This commit is contained in:
commit
b5ffdd6fcc
|
|
@ -602,12 +602,8 @@ export default function Teste() {
|
||||||
const calcularValoresPorMesPorFilial = React.useCallback((items: DREItem[]): Record<string, Record<string, number>> => {
|
const calcularValoresPorMesPorFilial = React.useCallback((items: DREItem[]): Record<string, Record<string, number>> => {
|
||||||
const valoresPorMesPorFilial: Record<string, Record<string, number>> = {};
|
const valoresPorMesPorFilial: Record<string, Record<string, number>> = {};
|
||||||
|
|
||||||
// Usar filiais selecionadas se houver filtros aplicados, senão usar todas as opções disponíveis
|
// Extrair filiais únicas dos próprios items para evitar dependência de arrays externos
|
||||||
const filiaisDisponiveis = (filtrosAplicados && filiaisSelecionadas.length > 0)
|
const filiaisDisponiveis = [...new Set(items.map(item => item.filial || item.codfilial).filter(Boolean))] as string[];
|
||||||
? filiaisSelecionadas
|
|
||||||
: (opcoesFiliais.length > 0
|
|
||||||
? opcoesFiliais
|
|
||||||
: [...new Set(items.map(item => item.filial || item.codfilial).filter(Boolean))] as string[]);
|
|
||||||
|
|
||||||
mesesDisponiveis.forEach(mes => {
|
mesesDisponiveis.forEach(mes => {
|
||||||
valoresPorMesPorFilial[mes] = {};
|
valoresPorMesPorFilial[mes] = {};
|
||||||
|
|
@ -619,7 +615,7 @@ export default function Teste() {
|
||||||
items.forEach((item) => {
|
items.forEach((item) => {
|
||||||
const anoMes = item.data_competencia;
|
const anoMes = item.data_competencia;
|
||||||
const filial = item.filial || item.codfilial || "";
|
const filial = item.filial || item.codfilial || "";
|
||||||
if (anoMes && valoresPorMesPorFilial[anoMes] && filial && filiaisDisponiveis.includes(filial)) {
|
if (anoMes && valoresPorMesPorFilial[anoMes] && filial) {
|
||||||
if (!valoresPorMesPorFilial[anoMes][filial]) {
|
if (!valoresPorMesPorFilial[anoMes][filial]) {
|
||||||
valoresPorMesPorFilial[anoMes][filial] = 0;
|
valoresPorMesPorFilial[anoMes][filial] = 0;
|
||||||
}
|
}
|
||||||
|
|
@ -628,7 +624,7 @@ export default function Teste() {
|
||||||
});
|
});
|
||||||
|
|
||||||
return valoresPorMesPorFilial;
|
return valoresPorMesPorFilial;
|
||||||
}, [mesesDisponiveis, opcoesFiliais, filtrosAplicados, filiaisSelecionadas]);
|
}, [mesesDisponiveis]);
|
||||||
|
|
||||||
// Memoizar valores do grupo 01 por mês para evitar recálculos repetidos
|
// Memoizar valores do grupo 01 por mês para evitar recálculos repetidos
|
||||||
const valoresGrupo01PorMesMemo = React.useMemo(() => {
|
const valoresGrupo01PorMesMemo = React.useMemo(() => {
|
||||||
|
|
@ -647,12 +643,8 @@ export default function Teste() {
|
||||||
// Memoizar valores do grupo 01 por mês e por filial
|
// Memoizar valores do grupo 01 por mês e por filial
|
||||||
const valoresGrupo01PorMesPorFilialMemo = React.useMemo(() => {
|
const valoresGrupo01PorMesPorFilialMemo = React.useMemo(() => {
|
||||||
const valores: Record<string, Record<string, number>> = {};
|
const valores: Record<string, Record<string, number>> = {};
|
||||||
// Usar filiais selecionadas se houver filtros aplicados, senão usar todas as opções disponíveis
|
// Extrair filiais únicas dos próprios dados para evitar dependência de arrays externos
|
||||||
const filiaisDisponiveis = (filtrosAplicados && filiaisSelecionadas.length > 0)
|
const filiaisDisponiveis = [...new Set(data.map(item => item.filial || item.codfilial).filter(Boolean))] as string[];
|
||||||
? filiaisSelecionadas
|
|
||||||
: (opcoesFiliais.length > 0
|
|
||||||
? opcoesFiliais
|
|
||||||
: [...new Set(data.map(item => item.filial || item.codfilial).filter(Boolean))] as string[]);
|
|
||||||
|
|
||||||
mesesDisponiveis.forEach(mes => {
|
mesesDisponiveis.forEach(mes => {
|
||||||
valores[mes] = {};
|
valores[mes] = {};
|
||||||
|
|
@ -667,7 +659,7 @@ export default function Teste() {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
return valores;
|
return valores;
|
||||||
}, [data, mesesDisponiveis, opcoesFiliais, filtrosAplicados, filiaisSelecionadas]);
|
}, [data, mesesDisponiveis]);
|
||||||
|
|
||||||
// Função para calcular percentuais baseado no CODGRUPO 01 (FATURAMENTO LÍQUIDO)
|
// Função para calcular percentuais baseado no CODGRUPO 01 (FATURAMENTO LÍQUIDO)
|
||||||
const calcularPercentuaisPorMes = React.useCallback((
|
const calcularPercentuaisPorMes = React.useCallback((
|
||||||
|
|
@ -706,12 +698,9 @@ export default function Teste() {
|
||||||
): Record<string, Record<string, number>> => {
|
): Record<string, Record<string, number>> => {
|
||||||
const percentuaisPorMesPorFilial: Record<string, Record<string, number>> = {};
|
const percentuaisPorMesPorFilial: Record<string, Record<string, number>> = {};
|
||||||
|
|
||||||
// Usar filiais selecionadas se houver filtros aplicados, senão usar todas as opções disponíveis
|
// Extrair filiais únicas dos próprios valoresPorMesPorFilial para evitar dependência de arrays externos
|
||||||
const filiaisDisponiveis = (filtrosAplicados && filiaisSelecionadas.length > 0)
|
const primeiroMes = mesesDisponiveis[0] || "";
|
||||||
? filiaisSelecionadas
|
const filiaisDisponiveis = Object.keys(valoresPorMesPorFilial[primeiroMes] || {});
|
||||||
: (opcoesFiliais.length > 0
|
|
||||||
? opcoesFiliais
|
|
||||||
: Object.keys(valoresPorMesPorFilial[mesesDisponiveis[0] || ""] || {}));
|
|
||||||
|
|
||||||
// Se for CODGRUPO 01, sempre retornar 100% para todas as filiais
|
// Se for CODGRUPO 01, sempre retornar 100% para todas as filiais
|
||||||
if (codigoGrupo === "01") {
|
if (codigoGrupo === "01") {
|
||||||
|
|
@ -740,7 +729,7 @@ export default function Teste() {
|
||||||
});
|
});
|
||||||
|
|
||||||
return percentuaisPorMesPorFilial;
|
return percentuaisPorMesPorFilial;
|
||||||
}, [mesesDisponiveis, opcoesFiliais, valoresGrupo01PorMesPorFilialMemo, filtrosAplicados, filiaisSelecionadas]);
|
}, [mesesDisponiveis, valoresGrupo01PorMesPorFilialMemo]);
|
||||||
|
|
||||||
// Memoizar total do grupo 01
|
// Memoizar total do grupo 01
|
||||||
const totalGrupo01Memo = React.useMemo(() => {
|
const totalGrupo01Memo = React.useMemo(() => {
|
||||||
|
|
@ -896,9 +885,16 @@ export default function Teste() {
|
||||||
const valoresGrupo01PorFilial = gruposPorCodigo["01"] ? calcularValoresPorMesPorFilial(gruposPorCodigo["01"]) : {};
|
const valoresGrupo01PorFilial = gruposPorCodigo["01"] ? calcularValoresPorMesPorFilial(gruposPorCodigo["01"]) : {};
|
||||||
const valoresGrupo02PorFilial = gruposPorCodigo["02"] ? calcularValoresPorMesPorFilial(gruposPorCodigo["02"]) : {};
|
const valoresGrupo02PorFilial = gruposPorCodigo["02"] ? calcularValoresPorMesPorFilial(gruposPorCodigo["02"]) : {};
|
||||||
|
|
||||||
|
// Extrair filiais únicas dos valores calculados
|
||||||
|
const primeiroMes = mesesDisponiveis[0] || "";
|
||||||
|
const filiaisDisponiveis = [...new Set([
|
||||||
|
...Object.keys(valoresGrupo01PorFilial[primeiroMes] || {}),
|
||||||
|
...Object.keys(valoresGrupo02PorFilial[primeiroMes] || {})
|
||||||
|
])];
|
||||||
|
|
||||||
mesesDisponiveis.forEach(mes => {
|
mesesDisponiveis.forEach(mes => {
|
||||||
valoresMargemPorMesPorFilial[mes] = {};
|
valoresMargemPorMesPorFilial[mes] = {};
|
||||||
opcoesFiliais.forEach(filial => {
|
filiaisDisponiveis.forEach(filial => {
|
||||||
const valor01 = valoresGrupo01PorFilial[mes]?.[filial] || 0;
|
const valor01 = valoresGrupo01PorFilial[mes]?.[filial] || 0;
|
||||||
const valor02 = valoresGrupo02PorFilial[mes]?.[filial] || 0;
|
const valor02 = valoresGrupo02PorFilial[mes]?.[filial] || 0;
|
||||||
valoresMargemPorMesPorFilial[mes][filial] = valor01 - valor02;
|
valoresMargemPorMesPorFilial[mes][filial] = valor01 - valor02;
|
||||||
|
|
@ -927,7 +923,7 @@ export default function Teste() {
|
||||||
});
|
});
|
||||||
|
|
||||||
return rows;
|
return rows;
|
||||||
}, [data, mesesDisponiveis, expandedGrupos, opcoesFiliais, filtrosAplicados, filiaisSelecionadas, calcularValoresPorMes, calcularValoresPorMesPorFilial, calcularPercentuaisPorMes, calcularPercentuaisPorMesPorFilial, calcularPercentualTotal]);
|
}, [data, mesesDisponiveis, expandedGrupos, calcularValoresPorMes, calcularValoresPorMesPorFilial, calcularPercentuaisPorMes, calcularPercentuaisPorMesPorFilial, calcularPercentualTotal]);
|
||||||
|
|
||||||
const getRowStyle = React.useCallback((row: HierarchicalRow) => {
|
const getRowStyle = React.useCallback((row: HierarchicalRow) => {
|
||||||
const baseStyle =
|
const baseStyle =
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue