mabuseif commited on
Commit
375201a
·
verified ·
1 Parent(s): f71c129

Update app/internal_loads.py

Browse files
Files changed (1) hide show
  1. app/internal_loads.py +92 -12
app/internal_loads.py CHANGED
@@ -962,7 +962,8 @@ def display_schedules_tab():
962
  for hour in range(24):
963
  st.session_state[f"weekday_slider_{hour}"] = tpl["weekday"][hour]
964
  st.session_state[f"weekend_slider_{hour}"] = tpl["weekend"][hour]
965
- st.experimental_rerun()
 
966
 
967
  # ---------------------- UI FORM for name/description only ----------------------
968
  with st.form("schedule_form"):
@@ -982,15 +983,19 @@ def display_schedules_tab():
982
  with col_we:
983
  st.markdown("<div style='text-align:center; font-weight:bold; font-size:18px;'>Weekend</div>", unsafe_allow_html=True)
984
 
 
985
  hide_elements = """
986
- <style>
987
- div[data-testid="stSliderTickBarMin"],
988
- div[data-testid="stSliderTickBarMax"] {
989
- display: none;
990
- }
991
- </style>
 
 
 
 
992
  """
993
-
994
  st.markdown(hide_elements, unsafe_allow_html=True)
995
 
996
  weekday_values = []
@@ -1011,7 +1016,7 @@ def display_schedules_tab():
1011
  step=0.1,
1012
  value=st.session_state.get(f"weekday_slider_{hour}", 0.0),
1013
  label_visibility="collapsed",
1014
- format=None # hides value text below slider
1015
  )
1016
  weekday_values.append(val)
1017
 
@@ -1024,7 +1029,7 @@ def display_schedules_tab():
1024
  step=0.1,
1025
  value=st.session_state.get(f"weekend_slider_{hour}", 0.0),
1026
  label_visibility="collapsed",
1027
- format=None
1028
  )
1029
  weekend_values.append(val)
1030
 
@@ -1040,13 +1045,18 @@ def display_schedules_tab():
1040
  "weekday": weekday_values,
1041
  "weekend": weekend_values
1042
  }
1043
-
 
 
 
1044
  st.session_state.schedule_editor = DEFAULT_STATE.copy()
1045
  for hour in range(24):
1046
  st.session_state.pop(f"weekday_slider_{hour}", None)
1047
  st.session_state.pop(f"weekend_slider_{hour}", None)
1048
  st.success(f"Schedule '{name}' saved successfully.")
1049
-
 
 
1050
  # ---------------------- Show Saved ----------------------
1051
  st.markdown("### Saved Schedules")
1052
  if schedules:
@@ -1054,6 +1064,76 @@ def display_schedules_tab():
1054
  else:
1055
  st.info("No schedules saved yet.")
1056
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1057
  def is_schedule_in_use(schedule_name: str) -> bool:
1058
  """
1059
  Check if a schedule is in use by any people, lighting, equipment, or ventilation/infiltration systems.
 
962
  for hour in range(24):
963
  st.session_state[f"weekday_slider_{hour}"] = tpl["weekday"][hour]
964
  st.session_state[f"weekend_slider_{hour}"] = tpl["weekend"][hour]
965
+ st.session_state.module_rerun_flags["internal_loads"] = True
966
+ st.rerun()
967
 
968
  # ---------------------- UI FORM for name/description only ----------------------
969
  with st.form("schedule_form"):
 
983
  with col_we:
984
  st.markdown("<div style='text-align:center; font-weight:bold; font-size:18px;'>Weekend</div>", unsafe_allow_html=True)
985
 
986
+ # Hide slider values, min, and max labels
987
  hide_elements = """
988
+ <style>
989
+ div[data-testid="stSliderTickBarMin"],
990
+ div[data-testid="stSliderTickBarMax"],
991
+ div.stSlider > div > div > div > div[data-testid="stTickBar"] > div > div {
992
+ display: none;
993
+ }
994
+ div.stSlider > div > div > div > div > div > div {
995
+ visibility: hidden;
996
+ }
997
+ </style>
998
  """
 
999
  st.markdown(hide_elements, unsafe_allow_html=True)
1000
 
1001
  weekday_values = []
 
1016
  step=0.1,
1017
  value=st.session_state.get(f"weekday_slider_{hour}", 0.0),
1018
  label_visibility="collapsed",
1019
+ format="%.1f"
1020
  )
1021
  weekday_values.append(val)
1022
 
 
1029
  step=0.1,
1030
  value=st.session_state.get(f"weekend_slider_{hour}", 0.0),
1031
  label_visibility="collapsed",
1032
+ format="%.1f"
1033
  )
1034
  weekend_values.append(val)
1035
 
 
1045
  "weekday": weekday_values,
1046
  "weekend": weekend_values
1047
  }
1048
+ if editor_state.get("is_edit") and editor_state.get("original_name") != name:
1049
+ # Remove old schedule name if renamed
1050
+ if editor_state.get("original_name") in schedules:
1051
+ del schedules[editor_state["original_name"]]
1052
  st.session_state.schedule_editor = DEFAULT_STATE.copy()
1053
  for hour in range(24):
1054
  st.session_state.pop(f"weekday_slider_{hour}", None)
1055
  st.session_state.pop(f"weekend_slider_{hour}", None)
1056
  st.success(f"Schedule '{name}' saved successfully.")
1057
+ st.session_state.module_rerun_flags["internal_loads"] = True
1058
+ st.rerun()
1059
+
1060
  # ---------------------- Show Saved ----------------------
1061
  st.markdown("### Saved Schedules")
1062
  if schedules:
 
1064
  else:
1065
  st.info("No schedules saved yet.")
1066
 
1067
+ def display_schedules_table(schedules: Dict[str, Any]):
1068
+ """Display schedules in a table format with edit/delete buttons."""
1069
+ if not schedules:
1070
+ return
1071
+
1072
+ # Create table data
1073
+ table_data = []
1074
+ for name, schedule in schedules.items():
1075
+ weekday_peak = max(schedule.get("weekday", [0]))
1076
+ weekend_peak = max(schedule.get("weekend", [0]))
1077
+
1078
+ table_data.append({
1079
+ "Name": name,
1080
+ "Description": schedule.get("description", "No description"),
1081
+ "Weekday Peak": f"{weekday_peak:.2f}",
1082
+ "Weekend Peak": f"{weekend_peak:.2f}",
1083
+ "Actions": name
1084
+ })
1085
+
1086
+ if table_data:
1087
+ df = pd.DataFrame(table_data)
1088
+
1089
+ # Display table
1090
+ st.dataframe(df.drop('Actions', axis=1), use_container_width=True)
1091
+
1092
+ # Display action buttons
1093
+ st.write("**Actions:**")
1094
+ for i, row in enumerate(table_data):
1095
+ schedule_name = row["Actions"]
1096
+
1097
+ col1, col2, col3 = st.columns([2, 1, 1])
1098
+
1099
+ with col1:
1100
+ st.write(f"{i+1}. {schedule_name}")
1101
+
1102
+ with col2:
1103
+ if st.button("Edit", key=f"edit_schedule_{schedule_name}_{i}"):
1104
+ # Set up editor for editing
1105
+ schedule_data = schedules[schedule_name]
1106
+ st.session_state.schedule_editor = {
1107
+ "is_edit": True,
1108
+ "original_name": schedule_name,
1109
+ "name": schedule_name,
1110
+ "description": schedule_data.get("description", ""),
1111
+ "template": "None",
1112
+ "weekday": schedule_data.get("weekday", [0.0] * 24),
1113
+ "weekend": schedule_data.get("weekend", [0.0] * 24)
1114
+ }
1115
+ # Initialize sliders with current values
1116
+ for hour in range(24):
1117
+ st.session_state[f"weekday_slider_{hour}"] = schedule_data.get("weekday", [0.0] * 24)[hour]
1118
+ st.session_state[f"weekend_slider_{hour}"] = schedule_data.get("weekend", [0.0] * 24)[hour]
1119
+ st.session_state.module_rerun_flags["internal_loads"] = True
1120
+ st.rerun()
1121
+
1122
+ with col3:
1123
+ # Check if schedule is in use or a default template before allowing deletion
1124
+ if schedule_name not in DEFAULT_SCHEDULE_TEMPLATES:
1125
+ if is_schedule_in_use(schedule_name):
1126
+ st.write("(In Use)")
1127
+ else:
1128
+ if st.button("Delete", key=f"delete_schedule_{schedule_name}_{i}"):
1129
+ # Delete schedule
1130
+ del schedules[schedule_name]
1131
+ st.success(f"Schedule '{schedule_name}' deleted!")
1132
+ st.session_state.module_rerun_flags["internal_loads"] = True
1133
+ st.rerun()
1134
+ else:
1135
+ st.write("(Default)")
1136
+
1137
  def is_schedule_in_use(schedule_name: str) -> bool:
1138
  """
1139
  Check if a schedule is in use by any people, lighting, equipment, or ventilation/infiltration systems.