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);
|
const seisDiasAtras = new Date(hoje);
|
||||||
seisDiasAtras.setDate(hoje.getDate() - 6);
|
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
|
const { data: apontamentos, error: apontamentosError } = await supabase
|
||||||
.from('apontamentos_producao')
|
.from('apontamentos_producao')
|
||||||
.select(`
|
.select(`
|
||||||
@@ -62,53 +62,43 @@ export const useProcessChartData = (ofNumber: string) => {
|
|||||||
componente:componentes_peca(peso_unitario)
|
componente:componentes_peca(peso_unitario)
|
||||||
`)
|
`)
|
||||||
.eq('of_number', ofNumber)
|
.eq('of_number', ofNumber)
|
||||||
.eq('processo_id', processo.id)
|
.eq('processo_id', processo.id);
|
||||||
.gte('data_apontamento', quatorzeDiasAtras.toISOString().split('T')[0])
|
|
||||||
.lte('data_apontamento', hoje.toISOString().split('T')[0]);
|
|
||||||
|
|
||||||
if (apontamentosError) {
|
if (apontamentosError) {
|
||||||
console.error(`Erro ao buscar apontamentos para ${processName}:`, 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);
|
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 peso7a14Dias = 0;
|
||||||
let peso6DiasRecentes = 0;
|
let peso6DiasRecentes = 0;
|
||||||
|
let pesoTotalProcessado = 0;
|
||||||
|
|
||||||
apontamentos.forEach(apontamento => {
|
if (apontamentos && apontamentos.length > 0) {
|
||||||
let pesoUnitario = 0;
|
apontamentos.forEach(apontamento => {
|
||||||
if (apontamento.tipo_apontamento === 'componente' && apontamento.componente?.peso_unitario) {
|
let pesoUnitario = 0;
|
||||||
pesoUnitario = apontamento.componente.peso_unitario;
|
if (apontamento.tipo_apontamento === 'componente' && apontamento.componente?.peso_unitario) {
|
||||||
} else if (apontamento.tipo_apontamento === 'peca' && apontamento.peca?.peso_unitario) {
|
pesoUnitario = apontamento.componente.peso_unitario;
|
||||||
pesoUnitario = apontamento.peca.peso_unitario;
|
} else if (apontamento.tipo_apontamento === 'peca' && apontamento.peca?.peso_unitario) {
|
||||||
}
|
pesoUnitario = apontamento.peca.peso_unitario;
|
||||||
|
}
|
||||||
|
|
||||||
const pesoTotal = pesoUnitario * apontamento.quantidade_produzida;
|
const pesoTotal = pesoUnitario * apontamento.quantidade_produzida;
|
||||||
const dataApontamento = new Date(apontamento.data_apontamento);
|
pesoTotalProcessado += pesoTotal;
|
||||||
|
|
||||||
// Período de 7-14 dias atrás
|
if (apontamento.data_apontamento) {
|
||||||
if (dataApontamento >= quatorzeDiasAtras && dataApontamento < seteDiasAtras) {
|
const dataApontamento = new Date(apontamento.data_apontamento + 'T12:00:00'); // Evitar problemas de fuso
|
||||||
peso7a14Dias += pesoTotal;
|
// Período de 7-14 dias atrás
|
||||||
}
|
if (dataApontamento >= quatorzeDiasAtras && dataApontamento < seteDiasAtras) {
|
||||||
// Últimos 6 dias
|
peso7a14Dias += pesoTotal;
|
||||||
if (dataApontamento >= seisDiasAtras && dataApontamento <= hoje) {
|
}
|
||||||
peso6DiasRecentes += pesoTotal;
|
// Últimos 6 dias
|
||||||
}
|
if (dataApontamento >= seisDiasAtras && dataApontamento <= hoje) {
|
||||||
});
|
peso6DiasRecentes += pesoTotal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Calcular peso necessário para próximos 7 dias (meta)
|
// Calcular peso necessário para próximos 7 dias (meta)
|
||||||
const { data: ofData } = await supabase
|
const { data: ofData } = await supabase
|
||||||
@@ -117,12 +107,38 @@ export const useProcessChartData = (ofNumber: string) => {
|
|||||||
.eq('num_of', ofNumber)
|
.eq('num_of', ofNumber)
|
||||||
.single();
|
.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;
|
let pesoMeta = 0;
|
||||||
if (ofData?.peso_total && ofData?.data_prazo) {
|
if (pesoTotalPlanejado > 0) {
|
||||||
const dataFim = new Date(ofData.data_prazo);
|
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 diasRestantes = Math.max(1, Math.ceil((dataFim.getTime() - hoje.getTime()) / (1000 * 60 * 60 * 24)));
|
||||||
const pesoTotalProcessado = peso7a14Dias + peso6DiasRecentes;
|
const pesoRestante = Math.max(0, pesoTotalPlanejado - pesoTotalProcessado);
|
||||||
const pesoRestante = Math.max(0, ofData.peso_total - pesoTotalProcessado);
|
|
||||||
|
|
||||||
// Meta para próximos 7 dias baseada no ritmo necessário
|
// Meta para próximos 7 dias baseada no ritmo necessário
|
||||||
if (diasRestantes <= 7) {
|
if (diasRestantes <= 7) {
|
||||||
@@ -133,7 +149,7 @@ export const useProcessChartData = (ofNumber: string) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const resultado = [
|
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: 'ult.7d', weight: Number(peso6DiasRecentes.toFixed(0)) },
|
||||||
{ name: 'prev.7d', weight: Number(pesoMeta.toFixed(0)) }
|
{ name: 'prev.7d', weight: Number(pesoMeta.toFixed(0)) }
|
||||||
];
|
];
|
||||||
|
|||||||
Reference in New Issue
Block a user