Persano commited on
Commit
fe9f921
·
verified ·
1 Parent(s): c346b91

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +54 -41
app.py CHANGED
@@ -1,59 +1,72 @@
1
- from flask import Flask, render_template, request, redirect, url_for
2
- from supabase import create_client, Client
3
  from datetime import datetime
 
4
  import os
 
5
 
6
  app = Flask(__name__)
7
 
8
- # Configuração Supabase
9
- SUPABASE_URL = os.getenv("SUPABASE_URL")
10
- SUPABASE_KEY = os.getenv("SUPABASE_KEY")
11
- supabase: Client = create_client(SUPABASE_URL, SUPABASE_KEY)
12
 
13
- # --- Rota: Listagem de orçamentos ---
14
  @app.route("/")
15
- def index():
16
- response = supabase.table("orcamentos").select("*").order("id", desc=True).execute()
17
  orcamentos = response.data
18
- return render_template("index.html", orcamentos=orcamentos)
19
 
20
- # --- Rota: Novo Orçamento ---
21
  @app.route("/novo", methods=["GET", "POST"])
22
- def novo():
23
  if request.method == "POST":
24
- dados = {
25
  "cliente": request.form["cliente"],
26
  "endereco": request.form["endereco"],
27
- "area_total": request.form["area_total"],
28
- "quartos": request.form["quartos"],
29
- "banheiros": request.form["banheiros"],
30
- "total": calcular_total(request.form), # Função que calcula o total
31
- "data_criacao": datetime.now().isoformat()
 
 
32
  }
33
- supabase.table("orcamentos").insert(dados).execute()
34
- return redirect(url_for('index'))
35
- return render_template("novo.html")
36
-
37
- # --- Rota: Detalhe ---
38
- @app.route("/orcamento/<int:id>")
39
- def orcamento(id):
40
- response = supabase.table("orcamentos").select("*").eq("id", id).single().execute()
41
- orcamento = response.data
42
- return render_template("relatorio.html", orcamento=orcamento)
43
-
44
- # --- Rota: Excluir ---
45
- @app.route("/delete/<int:id>")
46
- def delete(id):
 
 
 
 
 
 
 
 
 
 
47
  supabase.table("orcamentos").delete().eq("id", id).execute()
48
- return redirect(url_for('index'))
 
 
 
 
 
49
 
50
- # --- Função de cálculo (exemplo simplificado) ---
51
- def calcular_total(form):
52
- area = float(form.get("area_total", 0))
53
- quartos = int(form.get("quartos", 0))
54
- banheiros = int(form.get("banheiros", 0))
55
- base_m2 = 500
56
- return area * base_m2 + quartos * 3000 + banheiros * 4000
57
 
58
  if __name__ == "__main__":
59
- app.run(host="0.0.0.0", port=7860)
 
1
+ from flask import Flask, render_template, request, redirect, url_for, send_file
2
+ from supabase_client import supabase
3
  from datetime import datetime
4
+ import pdfkit
5
  import os
6
+ from io import BytesIO
7
 
8
  app = Flask(__name__)
9
 
10
+ pdfkit_config = pdfkit.configuration(wkhtmltopdf="/usr/bin/wkhtmltopdf")
 
 
 
11
 
 
12
  @app.route("/")
13
+ def listar_orcamentos():
14
+ response = supabase.table("orcamentos").select("*").execute()
15
  orcamentos = response.data
16
+ return render_template("list.html", orcamentos=orcamentos)
17
 
 
18
  @app.route("/novo", methods=["GET", "POST"])
19
+ def novo_orcamento():
20
  if request.method == "POST":
21
+ data = {
22
  "cliente": request.form["cliente"],
23
  "endereco": request.form["endereco"],
24
+ "area_total": float(request.form["area_total"]),
25
+ "quartos": int(request.form["quartos"]),
26
+ "banheiros": int(request.form["banheiros"]),
27
+ "inicio": request.form["inicio"],
28
+ "detalhes": request.form["detalhes"],
29
+ "total": float(request.form["total"]),
30
+ "criado_em": datetime.now().isoformat()
31
  }
32
+ supabase.table("orcamentos").insert(data).execute()
33
+ return redirect(url_for("listar_orcamentos"))
34
+ return render_template("form.html", orcamento=None)
35
+
36
+ @app.route("/editar/<int:id>", methods=["GET", "POST"])
37
+ def editar_orcamento(id):
38
+ orcamento = supabase.table("orcamentos").select("*").eq("id", id).single().execute().data
39
+ if request.method == "POST":
40
+ data = {
41
+ "cliente": request.form["cliente"],
42
+ "endereco": request.form["endereco"],
43
+ "area_total": float(request.form["area_total"]),
44
+ "quartos": int(request.form["quartos"]),
45
+ "banheiros": int(request.form["banheiros"]),
46
+ "inicio": request.form["inicio"],
47
+ "detalhes": request.form["detalhes"],
48
+ "total": float(request.form["total"])
49
+ }
50
+ supabase.table("orcamentos").update(data).eq("id", id).execute()
51
+ return redirect(url_for("listar_orcamentos"))
52
+ return render_template("form.html", orcamento=orcamento)
53
+
54
+ @app.route("/excluir/<int:id>")
55
+ def excluir_orcamento(id):
56
  supabase.table("orcamentos").delete().eq("id", id).execute()
57
+ return redirect(url_for("listar_orcamentos"))
58
+
59
+ @app.route("/visualizar/<int:id>")
60
+ def visualizar_orcamento(id):
61
+ orcamento = supabase.table("orcamentos").select("*").eq("id", id).single().execute().data
62
+ return render_template("relatorio.html", o=orcamento)
63
 
64
+ @app.route("/pdf/<int:id>")
65
+ def gerar_pdf(id):
66
+ o = supabase.table("orcamentos").select("*").eq("id", id).single().execute().data
67
+ html = render_template("contrato.html", o=o)
68
+ pdf = pdfkit.from_string(html, False, configuration=pdfkit_config)
69
+ return send_file(BytesIO(pdf), as_attachment=True, download_name=f"Contrato_{o['cliente']}.pdf")
 
70
 
71
  if __name__ == "__main__":
72
+ app.run(host="0.0.0.0", port=int(os.environ.get("PORT", 7860)))