diff --git a/src/components/dashboard/DashboardSummaryCards.tsx b/src/components/dashboard/DashboardSummaryCards.tsx index a9363d6..252b3fc 100644 --- a/src/components/dashboard/DashboardSummaryCards.tsx +++ b/src/components/dashboard/DashboardSummaryCards.tsx @@ -16,7 +16,7 @@ const DashboardSummaryCards: React.FC = ({ resumo, f const saldo = resumo ? resumo.totalReceitas - resumo.totalDespesas - (resumo.totalCartoes || 0) : 0; return ( -
+
{/* Card Receitas - Clicável */} = ({ resumo, f

Receitas

-

+

{resumo ? formatCurrency(resumo.totalReceitas) : 'R$ 0,00'}

Clique para ver detalhes

@@ -59,7 +59,7 @@ const DashboardSummaryCards: React.FC = ({ resumo, f

Despesas

-

+

{resumo ? formatCurrency(resumo.totalDespesas) : 'R$ 0,00'}

{resumo && resumo.totalCartoes > 0 && ( @@ -86,7 +86,7 @@ const DashboardSummaryCards: React.FC = ({ resumo, f

Saldo

-

= 0 ? 'text-blue-600' : 'text-red-600' }`}> {resumo ? formatCurrency(saldo) : 'R$ 0,00'} @@ -106,10 +106,10 @@ const DashboardSummaryCards: React.FC = ({ resumo, f

Economia

-

+

-22.2%

-

{resumo ? formatCurrency(Math.abs(saldo)) : 'R$ 0,00'}

+

{resumo ? formatCurrency(Math.abs(saldo)) : 'R$ 0,00'}

diff --git a/src/pages/Index.tsx b/src/pages/Index.tsx index a50a4a7..1d6074d 100644 --- a/src/pages/Index.tsx +++ b/src/pages/Index.tsx @@ -9,17 +9,21 @@ import DashboardLoadingState from "@/components/dashboard/DashboardLoadingState" import DashboardSummaryCards from "@/components/dashboard/DashboardSummaryCards"; import DashboardCharts from "@/components/dashboard/DashboardCharts"; import DashboardRecentTransactions from "@/components/dashboard/DashboardRecentTransactions"; +import { MonthFilter } from "@/components/filters/MonthFilter"; const Dashboard = () => { const [resumo, setResumo] = useState(null); const [categories, setCategories] = useState([]); const [monthlyData, setMonthlyData] = useState([]); const [isLoading, setIsLoading] = useState(true); + const [selectedMonth, setSelectedMonth] = useState(() => { + const now = new Date(); + return `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}`; + }); const { toast } = useToast(); const getCurrentMonth = () => { - const now = new Date(); - return `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}`; + return selectedMonth; }; const { @@ -69,7 +73,7 @@ const Dashboard = () => { useEffect(() => { loadResumo(); - }, [toast]); + }, [toast, selectedMonth]); if (isLoading) { return ; @@ -79,6 +83,15 @@ const Dashboard = () => {
+ {/* Filtro de Mês/Ano */} +
+

Dashboard

+ +
+ { const location = useLocation(); + const [selectedMonth, setSelectedMonth] = useState(() => { + const now = new Date(); + return `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}`; + }); + const { transactions, isLoading, @@ -31,7 +37,7 @@ const Transacoes = () => { handleOpenDialog, handleOpenCartaoCreditoDialog, loadTransactions - } = useTransactions(); + } = useTransactions({ monthFilter: selectedMonth }); // Aplicar filtro inicial se vier do dashboard useEffect(() => { @@ -54,6 +60,14 @@ const Transacoes = () => { return (
+
+

Transações

+ +
+ ({ categoria: d.categoria, valor: d.valor, tipo: d.tipo }))); + console.log(`📋 [getCategorySummary] Dados recebidos (${data.length} registros):`, data.slice(0, 5)); // Group by category and sum values const categoryMap: { [key: string]: number } = {}; let total = 0; data.forEach((transaction) => { - // Usar a categoria exata ou 'Outros' se for null/undefined/vazia - const categoria = transaction.categoria && transaction.categoria.trim() !== '' - ? transaction.categoria.trim() - : 'Outros'; + // Tratar categorias vazias, nulas ou indefinidas + let categoria = 'Outros'; + + if (transaction.categoria && typeof transaction.categoria === 'string') { + const cleanCategory = transaction.categoria.trim(); + if (cleanCategory.length > 0) { + categoria = cleanCategory; + } + } const valor = Math.abs(Number(transaction.valor || 0)); - console.log(`📋 [getCategorySummary] Processando: categoria='${categoria}', valor=${valor}`); - - categoryMap[categoria] = (categoryMap[categoria] || 0) + valor; - total += valor; + if (valor > 0) { + categoryMap[categoria] = (categoryMap[categoria] || 0) + valor; + total += valor; + } }); - console.log(`📋 [getCategorySummary] Mapeamento final de categorias:`, categoryMap); + console.log(`📋 [getCategorySummary] Categorias encontradas:`, Object.keys(categoryMap)); console.log(`📋 [getCategorySummary] Total geral: ${total}`); // Enhanced color palette with more distinct colors - avoiding white/light colors const colors = [ '#FF6B6B', '#4ECDC4', '#45B7D1', '#96CEB4', '#FFEAA7', - '#DDA0DD', '#98D8C8', '#F7DC6F', '#BB8FCE', '#85C1E9', - '#F8C471', '#82E0AA', '#F1948A', '#85C1E9', '#D7BDE2', - '#A3E4D7', '#FAD7A0', '#D5A6BD', '#AED6F1', '#A9DFBF', - '#FF8A80', '#80CBC4', '#81C784', '#FFB74D', '#F48FB1', - '#CE93D8', '#90CAF9', '#A5D6A7', '#FFCC02', '#FFAB40' + '#DDA0DD', '#98D8C8', '#F7DC6F', '#BB8FCE', '#85C1E9' ]; // Convert to CategorySummary array with colors @@ -207,7 +209,7 @@ export async function getCategorySummary(tipo: string = 'despesa'): Promise b.valor - a.valor); - console.log(`📋 [getCategorySummary] ${categoryArray.length} categorias processadas:`, categoryArray); + console.log(`📋 [getCategorySummary] Resultado final:`, categoryArray); return categoryArray; } catch (error) { console.error('💥 [getCategorySummary] Erro geral:', error);