diff --git a/src/pages/Index.tsx b/src/pages/Index.tsx index 1d6074d..3e339f3 100644 --- a/src/pages/Index.tsx +++ b/src/pages/Index.tsx @@ -47,13 +47,13 @@ const Dashboard = () => { const loadResumo = async () => { try { setIsLoading(true); - console.log("Carregando resumo financeiro..."); - const data = await getResumoFinanceiro(); + console.log("Carregando resumo financeiro com filtro:", selectedMonth); + const data = await getResumoFinanceiro(selectedMonth); console.log("Resumo carregado:", data); setResumo(data); - // Load categories for chart - const categoriesData = await getCategorySummary('despesa'); + // Load categories for chart with month filter + const categoriesData = await getCategorySummary('despesa', selectedMonth); setCategories(categoriesData); // Load monthly data for chart diff --git a/src/services/transacao/summaryService.ts b/src/services/transacao/summaryService.ts index 5fa25f5..8ef2110 100644 --- a/src/services/transacao/summaryService.ts +++ b/src/services/transacao/summaryService.ts @@ -1,13 +1,16 @@ + import { supabase } from "@/integrations/supabase/client"; import { CategorySummary, MonthlyData, ResumoFinanceiro } from "@/types/financialTypes"; import { getUserEmail, getUserGroups } from "./baseService"; /** * Get transaction summary (total income, expenses, balance) + * @param monthFilter - Optional month filter in format 'YYYY-MM' * @returns Promise with transaction summary */ -export async function getTransactionSummary(): Promise<{ totalReceitas: number; totalDespesas: number; saldo: number }> { +export async function getTransactionSummary(monthFilter?: string): Promise<{ totalReceitas: number; totalDespesas: number; saldo: number }> { console.log("📊 [getTransactionSummary] Calculando resumo de transações..."); + console.log("📊 [getTransactionSummary] Filtro de mês:", monthFilter); const normalizedEmail = getUserEmail(); @@ -28,6 +31,20 @@ export async function getTransactionSummary(): Promise<{ totalReceitas: number; query = query.eq('login', normalizedEmail); } + // Apply month filter if provided + if (monthFilter) { + const startDate = `${monthFilter}-01`; + const year = parseInt(monthFilter.split('-')[0]); + const month = parseInt(monthFilter.split('-')[1]); + const endDate = new Date(year, month, 0).toISOString().split('T')[0]; + + query = query + .gte('quando', startDate) + .lte('quando', `${endDate}T23:59:59.999Z`); + + console.log(`📅 [getTransactionSummary] Filtro de data aplicado: ${startDate} até ${endDate}`); + } + const { data, error } = await query; if (error) { @@ -56,10 +73,12 @@ export async function getTransactionSummary(): Promise<{ totalReceitas: number; /** * Get financial summary including credit cards + * @param monthFilter - Optional month filter in format 'YYYY-MM' * @returns Promise with complete financial summary */ -export async function getResumoFinanceiro(): Promise { +export async function getResumoFinanceiro(monthFilter?: string): Promise { console.log("📊 [getResumoFinanceiro] Calculando resumo financeiro completo..."); + console.log("📊 [getResumoFinanceiro] Filtro de mês:", monthFilter); const normalizedEmail = getUserEmail(); @@ -80,6 +99,20 @@ export async function getResumoFinanceiro(): Promise { query = query.eq('login', normalizedEmail); } + // Apply month filter if provided + if (monthFilter) { + const startDate = `${monthFilter}-01`; + const year = parseInt(monthFilter.split('-')[0]); + const month = parseInt(monthFilter.split('-')[1]); + const endDate = new Date(year, month, 0).toISOString().split('T')[0]; + + query = query + .gte('quando', startDate) + .lte('quando', `${endDate}T23:59:59.999Z`); + + console.log(`📅 [getResumoFinanceiro] Filtro de data aplicado: ${startDate} até ${endDate}`); + } + const { data, error } = await query; if (error) { @@ -95,12 +128,28 @@ export async function getResumoFinanceiro(): Promise { .filter(t => t.tipo?.toLowerCase() === 'despesa') .reduce((sum, t) => sum + Number(t.valor || 0), 0); - // Get credit card expenses - const { data: cartaoData, error: cartaoError } = await supabase + // Get credit card expenses with month filter + let cartaoQuery = supabase .from('despesas_cartao') .select('valor') .eq('login', normalizedEmail); + // Apply month filter to credit card expenses if provided + if (monthFilter) { + const startDate = `${monthFilter}-01`; + const year = parseInt(monthFilter.split('-')[0]); + const month = parseInt(monthFilter.split('-')[1]); + const endDate = new Date(year, month, 0).toISOString().split('T')[0]; + + cartaoQuery = cartaoQuery + .gte('data_despesa', startDate) + .lte('data_despesa', endDate); + + console.log(`📅 [getResumoFinanceiro] Filtro aplicado também aos cartões: ${startDate} até ${endDate}`); + } + + const { data: cartaoData, error: cartaoError } = await cartaoQuery; + const totalCartoes = cartaoError ? 0 : (cartaoData || []).reduce((sum, despesa) => sum + Number(despesa.valor || 0), 0); @@ -123,10 +172,12 @@ export async function getResumoFinanceiro(): Promise { /** * Get category summary for expenses or income * @param tipo - Transaction type filter ('despesa', 'receita', 'all') + * @param monthFilter - Optional month filter in format 'YYYY-MM' * @returns Promise with array of category summaries */ -export async function getCategorySummary(tipo: string = 'despesa'): Promise { +export async function getCategorySummary(tipo: string = 'despesa', monthFilter?: string): Promise { console.log(`📋 [getCategorySummary] Obtendo resumo por categoria para tipo: ${tipo}`); + console.log("📋 [getCategorySummary] Filtro de mês:", monthFilter); const normalizedEmail = getUserEmail(); @@ -152,6 +203,20 @@ export async function getCategorySummary(tipo: string = 'despesa'): Promise