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 { useState } from 'react';
|
||||||
import { useForm } from 'react-hook-form';
|
import { useForm } from 'react-hook-form';
|
||||||
import { zodResolver } from '@hookform/resolvers/zod';
|
import { zodResolver } from '@hookform/resolvers/zod';
|
||||||
@ -6,6 +5,7 @@ import * as z from 'zod';
|
|||||||
import { useToast } from '@/components/ui/use-toast';
|
import { useToast } from '@/components/ui/use-toast';
|
||||||
import { CartaoCredito } from '@/types/cartaoTypes';
|
import { CartaoCredito } from '@/types/cartaoTypes';
|
||||||
import { criarDespesa } from '@/services/cartaoCreditoService';
|
import { criarDespesa } from '@/services/cartaoCreditoService';
|
||||||
|
import { gerarCartaoCodigo } from '@/services/cartao/cartaoCodigoUtils';
|
||||||
import { CalendarIcon } from 'lucide-react';
|
import { CalendarIcon } from 'lucide-react';
|
||||||
import { format } from 'date-fns';
|
import { format } from 'date-fns';
|
||||||
import { ptBR } from 'date-fns/locale';
|
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');
|
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) => {
|
const cartoesComDespesas = await Promise.all(data.map(async (cartao) => {
|
||||||
// Os campos bandeira, banco e cartao_codigo podem não existir na tabela
|
// Gerar um código único para o cartão, já que não existe na tabela
|
||||||
// Vamos adicioná-los com valores padrão
|
const cartaoCodigo = gerarCartaoCodigo(cartao.nome, 'banco_padrao');
|
||||||
const cartaoCodigo = cartao.cartao_codigo ||
|
|
||||||
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);
|
const totalDespesas = await getTotalDespesasCartao(cartaoCodigo);
|
||||||
|
|
||||||
|
// Retornar o objeto completo com os campos faltantes
|
||||||
return {
|
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
|
bandeira: '', // Campo não existe na tabela, definir valor padrão
|
||||||
banco: '', // Campo não existe na tabela, definir valor padrão
|
banco: '', // Campo não existe na tabela, definir valor padrão
|
||||||
cartao_codigo: cartaoCodigo,
|
cartao_codigo: cartaoCodigo,
|
||||||
@ -83,16 +87,19 @@ export async function getCartao(cartaoId: string): Promise<CartaoCredito | null>
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Adicionar campos que podem não existir no banco de dados
|
// Gerar um código único para o cartão, já que não existe na tabela
|
||||||
const cartaoCodigo = data.cartao_codigo ||
|
const cartaoCodigo = gerarCartaoCodigo(data.nome, 'banco_padrao');
|
||||||
gerarCartaoCodigo(data.nome, 'banco_padrao');
|
|
||||||
|
|
||||||
// Obter o total de despesas para esse cartão
|
// Obter o total de despesas para esse cartão
|
||||||
const totalDespesas = await getTotalDespesasCartao(cartaoCodigo);
|
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 {
|
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
|
bandeira: '', // Campo não existe na tabela, definir valor padrão
|
||||||
banco: '', // Campo não existe na tabela, definir valor padrão
|
banco: '', // Campo não existe na tabela, definir valor padrão
|
||||||
cartao_codigo: cartaoCodigo,
|
cartao_codigo: cartaoCodigo,
|
||||||
@ -137,9 +144,6 @@ export async function criarCartao(
|
|||||||
.from('cartoes_credito')
|
.from('cartoes_credito')
|
||||||
.insert([{
|
.insert([{
|
||||||
nome: nome,
|
nome: nome,
|
||||||
banco: banco,
|
|
||||||
bandeira: bandeira,
|
|
||||||
cartao_codigo: cartao_codigo,
|
|
||||||
login: normalizedEmail,
|
login: normalizedEmail,
|
||||||
user_id: userId
|
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');
|
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 {
|
return {
|
||||||
...data[0],
|
id: data[0].id,
|
||||||
bandeira: bandeira, // Fix: was incorrectly using banco
|
nome: data[0].nome,
|
||||||
banco: banco, // Fix: was incorrectly using bandeira
|
user_id: data[0].user_id,
|
||||||
cartao_codigo: cartao_codigo,
|
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
|
total_despesas: 0
|
||||||
} as CartaoCredito;
|
} as CartaoCredito;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
@ -24,8 +24,8 @@ export async function getDespesasCartao(cartaoId: string): Promise<DespesaCartao
|
|||||||
// Primeiro, obter o cartao_codigo do cartão
|
// Primeiro, obter o cartao_codigo do cartão
|
||||||
const cartao = await getCartao(cartaoId);
|
const cartao = await getCartao(cartaoId);
|
||||||
|
|
||||||
if (!cartao || !cartao.cartao_codigo) {
|
if (!cartao) {
|
||||||
console.error('Cartão não encontrado ou sem código');
|
console.error('Cartão não encontrado');
|
||||||
return [];
|
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');
|
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 => ({
|
const despesasCompletas = data.map(despesa => ({
|
||||||
...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[];
|
})) as DespesaCartao[];
|
||||||
|
|
||||||
return despesasCompletas;
|
return despesasCompletas;
|
||||||
@ -87,7 +87,6 @@ export async function criarDespesa(
|
|||||||
.from('despesas_cartao')
|
.from('despesas_cartao')
|
||||||
.insert([{
|
.insert([{
|
||||||
cartao_id: cartao_id,
|
cartao_id: cartao_id,
|
||||||
cartao_codigo: cartao_codigo,
|
|
||||||
valor: valor,
|
valor: valor,
|
||||||
data_despesa: data_despesa,
|
data_despesa: data_despesa,
|
||||||
descricao: descricao,
|
descricao: descricao,
|
||||||
@ -101,10 +100,15 @@ export async function criarDespesa(
|
|||||||
throw new Error('Não foi possível adicionar a despesa ao cartão');
|
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 = {
|
const despesaCompleta = {
|
||||||
...data[0],
|
...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;
|
} as DespesaCartao;
|
||||||
|
|
||||||
return despesaCompleta;
|
return despesaCompleta;
|
||||||
@ -134,19 +138,31 @@ export async function getTotalDespesasCartao(cartaoCodigo: string): Promise<numb
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Normalizar o email (minúsculo e sem espaços)
|
|
||||||
const normalizedEmail = userEmail.trim().toLowerCase();
|
|
||||||
|
|
||||||
try {
|
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
|
const { data, error } = await supabase
|
||||||
.from('despesas_cartao')
|
.from('despesas_cartao')
|
||||||
.select('valor')
|
.select('valor')
|
||||||
.eq('cartao_codigo', cartaoCodigo);
|
.eq('cartao_id', cartaoId);
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
console.error('Erro ao calcular total de despesas:', 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
|
// Somar todos os valores das despesas
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user