|
|
@@ -1,5 +1,6 @@
|
|
|
from flask import Blueprint, render_template, request, redirect, url_for, flash
|
|
|
from models import db, CatalogoPaneles, DatosSolaresCiudad, ProyectosUsuario, Casa, Configuracion
|
|
|
+from datetime import datetime
|
|
|
|
|
|
main = Blueprint('main', __name__)
|
|
|
|
|
|
@@ -33,8 +34,37 @@ def casas():
|
|
|
|
|
|
@main.route('/proyectos')
|
|
|
def proyectos():
|
|
|
- proyectos = ProyectosUsuario.query.order_by(ProyectosUsuario.fecha_simulacion.desc()).all()
|
|
|
- return render_template('proyectos.html', proyectos=proyectos)
|
|
|
+ id_casa_filter = request.args.get('id_casa', type=int)
|
|
|
+ query = ProyectosUsuario.query
|
|
|
+
|
|
|
+ if id_casa_filter:
|
|
|
+ query = query.filter_by(id_casa=id_casa_filter)
|
|
|
+
|
|
|
+ proyectos = query.order_by(ProyectosUsuario.fecha_referencia.desc()).all()
|
|
|
+ casas = Casa.query.all()
|
|
|
+
|
|
|
+ # Prepare chart data (reversed for chronological order in chart)
|
|
|
+ chart_proyectos = proyectos[::-1]
|
|
|
+ labels = [p.fecha_referencia.strftime('%Y-%m-%d') for p in chart_proyectos]
|
|
|
+
|
|
|
+ costo_sin_solar = []
|
|
|
+ costo_con_solar = []
|
|
|
+
|
|
|
+ for p in chart_proyectos:
|
|
|
+ costo_actual = p.costo_actual_mensual if p.costo_actual_mensual else 0
|
|
|
+ ahorro = p.ahorro_estimado if p.ahorro_estimado else 0
|
|
|
+ nuevo_costo = max(0, costo_actual - ahorro)
|
|
|
+
|
|
|
+ costo_sin_solar.append(costo_actual)
|
|
|
+ costo_con_solar.append(nuevo_costo)
|
|
|
+
|
|
|
+ return render_template('proyectos.html',
|
|
|
+ proyectos=proyectos,
|
|
|
+ casas=casas,
|
|
|
+ selected_casa=id_casa_filter,
|
|
|
+ labels=labels,
|
|
|
+ costo_sin_solar=costo_sin_solar,
|
|
|
+ costo_con_solar=costo_con_solar)
|
|
|
|
|
|
@main.route('/casa/nueva', methods=['POST'])
|
|
|
def nueva_casa():
|
|
|
@@ -101,7 +131,7 @@ def calculate():
|
|
|
|
|
|
# Bonus: CO2
|
|
|
co2_evitado = energia_mensual * 0.4
|
|
|
-
|
|
|
+
|
|
|
# Nuevo costo estimado
|
|
|
nuevo_costo_mensual = max(0, costo_mensual - ahorro_mensual) if costo_mensual > 0 else 0
|
|
|
porcentaje_cobertura = (energia_mensual / consumo_kwh * 100) if consumo_kwh > 0 else 0
|
|
|
@@ -119,7 +149,8 @@ def calculate():
|
|
|
consumo_kwh=consumo_kwh,
|
|
|
costo_mensual=round(costo_mensual, 2),
|
|
|
nuevo_costo_mensual=round(nuevo_costo_mensual, 2),
|
|
|
- porcentaje_cobertura=round(porcentaje_cobertura, 1))
|
|
|
+ porcentaje_cobertura=round(porcentaje_cobertura, 1),
|
|
|
+ today=datetime.now().strftime('%Y-%m-%d'))
|
|
|
|
|
|
@main.route('/save', methods=['POST'])
|
|
|
def save():
|
|
|
@@ -132,9 +163,18 @@ def save():
|
|
|
|
|
|
consumo_kwh = request.form.get('consumo_kwh')
|
|
|
costo_mensual = request.form.get('costo_mensual')
|
|
|
+ fecha_str = request.form.get('fecha_referencia')
|
|
|
|
|
|
casa = Casa.query.get(id_casa)
|
|
|
|
|
|
+ if fecha_str:
|
|
|
+ try:
|
|
|
+ fecha_referencia = datetime.strptime(fecha_str, '%Y-%m-%d')
|
|
|
+ except ValueError:
|
|
|
+ fecha_referencia = datetime.now()
|
|
|
+ else:
|
|
|
+ fecha_referencia = datetime.now()
|
|
|
+
|
|
|
proyecto = ProyectosUsuario(
|
|
|
nombre_cliente=nombre_cliente,
|
|
|
id_casa=id_casa,
|
|
|
@@ -144,7 +184,8 @@ def save():
|
|
|
energia_estimada_mensual=energia,
|
|
|
ahorro_estimado=ahorro,
|
|
|
consumo_actual_kwh=float(consumo_kwh) if consumo_kwh and float(consumo_kwh) > 0 else None,
|
|
|
- costo_actual_mensual=float(costo_mensual) if costo_mensual and float(costo_mensual) > 0 else None
|
|
|
+ costo_actual_mensual=float(costo_mensual) if costo_mensual and float(costo_mensual) > 0 else None,
|
|
|
+ fecha_referencia=fecha_referencia
|
|
|
)
|
|
|
|
|
|
db.session.add(proyecto)
|