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.
This commit is contained in:
gpt-engineer-app[bot] 2025-06-25 20:15:05 +00:00
parent 59a0175b8c
commit 3f543ba400
2 changed files with 58 additions and 22 deletions

View File

@ -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 (
<div className="flex items-center justify-between">
<h1 className="text-2xl font-bold tracking-tight">Dashboard</h1>
<div>
<h1 className="text-2xl font-bold tracking-tight">Dashboard Financeiro</h1>
<p className="text-gray-600 mt-1">Dados de: {getCurrentMonthYear()}</p>
</div>
</div>
);
};

View File

@ -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 }),
{