diff --git a/src/app/dre-filial/teste.tsx b/src/app/dre-filial/teste.tsx index a10a40a..c90a5e9 100644 --- a/src/app/dre-filial/teste.tsx +++ b/src/app/dre-filial/teste.tsx @@ -915,6 +915,14 @@ export default function Teste() { } ); + // Variáveis para armazenar valores da MARGEM BRUTA (para uso no RESULTADO LOJA) + let valoresMargemBrutaPorMes: Record | null = null; + let valoresMargemBrutaPorMesPorFilial: Record< + string, + Record + > | 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 = {}; 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 @@ -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 = {}; + 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 + > = {}; + 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;