Files
tracksteel_app/scripts/update_apontamentos_b101_fase9.js

209 lines
7.0 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const { createClient } = require('@supabase/supabase-js');
const readline = require('readline');
// Configuração do Supabase
const supabaseUrl = 'https://lwjppiicofojfcdfjsto.supabase.co';
const supabaseServiceKey = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Imx3anBwaWljb2ZvamZjZGZqc3RvIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTc1MDQ2MzA1MywiZXhwIjoyMDY2MDM5MDUzfQ.t9vlXHQH4ou2S-CKSeDYSnAeMDYpmkklqlwyGDvpocI';
// Inicializar cliente Supabase com service role para operações administrativas
const supabase = createClient(supabaseUrl, supabaseServiceKey);
// Interface para entrada do usuário
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
// Função para solicitar confirmação do usuário
function askConfirmation(question) {
return new Promise((resolve) => {
rl.question(question, (answer) => {
resolve(answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes' || answer.toLowerCase() === 's' || answer.toLowerCase() === 'sim');
});
});
}
// Função principal
async function updateApontamentosB101Fase9() {
console.log('🔧 Script de Atualização de Apontamentos - OF B101 Fase 9');
console.log('=' .repeat(60));
console.log('Objetivo: Alterar data de 08/09/2025 para 10/09/2025');
console.log('Filtro: Apenas peças com marca entre 10 e 70');
console.log('');
try {
// Passo 1: Buscar registros que serão afetados
console.log('📋 Passo 1: Identificando registros a serem atualizados...');
const { data: registrosParaAtualizar, error: selectError } = await supabase
.from('apontamentos_producao')
.select(`
id,
of_number,
data_apontamento,
quantidade_produzida,
observacoes,
pecas!inner(
id,
of_number,
etapa_fase,
marca,
descricao
)
`)
.eq('pecas.of_number', 'B101')
.eq('pecas.etapa_fase', '9')
.gte('pecas.marca', '10')
.lte('pecas.marca', '70')
.eq('data_apontamento', '2025-09-08');
if (selectError) {
console.error('❌ Erro ao buscar registros:', selectError.message);
return;
}
if (!registrosParaAtualizar || registrosParaAtualizar.length === 0) {
console.log(' Nenhum registro encontrado com os critérios especificados.');
console.log(' - OF: B101');
console.log(' - Fase: 9');
console.log(' - Marca: entre 10 e 70');
console.log(' - Data atual: 08/09/2025');
return;
}
// Mostrar registros encontrados
console.log(`✅ Encontrados ${registrosParaAtualizar.length} registro(s) para atualização:`);
console.log('');
registrosParaAtualizar.forEach((registro, index) => {
console.log(`📦 Registro ${index + 1}:`);
console.log(` ID: ${registro.id}`);
console.log(` OF: ${registro.of_number}`);
console.log(` Peça: ${registro.pecas.marca} - ${registro.pecas.descricao}`);
console.log(` Fase: ${registro.pecas.etapa_fase}`);
console.log(` Data atual: ${registro.data_apontamento}`);
console.log(` Quantidade: ${registro.quantidade_produzida}`);
if (registro.observacoes) {
console.log(` Observações: ${registro.observacoes}`);
}
console.log('');
});
// Passo 2: Solicitar confirmação
console.log('⚠️ ATENÇÃO: Esta operação irá alterar a data dos registros acima.');
console.log(' Data atual: 08/09/2025');
console.log(' Nova data: 10/09/2025');
console.log('');
const confirmacao = await askConfirmation('Deseja continuar com a atualização? (s/n): ');
if (!confirmacao) {
console.log('❌ Operação cancelada pelo usuário.');
return;
}
// Passo 3: Executar a atualização
console.log('');
console.log('🔄 Passo 2: Executando atualização...');
// Extrair IDs dos registros para atualização
const idsParaAtualizar = registrosParaAtualizar.map(r => r.id);
const { data: registrosAtualizados, error: updateError } = await supabase
.from('apontamentos_producao')
.update({
data_apontamento: '2025-09-10',
updated_at: new Date().toISOString()
})
.in('id', idsParaAtualizar)
.select(`
id,
of_number,
data_apontamento,
quantidade_produzida,
updated_at,
pecas!inner(
of_number,
etapa_fase,
marca
)
`);
if (updateError) {
console.error('❌ Erro ao atualizar registros:', updateError.message);
return;
}
// Passo 4: Confirmar atualização
console.log(`✅ Atualização concluída com sucesso!`);
console.log(`📊 ${registrosAtualizados?.length || 0} registro(s) atualizado(s).`);
console.log('');
if (registrosAtualizados && registrosAtualizados.length > 0) {
console.log('📋 Registros atualizados:');
registrosAtualizados.forEach((registro, index) => {
console.log(` ${index + 1}. ID: ${registro.id} | Nova data: ${registro.data_apontamento} | Atualizado em: ${new Date(registro.updated_at).toLocaleString('pt-BR')}`);
});
}
// Passo 5: Verificação final
console.log('');
console.log('🔍 Passo 3: Verificação final...');
const { data: verificacao, error: verifyError } = await supabase
.from('apontamentos_producao')
.select(`
id,
of_number,
data_apontamento,
pecas!inner(
of_number,
etapa_fase,
marca
)
`)
.eq('pecas.of_number', 'B101')
.eq('pecas.etapa_fase', '9')
.gte('pecas.marca', '10')
.lte('pecas.marca', '70')
.eq('data_apontamento', '2025-09-10');
if (verifyError) {
console.error('❌ Erro na verificação final:', verifyError.message);
return;
}
console.log(`✅ Verificação concluída: ${verificacao?.length || 0} registro(s) com a nova data (10/09/2025).`);
// Verificar se ainda existem registros com a data antiga
const { data: registrosAntigos, error: oldRecordsError } = await supabase
.from('apontamentos_producao')
.select('id, pecas!inner(of_number, etapa_fase, marca)')
.eq('pecas.of_number', 'B101')
.eq('pecas.etapa_fase', '9')
.gte('pecas.marca', '10')
.lte('pecas.marca', '70')
.eq('data_apontamento', '2025-09-08');
if (!oldRecordsError && registrosAntigos && registrosAntigos.length > 0) {
console.log(`⚠️ Atenção: Ainda existem ${registrosAntigos.length} registro(s) com a data antiga (08/09/2025).`);
} else {
console.log('✅ Nenhum registro restante com a data antiga.');
}
} catch (error) {
console.error('❌ Erro inesperado:', error.message);
console.error('Stack trace:', error.stack);
} finally {
rl.close();
console.log('');
console.log('🏁 Script finalizado.');
}
}
// Executar o script
if (require.main === module) {
updateApontamentosB101Fase9();
}
module.exports = { updateApontamentosB101Fase9 };