Adicionando linha RESULTADO LOJA
This commit is contained in:
parent
66431d83de
commit
28e51c87d4
|
|
@ -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) => {
|
sortedGrupos.forEach(([codgrupo, items], index) => {
|
||||||
// Calcular total do grupo
|
// Calcular total do grupo
|
||||||
const totalGrupo = items.reduce(
|
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
|
// Verificar se é o último grupo ou se o próximo grupo é maior que 02
|
||||||
const proximoCodigo = sortedGrupos[index + 1]?.[0];
|
const proximoCodigo = sortedGrupos[index + 1]?.[0];
|
||||||
const proximoNumero = proximoCodigo ? parseInt(proximoCodigo) : 999;
|
const proximoNumero = proximoCodigo ? parseInt(proximoCodigo) : 999;
|
||||||
|
|
@ -1014,11 +1022,11 @@ export default function Teste() {
|
||||||
codgrupo === '02' ||
|
codgrupo === '02' ||
|
||||||
(parseInt(codgrupo) === 2 && proximoNumero > 2)
|
(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 valoresGrupo01 = valoresPorGrupo['01'] || {};
|
||||||
const valoresGrupo02 = valoresPorGrupo['02'] || {};
|
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> = {};
|
const valoresMargemPorMes: Record<string, number> = {};
|
||||||
mesesDisponiveis.forEach((mes) => {
|
mesesDisponiveis.forEach((mes) => {
|
||||||
const valor01 = valoresGrupo01[mes] || 0;
|
const valor01 = valoresGrupo01[mes] || 0;
|
||||||
|
|
@ -1026,7 +1034,7 @@ export default function Teste() {
|
||||||
valoresMargemPorMes[mes] = valor01 + valor02;
|
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<
|
const valoresMargemPorMesPorFilial: Record<
|
||||||
string,
|
string,
|
||||||
Record<string, number>
|
Record<string, number>
|
||||||
|
|
@ -1062,6 +1070,11 @@ export default function Teste() {
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Armazenar valores da MARGEM BRUTA para uso posterior no RESULTADO LOJA
|
||||||
|
valoresMargemBrutaPorMes = valoresMargemPorMes;
|
||||||
|
valoresMargemBrutaPorMesPorFilial = valoresMargemPorMesPorFilial;
|
||||||
|
totalMargemBruta = totalMargem;
|
||||||
|
|
||||||
// Adicionar linha calculada
|
// Adicionar linha calculada
|
||||||
rows.push({
|
rows.push({
|
||||||
type: 'calculado',
|
type: 'calculado',
|
||||||
|
|
@ -1084,6 +1097,91 @@ export default function Teste() {
|
||||||
isCalculado: true,
|
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;
|
return rows;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue