.
This commit is contained in:
35
bot/main.py
35
bot/main.py
@@ -370,16 +370,23 @@ async def delete_my_account(callback: CallbackQuery):
|
|||||||
number = callback.data.replace("confirm_delete_my_", "")
|
number = callback.data.replace("confirm_delete_my_", "")
|
||||||
|
|
||||||
# Delete from MikoPBX
|
# Delete from MikoPBX
|
||||||
await mikopbx.delete_extension(number)
|
mikopbx_result = await mikopbx.delete_extension(number)
|
||||||
|
|
||||||
# Delete from local DB
|
if mikopbx_result.get("success"):
|
||||||
await db.delete_sip_account(number)
|
# Delete from local DB only if MikoPBX deletion succeeded
|
||||||
|
await db.delete_sip_account(number)
|
||||||
await safe_edit_text(
|
await safe_edit_text(
|
||||||
callback,
|
callback,
|
||||||
f"Extension {number} has been deleted.",
|
f"Extension {number} has been deleted.",
|
||||||
reply_markup=main_menu_keyboard(is_admin(callback.from_user.id))
|
reply_markup=main_menu_keyboard(is_admin(callback.from_user.id))
|
||||||
)
|
)
|
||||||
|
else:
|
||||||
|
error = mikopbx_result.get("error", "Unknown error")
|
||||||
|
await safe_edit_text(
|
||||||
|
callback,
|
||||||
|
f"Failed to delete {number} in MikoPBX:\n{error}",
|
||||||
|
reply_markup=main_menu_keyboard(is_admin(callback.from_user.id))
|
||||||
|
)
|
||||||
|
|
||||||
# ============== ADMIN HANDLERS ==============
|
# ============== ADMIN HANDLERS ==============
|
||||||
|
|
||||||
@@ -654,19 +661,19 @@ async def admin_confirm_delete(callback: CallbackQuery):
|
|||||||
# Delete from MikoPBX
|
# Delete from MikoPBX
|
||||||
mikopbx_result = await mikopbx.delete_extension(number)
|
mikopbx_result = await mikopbx.delete_extension(number)
|
||||||
|
|
||||||
# Delete from local DB
|
if mikopbx_result.get("success"):
|
||||||
db_success = await db.delete_sip_account(number)
|
# Delete from local DB only if MikoPBX deletion succeeded
|
||||||
|
await db.delete_sip_account(number)
|
||||||
if mikopbx_result.get("success") or db_success:
|
|
||||||
await safe_edit_text(
|
await safe_edit_text(
|
||||||
callback,
|
callback,
|
||||||
f"Extension {number} has been deleted.",
|
f"Extension {number} has been deleted.",
|
||||||
reply_markup=admin_menu_keyboard()
|
reply_markup=admin_menu_keyboard()
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
|
error = mikopbx_result.get("error", "Unknown error")
|
||||||
await safe_edit_text(
|
await safe_edit_text(
|
||||||
callback,
|
callback,
|
||||||
f"Failed to delete {number}.",
|
f"Failed to delete {number} in MikoPBX:\n{error}",
|
||||||
reply_markup=admin_menu_keyboard()
|
reply_markup=admin_menu_keyboard()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -78,6 +78,7 @@ class MikoPBXService:
|
|||||||
# Check if number already exists in MikoPBX
|
# Check if number already exists in MikoPBX
|
||||||
existing = await self.get_employee_by_number(number)
|
existing = await self.get_employee_by_number(number)
|
||||||
if existing:
|
if existing:
|
||||||
|
logger.warning(f">>> Number {number} already exists in MikoPBX, aborting create")
|
||||||
return {
|
return {
|
||||||
"success": False,
|
"success": False,
|
||||||
"error": [f"Internal number {number} is already occupied"]
|
"error": [f"Internal number {number} is already occupied"]
|
||||||
@@ -135,7 +136,9 @@ class MikoPBXService:
|
|||||||
if not response.get("result"):
|
if not response.get("result"):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
employees = response.get("data", [])
|
# GET /v3/employees returns { data: { data: [...], recordsTotal: N, recordsFiltered: N } }
|
||||||
|
data = response.get("data", {})
|
||||||
|
employees = data.get("data", []) if isinstance(data, dict) else data
|
||||||
for emp in employees:
|
for emp in employees:
|
||||||
if isinstance(emp, dict) and emp.get("number") == number:
|
if isinstance(emp, dict) and emp.get("number") == number:
|
||||||
return emp
|
return emp
|
||||||
@@ -220,10 +223,12 @@ class MikoPBXService:
|
|||||||
"""Delete employee by extension number (finds real ID first)"""
|
"""Delete employee by extension number (finds real ID first)"""
|
||||||
employee = await self.get_employee_by_number(number)
|
employee = await self.get_employee_by_number(number)
|
||||||
if not employee:
|
if not employee:
|
||||||
|
logger.warning(f">>> Cannot delete {number}: employee not found in MikoPBX")
|
||||||
return {"success": False, "error": "Employee not found"}
|
return {"success": False, "error": "Employee not found"}
|
||||||
|
|
||||||
real_id = self._extract_employee_id(employee)
|
real_id = self._extract_employee_id(employee)
|
||||||
if not real_id:
|
if not real_id:
|
||||||
|
logger.error(f">>> Cannot delete {number}: employee ID is missing")
|
||||||
return {"success": False, "error": "Employee ID is missing"}
|
return {"success": False, "error": "Employee ID is missing"}
|
||||||
|
|
||||||
logger.info(f">>> Deleting employee with real ID: {real_id}")
|
logger.info(f">>> Deleting employee with real ID: {real_id}")
|
||||||
|
|||||||
Reference in New Issue
Block a user