from flask import Blueprint, render_template, request, redirect, url_for from models import db, CatalogoPaneles, DatosSolaresCiudad, ProyectosUsuario, Casa main = Blueprint('main', __name__) @main.route('/') def index(): return render_template('index.html') @main.route('/casas') def casas(): casas = Casa.query.all() ciudades = DatosSolaresCiudad.query.all() return render_template('casas.html', casas=casas, ciudades=ciudades) @main.route('/proyectos') def proyectos(): proyectos = ProyectosUsuario.query.order_by(ProyectosUsuario.fecha_simulacion.desc()).all() return render_template('proyectos.html', proyectos=proyectos) @main.route('/casa/nueva', methods=['POST']) def nueva_casa(): nombre = request.form.get('nombre') area_techo = float(request.form.get('area_techo')) id_ciudad = request.form.get('id_ciudad') casa = Casa(nombre=nombre, area_techo=area_techo, id_ciudad=id_ciudad) db.session.add(casa) db.session.commit() return redirect(url_for('main.casas')) @main.route('/simular/') def simular(id_casa): casa = Casa.query.get_or_404(id_casa) paneles = CatalogoPaneles.query.all() return render_template('simulation.html', casa=casa, paneles=paneles) @main.route('/calculate', methods=['POST']) def calculate(): id_casa = request.form.get('id_casa') id_panel = request.form.get('id_panel') cantidad = int(request.form.get('cantidad')) precio_kwh = float(request.form.get('precio_kwh', 0.15)) casa = Casa.query.get(id_casa) ciudad = casa.ciudad panel = CatalogoPaneles.query.get(id_panel) # E = A * r * H * PR # Monthly E = (A_panel * quantity) * r * H * 30 * 0.75 area_total = panel.area_m2 * cantidad pr = 0.75 days = 30 energia_mensual = area_total * panel.eficiencia_r * ciudad.irradiacion_h_promedio * days * pr # Bonus: ROI ahorro_mensual = energia_mensual * precio_kwh costo_total = panel.precio_unitario * cantidad tiempo_recuperacion = (costo_total / ahorro_mensual / 12) if ahorro_mensual > 0 else 0 # Years # Bonus: CO2 co2_evitado = energia_mensual * 0.4 return render_template('results.html', energia=round(energia_mensual, 2), ahorro=round(ahorro_mensual, 2), recuperacion=round(tiempo_recuperacion, 1), co2=round(co2_evitado, 2), ciudad=ciudad, panel=panel, cantidad=cantidad, costo_total=costo_total, casa=casa) @main.route('/save', methods=['POST']) def save(): nombre_cliente = request.form.get('nombre_cliente') id_casa = request.form.get('id_casa') id_panel = request.form.get('id_panel') cantidad = request.form.get('cantidad') energia = request.form.get('energia') ahorro = request.form.get('ahorro') casa = Casa.query.get(id_casa) proyecto = ProyectosUsuario( nombre_cliente=nombre_cliente, id_casa=id_casa, id_ciudad=casa.id_ciudad, id_panel=id_panel, cantidad_paneles=cantidad, energia_estimada_mensual=energia, ahorro_estimado=ahorro ) db.session.add(proyecto) db.session.commit() return redirect(url_for('main.proyectos'))