Bayhaqy commited on
Commit
f00fa93
·
verified ·
1 Parent(s): 99262e9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +36 -69
app.py CHANGED
@@ -2,46 +2,34 @@ import os
2
  import gradio as gr
3
  import pandas as pd
4
 
5
- # ======= Constants =======
6
  EXCEL_FILE = "database.xlsx"
7
- SHEET_DATA = "Data"
8
- SHEET_USERS = "Users"
9
 
10
- # ======= Global Data Store =======
11
- # Fungsi untuk load data dari Excel jika ada
12
  def load_data():
13
- global df, users_df
14
  if os.path.exists(EXCEL_FILE):
15
  try:
16
  xls = pd.ExcelFile(EXCEL_FILE)
17
- if SHEET_DATA in xls.sheet_names:
18
- df = pd.read_excel(xls, sheet_name=SHEET_DATA)
19
- else:
20
- df = pd.DataFrame(columns=["USERNAME", "COUNTRYCODE", "SBUCODE", "BRANDCODE", "CONCEPTCODE", "CHANNEL", "REMARK"])
21
- if SHEET_USERS in xls.sheet_names:
22
- users_df = pd.read_excel(xls, sheet_name=SHEET_USERS)
23
- else:
24
- users_df = pd.DataFrame([{"USERNAME": "ADMIN", "PASSWORD": "ADMIN"}])
25
  except Exception as e:
26
- print(f"Error loading Excel: {e}")
27
- df = pd.DataFrame(columns=["USERNAME", "COUNTRYCODE", "SBUCODE", "BRANDCODE", "CONCEPTCODE", "CHANNEL", "REMARK"])
28
- users_df = pd.DataFrame([{"USERNAME": "ADMIN", "PASSWORD": "ADMIN"}])
29
- else:
30
- df = pd.DataFrame(columns=["USERNAME", "COUNTRYCODE", "SBUCODE", "BRANDCODE", "CONCEPTCODE", "CHANNEL", "REMARK"])
31
- users_df = pd.DataFrame([{"USERNAME": "ADMIN", "PASSWORD": "ADMIN"}])
32
-
33
- # Fungsi untuk simpan data ke Excel
34
- def save_data():
35
- global df, users_df
36
- with pd.ExcelWriter(EXCEL_FILE, engine='openpyxl', mode='w') as writer:
37
- df.to_excel(writer, index=False, sheet_name=SHEET_DATA)
38
- users_df.to_excel(writer, index=False, sheet_name=SHEET_USERS)
39
-
40
- # Load data di awal
41
- load_data()
42
 
43
- # ======= Helper Functions =======
 
44
 
 
45
  def to_upper(df_input):
46
  return df_input.applymap(lambda x: str(x).upper().strip() if pd.notnull(x) else x)
47
 
@@ -68,7 +56,7 @@ def bulk_submit(dataframe):
68
  merged = pd.merge(new_df, df[pk_cols], on=pk_cols, how="left", indicator=True)
69
  df_filtered = new_df[merged["_merge"] == "left_only"]
70
  df = pd.concat([df, df_filtered], ignore_index=True)
71
- save_data() # Simpan setelah update data
72
  return get_active_data()
73
 
74
  def delete_selected_rows(selected_df):
@@ -87,7 +75,7 @@ def delete_selected_rows(selected_df):
87
  (df["REMARK"].str.upper() != "DELETE")
88
  )
89
  df.loc[mask, "REMARK"] = "DELETE"
90
- save_data() # Simpan setelah update data
91
  return "Berhasil dihapus.", get_active_data()
92
  except Exception as e:
93
  return f"Error: {e}", get_active_data()
@@ -101,7 +89,7 @@ def add_user(username, password):
101
  if username in users_df["USERNAME"].values:
102
  return "Username sudah ada", show_users()
103
  users_df = pd.concat([users_df, pd.DataFrame([{"USERNAME": username, "PASSWORD": password}])], ignore_index=True)
104
- save_data() # Simpan setelah update user
105
  return f"User {username} ditambahkan", show_users()
106
 
107
  def delete_user(username):
@@ -110,7 +98,7 @@ def delete_user(username):
110
  if username == "ADMIN":
111
  return "ADMIN tidak boleh dihapus", show_users()
112
  users_df = users_df[users_df["USERNAME"] != username].reset_index(drop=True)
113
- save_data() # Simpan setelah update user
114
  return f"User {username} dihapus", show_users()
115
 
116
  def show_users():
@@ -118,40 +106,19 @@ def show_users():
118
 
119
  def show_guide():
120
  return """
121
-
122
- ### Panduan Penggunaan Aplikasi
123
-
124
-
125
- 1.
126
- **Login**
127
-
128
-
129
- - Gunakan username dan password untuk masuk.
130
-
131
-
132
- 2.
133
- **Input Data**
134
-
135
-
136
- - Lihat data aktif.
137
-
138
- - Input data baru dengan kolom lengkap.
139
-
140
- - Pilih baris dan klik "Delete Selected Rows" untuk tandai delete.
141
-
142
-
143
- 3.
144
- **Manajemen User**
145
-
146
-
147
- - Tambah dan hapus user (kecuali ADMIN).
148
-
149
-
150
- 4.
151
- **Data yang dihapus tidak benar-benar dihapus**, hanya ditandai `REMARK = DELETE`. """
152
-
153
- # ======= UI Layout =======
154
-
155
  with gr.Blocks() as app:
156
  gr.Markdown("## Login")
157
  login_box = gr.Column(visible=True)
 
2
  import gradio as gr
3
  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:
11
  xls = pd.ExcelFile(EXCEL_FILE)
12
+ df_data = pd.read_excel(xls, "DATA")
13
+ df_users = pd.read_excel(xls, "USERS")
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)
22
+ return df_data, df_users
23
+
24
+ def save_data(df_data, df_users):
25
+ with pd.ExcelWriter(EXCEL_FILE, engine="openpyxl") as writer:
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
  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
  (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
  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
  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():
 
106
 
107
  def show_guide():
108
  return """
109
+ ### Panduan Penggunaan Aplikasi
110
+ 1. **Login**
111
+ - Gunakan username dan password untuk masuk.
112
+ 2. **Input Data**
113
+ - Lihat data aktif.
114
+ - Input data baru dengan kolom lengkap.
115
+ - Pilih baris dan klik "Delete Selected Rows" untuk tandai delete.
116
+ 3. **Manajemen User**
117
+ - Tambah dan hapus user (kecuali ADMIN).
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)