fix: corrigido graficos de metas da quinzena no painel industrial não aparecendo dados quando histórico estava vazio
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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,53 +62,43 @@ 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;
|
||||
|
||||
apontamentos.forEach(apontamento => {
|
||||
let pesoUnitario = 0;
|
||||
if (apontamento.tipo_apontamento === 'componente' && apontamento.componente?.peso_unitario) {
|
||||
pesoUnitario = apontamento.componente.peso_unitario;
|
||||
} else if (apontamento.tipo_apontamento === 'peca' && apontamento.peca?.peso_unitario) {
|
||||
pesoUnitario = apontamento.peca.peso_unitario;
|
||||
}
|
||||
if (apontamentos && apontamentos.length > 0) {
|
||||
apontamentos.forEach(apontamento => {
|
||||
let pesoUnitario = 0;
|
||||
if (apontamento.tipo_apontamento === 'componente' && apontamento.componente?.peso_unitario) {
|
||||
pesoUnitario = apontamento.componente.peso_unitario;
|
||||
} else if (apontamento.tipo_apontamento === 'peca' && apontamento.peca?.peso_unitario) {
|
||||
pesoUnitario = apontamento.peca.peso_unitario;
|
||||
}
|
||||
|
||||
const pesoTotal = pesoUnitario * apontamento.quantidade_produzida;
|
||||
const dataApontamento = new Date(apontamento.data_apontamento);
|
||||
const pesoTotal = pesoUnitario * apontamento.quantidade_produzida;
|
||||
pesoTotalProcessado += pesoTotal;
|
||||
|
||||
// Período de 7-14 dias atrás
|
||||
if (dataApontamento >= quatorzeDiasAtras && dataApontamento < seteDiasAtras) {
|
||||
peso7a14Dias += pesoTotal;
|
||||
}
|
||||
// Últimos 6 dias
|
||||
if (dataApontamento >= seisDiasAtras && dataApontamento <= hoje) {
|
||||
peso6DiasRecentes += 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;
|
||||
}
|
||||
// Últimos 6 dias
|
||||
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)) }
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user