simulation.html 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. {% extends 'base.html' %}
  2. {% block content %}
  3. <div class="row justify-content-center">
  4. <div class="col-md-8">
  5. <div class="card">
  6. <div class="card-header">Simulación para: <strong>{{ casa.nombre }}</strong></div>
  7. <div class="card-body">
  8. <div class="alert alert-secondary mb-4">
  9. <div class="row">
  10. <div class="col-md-6"><strong>Ubicación:</strong> {{ casa.ciudad.nombre_ciudad }}, {{ casa.ciudad.provincia }}</div>
  11. <div class="col-md-6"><strong>Área Disponible:</strong> {{ casa.area_techo }} m²</div>
  12. </div>
  13. </div>
  14. <form action="{{ url_for('main.calculate') }}" method="POST">
  15. <input type="hidden" name="id_casa" value="{{ casa.id_casa }}">
  16. <div class="mb-3">
  17. <label for="id_panel" class="form-label">Modelo de Panel</label>
  18. <select name="id_panel" class="form-select" id="panelSelect" required onchange="updateMaxPanels()">
  19. {% for panel in paneles %}
  20. <option value="{{ panel.id_panel }}" data-area="{{ panel.area_m2 }}">
  21. {{ panel.marca }} {{ panel.modelo }} ({{ panel.eficiencia_r * 100 }}% Eficiencia, {{ panel.area_m2 }} m²)
  22. </option>
  23. {% endfor %}
  24. </select>
  25. </div>
  26. <div class="mb-3">
  27. <label for="cantidad" class="form-label">Cantidad de Paneles</label>
  28. <input type="number" name="cantidad" id="cantidadInput" class="form-control" required min="1">
  29. <div id="maxPanelsHelp" class="form-text text-muted"></div>
  30. </div>
  31. <hr>
  32. <h5>Datos de Factura Eléctrica (Opcional)</h5>
  33. <p class="text-muted small">Ingresa tu consumo mensual para estimar el ahorro en tu factura.</p>
  34. <div class="mb-3">
  35. <label for="consumo_kwh" class="form-label">Consumo Mensual (kWh)</label>
  36. <input type="number" step="0.1" name="consumo_kwh" id="consumoInput" class="form-control" placeholder="Ej: 350">
  37. </div>
  38. <div class="mb-3">
  39. <label for="precio_kwh" class="form-label">Precio del kWh ($)</label>
  40. <input type="text" class="form-control" value="{{ precio_kwh }}" readonly disabled>
  41. <div class="form-text">Este valor se configura en los ajustes del sistema.</div>
  42. </div>
  43. <button type="submit" class="btn btn-success w-100">Calcular</button>
  44. <a href="{{ url_for('main.casas') }}" class="btn btn-link w-100 mt-2">Volver a Mis Casas</a>
  45. </form>
  46. </div>
  47. </div>
  48. </div>
  49. </div>
  50. <script>
  51. function updateMaxPanels() {
  52. const houseArea = {{ casa.area_techo }};
  53. const select = document.getElementById('panelSelect');
  54. const selectedOption = select.options[select.selectedIndex];
  55. const panelArea = parseFloat(selectedOption.getAttribute('data-area'));
  56. const maxPanels = Math.floor(houseArea / panelArea);
  57. const helpText = document.getElementById('maxPanelsHelp');
  58. helpText.innerText = `Máximo recomendado para tu techo: ${maxPanels} paneles`;
  59. const input = document.getElementById('cantidadInput');
  60. input.max = maxPanels;
  61. }
  62. // Run on load
  63. document.addEventListener('DOMContentLoaded', updateMaxPanels);
  64. </script>
  65. {% endblock %}