Fix: Dashboard and Categorias page data
The dashboard was not displaying expenses correctly, and the categorias menu was empty. This commit revises the code to ensure expenses are correctly calculated and displayed, and that the categorias menu populates with data.
This commit is contained in:
parent
8a056a56dc
commit
0df3fc10ee
@ -11,6 +11,8 @@ interface CategoryChartProps {
|
||||
|
||||
const CategoryChart: React.FC<CategoryChartProps> = ({ 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);
|
||||
|
||||
@ -77,6 +77,7 @@ const CategoriasPage = () => {
|
||||
<Card>
|
||||
<CardContent className="py-10 text-center">
|
||||
<p className="text-muted-foreground">Nenhuma categoria encontrada</p>
|
||||
<p className="mt-2 text-sm">Verifique se existem transações do tipo 'despesa' cadastradas</p>
|
||||
</CardContent>
|
||||
</Card>
|
||||
) : (
|
||||
|
||||
@ -16,16 +16,16 @@ export async function getTransacoes(): Promise<Transaction[]> {
|
||||
|
||||
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<string, number> = {};
|
||||
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);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user