Spaces:
No application file
No application file
Update app.py
Browse files
app.py
CHANGED
@@ -1,59 +1,72 @@
|
|
1 |
-
from flask import Flask, render_template, request, redirect, url_for
|
2 |
-
from
|
3 |
from datetime import datetime
|
|
|
4 |
import os
|
|
|
5 |
|
6 |
app = Flask(__name__)
|
7 |
|
8 |
-
|
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
|
16 |
-
response = supabase.table("orcamentos").select("*").
|
17 |
orcamentos = response.data
|
18 |
-
return render_template("
|
19 |
|
20 |
-
# --- Rota: Novo Orçamento ---
|
21 |
@app.route("/novo", methods=["GET", "POST"])
|
22 |
-
def
|
23 |
if request.method == "POST":
|
24 |
-
|
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 |
-
"
|
31 |
-
"
|
|
|
|
|
32 |
}
|
33 |
-
supabase.table("orcamentos").insert(
|
34 |
-
return redirect(url_for(
|
35 |
-
return render_template("
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
47 |
supabase.table("orcamentos").delete().eq("id", id).execute()
|
48 |
-
return redirect(url_for(
|
|
|
|
|
|
|
|
|
|
|
49 |
|
50 |
-
|
51 |
-
def
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
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)))
|