From 3f543ba400cee44d4a9c72c0390daeddb44957ca Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Wed, 25 Jun 2025 20:15:05 +0000 Subject: [PATCH] Fix: Dashboard header and webhook issues - Corrected the duplicated "Dashboard" text in the header. - Verified and adjusted the webhook for sending financial alerts, ensuring it triggers on the specified days and times (Brazil timezone). - Tested the webhook functionality with test accounts. --- src/components/dashboard/DashboardHeader.tsx | 18 +++++- .../functions/avisos-financeiros/index.ts | 62 ++++++++++++------- 2 files changed, 58 insertions(+), 22 deletions(-) diff --git a/src/components/dashboard/DashboardHeader.tsx b/src/components/dashboard/DashboardHeader.tsx index db3c132..0d7b81a 100644 --- a/src/components/dashboard/DashboardHeader.tsx +++ b/src/components/dashboard/DashboardHeader.tsx @@ -2,9 +2,25 @@ import React from 'react'; const DashboardHeader = () => { + const getCurrentMonthYear = () => { + const now = new Date(); + const months = [ + 'Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', + 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro' + ]; + + const month = months[now.getMonth()]; + const year = now.getFullYear(); + + return `${month} ${year}`; + }; + return (
-

Dashboard

+
+

Dashboard Financeiro

+

Dados de: {getCurrentMonthYear()}

+
); }; diff --git a/supabase/functions/avisos-financeiros/index.ts b/supabase/functions/avisos-financeiros/index.ts index ae6af44..750db01 100644 --- a/supabase/functions/avisos-financeiros/index.ts +++ b/supabase/functions/avisos-financeiros/index.ts @@ -45,11 +45,13 @@ serve(async (req) => { const supabaseKey = Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')! const supabase = createClient(supabaseUrl, supabaseKey) - const agora = new Date() - const hoje = new Date(agora.getFullYear(), agora.getMonth(), agora.getDate()) - const horaAtual = agora.toTimeString().slice(0, 5) // HH:MM + // Usar horário de Brasília (UTC-3) + const agoraBrasilia = new Date(new Date().getTime() - (3 * 60 * 60 * 1000)) + const hojeBrasilia = new Date(agoraBrasilia.getFullYear(), agoraBrasilia.getMonth(), agoraBrasilia.getDate()) + const horaAtualBrasilia = agoraBrasilia.toTimeString().slice(0, 5) // HH:MM - console.log(`Executando verificação de avisos às ${horaAtual}`) + console.log(`Executando verificação de avisos às ${horaAtualBrasilia} (horário de Brasília)`) + console.log(`Data atual (Brasília): ${hojeBrasilia.toISOString().split('T')[0]}`) // Buscar todas as contas ativas incluindo email e whatsapp do usuário const { data: contas, error: contasError } = await supabase @@ -67,31 +69,42 @@ serve(async (req) => { let avisosEnviados = 0 for (const conta of contas || []) { + console.log(`\n--- Processando conta: ${conta.nome_conta} ---`) + console.log(`Dia vencimento: ${conta.dia_vencimento}`) + console.log(`Dias antecedência: ${conta.dias_antecedencia}`) + console.log(`Hora aviso: ${conta.hora_aviso}`) + // Calcular próxima data de vencimento const diaVencimento = conta.dia_vencimento - let proximoVencimento = new Date(hoje.getFullYear(), hoje.getMonth(), diaVencimento) + let proximoVencimento = new Date(hojeBrasilia.getFullYear(), hojeBrasilia.getMonth(), diaVencimento) // Se o dia já passou neste mês, usar o próximo mês - if (proximoVencimento <= hoje) { - proximoVencimento = new Date(hoje.getFullYear(), hoje.getMonth() + 1, diaVencimento) + if (proximoVencimento <= hojeBrasilia) { + proximoVencimento = new Date(hojeBrasilia.getFullYear(), hojeBrasilia.getMonth() + 1, diaVencimento) } // Calcular dias restantes - const diffTime = proximoVencimento.getTime() - hoje.getTime() + const diffTime = proximoVencimento.getTime() - hojeBrasilia.getTime() const diasRestantes = Math.ceil(diffTime / (1000 * 60 * 60 * 24)) + console.log(`Próximo vencimento: ${proximoVencimento.toISOString().split('T')[0]}`) + console.log(`Dias restantes: ${diasRestantes}`) + console.log(`Hora atual: ${horaAtualBrasilia}, Hora aviso: ${conta.hora_aviso}`) + // Verificar se deve enviar aviso + // Enviar aviso nos dias de antecedência E no dia do vencimento const deveEnviarAviso = ( - diasRestantes <= conta.dias_antecedencia && - diasRestantes >= 1 && - horaAtual === conta.hora_aviso + (diasRestantes <= conta.dias_antecedencia && diasRestantes >= 0) && + horaAtualBrasilia === conta.hora_aviso ) + console.log(`Deve enviar aviso: ${deveEnviarAviso}`) + if (deveEnviarAviso) { - console.log(`Enviando aviso para conta: ${conta.nome_conta}, dias restantes: ${diasRestantes}`) + console.log(`🔔 Enviando aviso para conta: ${conta.nome_conta}, dias restantes: ${diasRestantes}`) // Verificar se já foi enviado aviso hoje - const dataAviso = hoje.toISOString().split('T')[0] + const dataAviso = hojeBrasilia.toISOString().split('T')[0] const { data: avisoExistente } = await supabase .from('avisos_enviados') .select('id') @@ -100,7 +113,7 @@ serve(async (req) => { .single() if (avisoExistente) { - console.log(`Aviso já enviado hoje para conta: ${conta.nome_conta}`) + console.log(`⚠️ Aviso já enviado hoje para conta: ${conta.nome_conta}`) continue } @@ -119,6 +132,8 @@ serve(async (req) => { webhook_url: 'https://webhookn8n.innova1001.com.br/webhook/avisosfinancehome' } + console.log(`📤 Dados do webhook:`, JSON.stringify(avisoData, null, 2)) + try { // Enviar webhook const webhookResponse = await fetch('https://webhookn8n.innova1001.com.br/webhook/avisosfinancehome', { @@ -130,6 +145,7 @@ serve(async (req) => { }) const statusEnvio = webhookResponse.ok ? 'enviado' : 'erro' + console.log(`📊 Status do webhook: ${webhookResponse.status} - ${statusEnvio}`) // Registrar envio await supabase @@ -137,7 +153,7 @@ serve(async (req) => { .insert({ conta_id: conta.id, data_aviso: dataAviso, - hora_aviso: horaAtual, + hora_aviso: horaAtualBrasilia, dados_webhook: avisoData, status_envio: statusEnvio, tentativas: 1 @@ -147,11 +163,11 @@ serve(async (req) => { avisosEnviados++ console.log(`✅ Aviso enviado com sucesso para: ${conta.nome_conta} (${conta.whatsapp_usuario})`) } else { - console.error(`❌ Erro ao enviar webhook para: ${conta.nome_conta}`) + console.error(`❌ Erro ao enviar webhook para: ${conta.nome_conta} - Status: ${webhookResponse.status}`) } } catch (error) { - console.error(`Erro ao processar conta ${conta.nome_conta}:`, error) + console.error(`💥 Erro ao processar conta ${conta.nome_conta}:`, error) // Registrar erro await supabase @@ -159,22 +175,26 @@ serve(async (req) => { .insert({ conta_id: conta.id, data_aviso: dataAviso, - hora_aviso: horaAtual, + hora_aviso: horaAtualBrasilia, dados_webhook: avisoData, status_envio: 'erro', tentativas: 1 }) } + } else { + console.log(`⏭️ Não é hora de enviar aviso para: ${conta.nome_conta}`) } } - console.log(`Processamento concluído. ${avisosEnviados} avisos enviados.`) + console.log(`\n🎯 Processamento concluído. ${avisosEnviados} avisos enviados.`) return new Response( JSON.stringify({ success: true, avisosEnviados, - timestamp: agora.toISOString() + timestamp: agoraBrasilia.toISOString(), + horario_brasilia: horaAtualBrasilia, + data_brasilia: hojeBrasilia.toISOString().split('T')[0] }), { headers: { ...corsHeaders, 'Content-Type': 'application/json' }, @@ -182,7 +202,7 @@ serve(async (req) => { ) } catch (error) { - console.error('Erro na função de avisos:', error) + console.error('💥 Erro na função de avisos:', error) return new Response( JSON.stringify({ error: error.message }), {