Fix: Include new transactions in Transacoes menu
The changes ensure that credit card expenses, new expenses, and new income are correctly included in the transactions menu.
This commit is contained in:
parent
1843cd56b2
commit
80835c6ca0
@ -1,4 +1,3 @@
|
||||
|
||||
import { useState } from 'react';
|
||||
import { useForm } from 'react-hook-form';
|
||||
import { zodResolver } from '@hookform/resolvers/zod';
|
||||
@ -6,6 +5,7 @@ import * as z from 'zod';
|
||||
import { useToast } from '@/components/ui/use-toast';
|
||||
import { CartaoCredito } from '@/types/cartaoTypes';
|
||||
import { criarDespesa } from '@/services/cartaoCreditoService';
|
||||
import { gerarCartaoCodigo } from '@/services/cartao/cartaoCodigoUtils';
|
||||
import { CalendarIcon } from 'lucide-react';
|
||||
import { format } from 'date-fns';
|
||||
import { ptBR } from 'date-fns/locale';
|
||||
|
||||
@ -32,17 +32,21 @@ export async function getCartoes(): Promise<CartaoCredito[]> {
|
||||
throw new Error('Não foi possível carregar os cartões de crédito');
|
||||
}
|
||||
|
||||
// Para cada cartão, obter o total de despesas e adicionar campos que podem estar faltando
|
||||
// Para cada cartão, adicionar os campos faltantes e obter o total de despesas
|
||||
const cartoesComDespesas = await Promise.all(data.map(async (cartao) => {
|
||||
// Os campos bandeira, banco e cartao_codigo podem não existir na tabela
|
||||
// Vamos adicioná-los com valores padrão
|
||||
const cartaoCodigo = cartao.cartao_codigo ||
|
||||
gerarCartaoCodigo(cartao.nome, 'banco_padrao');
|
||||
// Gerar um código único para o cartão, já que não existe na tabela
|
||||
const cartaoCodigo = gerarCartaoCodigo(cartao.nome, 'banco_padrao');
|
||||
|
||||
// Obter o total de despesas usando o código gerado ou o nome como fallback
|
||||
const totalDespesas = await getTotalDespesasCartao(cartaoCodigo);
|
||||
|
||||
// Retornar o objeto completo com os campos faltantes
|
||||
return {
|
||||
...cartao,
|
||||
id: cartao.id,
|
||||
nome: cartao.nome,
|
||||
user_id: cartao.user_id,
|
||||
login: cartao.login || normalizedEmail,
|
||||
created_at: cartao.created_at,
|
||||
bandeira: '', // Campo não existe na tabela, definir valor padrão
|
||||
banco: '', // Campo não existe na tabela, definir valor padrão
|
||||
cartao_codigo: cartaoCodigo,
|
||||
@ -83,16 +87,19 @@ export async function getCartao(cartaoId: string): Promise<CartaoCredito | null>
|
||||
return null;
|
||||
}
|
||||
|
||||
// Adicionar campos que podem não existir no banco de dados
|
||||
const cartaoCodigo = data.cartao_codigo ||
|
||||
gerarCartaoCodigo(data.nome, 'banco_padrao');
|
||||
// Gerar um código único para o cartão, já que não existe na tabela
|
||||
const cartaoCodigo = gerarCartaoCodigo(data.nome, 'banco_padrao');
|
||||
|
||||
// Obter o total de despesas para esse cartão
|
||||
const totalDespesas = await getTotalDespesasCartao(cartaoCodigo);
|
||||
|
||||
// Retorna objeto com campos padrão para campos que não existem no banco
|
||||
// Retornar o objeto completo com os campos faltantes
|
||||
return {
|
||||
...data,
|
||||
id: data.id,
|
||||
nome: data.nome,
|
||||
user_id: data.user_id,
|
||||
login: data.login,
|
||||
created_at: data.created_at,
|
||||
bandeira: '', // Campo não existe na tabela, definir valor padrão
|
||||
banco: '', // Campo não existe na tabela, definir valor padrão
|
||||
cartao_codigo: cartaoCodigo,
|
||||
@ -137,9 +144,6 @@ export async function criarCartao(
|
||||
.from('cartoes_credito')
|
||||
.insert([{
|
||||
nome: nome,
|
||||
banco: banco,
|
||||
bandeira: bandeira,
|
||||
cartao_codigo: cartao_codigo,
|
||||
login: normalizedEmail,
|
||||
user_id: userId
|
||||
}])
|
||||
@ -150,12 +154,16 @@ export async function criarCartao(
|
||||
throw new Error('Não foi possível criar o cartão de crédito');
|
||||
}
|
||||
|
||||
// Retornar o cartão criado
|
||||
// Retornar o cartão criado com os campos adicionais
|
||||
return {
|
||||
...data[0],
|
||||
bandeira: bandeira, // Fix: was incorrectly using banco
|
||||
banco: banco, // Fix: was incorrectly using bandeira
|
||||
cartao_codigo: cartao_codigo,
|
||||
id: data[0].id,
|
||||
nome: data[0].nome,
|
||||
user_id: data[0].user_id,
|
||||
login: data[0].login || normalizedEmail,
|
||||
created_at: data[0].created_at,
|
||||
bandeira: bandeira, // Campo não existe na tabela, mas incluído no retorno
|
||||
banco: banco, // Campo não existe na tabela, mas incluído no retorno
|
||||
cartao_codigo: cartao_codigo, // Campo não existe na tabela, mas incluído no retorno
|
||||
total_despesas: 0
|
||||
} as CartaoCredito;
|
||||
} catch (error) {
|
||||
|
||||
@ -24,8 +24,8 @@ export async function getDespesasCartao(cartaoId: string): Promise<DespesaCartao
|
||||
// Primeiro, obter o cartao_codigo do cartão
|
||||
const cartao = await getCartao(cartaoId);
|
||||
|
||||
if (!cartao || !cartao.cartao_codigo) {
|
||||
console.error('Cartão não encontrado ou sem código');
|
||||
if (!cartao) {
|
||||
console.error('Cartão não encontrado');
|
||||
return [];
|
||||
}
|
||||
|
||||
@ -40,10 +40,10 @@ export async function getDespesasCartao(cartaoId: string): Promise<DespesaCartao
|
||||
throw new Error('Não foi possível carregar as despesas do cartão');
|
||||
}
|
||||
|
||||
// Garantir que todas as despesas têm cartao_codigo
|
||||
// Mapear os resultados para o tipo DespesaCartao, adicionando o cartao_codigo
|
||||
const despesasCompletas = data.map(despesa => ({
|
||||
...despesa,
|
||||
cartao_codigo: despesa.cartao_codigo || cartao.cartao_codigo
|
||||
cartao_codigo: cartao.cartao_codigo || '' // Use o código do cartão obtido anteriormente
|
||||
})) as DespesaCartao[];
|
||||
|
||||
return despesasCompletas;
|
||||
@ -87,7 +87,6 @@ export async function criarDespesa(
|
||||
.from('despesas_cartao')
|
||||
.insert([{
|
||||
cartao_id: cartao_id,
|
||||
cartao_codigo: cartao_codigo,
|
||||
valor: valor,
|
||||
data_despesa: data_despesa,
|
||||
descricao: descricao,
|
||||
@ -101,10 +100,15 @@ export async function criarDespesa(
|
||||
throw new Error('Não foi possível adicionar a despesa ao cartão');
|
||||
}
|
||||
|
||||
// Adicionar cartao_codigo se não existir no resultado
|
||||
if (!data || data.length === 0) {
|
||||
console.error('Nenhum dado retornado ao criar despesa');
|
||||
return null;
|
||||
}
|
||||
|
||||
// Adicionar cartao_codigo ao resultado
|
||||
const despesaCompleta = {
|
||||
...data[0],
|
||||
cartao_codigo: data[0].cartao_codigo || cartao_codigo
|
||||
cartao_codigo: cartao_codigo // Use o código do cartão fornecido no parâmetro
|
||||
} as DespesaCartao;
|
||||
|
||||
return despesaCompleta;
|
||||
@ -134,19 +138,31 @@ export async function getTotalDespesasCartao(cartaoCodigo: string): Promise<numb
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Normalizar o email (minúsculo e sem espaços)
|
||||
const normalizedEmail = userEmail.trim().toLowerCase();
|
||||
|
||||
try {
|
||||
// Buscar todas as despesas com o código do cartão
|
||||
// Buscar todas as despesas com o ID do cartão em vez do código
|
||||
// Já que cartao_codigo não existe na tabela despesas_cartao
|
||||
const { data: cartoes, error: cartoesError } = await supabase
|
||||
.from('cartoes_credito')
|
||||
.select('id')
|
||||
.eq('nome', cartaoCodigo) // Usamos o nome como identificador alternativo
|
||||
.limit(1);
|
||||
|
||||
if (cartoesError || !cartoes || cartoes.length === 0) {
|
||||
console.error('Erro ao buscar cartão pelo código:', cartoesError);
|
||||
return 0;
|
||||
}
|
||||
|
||||
const cartaoId = cartoes[0].id;
|
||||
|
||||
// Buscar despesas pelo ID do cartão
|
||||
const { data, error } = await supabase
|
||||
.from('despesas_cartao')
|
||||
.select('valor')
|
||||
.eq('cartao_codigo', cartaoCodigo);
|
||||
.eq('cartao_id', cartaoId);
|
||||
|
||||
if (error) {
|
||||
console.error('Erro ao calcular total de despesas:', error);
|
||||
throw new Error('Não foi possível calcular o total de despesas');
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Somar todos os valores das despesas
|
||||
|
||||
Loading…
Reference in New Issue
Block a user