diff --git a/query_result.txt b/query_result.txt new file mode 100644 index 0000000..c5a0c93 --- /dev/null +++ b/query_result.txt @@ -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) + diff --git a/src/hooks/useProcessChartData.tsx b/src/hooks/useProcessChartData.tsx index fa8656c..16bbaf3 100644 --- a/src/hooks/useProcessChartData.tsx +++ b/src/hooks/useProcessChartData.tsx @@ -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)) } ];