routes.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. from flask import Blueprint, render_template, request, redirect, url_for
  2. from models import db, CatalogoPaneles, DatosSolaresCiudad, ProyectosUsuario, Casa
  3. main = Blueprint('main', __name__)
  4. @main.route('/')
  5. def index():
  6. # Ahora la página principal lista las casas
  7. casas = Casa.query.all()
  8. ciudades = DatosSolaresCiudad.query.all()
  9. return render_template('casas.html', casas=casas, ciudades=ciudades)
  10. @main.route('/casa/nueva', methods=['POST'])
  11. def nueva_casa():
  12. nombre = request.form.get('nombre')
  13. area_techo = float(request.form.get('area_techo'))
  14. id_ciudad = request.form.get('id_ciudad')
  15. casa = Casa(nombre=nombre, area_techo=area_techo, id_ciudad=id_ciudad)
  16. db.session.add(casa)
  17. db.session.commit()
  18. return redirect(url_for('main.index'))
  19. @main.route('/simular/<int:id_casa>')
  20. def simular(id_casa):
  21. casa = Casa.query.get_or_404(id_casa)
  22. paneles = CatalogoPaneles.query.all()
  23. return render_template('simulation.html', casa=casa, paneles=paneles)
  24. @main.route('/calculate', methods=['POST'])
  25. def calculate():
  26. id_casa = request.form.get('id_casa')
  27. id_panel = request.form.get('id_panel')
  28. cantidad = int(request.form.get('cantidad'))
  29. precio_kwh = float(request.form.get('precio_kwh', 0.15))
  30. casa = Casa.query.get(id_casa)
  31. ciudad = casa.ciudad
  32. panel = CatalogoPaneles.query.get(id_panel)
  33. # E = A * r * H * PR
  34. # Monthly E = (A_panel * quantity) * r * H * 30 * 0.75
  35. area_total = panel.area_m2 * cantidad
  36. pr = 0.75
  37. days = 30
  38. energia_mensual = area_total * panel.eficiencia_r * ciudad.irradiacion_h_promedio * days * pr
  39. # Bonus: ROI
  40. ahorro_mensual = energia_mensual * precio_kwh
  41. costo_total = panel.precio_unitario * cantidad
  42. tiempo_recuperacion = (costo_total / ahorro_mensual / 12) if ahorro_mensual > 0 else 0 # Years
  43. # Bonus: CO2
  44. co2_evitado = energia_mensual * 0.4
  45. return render_template('results.html',
  46. energia=round(energia_mensual, 2),
  47. ahorro=round(ahorro_mensual, 2),
  48. recuperacion=round(tiempo_recuperacion, 1),
  49. co2=round(co2_evitado, 2),
  50. ciudad=ciudad,
  51. panel=panel,
  52. cantidad=cantidad,
  53. costo_total=costo_total,
  54. casa=casa)
  55. @main.route('/save', methods=['POST'])
  56. def save():
  57. nombre_cliente = request.form.get('nombre_cliente')
  58. id_casa = request.form.get('id_casa')
  59. id_panel = request.form.get('id_panel')
  60. cantidad = request.form.get('cantidad')
  61. energia = request.form.get('energia')
  62. ahorro = request.form.get('ahorro')
  63. casa = Casa.query.get(id_casa)
  64. proyecto = ProyectosUsuario(
  65. nombre_cliente=nombre_cliente,
  66. id_casa=id_casa,
  67. id_ciudad=casa.id_ciudad,
  68. id_panel=id_panel,
  69. cantidad_paneles=cantidad,
  70. energia_estimada_mensual=energia,
  71. ahorro_estimado=ahorro
  72. )
  73. db.session.add(proyecto)
  74. db.session.commit()
  75. return redirect(url_for('main.index'))