Bayhaqy commited on
Commit
90dc8f3
·
verified ·
1 Parent(s): f00fa93

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +9 -23
app.py CHANGED
@@ -4,7 +4,6 @@ import pandas as pd
4
 
5
  EXCEL_FILE = "database.xlsx"
6
 
7
- # ======= Helper functions for Excel storage =======
8
  def load_data():
9
  if os.path.exists(EXCEL_FILE):
10
  try:
@@ -14,8 +13,7 @@ def load_data():
14
  return df_data, df_users
15
  except Exception as e:
16
  print(f"Error loading Excel file: {e}")
17
- # fallback empty
18
- # If file does not exist or error, create empty
19
  df_data = pd.DataFrame(columns=["USERNAME", "COUNTRYCODE", "SBUCODE", "BRANDCODE", "CONCEPTCODE", "CHANNEL", "REMARK"])
20
  df_users = pd.DataFrame([{"USERNAME": "ADMIN", "PASSWORD": "ADMIN"}])
21
  save_data(df_data, df_users)
@@ -26,10 +24,8 @@ def save_data(df_data, df_users):
26
  df_data.to_excel(writer, sheet_name="DATA", index=False)
27
  df_users.to_excel(writer, sheet_name="USERS", index=False)
28
 
29
- # ======= Global Data Store =======
30
  df, users_df = load_data()
31
 
32
- # ======= Your existing helper functions =======
33
  def to_upper(df_input):
34
  return df_input.applymap(lambda x: str(x).upper().strip() if pd.notnull(x) else x)
35
 
@@ -56,7 +52,7 @@ def bulk_submit(dataframe):
56
  merged = pd.merge(new_df, df[pk_cols], on=pk_cols, how="left", indicator=True)
57
  df_filtered = new_df[merged["_merge"] == "left_only"]
58
  df = pd.concat([df, df_filtered], ignore_index=True)
59
- save_data(df, users_df) # SAVE after submit
60
  return get_active_data()
61
 
62
  def delete_selected_rows(selected_df):
@@ -75,7 +71,7 @@ def delete_selected_rows(selected_df):
75
  (df["REMARK"].str.upper() != "DELETE")
76
  )
77
  df.loc[mask, "REMARK"] = "DELETE"
78
- save_data(df, users_df) # SAVE after delete
79
  return "Berhasil dihapus.", get_active_data()
80
  except Exception as e:
81
  return f"Error: {e}", get_active_data()
@@ -89,7 +85,7 @@ def add_user(username, password):
89
  if username in users_df["USERNAME"].values:
90
  return "Username sudah ada", show_users()
91
  users_df = pd.concat([users_df, pd.DataFrame([{"USERNAME": username, "PASSWORD": password}])], ignore_index=True)
92
- save_data(df, users_df) # SAVE after add user
93
  return f"User {username} ditambahkan", show_users()
94
 
95
  def delete_user(username):
@@ -98,7 +94,7 @@ def delete_user(username):
98
  if username == "ADMIN":
99
  return "ADMIN tidak boleh dihapus", show_users()
100
  users_df = users_df[users_df["USERNAME"] != username].reset_index(drop=True)
101
- save_data(df, users_df) # SAVE after delete user
102
  return f"User {username} dihapus", show_users()
103
 
104
  def show_users():
@@ -118,7 +114,6 @@ def show_guide():
118
  4. **Data yang dihapus tidak benar-benar dihapus**, hanya ditandai `REMARK = DELETE`.
119
  """
120
 
121
- # ======= UI Layout and Events (unchanged) =======
122
  with gr.Blocks() as app:
123
  gr.Markdown("## Login")
124
  login_box = gr.Column(visible=True)
@@ -135,22 +130,15 @@ with gr.Blocks() as app:
135
  df_list = gr.Dataframe(
136
  label="List Data Aktif",
137
  interactive=False,
138
- column_widths=["auto"]*7,
139
  wrap=True,
140
- show_copy_button=True,
141
- show_download_button=True,
142
- show_fullscreen_button=True,
143
- show_search=True,
144
- show_row_numbers=True,
145
- pinned_columns=["USERNAME"]
146
  )
147
  selected_df = gr.Dataframe(visible=False)
148
- gr.Line()
149
  gr.Markdown("### Input Data Baru")
150
  df_input = gr.Dataframe(
151
  headers=["USERNAME", "COUNTRYCODE", "SBUCODE", "BRANDCODE", "CONCEPTCODE", "CHANNEL", "REMARK"],
152
  row_count=5,
153
- col_count=(7, "fixed"),
154
  label="Form Input"
155
  )
156
  btn_submit = gr.Button("Submit Data")
@@ -165,16 +153,14 @@ with gr.Blocks() as app:
165
  del_user = gr.Textbox(label="Delete Username")
166
  btn_del = gr.Button("Delete User")
167
  user_msg = gr.Textbox(visible=True, interactive=False, show_label=False)
168
- user_table = gr.Dataframe(label="User List", interactive=False)
169
 
170
  with gr.Tab("User Guide"):
171
  gr.Markdown(show_guide())
172
 
173
- # ==== Events ====
174
  btn_login.click(fn=login, inputs=[user, pw], outputs=[login_msg, login_box, tab_section, df_list, user_table])
175
  btn_submit.click(fn=bulk_submit, inputs=[df_input], outputs=[df_list])
176
- df_list.select(fn=lambda df, evt: df.iloc[[evt.index]] if evt.index is not None else pd.DataFrame(),
177
- inputs=[df_list], outputs=[selected_df])
178
  btn_delete.click(fn=delete_selected_rows, inputs=[selected_df], outputs=[delete_msg, df_list])
179
  btn_add.click(fn=add_user, inputs=[new_user, new_pass], outputs=[user_msg, user_table])
180
  btn_del.click(fn=delete_user, inputs=[del_user], outputs=[user_msg, user_table])
 
4
 
5
  EXCEL_FILE = "database.xlsx"
6
 
 
7
  def load_data():
8
  if os.path.exists(EXCEL_FILE):
9
  try:
 
13
  return df_data, df_users
14
  except Exception as e:
15
  print(f"Error loading Excel file: {e}")
16
+ # create empty defaults if file not found or error
 
17
  df_data = pd.DataFrame(columns=["USERNAME", "COUNTRYCODE", "SBUCODE", "BRANDCODE", "CONCEPTCODE", "CHANNEL", "REMARK"])
18
  df_users = pd.DataFrame([{"USERNAME": "ADMIN", "PASSWORD": "ADMIN"}])
19
  save_data(df_data, df_users)
 
24
  df_data.to_excel(writer, sheet_name="DATA", index=False)
25
  df_users.to_excel(writer, sheet_name="USERS", index=False)
26
 
 
27
  df, users_df = load_data()
28
 
 
29
  def to_upper(df_input):
30
  return df_input.applymap(lambda x: str(x).upper().strip() if pd.notnull(x) else x)
31
 
 
52
  merged = pd.merge(new_df, df[pk_cols], on=pk_cols, how="left", indicator=True)
53
  df_filtered = new_df[merged["_merge"] == "left_only"]
54
  df = pd.concat([df, df_filtered], ignore_index=True)
55
+ save_data(df, users_df)
56
  return get_active_data()
57
 
58
  def delete_selected_rows(selected_df):
 
71
  (df["REMARK"].str.upper() != "DELETE")
72
  )
73
  df.loc[mask, "REMARK"] = "DELETE"
74
+ save_data(df, users_df)
75
  return "Berhasil dihapus.", get_active_data()
76
  except Exception as e:
77
  return f"Error: {e}", get_active_data()
 
85
  if username in users_df["USERNAME"].values:
86
  return "Username sudah ada", show_users()
87
  users_df = pd.concat([users_df, pd.DataFrame([{"USERNAME": username, "PASSWORD": password}])], ignore_index=True)
88
+ save_data(df, users_df)
89
  return f"User {username} ditambahkan", show_users()
90
 
91
  def delete_user(username):
 
94
  if username == "ADMIN":
95
  return "ADMIN tidak boleh dihapus", show_users()
96
  users_df = users_df[users_df["USERNAME"] != username].reset_index(drop=True)
97
+ save_data(df, users_df)
98
  return f"User {username} dihapus", show_users()
99
 
100
  def show_users():
 
114
  4. **Data yang dihapus tidak benar-benar dihapus**, hanya ditandai `REMARK = DELETE`.
115
  """
116
 
 
117
  with gr.Blocks() as app:
118
  gr.Markdown("## Login")
119
  login_box = gr.Column(visible=True)
 
130
  df_list = gr.Dataframe(
131
  label="List Data Aktif",
132
  interactive=False,
 
133
  wrap=True,
134
+ value=get_active_data()
 
 
 
 
 
135
  )
136
  selected_df = gr.Dataframe(visible=False)
 
137
  gr.Markdown("### Input Data Baru")
138
  df_input = gr.Dataframe(
139
  headers=["USERNAME", "COUNTRYCODE", "SBUCODE", "BRANDCODE", "CONCEPTCODE", "CHANNEL", "REMARK"],
140
  row_count=5,
141
+ col_count=7,
142
  label="Form Input"
143
  )
144
  btn_submit = gr.Button("Submit Data")
 
153
  del_user = gr.Textbox(label="Delete Username")
154
  btn_del = gr.Button("Delete User")
155
  user_msg = gr.Textbox(visible=True, interactive=False, show_label=False)
156
+ user_table = gr.Dataframe(label="User List", interactive=False, value=show_users())
157
 
158
  with gr.Tab("User Guide"):
159
  gr.Markdown(show_guide())
160
 
 
161
  btn_login.click(fn=login, inputs=[user, pw], outputs=[login_msg, login_box, tab_section, df_list, user_table])
162
  btn_submit.click(fn=bulk_submit, inputs=[df_input], outputs=[df_list])
163
+ df_list.select(fn=lambda df, evt: df.iloc[[evt.index]] if evt.index is not None else pd.DataFrame(), inputs=[df_list], outputs=[selected_df])
 
164
  btn_delete.click(fn=delete_selected_rows, inputs=[selected_df], outputs=[delete_msg, df_list])
165
  btn_add.click(fn=add_user, inputs=[new_user, new_pass], outputs=[user_msg, user_table])
166
  btn_del.click(fn=delete_user, inputs=[del_user], outputs=[user_msg, user_table])