|
|
|
|
|
|
|
|
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 = """(HTML completo da pergunta anterior)""" |
|
|
|
|
|
|
|
|
|
|
|
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_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 |
|
|
detalhes.append(f"Cozinha ({cozinha_tamanho}, {cozinha_acabamento}): R$ {valor_cozinha:.2f}") |
|
|
total += valor_cozinha |
|
|
|
|
|
|
|
|
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 |
|
|
|
|
|
|
|
|
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}") |
|
|
|
|
|
|
|
|
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 |
|
|
|
|
|
|
|
|
|
|
|
@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) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|