pasquale991 commited on
Commit
c76e26a
·
verified ·
1 Parent(s): 488a502

Update src/streamlit_app.py

Browse files
Files changed (1) hide show
  1. src/streamlit_app.py +15 -21
src/streamlit_app.py CHANGED
@@ -6,12 +6,12 @@ import io
6
  import os
7
 
8
  # --- Inizializzazione Session State per il pulsante CLEAN ---
9
- # È fondamentale inizializzare le chiavi di session_state usate per i widget di input
10
- # Se la chiave 'uploaded_files_key' non esiste, la inizializza a None (stato iniziale del file_uploader)
11
- if 'uploaded_files_key' not in st.session_state:
12
- st.session_state.uploaded_files_key = [] # Inizializza a lista vuota per il file_uploader
13
  if 'site_code_input' not in st.session_state:
14
- st.session_state.site_code_input = "" # Inizializza a stringa vuota per il text_input
15
 
16
 
17
  # --- CSS personalizzato per sfondo giallo e testo blu ---
@@ -44,8 +44,8 @@ st.markdown(
44
  background-color: #4169E1; /* Blu medio al passaggio del mouse */
45
  }
46
  </style>
47
- """,
48
- # unsafe_allow_html=True # Necessario per iniettare CSS
49
  )
50
 
51
 
@@ -73,14 +73,12 @@ def convert_json_to_excel_data(json_file_content: str):
73
 
74
  processed_data_for_this_file = []
75
  for item in details:
76
- # Gestione robusta di cancelPosOdA per garantire True/False
77
  cancel_pos_oda_val = item.get('cancelPosOdA')
78
  if cancel_pos_oda_val is None:
79
  cancel_pos_oda_processed = False
80
  elif isinstance(cancel_pos_oda_val, str):
81
- # Converte "true" (case-insensitive) in True, altrimenti in False
82
  cancel_pos_oda_processed = cancel_pos_oda_val.lower() == 'true'
83
- else: # Per booleani nativi o interi (0/1)
84
  cancel_pos_oda_processed = bool(cancel_pos_oda_val)
85
 
86
  row = {
@@ -97,7 +95,7 @@ def convert_json_to_excel_data(json_file_content: str):
97
  'positions.stock.accountingInfo.availability': item.get('availability'),
98
  'positions.stock.refOrder': item.get('refOrder'),
99
  'positions.stock.reasonCode': item.get('reasonCode'),
100
- 'positions.stock.cancelPosOda': cancel_pos_oda_processed # Usa il valore processato
101
  }
102
  processed_data_for_this_file.append(row)
103
 
@@ -122,16 +120,16 @@ st.write("Carica i tuoi file JSON degli ordini ODA e scarica il foglio Excel for
122
 
123
  # Sezione per l'input del solo siteCode
124
  st.header("1. Qual è il Site Code? Inseriscilo qui:")
125
- # Collega il text_input al session_state
126
  user_site_code = st.text_input("Site Code", key="site_code_input")
127
 
128
  st.header("2. Carica i tuoi file JSON")
129
- # Collega il file_uploader al session_state per permettere il reset
 
130
  uploaded_files = st.file_uploader(
131
  "Scegli uno o più file JSON per lo stesso siteCode di tipo 'Ordine_Acquisto'",
132
  type=["json"],
133
  accept_multiple_files=True,
134
- key="uploaded_files_key" # Usa la chiave di session_state
135
  )
136
 
137
  all_processed_data = []
@@ -194,9 +192,6 @@ if uploaded_files:
194
 
195
  workbook = writer.book
196
  worksheet = writer.sheets[sheet_name_excel]
197
-
198
- # --- RIMOZIONE: Formattazione header ---
199
- # Il formato verrà applicato di default senza stile speciale
200
 
201
  col_widths = {
202
  'site.code': 10, 'docDate': 12, 'company.code': 15, 'supplier.partnerRef.code': 18,
@@ -211,7 +206,6 @@ if uploaded_files:
211
  }
212
 
213
  for col_num, col_name in enumerate(final_df.columns.values):
214
- # RIMOZIONE: Applica il formato header. Ora scriverà solo il nome della colonna
215
  worksheet.write(0, col_num, col_name)
216
  if col_name in col_widths:
217
  worksheet.set_column(col_num, col_num, col_widths[col_name])
@@ -239,10 +233,10 @@ else:
239
 
240
 
241
  # --- Pulsante CLEAN ---
242
- st.markdown("---") # Linea separatrice
243
  def clear_inputs():
244
- st.session_state.uploaded_files_key = [] # Resetta il file uploader
245
- st.session_state.site_code_input = "" # Resetta il campo Site Code
246
 
247
  st.button("Pulisci Input (RESET)", on_click=clear_inputs)
248
 
 
6
  import os
7
 
8
  # --- Inizializzazione Session State per il pulsante CLEAN ---
9
+ # NON inizializzare uploaded_files_key per st.file_uploader in questo modo!
10
+ # Streamlit lo gestisce automaticamente.
11
+
12
+ # Inizializza solo il campo di testo, che supporta questa sintassi
13
  if 'site_code_input' not in st.session_state:
14
+ st.session_state.site_code_input = ""
15
 
16
 
17
  # --- CSS personalizzato per sfondo giallo e testo blu ---
 
44
  background-color: #4169E1; /* Blu medio al passaggio del mouse */
45
  }
46
  </style>
47
+ """
48
+ # Rimosso: , unsafe_allow_html=True
49
  )
50
 
51
 
 
73
 
74
  processed_data_for_this_file = []
75
  for item in details:
 
76
  cancel_pos_oda_val = item.get('cancelPosOdA')
77
  if cancel_pos_oda_val is None:
78
  cancel_pos_oda_processed = False
79
  elif isinstance(cancel_pos_oda_val, str):
 
80
  cancel_pos_oda_processed = cancel_pos_oda_val.lower() == 'true'
81
+ else:
82
  cancel_pos_oda_processed = bool(cancel_pos_oda_val)
83
 
84
  row = {
 
95
  'positions.stock.accountingInfo.availability': item.get('availability'),
96
  'positions.stock.refOrder': item.get('refOrder'),
97
  'positions.stock.reasonCode': item.get('reasonCode'),
98
+ 'positions.stock.cancelPosOda': cancel_pos_oda_processed
99
  }
100
  processed_data_for_this_file.append(row)
101
 
 
120
 
121
  # Sezione per l'input del solo siteCode
122
  st.header("1. Qual è il Site Code? Inseriscilo qui:")
 
123
  user_site_code = st.text_input("Site Code", key="site_code_input")
124
 
125
  st.header("2. Carica i tuoi file JSON")
126
+ # Collega il file_uploader al session_state per permettere il reset,
127
+ # ma senza pre-inizializzare la sua chiave all'inizio dello script.
128
  uploaded_files = st.file_uploader(
129
  "Scegli uno o più file JSON per lo stesso siteCode di tipo 'Ordine_Acquisto'",
130
  type=["json"],
131
  accept_multiple_files=True,
132
+ key="uploaded_files_key"
133
  )
134
 
135
  all_processed_data = []
 
192
 
193
  workbook = writer.book
194
  worksheet = writer.sheets[sheet_name_excel]
 
 
 
195
 
196
  col_widths = {
197
  'site.code': 10, 'docDate': 12, 'company.code': 15, 'supplier.partnerRef.code': 18,
 
206
  }
207
 
208
  for col_num, col_name in enumerate(final_df.columns.values):
 
209
  worksheet.write(0, col_num, col_name)
210
  if col_name in col_widths:
211
  worksheet.set_column(col_num, col_num, col_widths[col_name])
 
233
 
234
 
235
  # --- Pulsante CLEAN ---
236
+ st.markdown("---")
237
  def clear_inputs():
238
+ st.session_state.uploaded_files_key = [] # Questo rimane corretto per resettare il file_uploader
239
+ st.session_state.site_code_input = ""
240
 
241
  st.button("Pulisci Input (RESET)", on_click=clear_inputs)
242