diff --git a/src/components/dashboard/CategoryChart.tsx b/src/components/dashboard/CategoryChart.tsx index 0febc49..ebbcee4 100644 --- a/src/components/dashboard/CategoryChart.tsx +++ b/src/components/dashboard/CategoryChart.tsx @@ -11,6 +11,8 @@ interface CategoryChartProps { const CategoryChart: React.FC = ({ categories, isLoading = false }) => { const renderCustomizedLabel = ({ cx, cy, midAngle, innerRadius, outerRadius, percent }: any) => { + if (percent === 0) return null; + const radius = innerRadius + (outerRadius - innerRadius) * 0.5; const x = cx + radius * Math.cos(-midAngle * Math.PI / 180); const y = cy + radius * Math.sin(-midAngle * Math.PI / 180); diff --git a/src/pages/Categorias.tsx b/src/pages/Categorias.tsx index 8de5a58..0651132 100644 --- a/src/pages/Categorias.tsx +++ b/src/pages/Categorias.tsx @@ -77,6 +77,7 @@ const CategoriasPage = () => {

Nenhuma categoria encontrada

+

Verifique se existem transações do tipo 'despesa' cadastradas

) : ( diff --git a/src/services/transacaoService.ts b/src/services/transacaoService.ts index 89fec29..b9194de 100644 --- a/src/services/transacaoService.ts +++ b/src/services/transacaoService.ts @@ -16,16 +16,16 @@ export async function getTransacoes(): Promise { console.log("Transações encontradas:", data); - // Transformar os dados recebidos para o formato esperado + // Transformar os dados recebidos para o formato esperado, normalizando os tipos return data.map((item) => ({ id: item.id.toString(), user: item.user || '', created_at: item.created_at, - valor: item.tipo === 'receita' ? Math.abs(item.valor || 0) : -Math.abs(item.valor || 0), + valor: item.tipo?.toLowerCase() === 'receita' ? Math.abs(item.valor || 0) : -Math.abs(item.valor || 0), quando: item.quando || new Date().toISOString(), detalhes: item.detalhes || '', estabelecimento: item.estabelecimento || '', - tipo: item.tipo || 'despesa', + tipo: item.tipo?.toLowerCase() || 'despesa', categoria: item.categoria || 'Outros' })); } @@ -44,11 +44,11 @@ export async function getTransactionSummary() { console.log("Dados para resumo encontrados:", data); const totalReceitas = data - .filter(item => item.tipo === 'receita') + .filter(item => item.tipo?.toLowerCase() === 'receita') .reduce((sum, item) => sum + Math.abs(item.valor || 0), 0); const totalDespesas = data - .filter(item => item.tipo === 'despesa') + .filter(item => item.tipo?.toLowerCase() === 'despesa') .reduce((sum, item) => sum + Math.abs(item.valor || 0), 0); const resultado = { @@ -66,7 +66,7 @@ export async function getCategorySummary() { const { data, error } = await supabase .from('transacoes') .select('categoria, valor, tipo') - .eq('tipo', 'despesa'); + .eq('tipo', 'Despesa'); if (error) { console.error('Erro ao buscar resumo de categorias:', error); @@ -75,6 +75,19 @@ export async function getCategorySummary() { console.log("Dados de categorias encontrados:", data); + // Vamos buscar tanto "Despesa" quanto "despesa" para garantir + const { data: dataLowerCase, error: errorLowerCase } = await supabase + .from('transacoes') + .select('categoria, valor, tipo') + .eq('tipo', 'despesa'); + + if (errorLowerCase) { + console.error('Erro ao buscar despesas minúsculas:', errorLowerCase); + } else if (dataLowerCase) { + data.push(...dataLowerCase); + console.log("Dados adicionais encontrados:", dataLowerCase); + } + // Agrupar por categoria const categorias: Record = {}; data.forEach(item => { @@ -126,14 +139,14 @@ export async function getMonthlyData() { meses[mes] = { receitas: 0, despesas: 0 }; }); - // Agrupar por mês + // Agrupar por mês, normalizando o tipo data.forEach(item => { if (item.quando && item.valor) { const data = new Date(item.quando); const mesIndex = data.getMonth(); const nomeMes = nomesMeses[mesIndex]; - if (item.tipo === 'receita') { + if (item.tipo?.toLowerCase() === 'receita') { meses[nomeMes].receitas += Math.abs(item.valor); } else { meses[nomeMes].despesas += Math.abs(item.valor);