Persano commited on
Commit
37c820c
·
verified ·
1 Parent(s): 530a5d3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +76 -57
app.py CHANGED
@@ -1,72 +1,91 @@
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)))
 
1
+ from flask import Flask, render_template, request, redirect, session, url_for
2
  from supabase_client import supabase
 
 
3
  import os
 
4
 
5
  app = Flask(__name__)
6
+ app.secret_key = os.urandom(24)
7
 
8
+ # -------- Autenticação --------
9
+ @app.route('/login', methods=['GET', 'POST'])
10
+ def login():
11
+ if request.method == 'POST':
12
+ email = request.form['email']
13
+ password = request.form['password']
14
+ result = supabase.auth.sign_in_with_password({'email': email, 'password': password})
15
+ if result.user:
16
+ session['user'] = result.user.id
17
+ return redirect('/dashboard')
18
+ else:
19
+ return "Login inválido"
20
+ return render_template('login.html')
21
 
22
+ @app.route('/logout')
23
+ def logout():
24
+ session.clear()
25
+ return redirect('/login')
26
+
27
+ def login_required(f):
28
+ def wrap(*args, **kwargs):
29
+ if 'user' in session:
30
+ return f(*args, **kwargs)
31
+ else:
32
+ return redirect('/login')
33
+ wrap.__name__ = f.__name__
34
+ return wrap
35
+
36
+ # -------- Dashboard --------
37
+ @app.route('/dashboard')
38
+ @login_required
39
+ def dashboard():
40
+ user_id = session['user']
41
+ response = supabase.table('orcamentos').select('*').eq('user_id', user_id).execute()
42
  orcamentos = response.data
43
+ return render_template('dashboard.html', orcamentos=orcamentos)
44
 
45
+ # -------- Criar Orçamento --------
46
+ @app.route('/orcamentos/novo', methods=['GET', 'POST'])
47
+ @login_required
48
+ def criar_orcamento():
49
+ if request.method == 'POST':
50
+ dados = {
51
+ 'user_id': session['user'],
52
+ 'cliente': request.form['cliente'],
53
+ 'endereco': request.form['endereco'],
54
+ 'valor_total': request.form['valor_total']
 
 
 
55
  }
56
+ supabase.table('orcamentos').insert(dados).execute()
57
+ return redirect('/dashboard')
58
+ return render_template('create_orcamento.html')
59
 
60
+ # -------- Editar Orçamento --------
61
+ @app.route('/orcamentos/<int:orcamento_id>/editar', methods=['GET', 'POST'])
62
+ @login_required
63
+ def editar_orcamento(orcamento_id):
64
+ if request.method == 'POST':
65
+ update_data = {
66
+ 'cliente': request.form['cliente'],
67
+ 'endereco': request.form['endereco'],
68
+ 'valor_total': request.form['valor_total']
 
 
 
 
69
  }
70
+ supabase.table('orcamentos').update(update_data).eq('id', orcamento_id).execute()
71
+ return redirect('/dashboard')
72
+ orcamento = supabase.table('orcamentos').select('*').eq('id', orcamento_id).single().execute().data
73
+ return render_template('edit_orcamento.html', orcamento=orcamento)
74
 
75
+ # -------- Ver Orçamento --------
76
+ @app.route('/orcamentos/<int:orcamento_id>')
77
+ @login_required
78
+ def visualizar_orcamento(orcamento_id):
79
+ orcamento = supabase.table('orcamentos').select('*').eq('id', orcamento_id).single().execute().data
80
+ return render_template('view_orcamento.html', orcamento=orcamento)
81
 
82
+ # -------- Excluir Orçamento --------
83
+ @app.route('/orcamentos/<int:orcamento_id>/excluir', methods=['POST'])
84
+ @login_required
85
+ def excluir_orcamento(orcamento_id):
86
+ supabase.table('orcamentos').delete().eq('id', orcamento_id).execute()
87
+ return redirect('/dashboard')
88
 
89
+ if __name__ == '__main__':
90
+ app.run(host='0.0.0.0', port=7860)
 
 
 
 
91