fix: corrigido graficos de metas da quinzena no painel industrial não aparecendo dados quando histórico estava vazio

This commit is contained in:
2026-09-02 16:39:42 +00:00
parent 9fb29d55a8
commit 1578fb23e2
2 changed files with 66 additions and 41 deletions
+9
View File
@@ -0,0 +1,9 @@
of_number | processo_id | data_apontamento | quantidade_produzida
-----------+--------------------------------------+------------------+----------------------
B132 | 34b74873-69db-4cad-8f41-56e57ac21037 | 2026-09-01 | 15
B132 | 34b74873-69db-4cad-8f41-56e57ac21037 | 2026-09-01 | 3
B132 | 61b968f3-f09d-40ab-bbb5-25be750e18c3 | 2026-08-27 | 15
B132 | 61b968f3-f09d-40ab-bbb5-25be750e18c3 | 2026-08-27 | 1
B132 | 61b968f3-f09d-40ab-bbb5-25be750e18c3 | 2026-08-27 | 3
(5 rows)
+40 -24
View File
@@ -53,7 +53,7 @@ export const useProcessChartData = (ofNumber: string) => {
const seisDiasAtras = new Date(hoje);
seisDiasAtras.setDate(hoje.getDate() - 6);
// Buscar apontamentos dos últimos 14 dias
// Buscar apontamentos completos para obter o total fabricado
const { data: apontamentos, error: apontamentosError } = await supabase
.from('apontamentos_producao')
.select(`
@@ -62,33 +62,19 @@ export const useProcessChartData = (ofNumber: string) => {
componente:componentes_peca(peso_unitario)
`)
.eq('of_number', ofNumber)
.eq('processo_id', processo.id)
.gte('data_apontamento', quatorzeDiasAtras.toISOString().split('T')[0])
.lte('data_apontamento', hoje.toISOString().split('T')[0]);
.eq('processo_id', processo.id);
if (apontamentosError) {
console.error(`Erro ao buscar apontamentos para ${processName}:`, apontamentosError);
return [
{ name: '7-15d', weight: 0 },
{ name: 'ult.7d', weight: 0 },
{ name: 'prev.7d', weight: 0 }
];
}
console.log(`Apontamentos encontrados para ${processName}:`, apontamentos?.length || 0);
if (!apontamentos || apontamentos.length === 0) {
return [
{ name: '7-15d', weight: 0 },
{ name: 'ult.7d', weight: 0 },
{ name: 'prev.7d', weight: 0 }
];
}
// Calcular pesos por período
let peso7a14Dias = 0;
let peso6DiasRecentes = 0;
let pesoTotalProcessado = 0;
if (apontamentos && apontamentos.length > 0) {
apontamentos.forEach(apontamento => {
let pesoUnitario = 0;
if (apontamento.tipo_apontamento === 'componente' && apontamento.componente?.peso_unitario) {
@@ -98,8 +84,10 @@ export const useProcessChartData = (ofNumber: string) => {
}
const pesoTotal = pesoUnitario * apontamento.quantidade_produzida;
const dataApontamento = new Date(apontamento.data_apontamento);
pesoTotalProcessado += pesoTotal;
if (apontamento.data_apontamento) {
const dataApontamento = new Date(apontamento.data_apontamento + 'T12:00:00'); // Evitar problemas de fuso
// Período de 7-14 dias atrás
if (dataApontamento >= quatorzeDiasAtras && dataApontamento < seteDiasAtras) {
peso7a14Dias += pesoTotal;
@@ -108,7 +96,9 @@ export const useProcessChartData = (ofNumber: string) => {
if (dataApontamento >= seisDiasAtras && dataApontamento <= hoje) {
peso6DiasRecentes += pesoTotal;
}
}
});
}
// Calcular peso necessário para próximos 7 dias (meta)
const { data: ofData } = await supabase
@@ -117,12 +107,38 @@ export const useProcessChartData = (ofNumber: string) => {
.eq('num_of', ofNumber)
.single();
let pesoTotalPlanejado = ofData?.peso_total || 0;
if (!pesoTotalPlanejado) {
const { data: fichaTecnica } = await supabase
.from('ficha_tecnica_contratos')
.select('quantidade')
.eq('of_number', ofNumber)
.maybeSingle();
if (fichaTecnica?.quantidade) {
pesoTotalPlanejado = fichaTecnica.quantidade;
}
}
if (!pesoTotalPlanejado) {
const { data: pecasData } = await supabase
.from('pecas')
.select('peso_unitario, quantidade')
.eq('of_number', ofNumber);
if (pecasData) {
pesoTotalPlanejado = pecasData.reduce((total, peca) => {
return total + ((peca.peso_unitario || 0) * (peca.quantidade || 0));
}, 0);
}
}
let pesoMeta = 0;
if (ofData?.peso_total && ofData?.data_prazo) {
const dataFim = new Date(ofData.data_prazo);
if (pesoTotalPlanejado > 0) {
const dataFim = ofData?.data_prazo ? new Date(ofData.data_prazo + 'T23:59:59') : new Date(Date.now() + 30 * 24 * 60 * 60 * 1000);
const diasRestantes = Math.max(1, Math.ceil((dataFim.getTime() - hoje.getTime()) / (1000 * 60 * 60 * 24)));
const pesoTotalProcessado = peso7a14Dias + peso6DiasRecentes;
const pesoRestante = Math.max(0, ofData.peso_total - pesoTotalProcessado);
const pesoRestante = Math.max(0, pesoTotalPlanejado - pesoTotalProcessado);
// Meta para próximos 7 dias baseada no ritmo necessário
if (diasRestantes <= 7) {
@@ -133,7 +149,7 @@ export const useProcessChartData = (ofNumber: string) => {
}
const resultado = [
{ name: '7-15d', weight: Number(peso7a14Dias.toFixed(0)) }, // Mantido em Kg
{ name: '7-15d', weight: Number(peso7a14Dias.toFixed(0)) },
{ name: 'ult.7d', weight: Number(peso6DiasRecentes.toFixed(0)) },
{ name: 'prev.7d', weight: Number(pesoMeta.toFixed(0)) }
];