simulation.html 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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. <div class="mb-3">
  32. <label for="precio_kwh" class="form-label">Precio del kWh ($)</label>
  33. <input type="number" step="0.01" name="precio_kwh" class="form-control" value="0.15" required>
  34. </div>
  35. <button type="submit" class="btn btn-success w-100">Calcular</button>
  36. <a href="{{ url_for('main.casas') }}" class="btn btn-link w-100 mt-2">Volver a Mis Casas</a>
  37. </form>
  38. </div>
  39. </div>
  40. </div>
  41. </div>
  42. <script>
  43. function updateMaxPanels() {
  44. const houseArea = {{ casa.area_techo }};
  45. const select = document.getElementById('panelSelect');
  46. const selectedOption = select.options[select.selectedIndex];
  47. const panelArea = parseFloat(selectedOption.getAttribute('data-area'));
  48. const maxPanels = Math.floor(houseArea / panelArea);
  49. const helpText = document.getElementById('maxPanelsHelp');
  50. helpText.innerText = `Máximo recomendado para tu techo: ${maxPanels} paneles`;
  51. const input = document.getElementById('cantidadInput');
  52. input.max = maxPanels;
  53. }
  54. // Run on load
  55. document.addEventListener('DOMContentLoaded', updateMaxPanels);
  56. </script>
  57. {% endblock %}