from flask import Flask, request, render_template, redirect, url_for from functions.database import execute_query 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 Session = sessionmaker(bind=engine) session = Session() app = Flask(__name__) def session_run(model): session.add(model) try: session.commit() except Exception as e: print(e) session.rollback() # Rota para criar um novo militante @app.route("/militantes/novo", methods=["GET", "POST"]) def novo_militante(): 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 @app.route("/militantes") def listar_militantes(): militantes = session.query(Militante).all() return render_template("listar_militantes.html", militantes=militantes) # Rota para criar uma nova cota mensal @app.route("/cotas/novo", methods=["GET", "POST"]) def nova_cota(): 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") ) session_run(cotas_mensais) return redirect(url_for("listar_cotas")) return render_template("nova_cota.html") # Rota para listar cotas mensais @app.route("/cotas") def listar_cotas(): cotas = session.query(CotaMensal).all() return render_template("listar_cotas.html", cotas=cotas) # Rota para criar um novo pagamento @app.route("/pagamentos/novo", methods=["GET", "POST"]) def novo_pagamento(): 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")) return render_template("novo_pagamento.html") # Rota para listar pagamentos @app.route("/pagamentos") def listar_pagamentos(): pagamentos = session.query(Pagamento).all() return render_template("listar_pagamentos.html", pagamentos=pagamentos) # Rota para criar um novo material vendido @app.route("/materiais/novo", methods=["GET", "POST"]) def novo_material(): 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 @app.route("/materiais") def listar_materiais(): materiais = session.query(MaterialVendido).all() return render_template("listar_materiais.html", materiais=materiais) # Rota para criar uma nova venda de jornais avulsos @app.route("/jornais/novo", methods=["GET", "POST"]) def nova_venda_jornal(): 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")) return render_template("nova_venda_jornal.html") # Rota para listar vendas de jornais avulsos @app.route("/jornais") def listar_vendas_jornal(): vendas = session.query(VendaJornalAvulso).all() return render_template("listar_vendas_jornal.html", vendas=vendas) # Rota para criar uma nova assinatura anual @app.route("/assinaturas/novo", methods=["GET", "POST"]) def nova_assinatura(): 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 @app.route("/assinaturas") def listar_assinaturas(): assinaturas = session.query(AssinaturaAnual).all() return render_template("listar_assinaturas.html", assinaturas=assinaturas) # Rota para criar um novo relatório de cotas mensais @app.route("/relatorios/cotas/novo", methods=["GET", "POST"]) def novo_relatorio_cotas(): 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")) return render_template("novo_relatorio_cotas.html") # Rota para listar relatórios de cotas mensais @app.route("/relatorios/cotas") def listar_relatorios_cotas(): 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 @app.route("/relatorios/vendas/novo", methods=["GET", "POST"]) def novo_relatorio_vendas(): 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")) return render_template("novo_relatorio_vendas.html") # Rota para listar relatórios de vendas de materiais @app.route("/relatorios/vendas") def listar_relatorios_vendas(): 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(): # Filter out rules we can't navigate to in a browser # and rules that require parameters if "GET" in rule.methods and has_no_empty_params(rule): url = url_for(rule.endpoint, **(rule.defaults or {})) links.append((url, rule.endpoint)) l_html = "" for l in links: l_html += f'{l[1].replace("_"," ")}
' home_html = f"""

Links

{l_html} """ return home_html 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 if __name__ == "__main__": app.run(debug=True)