feat: botão de sincronização forçada e busca profunda de pagamentos Asaas
This commit is contained in:
parent
38d8babf0c
commit
037690f59f
|
|
@ -912,6 +912,16 @@ const Finance: React.FC<FinanceProps> = ({ data, updateData }) => {
|
||||||
<Database size={20} /> DB Supabase
|
<Database size={20} /> DB Supabase
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
|
<button
|
||||||
|
onClick={syncAsaasPayments}
|
||||||
|
disabled={isSyncing}
|
||||||
|
className="flex-1 sm:flex-none bg-emerald-600 text-white px-6 py-3 rounded-xl flex items-center justify-center gap-2 hover:bg-emerald-700 transition-all shadow-lg font-bold active:scale-95 disabled:opacity-50"
|
||||||
|
title="Sincronizar pagamentos com Asaas"
|
||||||
|
>
|
||||||
|
<RefreshCw size={20} className={isSyncing ? 'animate-spin' : ''} />
|
||||||
|
{isSyncing ? 'Sincronizando...' : 'Sincronizar Asaas'}
|
||||||
|
</button>
|
||||||
|
|
||||||
<button
|
<button
|
||||||
onClick={() => setIsModalOpen(true)}
|
onClick={() => setIsModalOpen(true)}
|
||||||
className="flex-1 sm:flex-none bg-indigo-600 text-white px-6 py-3 rounded-xl flex items-center justify-center gap-2 hover:bg-indigo-700 transition-all shadow-lg font-bold active:scale-95"
|
className="flex-1 sm:flex-none bg-indigo-600 text-white px-6 py-3 rounded-xl flex items-center justify-center gap-2 hover:bg-indigo-700 transition-all shadow-lg font-bold active:scale-95"
|
||||||
|
|
|
||||||
|
|
@ -1326,18 +1326,26 @@ function agendarRotina(tipo, hora, minuto) {
|
||||||
|
|
||||||
async function syncPaymentsWithAsaasAPI() {
|
async function syncPaymentsWithAsaasAPI() {
|
||||||
try {
|
try {
|
||||||
const url = `${ASAAS_BASE_URL}/v3/payments?limit=100`;
|
// Buscamos os últimos 100 pagamentos RECEBIDOS ou CONFIRMADOS para garantir que o sistema não perca nada
|
||||||
console.log(`[Asaas:Sync] 📡 Iniciando busca em: ${url}`);
|
const url = `${ASAAS_BASE_URL}/v3/payments?limit=100&status=RECEIVED`;
|
||||||
|
const urlConfirmed = `${ASAAS_BASE_URL}/v3/payments?limit=100&status=CONFIRMED`;
|
||||||
|
|
||||||
const response = await fetch(url, {
|
console.log(`[Asaas:Sync] 📡 Iniciando busca profunda de pagamentos recebidos...`);
|
||||||
headers: { 'access_token': ASAAS_KEY }
|
|
||||||
});
|
|
||||||
if (!response.ok) throw new Error(`Erro API Asaas: ${response.status}`);
|
|
||||||
const data = await response.json();
|
|
||||||
|
|
||||||
if (!data.data || !Array.isArray(data.data)) {
|
const fetchPayments = async (targetUrl) => {
|
||||||
console.log('[Asaas:Sync] ℹ Nenhuma cobrança encontrada na API.');
|
const response = await fetch(targetUrl, { headers: { 'access_token': ASAAS_KEY } });
|
||||||
return 0;
|
if (!response.ok) return [];
|
||||||
|
const data = await response.json();
|
||||||
|
return data.data || [];
|
||||||
|
};
|
||||||
|
|
||||||
|
const received = await fetchPayments(url);
|
||||||
|
const confirmed = await fetchPayments(urlConfirmed);
|
||||||
|
const allRecent = [...received, ...confirmed];
|
||||||
|
|
||||||
|
if (allRecent.length === 0) {
|
||||||
|
console.log('[Asaas:Sync] ℹ Nenhum pagamento recebido encontrado na API nas últimas consultas.');
|
||||||
|
return await syncRelationalToJsonPayments(); // Tenta sincronizar o que já tem no SQL para o JSON
|
||||||
}
|
}
|
||||||
|
|
||||||
const statusMap = {
|
const statusMap = {
|
||||||
|
|
@ -1350,9 +1358,9 @@ async function syncPaymentsWithAsaasAPI() {
|
||||||
'DELETED': 'CANCELADO'
|
'DELETED': 'CANCELADO'
|
||||||
};
|
};
|
||||||
|
|
||||||
console.log(`[Asaas:Sync] 📥 Recebidas ${data.data.length} cobranças do Asaas.`);
|
console.log(`[Asaas:Sync] 📥 Processando ${allRecent.length} confirmações encontradas no Asaas.`);
|
||||||
|
|
||||||
for (const payment of data.data) {
|
for (const payment of allRecent) {
|
||||||
const updateData = {
|
const updateData = {
|
||||||
valor: payment.value,
|
valor: payment.value,
|
||||||
vencimento: payment.dueDate,
|
vencimento: payment.dueDate,
|
||||||
|
|
@ -1377,7 +1385,7 @@ async function syncPaymentsWithAsaasAPI() {
|
||||||
|
|
||||||
return await syncRelationalToJsonPayments();
|
return await syncRelationalToJsonPayments();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error('[Asaas:Sync] ❌ Falha na sincronização ativa:', err.message);
|
console.error('[Asaas:Sync] ❌ Falha na sincronização profunda:', err.message);
|
||||||
throw err;
|
throw err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue