routes.py 3.4 KB

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