mabuseif commited on
Commit
9c05b10
·
verified ·
1 Parent(s): 68d8f87

Update app/internal_loads.py

Browse files
Files changed (1) hide show
  1. app/internal_loads.py +69 -45
app/internal_loads.py CHANGED
@@ -739,6 +739,7 @@ def display_ventilation_infiltration_tab():
739
  def display_schedules_tab():
740
  import streamlit as st
741
  import uuid
 
742
 
743
  st.subheader("Schedules Editor")
744
 
@@ -846,23 +847,12 @@ def display_schedules_tab():
846
  weekend_values.append(val)
847
 
848
  # Action Buttons
849
- col1, col2, col3 = st.columns(3)
850
  with col1:
851
  submit_label = "Update Schedule" if editor_state.get("is_edit") else "Save Schedule"
852
  submitted = st.form_submit_button(submit_label)
853
  with col2:
854
- edit_submitted = st.form_submit_button("Edit Selected Schedule")
855
- with col3:
856
- delete_submitted = st.form_submit_button("Delete Selected Schedule")
857
-
858
- # Saved Schedules Selector
859
- st.markdown("### Saved Schedules")
860
- saved_schedule = st.selectbox(
861
- "Select Saved Schedule",
862
- options=list(schedules.keys()),
863
- index=list(schedules.keys()).index(editor_state.get("name", list(schedules.keys())[0])) if editor_state.get("name") in schedules and schedules else 0,
864
- help="Select a saved schedule to edit or delete."
865
- )
866
 
867
  # Save logic
868
  if submitted:
@@ -888,44 +878,78 @@ def display_schedules_tab():
888
  st.session_state.schedule_action = {"action": "save", "id": str(uuid.uuid4())}
889
  st.session_state.internal_loads_rerun_pending = True
890
 
891
- # Edit logic
892
- if edit_submitted and saved_schedule:
893
- if saved_schedule in DEFAULT_SCHEDULE_TEMPLATES:
894
- st.error("Default schedules cannot be edited.")
895
- return
896
- schedule_data = schedules[saved_schedule]
897
- st.session_state.schedule_editor = {
898
- "is_edit": True,
899
- "original_name": saved_schedule,
900
- "name": saved_schedule,
901
- "description": schedule_data.get("description", ""),
902
- "weekday": schedule_data.get("weekday", [0.0] * 24),
903
- "weekend": schedule_data.get("weekend", [0.0] * 24),
904
- "template": "None"
905
- }
906
- for hour in range(24):
907
- st.session_state[f"weekday_slider_{hour}_value"] = schedule_data.get("weekday", [0.0] * 24)[hour]
908
- st.session_state[f"weekend_slider_{hour}_value"] = schedule_data.get("weekend", [0.0] * 24)[hour]
909
- st.session_state.schedule_action = {"action": "edit", "id": str(uuid.uuid4())}
910
- st.session_state.internal_loads_rerun_pending = True
911
-
912
- # Delete logic
913
- if delete_submitted and saved_schedule:
914
- if saved_schedule in DEFAULT_SCHEDULE_TEMPLATES:
915
- st.error("Default schedules cannot be deleted.")
916
- return
917
- if is_schedule_in_use(saved_schedule):
918
- st.error(f"Schedule '{saved_schedule}' is in use and cannot be deleted.")
919
- return
920
- del schedules[saved_schedule]
921
  st.session_state.schedule_editor = DEFAULT_STATE.copy()
922
  for hour in range(24):
923
  st.session_state[f"weekday_slider_{hour}_value"] = 0.0
924
  st.session_state[f"weekend_slider_{hour}_value"] = 0.0
925
- st.success(f"Schedule '{saved_schedule}' deleted!")
926
- st.session_state.schedule_action = {"action": "delete", "id": str(uuid.uuid4())}
927
  st.session_state.internal_loads_rerun_pending = True
928
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
929
  def is_schedule_in_use(schedule_name: str) -> bool:
930
  """
931
  Check if a schedule is in use by any people, lighting, equipment, or ventilation/infiltration systems.
 
739
  def display_schedules_tab():
740
  import streamlit as st
741
  import uuid
742
+ import pandas as pd
743
 
744
  st.subheader("Schedules Editor")
745
 
 
847
  weekend_values.append(val)
848
 
849
  # Action Buttons
850
+ col1, col2 = st.columns(2)
851
  with col1:
852
  submit_label = "Update Schedule" if editor_state.get("is_edit") else "Save Schedule"
853
  submitted = st.form_submit_button(submit_label)
854
  with col2:
855
+ refresh = st.form_submit_button("Refresh")
 
 
 
 
 
 
 
 
 
 
 
856
 
857
  # Save logic
858
  if submitted:
 
878
  st.session_state.schedule_action = {"action": "save", "id": str(uuid.uuid4())}
879
  st.session_state.internal_loads_rerun_pending = True
880
 
881
+ # Refresh logic
882
+ if refresh:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
883
  st.session_state.schedule_editor = DEFAULT_STATE.copy()
884
  for hour in range(24):
885
  st.session_state[f"weekday_slider_{hour}_value"] = 0.0
886
  st.session_state[f"weekend_slider_{hour}_value"] = 0.0
887
+ st.session_state.schedule_action = {"action": "refresh", "id": str(uuid.uuid4())}
 
888
  st.session_state.internal_loads_rerun_pending = True
889
 
890
+ # Display saved schedules in a table
891
+ st.subheader("Saved Schedules")
892
+ if schedules:
893
+ # Create column headers
894
+ cols = st.columns([2, 3, 1, 1, 1, 1])
895
+ cols[0].write("**Name**")
896
+ cols[1].write("**Description**")
897
+ cols[2].write("**Weekday Peak**")
898
+ cols[3].write("**Weekend Peak**")
899
+ cols[4].write("**Edit**")
900
+ cols[5].write("**Delete**")
901
+
902
+ # Display each schedule
903
+ for idx, (name, schedule) in enumerate(schedules.items()):
904
+ cols = st.columns([2, 3, 1, 1, 1, 1])
905
+ cols[0].write(name)
906
+ cols[1].write(schedule.get("description", "No description"))
907
+ cols[2].write(f"{max(schedule.get('weekday', [0])):.2f}")
908
+ cols[3].write(f"{max(schedule.get('weekend', [0])):.2f}")
909
+
910
+ # Edit button
911
+ edit_key = f"edit_schedule_{name}_{idx}"
912
+ with cols[4].container():
913
+ if st.button("Edit", key=edit_key):
914
+ if name in DEFAULT_SCHEDULE_TEMPLATES:
915
+ st.error("Default schedules cannot be edited.")
916
+ else:
917
+ schedule_data = schedules[name]
918
+ st.session_state.schedule_editor = {
919
+ "is_edit": True,
920
+ "original_name": name,
921
+ "name": name,
922
+ "description": schedule_data.get("description", ""),
923
+ "weekday": schedule_data.get("weekday", [0.0] * 24),
924
+ "weekend": schedule_data.get("weekend", [0.0] * 24),
925
+ "template": "None"
926
+ }
927
+ for hour in range(24):
928
+ st.session_state[f"weekday_slider_{hour}_value"] = schedule_data.get("weekday", [0.0] * 24)[hour]
929
+ st.session_state[f"weekend_slider_{hour}_value"] = schedule_data.get("weekend", [0.0] * 24)[hour]
930
+ st.session_state.schedule_action = {"action": "edit", "id": str(uuid.uuid4())}
931
+ st.session_state.internal_loads_rerun_pending = True
932
+
933
+ # Delete button
934
+ delete_key = f"delete_schedule_{name}_{idx}"
935
+ with cols[5].container():
936
+ if name in DEFAULT_SCHEDULE_TEMPLATES:
937
+ cols[5].write("(Default)")
938
+ elif is_schedule_in_use(name):
939
+ cols[5].write("(In Use)")
940
+ else:
941
+ if st.button("Delete", key=delete_key):
942
+ del schedules[name]
943
+ st.session_state.schedule_editor = DEFAULT_STATE.copy()
944
+ for hour in range(24):
945
+ st.session_state[f"weekday_slider_{hour}_value"] = 0.0
946
+ st.session_state[f"weekend_slider_{hour}_value"] = 0.0
947
+ st.success(f"Schedule '{name}' deleted!")
948
+ st.session_state.schedule_action = {"action": "delete", "id": str(uuid.uuid4())}
949
+ st.session_state.internal_loads_rerun_pending = True
950
+ else:
951
+ st.write("No schedules defined.")
952
+
953
  def is_schedule_in_use(schedule_name: str) -> bool:
954
  """
955
  Check if a schedule is in use by any people, lighting, equipment, or ventilation/infiltration systems.