feat(telegram): Unify Trezorerie button (Casa + Banca combined)
- Replace separate [Trezorerie Casa] and [Trezorerie Banca] buttons with single unified [Trezorerie] button in main menu - Add format_treasury_combined_response() formatter showing: - Grand total (Sold Trezorerie) - Casa section with total + all accounts - Banca section with total + all accounts - Compact menu layout: Row 2 [Sold Companie][Trezorerie], Row 3 [Sold Clienti][Sold Furnizori], Row 4 [Evolutie Incasari] - Use Romanian number format (period as thousands separator) Also includes: - Oracle pool: Support both SERVICE_NAME and SID connections (ORACLE_SERVICE_NAME takes priority over ORACLE_SID) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
106
.auto-build/specs/telegram-trezorerie/plan.md
Normal file
106
.auto-build/specs/telegram-trezorerie/plan.md
Normal file
@@ -0,0 +1,106 @@
|
||||
# Implementation Plan: telegram-trezorerie
|
||||
|
||||
**Status**: ✅ COMPLETE
|
||||
**Created**: 2025-12-30T18:45:00Z
|
||||
|
||||
## Progress Tracker
|
||||
|
||||
| Task | Status | Completed |
|
||||
|------|--------|-----------|
|
||||
| Task 1: Add unified formatter | ✅ Done | 2025-12-30 18:48 |
|
||||
| Task 2: Update main menu layout | ✅ Done | 2025-12-30 18:49 |
|
||||
| Task 3: Add callback handler | ✅ Done | 2025-12-30 18:50 |
|
||||
| Task 4: Manual testing | ✅ Done | 2025-12-30 18:51 |
|
||||
|
||||
## Tasks
|
||||
|
||||
### Task 1: Add unified formatter
|
||||
- **Status**: ✅ Done (2025-12-30 18:48)
|
||||
- **Files**: `backend/modules/telegram/bot/formatters.py`
|
||||
- **Description**: Add `format_treasury_combined_response()` function after line 187 (after `format_treasury_banca_response`). This new formatter will:
|
||||
- Calculate grand total (casa + banca)
|
||||
- Format unified message with three sections: Grand Total, Casa breakdown, Banca breakdown
|
||||
- Follow existing patterns (Markdown bold, account lists, RON amounts with thousands separator)
|
||||
- **Dependencies**: None
|
||||
|
||||
### Task 2: Update main menu layout
|
||||
- **Status**: ✅ Done (2025-12-30 18:49)
|
||||
- **Files**: `backend/modules/telegram/bot/menus.py`
|
||||
- **Description**: Update `create_main_menu()` function (lines 233-247) to:
|
||||
- Replace 2-button rows (Trezorerie Casa + Trezorerie Banca) with single "Trezorerie" button
|
||||
- Compact layout: Row 2 [Sold Companie][Trezorerie], Row 3 [Sold Clienti][Sold Furnizori], Row 4 [Evolutie Incasari]
|
||||
- Use callback_data="menu:trezorerie" for new button
|
||||
- **Dependencies**: None
|
||||
|
||||
### Task 3: Add callback handler
|
||||
- **Status**: ✅ Done (2025-12-30 18:50)
|
||||
- **Files**: `backend/modules/telegram/bot/handlers.py`
|
||||
- **Description**: Add `menu:trezorerie` case in `button_callback()` function after line 1485 (before existing casa/banca handlers). The handler will:
|
||||
- Call `get_treasury_breakdown_split()` to get data
|
||||
- Use new `format_treasury_combined_response()` formatter
|
||||
- Add performance footer
|
||||
- Display with action buttons
|
||||
- **Dependencies**: Task 1
|
||||
|
||||
### Task 4: Manual testing
|
||||
- **Status**: ✅ Done (2025-12-30 18:51)
|
||||
- **Files**: None (testing only)
|
||||
- **Description**: Test the implementation:
|
||||
- Verify new menu layout shows single [Trezorerie] button
|
||||
- Verify unified view shows grand total + Casa section + Banca section
|
||||
- Verify grand total = Casa total + Banca total
|
||||
- Verify legacy `/trezorerie_casa` and `/trezorerie_banca` commands still work
|
||||
- Verify [Menu Principal] button returns to menu
|
||||
- **Dependencies**: Tasks 1, 2, 3
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
### Existing Code Patterns
|
||||
|
||||
**Formatter pattern** (from `format_treasury_casa_response`):
|
||||
```python
|
||||
def format_treasury_xxx_response(data: Dict[str, Any], company_name: str = None) -> str:
|
||||
text = ""
|
||||
total = round(data.get('total', 0))
|
||||
text += f"**Sold Total XXX:** {total:,} RON\n\n"
|
||||
# ... account list
|
||||
return text
|
||||
```
|
||||
|
||||
**Menu button pattern** (from `create_main_menu`):
|
||||
```python
|
||||
InlineKeyboardButton("Button Text", callback_data="menu:action")
|
||||
```
|
||||
|
||||
**Callback handler pattern** (from existing casa handler):
|
||||
```python
|
||||
elif action == "trezorerie":
|
||||
from backend.modules.telegram.bot.helpers import get_treasury_breakdown_split
|
||||
treasury_data = await get_treasury_breakdown_split(company['id'], jwt_token)
|
||||
from backend.modules.telegram.bot.formatters import format_treasury_combined_response, add_performance_footer
|
||||
from backend.modules.telegram.bot.menus import create_action_buttons, format_response_with_company
|
||||
content = format_treasury_combined_response(treasury_data)
|
||||
response = format_response_with_company(content, company['name'])
|
||||
# ... performance footer
|
||||
keyboard = create_action_buttons("trezorerie", show_export=False, show_refresh=False)
|
||||
# ... edit message
|
||||
```
|
||||
|
||||
### Data Structure
|
||||
|
||||
The `get_treasury_breakdown_split()` helper returns:
|
||||
```python
|
||||
{
|
||||
'casa': {
|
||||
'accounts': [{'name': str, 'balance': float, 'cont': str}, ...],
|
||||
'total': float
|
||||
},
|
||||
'banca': {
|
||||
'accounts': [{'name': str, 'balance': float, 'cont': str}, ...],
|
||||
'total': float
|
||||
},
|
||||
'cache_hit': bool,
|
||||
'response_time_ms': int,
|
||||
'cache_source': str | None
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user