um monte de coisas

This commit is contained in:
Gabu Bellon
2025-01-08 00:19:49 -03:00
parent d6357803b8
commit 02147fd6cd
23 changed files with 660 additions and 148 deletions

337
app.py
View File

@@ -1,213 +1,262 @@
from flask import Flask, request, render_template, redirect, url_for, jsonify
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'])
@app.route("/militantes/novo", methods=["GET", "POST"])
def novo_militante():
if request.method == 'POST':
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)
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),
)
query = '''
INSERT INTO militantes (nome, cpf, email, telefone, endereco, filiado)
VALUES (%s, %s, %s, %s, %s, %s)
'''
execute_query(query, (nome, cpf, email, telefone, endereco, filiado))
return redirect(url_for('listar_militantes'))
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")
return render_template('novo_militante.html')
# Rota para listar militantes
@app.route('/militantes')
@app.route("/militantes")
def listar_militantes():
query = 'SELECT * FROM militantes'
militantes = execute_query(query)
return render_template('listar_militantes.html', militantes=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'])
@app.route("/cotas/novo", methods=["GET", "POST"])
def nova_cota():
if request.method == 'POST':
militante_id = request.form['militante_id']
valor_antigo = request.form['valor_antigo']
valor_novo = request.form['valor_novo']
data_alteracao = request.form['data_alteracao']
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")
)
query = '''
INSERT INTO cotas_mensais (militante_id, valor_antigo, valor_novo, data_alteracao)
VALUES (%s, %s, %s, %s)
'''
execute_query(query, (militante_id, valor_antigo, valor_novo, data_alteracao))
return redirect(url_for('listar_cotas'))
session_run(cotas_mensais)
return redirect(url_for("listar_cotas"))
return render_template("nova_cota.html")
return render_template('nova_cota.html')
# Rota para listar cotas mensais
@app.route('/cotas')
@app.route("/cotas")
def listar_cotas():
query = 'SELECT * FROM cotas_mensais'
cotas = execute_query(query)
return render_template('listar_cotas.html', cotas=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'])
@app.route("/pagamentos/novo", methods=["GET", "POST"])
def novo_pagamento():
if request.method == 'POST':
militante_id = request.form['militante_id']
tipo_pagamento_id = request.form['tipo_pagamento_id']
valor = request.form['valor']
data_pagamento = request.form['data_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")
)
query = '''
INSERT INTO pagamentos (militante_id, tipo_pagamento_id, valor, data_pagamento)
VALUES (%s, %s, %s, %s)
'''
execute_query(query, (militante_id, tipo_pagamento_id, valor, data_pagamento))
return redirect(url_for('listar_pagamentos'))
session_run(pagamentos)
return redirect(url_for("listar_pagamentos"))
return render_template("novo_pagamento.html")
return render_template('novo_pagamento.html')
# Rota para listar pagamentos
@app.route('/pagamentos')
@app.route("/pagamentos")
def listar_pagamentos():
query = 'SELECT * FROM pagamentos'
pagamentos = execute_query(query)
return render_template('listar_pagamentos.html', pagamentos=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'])
@app.route("/materiais/novo", methods=["GET", "POST"])
def novo_material():
if request.method == 'POST':
militante_id = request.form['militante_id']
tipo_material_id = request.form['tipo_material_id']
descricao = request.form['descricao']
valor = request.form['valor']
data_venda = request.form['data_venda']
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"),
)
query = '''
INSERT INTO materiais_vendidos (militante_id, tipo_material_id, descricao, valor, data_venda)
VALUES (%s, %s, %s, %s, %s)
'''
execute_query(query, (militante_id, tipo_material_id, descricao, valor, data_venda))
return redirect(url_for('listar_materiais'))
session_run(materiais_vendidos)
return redirect(url_for("listar_materiais"))
return render_template("novo_material.html")
return render_template('novo_material.html')
# Rota para listar materiais vendidos
@app.route('/materiais')
@app.route("/materiais")
def listar_materiais():
query = 'SELECT * FROM materiais_vendidos'
materiais = execute_query(query)
return render_template('listar_materiais.html', materiais=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'])
@app.route("/jornais/novo", methods=["GET", "POST"])
def nova_venda_jornal():
if request.method == 'POST':
militante_id = request.form['militante_id']
quantidade = request.form['quantidade']
valor_total = request.form['valor_total']
data_venda = request.form['data_venda']
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"),
)
query = '''
INSERT INTO vendas_jornais_avulsos (militante_id, quantidade, valor_total, data_venda)
VALUES (%s, %s, %s, %s)
'''
execute_query(query, (militante_id, quantidade, valor_total, data_venda))
return redirect(url_for('listar_vendas_jornal'))
session_run(VendaJornalAvulso)
return redirect(url_for("listar_vendas_jornal"))
return render_template("nova_venda_jornal.html")
return render_template('nova_venda_jornal.html')
# Rota para listar vendas de jornais avulsos
@app.route('/jornais')
@app.route("/jornais")
def listar_vendas_jornal():
query = 'SELECT * FROM vendas_jornais_avulsos'
vendas = execute_query(query)
return render_template('listar_vendas_jornal.html', vendas=vendas)
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'])
@app.route("/assinaturas/novo", methods=["GET", "POST"])
def nova_assinatura():
if request.method == 'POST':
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 = request.form['data_inicio']
data_fim = request.form['data_fim']
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")
)
query = '''
INSERT INTO assinaturas_anuais (militante_id, tipo_material_id, quantidade, valor_total, data_inicio, data_fim)
VALUES (%s, %s, %s, %s, %s, %s)
'''
execute_query(query, (militante_id, tipo_material_id, quantidade, valor_total, data_inicio, data_fim))
return redirect(url_for('listar_assinaturas'))
session_run(assinaturas_anuais)
return redirect(url_for("listar_assinaturas"))
return render_template("nova_assinatura.html")
return render_template('nova_assinatura.html')
# Rota para listar assinaturas anuais
@app.route('/assinaturas')
@app.route("/assinaturas")
def listar_assinaturas():
query = 'SELECT * FROM assinaturas_anuais'
assinaturas = execute_query(query)
return render_template('listar_assinaturas.html', assinaturas=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'])
@app.route("/relatorios/cotas/novo", methods=["GET", "POST"])
def novo_relatorio_cotas():
if request.method == 'POST':
setor_id = request.form['setor_id']
comite_id = request.form['comite_id']
total_cotas = request.form['total_cotas']
data_relatorio = request.form['data_relatorio']
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")
)
query = '''
INSERT INTO relatorio_cotas_mensais (setor_id, comite_id, total_cotas, data_relatorio)
VALUES (%s, %s, %s, %s)
'''
execute_query(query, (setor_id, comite_id, total_cotas, data_relatorio))
return redirect(url_for('listar_relatorios_cotas'))
session_run(relatorio_cotas_mensais)
return redirect(url_for("listar_relatorios_cotas"))
return render_template("novo_relatorio_cotas.html")
return render_template('novo_relatorio_cotas.html')
# Rota para listar relatórios de cotas mensais
@app.route('/relatorios/cotas')
@app.route("/relatorios/cotas")
def listar_relatorios_cotas():
query = 'SELECT * FROM relatorio_cotas_mensais'
relatorios = execute_query(query)
return render_template('listar_relatorios_cotas.html', relatorios=relatorios)
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'])
@app.route("/relatorios/vendas/novo", methods=["GET", "POST"])
def novo_relatorio_vendas():
if request.method == 'POST':
setor_id = request.form['setor_id']
comite_id = request.form['comite_id']
total_vendas = request.form['total_vendas']
data_relatorio = request.form['data_relatorio']
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")
)
query = '''
INSERT INTO relatorio_vendas_materiais (setor_id, comite_id, total_vendas, data_relatorio)
VALUES (%s, %s, %s, %s)
'''
execute_query(query, (setor_id, comite_id, total_vendas, data_relatorio))
return redirect(url_for('listar_relatorios_vendas'))
session_run(relatorio_vendas_materiais)
return redirect(url_for("listar_relatorios_vendas"))
return render_template("novo_relatorio_vendas.html")
return render_template('novo_relatorio_vendas.html')
# Rota para listar relatórios de vendas de materiais
@app.route('/relatorios/vendas')
@app.route("/relatorios/vendas")
def listar_relatorios_vendas():
query = 'SELECT * FROM relatorio_vendas_materiais'
relatorios = execute_query(query)
return render_template('listar_relatorios_vendas.html', relatorios=relatorios)
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'<a href="{l[0]}">{l[1].replace("_"," ")}</a><br>'
home_html = f"""
<p>Links</p>
{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)
if __name__ == "__main__":
app.run(debug=True)