Files
controles/app.py

257 lines
8.2 KiB
Python
Raw Normal View History

2025-01-08 00:19:49 -03:00
from flask import Flask, request, render_template, redirect, url_for
from functions.database import execute_query
2025-01-08 00:19:49 -03:00
from functions.database import (
Base,
Militante,
CotaMensal,
TipoPagamento,
Pagamento,
MaterialVendido,
TipoMaterial,
VendaJornalAvulso,
engine,
AssinaturaAnual,
RelatorioCotasMensais,
RelatorioVendasMateriais,
engine,
)
from sqlalchemy import create_engine, and_
from sqlalchemy.orm import sessionmaker
from datetime import datetime
from flask_bootstrap import Bootstrap5
2025-01-08 00:19:49 -03:00
Session = sessionmaker(bind=engine)
session = Session()
app = Flask(__name__)
bootstrap = Bootstrap5(app)
2025-01-08 00:19:49 -03:00
def session_run(model):
session.add(model)
try:
session.commit()
except Exception as e:
print(e)
session.rollback()
# Rota para criar um novo militante
2025-01-08 00:19:49 -03:00
@app.route("/militantes/novo", methods=["GET", "POST"])
def novo_militante():
2025-01-08 00:19:49 -03:00
if request.method == "POST":
novo_militante = Militante(
nome=request.form["nome"],
cpf=request.form["cpf"],
email=request.form["email"],
telefone=request.form["telefone"],
endereco=request.form["endereco"],
filiado=request.form.get("filiado", False),
)
session_run(novo_militante)
# execute_query(query, (nome, cpf, email, telefone, endereco, filiado))
return redirect(url_for("listar_militantes"))
return render_template("novo_militante.html")
# Rota para listar militantes
2025-01-08 00:19:49 -03:00
@app.route("/militantes")
def listar_militantes():
2025-01-08 00:19:49 -03:00
militantes = session.query(Militante).all()
return render_template("listar_militantes.html", militantes=militantes)
# Rota para criar uma nova cota mensal
2025-01-08 00:19:49 -03:00
@app.route("/cotas/novo", methods=["GET", "POST"])
def nova_cota():
2025-01-08 00:19:49 -03:00
if request.method == "POST":
cotas_mensais = CotaMensal(
militante_id=request.form["militante_id"],
valor_antigo=request.form["valor_antigo"],
valor_novo=request.form["valor_novo"],
data_alteracao=datetime.strptime(request.form["data_alteracao"], "%Y-%m-%d")
)
2025-01-08 00:19:49 -03:00
session_run(cotas_mensais)
return redirect(url_for("listar_cotas"))
return render_template("nova_cota.html")
# Rota para listar cotas mensais
2025-01-08 00:19:49 -03:00
@app.route("/cotas")
def listar_cotas():
2025-01-08 00:19:49 -03:00
cotas = session.query(CotaMensal).all()
return render_template("listar_cotas.html", cotas=cotas)
# Rota para criar um novo pagamento
2025-01-08 00:19:49 -03:00
@app.route("/pagamentos/novo", methods=["GET", "POST"])
def novo_pagamento():
2025-01-08 00:19:49 -03:00
if request.method == "POST":
pagamentos = Pagamento(
militante_id=request.form["militante_id"],
tipo_pagamento_id=request.form["tipo_pagamento_id"],
valor=request.form["valor"],
data_pagamento=datetime.strptime(request.form["data_pagamento"], "%Y-%m-%d")
)
session_run(pagamentos)
return redirect(url_for("listar_pagamentos"))
2025-01-08 00:19:49 -03:00
return render_template("novo_pagamento.html")
# Rota para listar pagamentos
2025-01-08 00:19:49 -03:00
@app.route("/pagamentos")
def listar_pagamentos():
2025-01-08 00:19:49 -03:00
pagamentos = session.query(Pagamento).all()
return render_template("listar_pagamentos.html", pagamentos=pagamentos)
# Rota para criar um novo material vendido
2025-01-08 00:19:49 -03:00
@app.route("/materiais/novo", methods=["GET", "POST"])
def novo_material():
2025-01-08 00:19:49 -03:00
if request.method == "POST":
materiais_vendidos = MaterialVendido(
militante_id=request.form["militante_id"],
tipo_material_id=request.form["tipo_material_id"],
descricao=request.form["descricao"],
valor=request.form["valor"],
data_venda=datetime.strptime(request.form["data_venda"], "%Y-%m-%d"),
)
session_run(materiais_vendidos)
return redirect(url_for("listar_materiais"))
return render_template("novo_material.html")
# Rota para listar materiais vendidos
2025-01-08 00:19:49 -03:00
@app.route("/materiais")
def listar_materiais():
2025-01-08 00:19:49 -03:00
materiais = session.query(MaterialVendido).all()
return render_template("listar_materiais.html", materiais=materiais)
# Rota para criar uma nova venda de jornais avulsos
2025-01-08 00:19:49 -03:00
@app.route("/jornais/novo", methods=["GET", "POST"])
def nova_venda_jornal():
2025-01-08 00:19:49 -03:00
if request.method == "POST":
vendas_jornais_avulsos = VendaJornalAvulso(
militante_id=request.form["militante_id"],
quantidade=request.form["quantidade"],
valor_total=request.form["valor_total"],
data_venda=datetime.strptime(request.form["data_venda"], "%Y-%m-%d"),
)
session_run(VendaJornalAvulso)
return redirect(url_for("listar_vendas_jornal"))
2025-01-08 00:19:49 -03:00
return render_template("nova_venda_jornal.html")
# Rota para listar vendas de jornais avulsos
2025-01-08 00:19:49 -03:00
@app.route("/jornais")
def listar_vendas_jornal():
2025-01-08 00:19:49 -03:00
vendas = session.query(VendaJornalAvulso).all()
return render_template("listar_vendas_jornal.html", vendas=vendas)
# Rota para criar uma nova assinatura anual
2025-01-08 00:19:49 -03:00
@app.route("/assinaturas/novo", methods=["GET", "POST"])
def nova_assinatura():
2025-01-08 00:19:49 -03:00
if request.method == "POST":
assinaturas_anuais = AssinaturaAnual(
militante_id=request.form["militante_id"],
tipo_material_id=request.form["tipo_material_id"],
quantidade=request.form["quantidade"],
valor_total=request.form["valor_total"],
data_inicio=datetime.strptime(request.form["data_inicio"], "%Y-%m-%d"),
data_fim=datetime.strptime(request.form["data_fim"], "%Y-%m-%d")
)
session_run(assinaturas_anuais)
return redirect(url_for("listar_assinaturas"))
return render_template("nova_assinatura.html")
# Rota para listar assinaturas anuais
2025-01-08 00:19:49 -03:00
@app.route("/assinaturas")
def listar_assinaturas():
2025-01-08 00:19:49 -03:00
assinaturas = session.query(AssinaturaAnual).all()
return render_template("listar_assinaturas.html", assinaturas=assinaturas)
# Rota para criar um novo relatório de cotas mensais
2025-01-08 00:19:49 -03:00
@app.route("/relatorios/cotas/novo", methods=["GET", "POST"])
def novo_relatorio_cotas():
2025-01-08 00:19:49 -03:00
if request.method == "POST":
relatorio_cotas_mensais = RelatorioCotasMensais(
setor_id=request.form["setor_id"],
comite_id=request.form["comite_id"],
total_cotas=request.form["total_cotas"],
data_relatorio=datetime.strptime(request.form["data_relatorio"], "%Y-%m-%d")
)
session_run(relatorio_cotas_mensais)
return redirect(url_for("listar_relatorios_cotas"))
2025-01-08 00:19:49 -03:00
return render_template("novo_relatorio_cotas.html")
# Rota para listar relatórios de cotas mensais
2025-01-08 00:19:49 -03:00
@app.route("/relatorios/cotas")
def listar_relatorios_cotas():
2025-01-08 00:19:49 -03:00
relatorios = session.query(RelatorioCotasMensais).all()
return render_template("listar_relatorios_cotas.html", relatorios=relatorios)
# Rota para criar um novo relatório de vendas de materiais
2025-01-08 00:19:49 -03:00
@app.route("/relatorios/vendas/novo", methods=["GET", "POST"])
def novo_relatorio_vendas():
2025-01-08 00:19:49 -03:00
if request.method == "POST":
relatorio_vendas_materiais = RelatorioVendasMateriais(
setor_id=request.form["setor_id"],
comite_id=request.form["comite_id"],
total_vendas=request.form["total_vendas"],
data_relatorio=datetime.strptime(request.form["data_relatorio"], "%Y-%m-%d")
)
session_run(relatorio_vendas_materiais)
return redirect(url_for("listar_relatorios_vendas"))
2025-01-08 00:19:49 -03:00
return render_template("novo_relatorio_vendas.html")
# Rota para listar relatórios de vendas de materiais
2025-01-08 00:19:49 -03:00
@app.route("/relatorios/vendas")
def listar_relatorios_vendas():
2025-01-08 00:19:49 -03:00
relatorios = session.query(RelatorioVendasMateriais).all()
return render_template("listar_relatorios_vendas.html", relatorios=relatorios)
@app.route("/")
def home():
links = []
for rule in app.url_map.iter_rules():
if "GET" in rule.methods and has_no_empty_params(rule):
url = url_for(rule.endpoint, **(rule.defaults or {}))
links.append((url, rule.endpoint))
return render_template('home.html', links=links)
2025-01-08 00:19:49 -03:00
def has_no_empty_params(rule):
defaults = rule.defaults if rule.defaults is not None else ()
arguments = rule.arguments if rule.arguments is not None else ()
return len(defaults) >= len(arguments)
# Iniciar o servidor Flask
2025-01-08 00:19:49 -03:00
if __name__ == "__main__":
app.run(debug=True)