reformape / app.py
Persano's picture
Update app.py
b3108df verified
raw
history blame
3.89 kB
# app.py
from flask import Flask, render_template_string, request, send_file
from fpdf import FPDF
import os
import tempfile
from datetime import date, timedelta
app = Flask(__name__)
# HTML_FORM vem aqui (omitido neste trecho por brevidade)
HTML_FORM = """(HTML completo da pergunta anterior)"""
# Funções auxiliares
def calcular_valor_por_m2(tamanho, acabamento):
tabela = {
"simples": 1000,
"medio": 1500,
"luxo": 2000
}
fator_tamanho = {
"pequeno": 1,
"medio": 1.5,
"grande": 2
}
return tabela[acabamento] * fator_tamanho[tamanho]
def calcular_orcamento(form):
detalhes = []
total = 0
metros_totais = float(form.get("dimensao_obra", 0))
# Cozinha
cozinha_tamanho = form.get("cozinha_tamanho")
cozinha_acabamento = form.get("cozinha_acabamento")
preco_cozinha = calcular_valor_por_m2(cozinha_tamanho, cozinha_acabamento)
valor_cozinha = preco_cozinha * 5 # Cozinha = 5m² fixo
detalhes.append(f"Cozinha ({cozinha_tamanho}, {cozinha_acabamento}): R$ {valor_cozinha:.2f}")
total += valor_cozinha
# Banheiros
num_banheiros = int(form.get("banheiros", 0))
for i in range(1, num_banheiros + 1):
tam = form.get(f"banheiro_{i}_tamanho")
acb = form.get(f"banheiro_{i}_acabamento")
preco = calcular_valor_por_m2(tam, acb)
m2 = 3 if tam == "pequeno" else 5 if tam == "medio" else 7
valor = preco * m2
detalhes.append(f"Banheiro {i} ({tam}, {acb}): R$ {valor:.2f}")
total += valor
# Serviços adicionais (hidráulica, elétrica, pintura = 10% cada)
servicos = request.form.getlist("servicos")
for s in ["hidraulica", "eletrica", "pintura"]:
if s in servicos:
valor = total * 0.1
total += valor
detalhes.append(f"{s.capitalize()}: R$ {valor:.2f}")
# Outros serviços fixos
servicos_fixos = ["ar_condicionado", "fechamento_sacada", "gesso"]
precos_fixos = {
"ar_condicionado": 1500,
"fechamento_sacada": 3000,
"gesso": 1000
}
for s in servicos_fixos:
if s in servicos:
valor = precos_fixos[s]
total += valor
detalhes.append(f"{s.replace('_', ' ').capitalize()}: R$ {valor:.2f}")
return total, detalhes
def gerar_pdf(form, total, detalhes):
pdf = FPDF()
pdf.add_page()
pdf.set_font("Arial", size=12)
pdf.cell(200, 10, txt="Contrato de Reforma", ln=True, align="C")
pdf.cell(200, 10, txt=f"Contratante: {form.get('nome_contratante')}", ln=True)
pdf.cell(200, 10, txt=f"Endereço da Obra: {form.get('endereco_obra')}", ln=True)
pdf.cell(200, 10, txt=f"Data: {date.today().strftime('%d/%m/%Y')}", ln=True)
pdf.cell(200, 10, txt="Serviços contratados:", ln=True)
for item in detalhes:
pdf.multi_cell(0, 10, txt=f"- {item}")
pdf.cell(200, 10, txt=f"Valor Total: R$ {total:.2f}", ln=True)
pdf.cell(200, 10, txt="Assinatura do Contratante: __________________________", ln=True)
tmp_dir = tempfile.mkdtemp()
caminho_pdf = os.path.join(tmp_dir, "contrato.pdf")
pdf.output(caminho_pdf)
return caminho_pdf
# Rotas
@app.route("/", methods=["GET", "POST"])
def index():
if request.method == "POST":
if request.form.get("acao") == "Calcular Orçamento":
total, detalhes = calcular_orcamento(request.form)
return render_template_string(HTML_FORM, total=total, detalhes=detalhes, request=request)
elif request.form.get("acao") == "Gerar Contrato PDF":
total, detalhes = calcular_orcamento(request.form)
caminho_pdf = gerar_pdf(request.form, total, detalhes)
return send_file(caminho_pdf, as_attachment=True)
return render_template_string(HTML_FORM)
if __name__ == "__main__":
app.run(host="0.0.0.0", port=7860)