Adicionando linha RESULTADO LOJA

This commit is contained in:
Felipe Batista 2025-12-10 19:35:44 -03:00
parent 66431d83de
commit 28e51c87d4
1 changed files with 102 additions and 4 deletions

View File

@ -915,6 +915,14 @@ export default function Teste() {
}
);
// Variáveis para armazenar valores da MARGEM BRUTA (para uso no RESULTADO LOJA)
let valoresMargemBrutaPorMes: Record<string, number> | null = null;
let valoresMargemBrutaPorMesPorFilial: Record<
string,
Record<string, number>
> | null = null;
let totalMargemBruta: number | null = null;
sortedGrupos.forEach(([codgrupo, items], index) => {
// Calcular total do grupo
const totalGrupo = items.reduce(
@ -1005,7 +1013,7 @@ export default function Teste() {
});
}
// Adicionar linha calculada "MARGEM DE LOJA" após o grupo 02
// Adicionar linha calculada "MARGEM BRUTA" após o grupo 02
// Verificar se é o último grupo ou se o próximo grupo é maior que 02
const proximoCodigo = sortedGrupos[index + 1]?.[0];
const proximoNumero = proximoCodigo ? parseInt(proximoCodigo) : 999;
@ -1014,11 +1022,11 @@ export default function Teste() {
codgrupo === '02' ||
(parseInt(codgrupo) === 2 && proximoNumero > 2)
) {
// Calcular MARGEM DE LOJA = CODGRUPO 01 - CODGRUPO 02
// Calcular MARGEM BRUTA = CODGRUPO 01 + CODGRUPO 02
const valoresGrupo01 = valoresPorGrupo['01'] || {};
const valoresGrupo02 = valoresPorGrupo['02'] || {};
// Calcular valores por mês para MARGEM DE LOJA
// Calcular valores por mês para MARGEM BRUTA
const valoresMargemPorMes: Record<string, number> = {};
mesesDisponiveis.forEach((mes) => {
const valor01 = valoresGrupo01[mes] || 0;
@ -1026,7 +1034,7 @@ export default function Teste() {
valoresMargemPorMes[mes] = valor01 + valor02;
});
// Calcular valores por mês e por filial para MARGEM DE LOJA
// Calcular valores por mês e por filial para MARGEM BRUTA
const valoresMargemPorMesPorFilial: Record<
string,
Record<string, number>
@ -1062,6 +1070,11 @@ export default function Teste() {
0
);
// Armazenar valores da MARGEM BRUTA para uso posterior no RESULTADO LOJA
valoresMargemBrutaPorMes = valoresMargemPorMes;
valoresMargemBrutaPorMesPorFilial = valoresMargemPorMesPorFilial;
totalMargemBruta = totalMargem;
// Adicionar linha calculada
rows.push({
type: 'calculado',
@ -1084,6 +1097,91 @@ export default function Teste() {
isCalculado: true,
});
}
// Adicionar linha calculada "RESULTADO LOJA" após o grupo 04 (DESPESAS)
// Verificar se é o último grupo ou se o próximo grupo é maior que 04
const proximoCodigoDespesas = sortedGrupos[index + 1]?.[0];
const proximoNumeroDespesas = proximoCodigoDespesas
? parseInt(proximoCodigoDespesas)
: 999;
if (
(codgrupo === '04' ||
(parseInt(codgrupo) === 4 && proximoNumeroDespesas > 4)) &&
valoresMargemBrutaPorMes !== null &&
valoresMargemBrutaPorMesPorFilial !== null &&
totalMargemBruta !== null
) {
// Calcular RESULTADO LOJA = MARGEM BRUTA + DESPESAS (grupo 04)
const valoresGrupo04 = valoresPorGrupo['04'] || {};
// Calcular valores por mês para RESULTADO LOJA
const valoresResultadoPorMes: Record<string, number> = {};
mesesDisponiveis.forEach((mes) => {
const valorMargem = valoresMargemBrutaPorMes![mes] || 0;
const valorDespesas = valoresGrupo04[mes] || 0;
valoresResultadoPorMes[mes] = valorMargem + valorDespesas;
});
// Calcular valores por mês e por filial para RESULTADO LOJA
const valoresResultadoPorMesPorFilial: Record<
string,
Record<string, number>
> = {};
const valoresGrupo04PorFilial = gruposPorCodigo['04']
? calcularValoresPorMesPorFilial(gruposPorCodigo['04'])
: {};
// Extrair filiais únicas dos valores calculados
const primeiroMes = mesesDisponiveis[0] || '';
const filiaisDisponiveis = [
...new Set([
...Object.keys(
valoresMargemBrutaPorMesPorFilial![primeiroMes] || {}
),
...Object.keys(valoresGrupo04PorFilial[primeiroMes] || {}),
]),
];
mesesDisponiveis.forEach((mes) => {
valoresResultadoPorMesPorFilial[mes] = {};
filiaisDisponiveis.forEach((filial) => {
const valorMargem =
valoresMargemBrutaPorMesPorFilial![mes]?.[filial] || 0;
const valorDespesas = valoresGrupo04PorFilial[mes]?.[filial] || 0;
valoresResultadoPorMesPorFilial[mes][filial] =
valorMargem + valorDespesas;
});
});
// Calcular total
const totalResultado = Object.values(valoresResultadoPorMes).reduce(
(sum, val) => sum + val,
0
);
// Adicionar linha calculada
rows.push({
type: 'calculado',
level: 0,
grupo: 'RESULTADO LOJA',
codigo_grupo: 'RESULTADO',
total: totalResultado,
isExpanded: false,
valoresPorMes: valoresResultadoPorMes,
valoresPorMesPorFilial: valoresResultadoPorMesPorFilial,
percentuaisPorMes: calcularPercentuaisPorMes(
valoresResultadoPorMes,
'RESULTADO'
),
percentuaisPorMesPorFilial: calcularPercentuaisPorMesPorFilial(
valoresResultadoPorMesPorFilial,
'RESULTADO'
),
percentualTotal: calcularPercentualTotal(totalResultado, 'RESULTADO'),
isCalculado: true,
});
}
});
return rows;