from flask import Flask, render_template, request, redirect, url_for, send_file from supabase_client import supabase from datetime import datetime import pdfkit import os from io import BytesIO app = Flask(__name__) pdfkit_config = pdfkit.configuration(wkhtmltopdf="/usr/bin/wkhtmltopdf") @app.route("/") def listar_orcamentos(): response = supabase.table("orcamentos").select("*").execute() orcamentos = response.data return render_template("list.html", orcamentos=orcamentos) @app.route("/novo", methods=["GET", "POST"]) def novo_orcamento(): if request.method == "POST": data = { "cliente": request.form["cliente"], "endereco": request.form["endereco"], "area_total": float(request.form["area_total"]), "quartos": int(request.form["quartos"]), "banheiros": int(request.form["banheiros"]), "inicio": request.form["inicio"], "detalhes": request.form["detalhes"], "total": float(request.form["total"]), "criado_em": datetime.now().isoformat() } supabase.table("orcamentos").insert(data).execute() return redirect(url_for("listar_orcamentos")) return render_template("form.html", orcamento=None) @app.route("/editar/", methods=["GET", "POST"]) def editar_orcamento(id): orcamento = supabase.table("orcamentos").select("*").eq("id", id).single().execute().data if request.method == "POST": data = { "cliente": request.form["cliente"], "endereco": request.form["endereco"], "area_total": float(request.form["area_total"]), "quartos": int(request.form["quartos"]), "banheiros": int(request.form["banheiros"]), "inicio": request.form["inicio"], "detalhes": request.form["detalhes"], "total": float(request.form["total"]) } supabase.table("orcamentos").update(data).eq("id", id).execute() return redirect(url_for("listar_orcamentos")) return render_template("form.html", orcamento=orcamento) @app.route("/excluir/") def excluir_orcamento(id): supabase.table("orcamentos").delete().eq("id", id).execute() return redirect(url_for("listar_orcamentos")) @app.route("/visualizar/") def visualizar_orcamento(id): orcamento = supabase.table("orcamentos").select("*").eq("id", id).single().execute().data return render_template("relatorio.html", o=orcamento) @app.route("/pdf/") def gerar_pdf(id): o = supabase.table("orcamentos").select("*").eq("id", id).single().execute().data html = render_template("contrato.html", o=o) pdf = pdfkit.from_string(html, False, configuration=pdfkit_config) return send_file(BytesIO(pdf), as_attachment=True, download_name=f"Contrato_{o['cliente']}.pdf") if __name__ == "__main__": app.run(host="0.0.0.0", port=int(os.environ.get("PORT", 7860)))