feat: Add A-Z filter for clients/suppliers in Telegram bot

- Add A-Z alphabetical filter keyboard for clients and suppliers lists
  (same pattern as company selection, without emoji)
- Increase clients/suppliers list pagination from 10 to 20 items per page
- Remove emoji from company A-Z filter button for consistency
- Add 6 new callback handlers: clients_alpha_menu, clients_alpha:LETTER,
  clients_alpha_page:PAGE:LETTER, and supplier equivalents
- Dashboard service and models updates
- Telegram bot: email handlers, auth, DB operations, internal API improvements
- Frontend: dashboard cards updates (CashFlow, Clienti, Furnizori, Treasury)
- Frontend: SolduriCompactCard and CollapsibleCard improvements
- DashboardView enhancements
- start.sh and run-with-restart.sh script updates
- IIS web.config and service worker updates

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Claude Agent
2026-02-21 14:34:15 +00:00
parent 1366dbc11c
commit 30f55cf18b
28 changed files with 1671 additions and 520 deletions

View File

@@ -101,12 +101,13 @@ def is_valid_email_format(email: str) -> bool:
return bool(re.match(pattern, email))
async def verify_email_in_oracle(email: str) -> Optional[str]:
async def verify_email_in_oracle(email: str, server_id: Optional[str] = None) -> Optional[str]:
"""
Verify email exists in Oracle UTILIZATORI table via backend API
Args:
email: Email address to check
server_id: Optional Oracle server ID (for multi-server mode)
Returns:
Oracle username if found and active, None otherwise
@@ -118,8 +119,8 @@ async def verify_email_in_oracle(email: str) -> Optional[str]:
backend_client = get_backend_client()
# Call backend API to verify email
response = await backend_client.verify_email(email)
# Call backend API to verify email (on specific server if provided)
response = await backend_client.verify_email(email, server_id=server_id)
if response.get('success'):
username = response.get('username')

View File

@@ -78,7 +78,8 @@ async def link_telegram_account(
return None
oracle_username = code_data.get('oracle_username')
logger.info(f"Auth code valid for Oracle user: {oracle_username}")
server_id = code_data.get('server_id') # Extract server_id from the stored code
logger.info(f"Auth code valid for Oracle user: {oracle_username} (server_id={server_id})")
# Step 2: Create/update Telegram user record (basic info)
user_created = await create_or_update_user(
@@ -97,7 +98,8 @@ async def link_telegram_account(
async with backend_client:
user_data = await backend_client.verify_user(
oracle_username=oracle_username,
linking_code=auth_code
linking_code=auth_code,
server_id=server_id
)
if not user_data or not user_data.get('success'):