girishwangikar commited on
Commit
fd9f7d5
Β·
verified Β·
1 Parent(s): a4cffd5

Update delete_tab.py

Browse files
Files changed (1) hide show
  1. delete_tab.py +134 -25
delete_tab.py CHANGED
@@ -26,7 +26,7 @@ class DeleteTab:
26
  """Get all transactions for a farmer with row indices"""
27
  try:
28
  if not farmer_name or not farmer_name.strip():
29
- return None, None, "❌ Please select a farmer"
30
 
31
  farmer_name = farmer_name.strip()
32
  spreadsheet = self.get_sheet()
@@ -34,17 +34,17 @@ class DeleteTab:
34
  data = trans_sheet.get_all_values()
35
 
36
  if len(data) <= 1:
37
- return None, None, f"❌ No transactions found for farmer '{farmer_name}'"
38
 
39
  # Create DataFrame with row indices
40
  df = pd.DataFrame(data[1:], columns=data[0])
41
- df['Sheet_Row'] = range(2, len(data) + 1) # Google Sheets row numbers (starting from 2)
42
 
43
  # Filter by farmer
44
  farmer_df = df[df['Farmer Name'] == farmer_name].copy()
45
 
46
  if farmer_df.empty:
47
- return None, None, f"❌ No transactions found for farmer '{farmer_name}'"
48
 
49
  # Convert amount and date
50
  farmer_df['Amount'] = pd.to_numeric(farmer_df['Amount'], errors='coerce')
@@ -57,15 +57,12 @@ class DeleteTab:
57
  display_df['Date'] = display_df['Date'].apply(lambda x: self.format_date_display(str(x)[:10]))
58
  display_df['Amount (β‚Ή)'] = display_df['Amount (β‚Ή)'].apply(self.format_indian_currency)
59
 
60
- # Create row number choices for dropdown
61
- row_choices = [str(row) for row in farmer_df['Sheet_Row'].tolist()]
62
-
63
- return display_df, row_choices, f"βœ… Found {len(farmer_df)} transaction(s) for {farmer_name}"
64
 
65
  except Exception as e:
66
  import traceback
67
  traceback.print_exc()
68
- return None, None, f"❌ Error loading transactions: {str(e)}"
69
 
70
  def delete_single_transaction(self, row_number):
71
  """Delete a single transaction by row number"""
@@ -140,10 +137,66 @@ class DeleteTab:
140
  import traceback
141
  traceback.print_exc()
142
  return f"❌ Error deleting farmer data: {str(e)}"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
143
 
144
  def clear_delete_single(self):
145
  """Clear single deletion interface"""
146
- return None, None, "", None
147
 
148
  def clear_delete_all(self):
149
  """Clear complete deletion interface"""
@@ -178,13 +231,14 @@ class DeleteTab:
178
  )
179
 
180
  gr.Markdown("### Select Transaction to Delete")
 
181
  with gr.Row():
182
- delete_row_dropdown = gr.Dropdown(
183
- label="Select Row Number to Delete",
184
- choices=[],
185
- allow_custom_value=False
186
  )
187
- delete_single_btn = gr.Button("Delete Selected Row", variant="stop", size="lg")
188
 
189
  delete_result = gr.Textbox(label="Deletion Result", interactive=False)
190
 
@@ -219,6 +273,35 @@ class DeleteTab:
219
  )
220
 
221
  delete_all_result = gr.Textbox(label="Deletion Result", interactive=False)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
222
 
223
  # Event handlers - Delete Single Transaction
224
  refresh_delete_single_btn.click(
@@ -229,23 +312,28 @@ class DeleteTab:
229
  load_delete_trans_btn.click(
230
  fn=self.get_farmer_transactions_for_deletion,
231
  inputs=[delete_single_farmer],
232
- outputs=[delete_trans_df, delete_row_dropdown, delete_single_status]
233
- ).then(
234
- fn=lambda: None, # Clear the dropdown selection after loading
235
- outputs=[delete_row_dropdown]
236
  )
237
 
 
238
  def delete_and_refresh(row_number, farmer_name):
239
  """Delete transaction and refresh the list"""
240
- result = self.delete_single_transaction(row_number)
241
- # Reload transactions after deletion
242
- new_df, new_choices, new_status = self.get_farmer_transactions_for_deletion(farmer_name)
243
- return result, new_df, new_choices, new_status
 
 
 
 
 
 
 
244
 
245
  delete_single_btn.click(
246
  fn=delete_and_refresh,
247
- inputs=[delete_row_dropdown, delete_single_farmer],
248
- outputs=[delete_result, delete_trans_df, delete_row_dropdown, delete_single_status]
249
  )
250
 
251
  # Event handlers - Delete All Farmer Data
@@ -253,7 +341,28 @@ class DeleteTab:
253
  fn=self.refresh_farmers,
254
  outputs=[delete_all_farmer]
255
  )
 
 
 
 
 
 
 
256
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
257
  def delete_all_with_confirmation(farmer_name, confirmed):
258
  if not confirmed:
259
  return "❌ Please check the confirmation box to proceed with deletion"
 
26
  """Get all transactions for a farmer with row indices"""
27
  try:
28
  if not farmer_name or not farmer_name.strip():
29
+ return None, "❌ Please select a farmer"
30
 
31
  farmer_name = farmer_name.strip()
32
  spreadsheet = self.get_sheet()
 
34
  data = trans_sheet.get_all_values()
35
 
36
  if len(data) <= 1:
37
+ return None, f"❌ No transactions found for farmer '{farmer_name}'"
38
 
39
  # Create DataFrame with row indices
40
  df = pd.DataFrame(data[1:], columns=data[0])
41
+ df['Sheet_Row'] = range(2, len(data) + 1)
42
 
43
  # Filter by farmer
44
  farmer_df = df[df['Farmer Name'] == farmer_name].copy()
45
 
46
  if farmer_df.empty:
47
+ return None, f"❌ No transactions found for farmer '{farmer_name}'"
48
 
49
  # Convert amount and date
50
  farmer_df['Amount'] = pd.to_numeric(farmer_df['Amount'], errors='coerce')
 
57
  display_df['Date'] = display_df['Date'].apply(lambda x: self.format_date_display(str(x)[:10]))
58
  display_df['Amount (β‚Ή)'] = display_df['Amount (β‚Ή)'].apply(self.format_indian_currency)
59
 
60
+ return display_df, f"βœ… Found {len(farmer_df)} transaction(s) for {farmer_name}"
 
 
 
61
 
62
  except Exception as e:
63
  import traceback
64
  traceback.print_exc()
65
+ return None, f"❌ Error loading transactions: {str(e)}"
66
 
67
  def delete_single_transaction(self, row_number):
68
  """Delete a single transaction by row number"""
 
137
  import traceback
138
  traceback.print_exc()
139
  return f"❌ Error deleting farmer data: {str(e)}"
140
+
141
+
142
+ def get_banks(self):
143
+ """Get list of registered bank accounts"""
144
+ try:
145
+ spreadsheet = self.get_sheet()
146
+ meta_sheet = spreadsheet.worksheet("Metadata")
147
+ data = meta_sheet.get_all_values()
148
+
149
+ banks = []
150
+ for row in data:
151
+ if len(row) >= 2 and row[0] == 'bank' and row[1]:
152
+ banks.extend([b.strip() for b in row[1].split(',') if b.strip()])
153
+
154
+ return sorted(list(set(banks)))
155
+ except Exception as e:
156
+ print(f"Error getting banks: {str(e)}")
157
+ return []
158
+
159
+ def refresh_banks(self):
160
+ """Refresh bank dropdown"""
161
+ return gr.Dropdown(choices=self.get_banks())
162
+
163
+ def delete_bank(self, bank_name):
164
+ """Delete a bank from the registration list"""
165
+ try:
166
+ if not bank_name or not bank_name.strip():
167
+ return "❌ Please select a bank account"
168
+
169
+ bank_name = bank_name.strip()
170
+ spreadsheet = self.get_sheet()
171
+ meta_sheet = spreadsheet.worksheet("Metadata")
172
+ meta_data = meta_sheet.get_all_values()
173
+
174
+ for idx, row in enumerate(meta_data):
175
+ if len(row) >= 2 and row[0] == 'bank':
176
+ current_banks = row[1]
177
+ banks_list = [b.strip() for b in current_banks.split(',') if b.strip()]
178
+
179
+ if bank_name in banks_list:
180
+ banks_list.remove(bank_name)
181
+ new_banks = ','.join(banks_list)
182
+ meta_sheet.update_cell(idx + 1, 2, new_banks)
183
+
184
+ return f"βœ… Successfully deleted bank account '{bank_name}' from registration list"
185
+
186
+ return f"❌ Bank account '{bank_name}' not found in registration list"
187
+
188
+ except Exception as e:
189
+ import traceback
190
+ traceback.print_exc()
191
+ return f"❌ Error deleting bank: {str(e)}"
192
+
193
+ def clear_delete_bank(self):
194
+ """Clear bank deletion interface"""
195
+ return ""
196
 
197
  def clear_delete_single(self):
198
  """Clear single deletion interface"""
199
+ return None, "", ""
200
 
201
  def clear_delete_all(self):
202
  """Clear complete deletion interface"""
 
231
  )
232
 
233
  gr.Markdown("### Select Transaction to Delete")
234
+ gr.Markdown("*Enter the Row # from the table above*")
235
  with gr.Row():
236
+ delete_row_input = gr.Textbox(
237
+ label="Enter Row Number to Delete",
238
+ placeholder="e.g., 15",
239
+ scale=3
240
  )
241
+ delete_single_btn = gr.Button("Delete Selected Row", variant="stop", size="lg", scale=1)
242
 
243
  delete_result = gr.Textbox(label="Deletion Result", interactive=False)
244
 
 
273
  )
274
 
275
  delete_all_result = gr.Textbox(label="Deletion Result", interactive=False)
276
+
277
+
278
+ with gr.Accordion("🏦 Delete Bank Account", open=False):
279
+ gr.Markdown("*Remove a bank account from the registration list*")
280
+ gr.Markdown("⚠️ **Note**: This only removes the bank from the dropdown list. Existing transactions with this bank will remain.")
281
+
282
+ with gr.Row():
283
+ delete_bank_dropdown = gr.Dropdown(
284
+ label="Select Bank Account to Delete",
285
+ choices=[],
286
+ allow_custom_value=True,
287
+ scale=9
288
+ )
289
+ refresh_delete_bank_btn = gr.Button("πŸ”„", scale=1, size="sm")
290
+
291
+ delete_bank_confirm = gr.Checkbox(
292
+ label="I confirm I want to delete this bank account from the registration list",
293
+ value=False
294
+ )
295
+
296
+ delete_bank_btn = gr.Button(
297
+ "Delete Bank Account",
298
+ variant="stop",
299
+ size="lg"
300
+ )
301
+
302
+ delete_bank_result = gr.Textbox(label="Deletion Result", interactive=False)
303
+
304
+
305
 
306
  # Event handlers - Delete Single Transaction
307
  refresh_delete_single_btn.click(
 
312
  load_delete_trans_btn.click(
313
  fn=self.get_farmer_transactions_for_deletion,
314
  inputs=[delete_single_farmer],
315
+ outputs=[delete_trans_df, delete_single_status]
 
 
 
316
  )
317
 
318
+ # Replace the delete_single_btn.click handler:
319
  def delete_and_refresh(row_number, farmer_name):
320
  """Delete transaction and refresh the list"""
321
+ if not row_number or not row_number.strip():
322
+ return "❌ Please enter a row number", None, ""
323
+
324
+ result = self.delete_single_transaction(row_number.strip())
325
+
326
+ # Reload transactions after deletion if deletion was successful
327
+ if "Successfully deleted" in result:
328
+ new_df, new_status = self.get_farmer_transactions_for_deletion(farmer_name)
329
+ return result, new_df, new_status
330
+ else:
331
+ return result, None, ""
332
 
333
  delete_single_btn.click(
334
  fn=delete_and_refresh,
335
+ inputs=[delete_row_input, delete_single_farmer],
336
+ outputs=[delete_result, delete_trans_df, delete_single_status]
337
  )
338
 
339
  # Event handlers - Delete All Farmer Data
 
341
  fn=self.refresh_farmers,
342
  outputs=[delete_all_farmer]
343
  )
344
+
345
+
346
+ # Event handlers - Delete Bank Account
347
+ refresh_delete_bank_btn.click(
348
+ fn=self.refresh_banks,
349
+ outputs=[delete_bank_dropdown]
350
+ )
351
 
352
+ def delete_bank_with_confirmation(bank_name, confirmed):
353
+ if not confirmed:
354
+ return "❌ Please check the confirmation box to proceed with deletion"
355
+ return self.delete_bank(bank_name)
356
+
357
+ delete_bank_btn.click(
358
+ fn=delete_bank_with_confirmation,
359
+ inputs=[delete_bank_dropdown, delete_bank_confirm],
360
+ outputs=[delete_bank_result]
361
+ ).then(
362
+ fn=lambda: False, # Uncheck the confirmation box
363
+ outputs=[delete_bank_confirm]
364
+ )
365
+
366
  def delete_all_with_confirmation(farmer_name, confirmed):
367
  if not confirmed:
368
  return "❌ Please check the confirmation box to proceed with deletion"