import gradio as gr from datetime import date # ========================= # FUNÇÕES # ========================= def adicionar_transacao(tipo, descricao, categoria, valor, data, transacoes): if not descricao: return transacoes, atualizar_resumo(transacoes), "Digite uma descrição." if not valor or valor <= 0: return transacoes, atualizar_resumo(transacoes), "Digite um valor maior que zero." nova_transacao = { "tipo": tipo, "descricao": descricao, "categoria": categoria, "valor": valor, "data": data } transacoes.append(nova_transacao) return ( transacoes, atualizar_resumo(transacoes), f"✅ {tipo} adicionada com sucesso!" ) def atualizar_resumo(transacoes): receitas = sum( t["valor"] for t in transacoes if t["tipo"] == "Receita" ) despesas = sum( t["valor"] for t in transacoes if t["tipo"] == "Despesa" ) saldo = receitas - despesas texto = f""" ## 💰 Resumo financeiro **Receitas:** R$ {receitas:,.2f} **Despesas:** R$ {despesas:,.2f} **Saldo:** R$ {saldo:,.2f} **Quantidade de lançamentos:** {len(transacoes)} """ return texto def mostrar_transacoes(transacoes): if not transacoes: return "Nenhuma transação cadastrada." texto = "## 📋 Transações\n\n" for i, t in enumerate(reversed(transacoes), 1): sinal = "+" if t["tipo"] == "Receita" else "-" texto += ( f"**{i}. {t['descricao']}** \n" f"📅 {t['data']} | 🏷️ {t['categoria']} \n" f"{sinal} R$ {t['valor']:,.2f} \n\n" ) return texto def adicionar_e_atualizar( tipo, descricao, categoria, valor, data, transacoes ): novas_transacoes, resumo, mensagem = adicionar_transacao( tipo, descricao, categoria, valor, data, transacoes ) lista = mostrar_transacoes(novas_transacoes) return ( novas_transacoes, resumo, lista, mensagem, "", None ) def limpar_transacoes(): transacoes = [] return ( transacoes, atualizar_resumo(transacoes), mostrar_transacoes(transacoes), "🗑️ Todas as transações foram apagadas." ) # ========================= # INTERFACE # ========================= with gr.Blocks( title="Meu Controle Financeiro" ) as app: transacoes = gr.State([]) gr.Markdown( """ # 💰 Meu Controle Financeiro Controle suas **receitas, despesas e saldo** de forma simples. """ ) with gr.Row(): with gr.Column(): gr.Markdown("## ➕ Nova transação") tipo = gr.Radio( ["Receita", "Despesa"], value="Despesa", label="Tipo" ) descricao = gr.Textbox( label="Descrição", placeholder="Ex: Supermercado" ) categoria = gr.Dropdown( [ "Alimentação", "Transporte", "Moradia", "Contas", "Lazer", "Saúde", "Educação", "Salário", "Investimentos", "Outros" ], value="Outros", label="Categoria" ) valor = gr.Number( label="Valor (R$)", minimum=0 ) data = gr.Textbox( label="Data", value=str(date.today()) ) adicionar = gr.Button( "➕ Adicionar", variant="primary" ) mensagem = gr.Markdown() with gr.Column(): resumo = gr.Markdown( atualizar_resumo([]) ) gr.Markdown("---") lista = gr.Markdown( "Nenhuma transação cadastrada." ) apagar = gr.Button( "🗑️ Apagar todas as transações" ) adicionar.click( adicionar_e_atualizar, inputs=[ tipo, descricao, categoria, valor, data, transacoes ], outputs=[ transacoes, resumo, lista, mensagem, descricao, valor ] ) apagar.click( limpar_transacoes, outputs=[ transacoes, resumo, lista, mensagem ] ) if __name__ == "__main__": app.launch()