New alert system and panel de control page

This commit is contained in:
Urtzi Alfaro
2025-11-27 15:52:40 +01:00
parent 1a2f4602f3
commit e902419b6e
178 changed files with 20982 additions and 6944 deletions

View File

@@ -12,6 +12,11 @@ from datetime import datetime, timezone, timedelta
from typing import Optional
import os
from decimal import Decimal
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent.parent.parent))
from shared.utils.demo_dates import adjust_date_for_demo, BASE_REFERENCE_DATE
from app.core.database import get_db
from app.models.sales import SalesData
@@ -41,6 +46,7 @@ async def clone_demo_data(
virtual_tenant_id: str,
demo_account_type: str,
session_id: Optional[str] = None,
session_created_at: Optional[str] = None,
db: AsyncSession = Depends(get_db),
_: bool = Depends(verify_internal_api_key)
):
@@ -57,18 +63,35 @@ async def clone_demo_data(
virtual_tenant_id: Target virtual tenant UUID
demo_account_type: Type of demo account
session_id: Originating session ID for tracing
session_created_at: ISO timestamp when demo session was created (for date adjustment)
Returns:
Cloning status and record counts
"""
start_time = datetime.now(timezone.utc)
# Parse session_created_at or fallback to now
if session_created_at:
try:
session_time = datetime.fromisoformat(session_created_at.replace('Z', '+00:00'))
except (ValueError, AttributeError) as e:
logger.warning(
"Invalid session_created_at format, using current time",
session_created_at=session_created_at,
error=str(e)
)
session_time = datetime.now(timezone.utc)
else:
logger.warning("session_created_at not provided, using current time")
session_time = datetime.now(timezone.utc)
logger.info(
"Starting sales data cloning",
base_tenant_id=base_tenant_id,
virtual_tenant_id=virtual_tenant_id,
demo_account_type=demo_account_type,
session_id=session_id
session_id=session_id,
session_time=session_time.isoformat()
)
try:
@@ -93,21 +116,19 @@ async def clone_demo_data(
base_tenant=str(base_uuid)
)
# Calculate date offset to make sales "recent"
# Find the most recent sale date in template
if base_sales:
max_date = max(sale.date for sale in base_sales)
today = datetime.now(timezone.utc)
date_offset = today - max_date
else:
date_offset = timedelta(days=0)
for sale in base_sales:
# Adjust date using the shared utility
adjusted_date = adjust_date_for_demo(
sale.date,
session_time,
BASE_REFERENCE_DATE
) if sale.date else None
# Create new sales record with adjusted date
new_sale = SalesData(
id=uuid.uuid4(),
tenant_id=virtual_uuid,
date=sale.date + date_offset, # Adjust to recent dates
date=adjusted_date,
inventory_product_id=sale.inventory_product_id, # Keep same product refs
quantity_sold=sale.quantity_sold,
unit_price=sale.unit_price,
@@ -123,8 +144,8 @@ async def clone_demo_data(
weather_condition=sale.weather_condition,
is_holiday=sale.is_holiday,
is_weekend=sale.is_weekend,
created_at=datetime.now(timezone.utc),
updated_at=datetime.now(timezone.utc)
created_at=session_time,
updated_at=session_time
)
db.add(new_sale)
stats["sales_records"] += 1