浏览代码

add nav options

Matthew Trejo 3 天之前
父节点
当前提交
5ced2f428e
共有 10 个文件被更改,包括 173 次插入11 次删除
  1. 62 0
      .gitignore
  2. 二进制
      __pycache__/routes.cpython-313.pyc
  3. 二进制
      instance/solarcalc.db
  4. 11 3
      routes.py
  5. 16 2
      templates/base.html
  6. 2 2
      templates/casas.html
  7. 29 0
      templates/index.html
  8. 49 0
      templates/proyectos.html
  9. 2 2
      templates/results.html
  10. 2 2
      templates/simulation.html

+ 62 - 0
.gitignore

@@ -0,0 +1,62 @@
+# Python
+__pycache__/
+*.py[cod]
+*$py.class
+*.so
+I*.pyc
+.Python
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+
+# Virtual Environment
+venv/
+ENV/
+env/
+.venv
+
+# IDE
+.vscode/
+.idea/
+*.swp
+*.swo
+*~
+.DS_Store
+
+# Flask
+instance/
+.webassets-cache
+
+# Testing
+.tox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*.cover
+.pytest_cache/
+
+# Environment variables
+.env
+.env.local
+
+# Database
+*.db
+*.sqlite
+instance/
+
+# Logs
+*.log

二进制
__pycache__/routes.cpython-313.pyc


二进制
instance/solarcalc.db


+ 11 - 3
routes.py

@@ -5,12 +5,20 @@ main = Blueprint('main', __name__)
 
 @main.route('/')
 def index():
-    # Ahora la página principal lista las casas
+    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')
@@ -21,7 +29,7 @@ def nueva_casa():
     db.session.add(casa)
     db.session.commit()
     
-    return redirect(url_for('main.index'))
+    return redirect(url_for('main.casas'))
 
 @main.route('/simular/<int:id_casa>')
 def simular(id_casa):
@@ -93,4 +101,4 @@ def save():
     db.session.add(proyecto)
     db.session.commit()
     
-    return redirect(url_for('main.index'))
+    return redirect(url_for('main.proyectos'))

+ 16 - 2
templates/base.html

@@ -7,13 +7,27 @@
     <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
 </head>
 <body>
-    <nav class="navbar navbar-dark bg-primary mb-4">
+    <nav class="navbar navbar-expand-lg navbar-dark bg-primary mb-4">
         <div class="container">
-            <a class="navbar-brand" href="/">Calculadora de Viabilidad Solar</a>
+            <a class="navbar-brand" href="{{ url_for('main.index') }}">Calculadora de Viabilidad Solar</a>
+            <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
+                <span class="navbar-toggler-icon"></span>
+            </button>
+            <div class="collapse navbar-collapse" id="navbarNav">
+                <ul class="navbar-nav ms-auto">
+                    <li class="nav-item">
+                        <a class="nav-link" href="{{ url_for('main.casas') }}">Casas</a>
+                    </li>
+                    <li class="nav-item">
+                        <a class="nav-link" href="{{ url_for('main.proyectos') }}">Proyectos</a>
+                    </li>
+                </ul>
+            </div>
         </div>
     </nav>
     <div class="container">
         {% block content %}{% endblock %}
     </div>
+    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
 </body>
 </html>

+ 2 - 2
templates/casas.html

@@ -9,7 +9,7 @@
                 {% if casas %}
                 <div class="list-group mb-4">
                     {% for casa in casas %}
-                    <a href="/simular/{{ casa.id_casa }}" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center">
+                    <a href="{{ url_for('main.simular', id_casa=casa.id_casa) }}" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center">
                         <div>
                             <h5 class="mb-1">{{ casa.nombre }}</h5>
                             <small>{{ casa.ciudad.nombre_ciudad }}, {{ casa.ciudad.provincia }} - {{ casa.area_techo }} m² disponibles</small>
@@ -24,7 +24,7 @@
 
                 <hr>
                 <h5>Agregar Nueva Casa</h5>
-                <form action="/casa/nueva" method="POST">
+                <form action="{{ url_for('main.nueva_casa') }}" method="POST">
                     <div class="mb-3">
                         <label for="nombre" class="form-label">Nombre de la Casa</label>
                         <input type="text" name="nombre" class="form-control" placeholder="Ej: Casa de Playa" required>

+ 29 - 0
templates/index.html

@@ -0,0 +1,29 @@
+{% extends "base.html" %}
+
+{% block content %}
+<div class="row justify-content-center mt-5">
+    <div class="col-md-8 text-center">
+        <h1 class="mb-5">Bienvenido a la Calculadora Solar</h1>
+        <div class="row">
+            <div class="col-md-6 mb-4">
+                <div class="card h-100">
+                    <div class="card-body d-flex flex-column justify-content-center">
+                        <h5 class="card-title">Nueva Simulación</h5>
+                        <p class="card-text">Gestiona casas y realiza nuevas simulaciones solares.</p>
+                        <a href="{{ url_for('main.casas') }}" class="btn btn-primary mt-3">Ir a Casas</a>
+                    </div>
+                </div>
+            </div>
+            <div class="col-md-6 mb-4">
+                <div class="card h-100">
+                    <div class="card-body d-flex flex-column justify-content-center">
+                        <h5 class="card-title">Simulaciones Guardadas</h5>
+                        <p class="card-text">Consulta el historial de proyectos y simulaciones realizadas.</p>
+                        <a href="{{ url_for('main.proyectos') }}" class="btn btn-success mt-3">Ver Proyectos</a>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+{% endblock %}

+ 49 - 0
templates/proyectos.html

@@ -0,0 +1,49 @@
+{% extends "base.html" %}
+
+{% block content %}
+<div class="row">
+    <div class="col-12">
+        <div class="d-flex justify-content-between align-items-center mb-4">
+            <h2>Simulaciones Guardadas</h2>
+            <a href="{{ url_for('main.index') }}" class="btn btn-secondary">Volver al Inicio</a>
+        </div>
+        
+        {% if proyectos %}
+        <div class="table-responsive">
+            <table class="table table-striped table-hover">
+                <thead>
+                    <tr>
+                        <th>Fecha</th>
+                        <th>Cliente</th>
+                        <th>Ciudad</th>
+                        <th>Casa</th>
+                        <th>Panel</th>
+                        <th>Cantidad</th>
+                        <th>Energía (kWh/mes)</th>
+                        <th>Ahorro ($/mes)</th>
+                    </tr>
+                </thead>
+                <tbody>
+                    {% for proyecto in proyectos %}
+                    <tr>
+                        <td>{{ proyecto.fecha_simulacion.strftime('%Y-%m-%d %H:%M') }}</td>
+                        <td>{{ proyecto.nombre_cliente }}</td>
+                        <td>{{ proyecto.ciudad.nombre_ciudad }}</td>
+                        <td>{{ proyecto.casa.nombre if proyecto.casa else 'N/A' }}</td>
+                        <td>{{ proyecto.panel.marca }} {{ proyecto.panel.modelo }}</td>
+                        <td>{{ proyecto.cantidad_paneles }}</td>
+                        <td>{{ "%.2f"|format(proyecto.energia_estimada_mensual) }}</td>
+                        <td>{{ "%.2f"|format(proyecto.ahorro_estimado) if proyecto.ahorro_estimado else '-' }}</td>
+                    </tr>
+                    {% endfor %}
+                </tbody>
+            </table>
+        </div>
+        {% else %}
+        <div class="alert alert-info">
+            No hay simulaciones guardadas todavía.
+        </div>
+        {% endif %}
+    </div>
+</div>
+{% endblock %}

+ 2 - 2
templates/results.html

@@ -31,7 +31,7 @@
 
                 <hr>
                 <h5>Guardar Proyecto</h5>
-                <form action="/save" method="POST">
+                <form action="{{ url_for('main.save') }}" method="POST">
                     <input type="hidden" name="id_casa" value="{{ casa.id_casa }}">
                     <input type="hidden" name="id_panel" value="{{ panel.id_panel }}">
                     <input type="hidden" name="cantidad" value="{{ cantidad }}">
@@ -43,7 +43,7 @@
                         <input type="text" name="nombre_cliente" class="form-control" required value="Proyecto {{ casa.nombre }}">
                     </div>
                     <button type="submit" class="btn btn-primary">Guardar Proyecto</button>
-                    <a href="/simular/{{ casa.id_casa }}" class="btn btn-secondary">Volver a Simulación</a>
+                    <a href="{{ url_for('main.simular', id_casa=casa.id_casa) }}" class="btn btn-secondary">Volver a Simulación</a>
                 </form>
             </div>
         </div>

+ 2 - 2
templates/simulation.html

@@ -13,7 +13,7 @@
                     </div>
                 </div>
 
-                <form action="/calculate" method="POST">
+                <form action="{{ url_for('main.calculate') }}" method="POST">
                     <input type="hidden" name="id_casa" value="{{ casa.id_casa }}">
                     
                     <div class="mb-3">
@@ -36,7 +36,7 @@
                         <input type="number" step="0.01" name="precio_kwh" class="form-control" value="0.15" required>
                     </div>
                     <button type="submit" class="btn btn-success w-100">Calcular</button>
-                    <a href="/" class="btn btn-link w-100 mt-2">Volver a Mis Casas</a>
+                    <a href="{{ url_for('main.casas') }}" class="btn btn-link w-100 mt-2">Volver a Mis Casas</a>
                 </form>
             </div>
         </div>