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:
parent
59a0175b8c
commit
3f543ba400
@ -2,9 +2,25 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
const DashboardHeader = () => {
|
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 (
|
return (
|
||||||
<div className="flex items-center justify-between">
|
<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>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -45,11 +45,13 @@ serve(async (req) => {
|
|||||||
const supabaseKey = Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')!
|
const supabaseKey = Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')!
|
||||||
const supabase = createClient(supabaseUrl, supabaseKey)
|
const supabase = createClient(supabaseUrl, supabaseKey)
|
||||||
|
|
||||||
const agora = new Date()
|
// Usar horário de Brasília (UTC-3)
|
||||||
const hoje = new Date(agora.getFullYear(), agora.getMonth(), agora.getDate())
|
const agoraBrasilia = new Date(new Date().getTime() - (3 * 60 * 60 * 1000))
|
||||||
const horaAtual = agora.toTimeString().slice(0, 5) // HH:MM
|
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
|
// Buscar todas as contas ativas incluindo email e whatsapp do usuário
|
||||||
const { data: contas, error: contasError } = await supabase
|
const { data: contas, error: contasError } = await supabase
|
||||||
@ -67,31 +69,42 @@ serve(async (req) => {
|
|||||||
let avisosEnviados = 0
|
let avisosEnviados = 0
|
||||||
|
|
||||||
for (const conta of contas || []) {
|
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
|
// Calcular próxima data de vencimento
|
||||||
const diaVencimento = conta.dia_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
|
// Se o dia já passou neste mês, usar o próximo mês
|
||||||
if (proximoVencimento <= hoje) {
|
if (proximoVencimento <= hojeBrasilia) {
|
||||||
proximoVencimento = new Date(hoje.getFullYear(), hoje.getMonth() + 1, diaVencimento)
|
proximoVencimento = new Date(hojeBrasilia.getFullYear(), hojeBrasilia.getMonth() + 1, diaVencimento)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calcular dias restantes
|
// Calcular dias restantes
|
||||||
const diffTime = proximoVencimento.getTime() - hoje.getTime()
|
const diffTime = proximoVencimento.getTime() - hojeBrasilia.getTime()
|
||||||
const diasRestantes = Math.ceil(diffTime / (1000 * 60 * 60 * 24))
|
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
|
// Verificar se deve enviar aviso
|
||||||
|
// Enviar aviso nos dias de antecedência E no dia do vencimento
|
||||||
const deveEnviarAviso = (
|
const deveEnviarAviso = (
|
||||||
diasRestantes <= conta.dias_antecedencia &&
|
(diasRestantes <= conta.dias_antecedencia && diasRestantes >= 0) &&
|
||||||
diasRestantes >= 1 &&
|
horaAtualBrasilia === conta.hora_aviso
|
||||||
horaAtual === conta.hora_aviso
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
console.log(`Deve enviar aviso: ${deveEnviarAviso}`)
|
||||||
|
|
||||||
if (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
|
// 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
|
const { data: avisoExistente } = await supabase
|
||||||
.from('avisos_enviados')
|
.from('avisos_enviados')
|
||||||
.select('id')
|
.select('id')
|
||||||
@ -100,7 +113,7 @@ serve(async (req) => {
|
|||||||
.single()
|
.single()
|
||||||
|
|
||||||
if (avisoExistente) {
|
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
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -119,6 +132,8 @@ serve(async (req) => {
|
|||||||
webhook_url: 'https://webhookn8n.innova1001.com.br/webhook/avisosfinancehome'
|
webhook_url: 'https://webhookn8n.innova1001.com.br/webhook/avisosfinancehome'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log(`📤 Dados do webhook:`, JSON.stringify(avisoData, null, 2))
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Enviar webhook
|
// Enviar webhook
|
||||||
const webhookResponse = await fetch('https://webhookn8n.innova1001.com.br/webhook/avisosfinancehome', {
|
const webhookResponse = await fetch('https://webhookn8n.innova1001.com.br/webhook/avisosfinancehome', {
|
||||||
@ -130,6 +145,7 @@ serve(async (req) => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
const statusEnvio = webhookResponse.ok ? 'enviado' : 'erro'
|
const statusEnvio = webhookResponse.ok ? 'enviado' : 'erro'
|
||||||
|
console.log(`📊 Status do webhook: ${webhookResponse.status} - ${statusEnvio}`)
|
||||||
|
|
||||||
// Registrar envio
|
// Registrar envio
|
||||||
await supabase
|
await supabase
|
||||||
@ -137,7 +153,7 @@ serve(async (req) => {
|
|||||||
.insert({
|
.insert({
|
||||||
conta_id: conta.id,
|
conta_id: conta.id,
|
||||||
data_aviso: dataAviso,
|
data_aviso: dataAviso,
|
||||||
hora_aviso: horaAtual,
|
hora_aviso: horaAtualBrasilia,
|
||||||
dados_webhook: avisoData,
|
dados_webhook: avisoData,
|
||||||
status_envio: statusEnvio,
|
status_envio: statusEnvio,
|
||||||
tentativas: 1
|
tentativas: 1
|
||||||
@ -147,11 +163,11 @@ serve(async (req) => {
|
|||||||
avisosEnviados++
|
avisosEnviados++
|
||||||
console.log(`✅ Aviso enviado com sucesso para: ${conta.nome_conta} (${conta.whatsapp_usuario})`)
|
console.log(`✅ Aviso enviado com sucesso para: ${conta.nome_conta} (${conta.whatsapp_usuario})`)
|
||||||
} else {
|
} 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) {
|
} catch (error) {
|
||||||
console.error(`Erro ao processar conta ${conta.nome_conta}:`, error)
|
console.error(`💥 Erro ao processar conta ${conta.nome_conta}:`, error)
|
||||||
|
|
||||||
// Registrar erro
|
// Registrar erro
|
||||||
await supabase
|
await supabase
|
||||||
@ -159,22 +175,26 @@ serve(async (req) => {
|
|||||||
.insert({
|
.insert({
|
||||||
conta_id: conta.id,
|
conta_id: conta.id,
|
||||||
data_aviso: dataAviso,
|
data_aviso: dataAviso,
|
||||||
hora_aviso: horaAtual,
|
hora_aviso: horaAtualBrasilia,
|
||||||
dados_webhook: avisoData,
|
dados_webhook: avisoData,
|
||||||
status_envio: 'erro',
|
status_envio: 'erro',
|
||||||
tentativas: 1
|
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(
|
return new Response(
|
||||||
JSON.stringify({
|
JSON.stringify({
|
||||||
success: true,
|
success: true,
|
||||||
avisosEnviados,
|
avisosEnviados,
|
||||||
timestamp: agora.toISOString()
|
timestamp: agoraBrasilia.toISOString(),
|
||||||
|
horario_brasilia: horaAtualBrasilia,
|
||||||
|
data_brasilia: hojeBrasilia.toISOString().split('T')[0]
|
||||||
}),
|
}),
|
||||||
{
|
{
|
||||||
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
|
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
|
||||||
@ -182,7 +202,7 @@ serve(async (req) => {
|
|||||||
)
|
)
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Erro na função de avisos:', error)
|
console.error('💥 Erro na função de avisos:', error)
|
||||||
return new Response(
|
return new Response(
|
||||||
JSON.stringify({ error: error.message }),
|
JSON.stringify({ error: error.message }),
|
||||||
{
|
{
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user