LouaiZahran commited on
Commit
4773de5
·
verified ·
1 Parent(s): a178e55

Upload folder using huggingface_hub

Browse files
Files changed (1) hide show
  1. admin_portal.py +220 -31
admin_portal.py CHANGED
@@ -63,7 +63,7 @@ def update_request_status(selected_ids, new_status):
63
  """
64
  cursor.execute(update_query, (new_status, "{" + selected_ids + "}"))
65
  conn.commit()
66
- return f"Updated {len(selected_ids.split(','))} requests to {new_status}."
67
  except Exception as e:
68
  conn.rollback()
69
  return f"Error: {e}"
@@ -86,45 +86,234 @@ def change_status(selected_ids, new_status):
86
  message = update_request_status(selected_ids, new_status)
87
  return message
88
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89
  # Gradio UI
90
  with gr.Blocks() as app:
91
- gr.Markdown("# Withdrawal Requests Management")
 
92
 
93
- filter_option = gr.Radio(
94
- choices=["All Requests", "Completed Requests", "Incomplete Requests"],
95
- label="Filter Requests",
96
- value="All Requests"
97
- )
98
 
99
- requests_table = gr.Dataframe(
100
- label="Withdrawal Requests",
101
- interactive=True
102
- )
103
 
104
- refresh_button = gr.Button("Refresh")
105
- refresh_button.click(
106
- view_requests, inputs=filter_option, outputs=requests_table
107
- )
108
 
109
- selected_ids = gr.Textbox(label="Selected Request IDs (comma-separated)", interactive=True)
110
- current_status = gr.Radio(
111
- choices=["incomplete", "completed"],
112
- label="Set Selected Requests to",
113
- value="incomplete"
114
- )
115
 
116
- update_button = gr.Button("Update Status")
117
- # Add a Textbox to display the status message
118
- status_message = gr.Textbox(label="Status Message", interactive=False)
119
 
120
- # Updated button click with the correct output
121
- update_button.click(
122
- change_status, inputs=[selected_ids, current_status], outputs=status_message
123
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
124
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
125
 
126
- # Initial load
127
- requests_table.value = view_requests("All Requests")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
128
 
129
  # Run the app
130
- app.launch(share=True)
 
63
  """
64
  cursor.execute(update_query, (new_status, "{" + selected_ids + "}"))
65
  conn.commit()
66
+ return f"Updated {len(selected_ids.split(","))} requests to {new_status}."
67
  except Exception as e:
68
  conn.rollback()
69
  return f"Error: {e}"
 
86
  message = update_request_status(selected_ids, new_status)
87
  return message
88
 
89
+ # Function to retrieve application configurations
90
+ def get_configurations():
91
+ conn = connect_db()
92
+ if conn is None:
93
+ return pd.DataFrame({"Error": ["Unable to connect to database"]})
94
+
95
+ try:
96
+ query = "SELECT * FROM config WHERE id = 0"
97
+ df = pd.read_sql(query, conn)
98
+ print(df.to_string())
99
+ conn.close()
100
+ return df
101
+ except Exception as e:
102
+ conn.close()
103
+ return pd.DataFrame({"Error": [str(e)]})
104
+
105
+ # Function to update application configurations
106
+ def update_configurations(
107
+ ad_limit_per_day,
108
+ spin_limit_per_day,
109
+ ad_reward_steps,
110
+ steps_limit,
111
+ amount_limit_for_withdrawal,
112
+ points_conversion_rate
113
+ ):
114
+ conn = connect_db()
115
+ if conn is None:
116
+ return "Error: Unable to connect to database."
117
+
118
+ try:
119
+ query = """
120
+ UPDATE config
121
+ SET
122
+ ad_limit_per_day = %s,
123
+ spin_limit_per_day = %s,
124
+ steps_limit = %s,
125
+ points_conversion_rate = %s,
126
+ ad_reward_steps = %s,
127
+ amount_limit_for_withdrawal = %s
128
+ WHERE id = 0
129
+ """
130
+ with conn.cursor() as cursor:
131
+ cursor.execute(query, (
132
+ ad_limit_per_day,
133
+ spin_limit_per_day,
134
+ steps_limit,
135
+ points_conversion_rate,
136
+ ad_reward_steps,
137
+ amount_limit_for_withdrawal
138
+ ))
139
+ conn.commit()
140
+ return "Configuration updated successfully."
141
+ except Exception as e:
142
+ conn.rollback()
143
+ return f"Error: {str(e)}"
144
+ finally:
145
+ conn.close()
146
+
147
+
148
+ def get_milestones():
149
+ conn = connect_db()
150
+ if conn is None:
151
+ return pd.DataFrame({"Error": ["Unable to connect to database"]})
152
+
153
+ try:
154
+ query = "SELECT * FROM reward_milestone"
155
+ df = pd.read_sql(query, conn)
156
+ print(df.to_string())
157
+ conn.close()
158
+ return df
159
+ except Exception as e:
160
+ conn.close()
161
+ return pd.DataFrame({"Error": [str(e)]})
162
+
163
+ # Function to update application configurations
164
+ def update_milestones(
165
+ req1, r1, req2, r2, req3, r3
166
+ ):
167
+ conn = connect_db()
168
+ if conn is None:
169
+ return "Error: Unable to connect to database."
170
+
171
+ try:
172
+ milestones = [(req1, r1), (req2, r2), (req3, r3)]
173
+ for i, milestone in enumerate(milestones):
174
+ query = """
175
+ UPDATE reward_milestone
176
+ SET
177
+ required_steps = %s,
178
+ reward = %s
179
+ WHERE id = %s
180
+ """
181
+ required_steps, reward = milestone
182
+ with conn.cursor() as cursor:
183
+ cursor.execute(query, (
184
+ required_steps,
185
+ reward,
186
+ i
187
+ ))
188
+ conn.commit()
189
+ return "Configuration updated successfully."
190
+ except Exception as e:
191
+ conn.rollback()
192
+ return f"Error: {str(e)}"
193
+ finally:
194
+ conn.close()
195
+
196
  # Gradio UI
197
  with gr.Blocks() as app:
198
+ with gr.Tab("Withdrawal Requests"):
199
+ gr.Markdown("# Withdrawal Requests Management")
200
 
201
+ filter_option = gr.Radio(
202
+ choices=["All Requests", "Completed Requests", "Incomplete Requests"],
203
+ label="Filter Requests",
204
+ value="All Requests"
205
+ )
206
 
207
+ requests_table = gr.Dataframe(
208
+ label="Withdrawal Requests",
209
+ interactive=True
210
+ )
211
 
212
+ refresh_button = gr.Button("Refresh")
213
+ refresh_button.click(
214
+ view_requests, inputs=filter_option, outputs=requests_table
215
+ )
216
 
217
+ selected_ids = gr.Textbox(label="Selected Request IDs (comma-separated)", interactive=True)
218
+ current_status = gr.Radio(
219
+ choices=["incomplete", "completed"],
220
+ label="Set Selected Requests to",
221
+ value="incomplete"
222
+ )
223
 
224
+ update_button = gr.Button("Update Status")
225
+ status_message = gr.Textbox(label="Status Message", interactive=False)
 
226
 
227
+ update_button.click(
228
+ change_status, inputs=[selected_ids, current_status], outputs=status_message
229
+ )
230
+
231
+ requests_table.value = view_requests("All Requests")
232
+
233
+ with gr.Tab("General Configurations"):
234
+ gr.Markdown("# Application Configurations")
235
+
236
+ # Inputs for configuration fields
237
+ ad_limit_per_day = gr.Number(label="Ad Limit Per Day", precision=0)
238
+ spin_limit_per_day = gr.Number(label="Spin Limit Per Day", precision=0)
239
+ steps_limit = gr.Number(label="Steps Limit", precision=0)
240
+ points_conversion_rate = gr.Number(label="Points Conversion Rate", precision=0)
241
+ ad_reward_steps = gr.Number(label="Ad Reward Steps", precision=0)
242
+ amount_limit_for_withdrawal = gr.Number(label="Amount Limit for Withdrawal", precision=0)
243
+
244
+ save_button = gr.Button("Save Configurations")
245
+ config_message = gr.Textbox(label="Status Message", interactive=False)
246
+
247
+ # Button to update configurations
248
+ save_button.click(
249
+ update_configurations,
250
+ inputs=[
251
+ ad_limit_per_day,
252
+ spin_limit_per_day,
253
+ ad_reward_steps,
254
+ steps_limit,
255
+ amount_limit_for_withdrawal,
256
+ points_conversion_rate
257
+ ],
258
+ outputs=config_message
259
+ )
260
+
261
+ # Load current configurations
262
+ def load_config():
263
+ df = get_configurations()
264
+ if not df.empty:
265
+ return df.iloc[0, 1:].to_list()
266
+ return [0] * 6
267
 
268
+ load_button = gr.Button("Load Current Configurations")
269
+ load_button.click(
270
+ load_config,
271
+ outputs=[
272
+ ad_limit_per_day,
273
+ spin_limit_per_day,
274
+ ad_reward_steps,
275
+ steps_limit,
276
+ amount_limit_for_withdrawal,
277
+ points_conversion_rate
278
+ ]
279
+ )
280
+
281
+ with gr.Tab("Milestone Configurations"):
282
+ gr.Markdown("# Application Configurations")
283
+
284
+ # Inputs for configuration fields
285
+ with gr.Row():
286
+ req_steps_1 = gr.Number(label="Needed Steps for Milestone 1", precision=0)
287
+ reward_1 = gr.Number(label="Reward for Milestone 1", precision=0)
288
+ with gr.Row():
289
+ req_steps_2 = gr.Number(label="Needed Steps for Milestone 2", precision=0)
290
+ reward_2 = gr.Number(label="Reward for Milestone 2", precision=0)
291
+ with gr.Row():
292
+ req_steps_3 = gr.Number(label="Needed Steps for Milestone 3", precision=0)
293
+ reward_3 = gr.Number(label="Reward for Milestone 3", precision=0)
294
+
295
+ save_button = gr.Button("Save Configurations")
296
+ config_message = gr.Textbox(label="Status Message", interactive=False)
297
 
298
+ # Button to update configurations
299
+ save_button.click(
300
+ update_milestones,
301
+ inputs=[req_steps_1, reward_1, req_steps_2, reward_2, req_steps_3, reward_3],
302
+ outputs=config_message
303
+ )
304
+
305
+ # Load current configurations
306
+ def load_milestones():
307
+ df = get_milestones()
308
+ if not df.empty:
309
+ return df[['required_steps', 'reward']].to_numpy().flatten().tolist()
310
+ return [0] * 6
311
+
312
+ load_button = gr.Button("Load Current Configurations")
313
+ load_button.click(
314
+ load_milestones,
315
+ outputs=[req_steps_1, reward_1, req_steps_2, reward_2, req_steps_3, reward_3],
316
+ )
317
 
318
  # Run the app
319
+ app.launch()