diff --git a/src/components/credito/DespesasList.tsx b/src/components/credito/DespesasList.tsx index e755abd..3438c3c 100644 --- a/src/components/credito/DespesasList.tsx +++ b/src/components/credito/DespesasList.tsx @@ -10,7 +10,7 @@ import { TableHeader, TableRow, } from "@/components/ui/table"; -import { formatDistanceToNow } from 'date-fns'; +import { format } from 'date-fns'; import { ptBR } from 'date-fns/locale'; import { Pagination, @@ -40,12 +40,13 @@ export function DespesasList({ despesas, isLoading }: DespesasListProps) { }; const formatDate = (dateString: string) => { - const options: Intl.DateTimeFormatOptions = { - day: '2-digit', - month: '2-digit', - year: 'numeric' - }; - return new Date(dateString).toLocaleDateString('pt-BR', options); + try { + const date = new Date(dateString); + return format(date, 'dd/MM/yyyy', { locale: ptBR }); + } catch (error) { + console.error("Error formatting date:", error); + return dateString; + } }; if (isLoading) { diff --git a/src/components/transaction/TransactionDateField.tsx b/src/components/transaction/TransactionDateField.tsx index 486f3c4..2647b2d 100644 --- a/src/components/transaction/TransactionDateField.tsx +++ b/src/components/transaction/TransactionDateField.tsx @@ -3,21 +3,57 @@ import { FormControl, FormItem, FormLabel, FormMessage } from "@/components/ui/f import { Input } from "@/components/ui/input"; import { UseFormReturn } from "react-hook-form"; import { TransactionFormValues } from "@/hooks/useTransactionForm"; +import { CalendarIcon } from "lucide-react"; +import { Button } from "@/components/ui/button"; +import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover"; +import { Calendar } from "@/components/ui/calendar"; +import { cn } from "@/lib/utils"; +import { format } from "date-fns"; +import { ptBR } from "date-fns/locale"; interface TransactionDateFieldProps { form: UseFormReturn; } export function TransactionDateField({ form }: TransactionDateFieldProps) { + const date = form.watch("quando"); + return ( - + Data - - - + + + + + + + + { + if (date) { + form.setValue("quando", date.toISOString()); + } + }} + initialFocus + locale={ptBR} + /> + + ); diff --git a/src/integrations/supabase/types.ts b/src/integrations/supabase/types.ts index 3bb7204..b65977b 100644 --- a/src/integrations/supabase/types.ts +++ b/src/integrations/supabase/types.ts @@ -146,7 +146,7 @@ export type Database = { } despesas_cartao: { Row: { - cartao_id: string + cartao_id: string | null created_at: string data_despesa: string descricao: string @@ -156,7 +156,7 @@ export type Database = { valor: number } Insert: { - cartao_id: string + cartao_id?: string | null created_at?: string data_despesa: string descricao: string @@ -166,7 +166,7 @@ export type Database = { valor: number } Update: { - cartao_id?: string + cartao_id?: string | null created_at?: string data_despesa?: string descricao?: string diff --git a/src/pages/CartoesCredito.tsx b/src/pages/CartoesCredito.tsx index 4723ab0..03ea6cc 100644 --- a/src/pages/CartoesCredito.tsx +++ b/src/pages/CartoesCredito.tsx @@ -40,6 +40,7 @@ const CartoesCreditoPage = () => { const loadDespesasCartao = async (cartaoId: string) => { try { setIsLoading(true); + // This function now uses login+nome matching internally instead of cartao_id const data = await getDespesasCartao(cartaoId); setDespesas(data); } catch (error) { diff --git a/src/services/cartao/despesasService.ts b/src/services/cartao/despesasService.ts index b4fb502..da265ef 100644 --- a/src/services/cartao/despesasService.ts +++ b/src/services/cartao/despesasService.ts @@ -4,8 +4,9 @@ import { DespesaCartao } from "@/types/cartaoTypes"; import { getCartao } from "./cartoesService"; /** - * Fetches expenses for a specific credit card - * @param cartaoId Card ID + * Fetches expenses for a specific credit card based on login and nome + * @param cartaoId Card ID (still used for type compatibility) + * @param cardName Card name to match with expenses * @returns Array of card expenses */ export async function getDespesasCartao(cartaoId: string): Promise { @@ -21,7 +22,7 @@ export async function getDespesasCartao(cartaoId: string): Promise ({ ...despesa, - cartao_codigo: cartao.cartao_codigo || '' // Use o código do cartão obtido anteriormente + cartao_codigo: cartao.cartao_codigo || '', + cartao_id: cartaoId // Keep for backwards compatibility })) as DespesaCartao[]; return despesasCompletas; @@ -55,7 +61,7 @@ export async function getDespesasCartao(cartaoId: string): Promise { @@ -155,18 +160,42 @@ export async function getTotalDespesasCartao(cartaoId: string): Promise } try { - // Buscar despesas pelo ID do cartão + // Get the user's email from localStorage + const userEmail = localStorage.getItem('userEmail'); + if (!userEmail) { + console.error('Email do usuário não encontrado'); + return 0; + } + + const normalizedEmail = userEmail.trim().toLowerCase(); + + // Get the card's name from cartoes_credito + const { data: cardData, error: cardError } = await supabase + .from('cartoes_credito') + .select('nome') + .eq('id', cartaoId) + .single(); + + if (cardError || !cardData) { + console.error('Erro ao obter nome do cartão:', cardError); + return 0; + } + + const cardName = cardData.nome; + + // Now get expenses matching both login and nome const { data, error } = await supabase .from('despesas_cartao') .select('valor') - .eq('cartao_id', cartaoId); + .eq('login', normalizedEmail) + .eq('nome', cardName); if (error) { console.error('Erro ao calcular total de despesas:', error); return 0; } - // Somar todos os valores das despesas + // Sum all expense values const total = data.reduce((acc, item) => acc + Number(item.valor), 0); return total; } catch (error) {