simulation.html 4.0 KB

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