FireW4ll's picture
Update app.py
2e5e500 verified
Raw
History Blame
4.76 kB
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()