Fix new Frontend 15

This commit is contained in:
Urtzi Alfaro
2025-08-04 22:02:13 +02:00
parent 32a7b913d0
commit 8b6e1ae339

View File

@@ -226,3 +226,53 @@ class SalesService:
await db.rollback()
logger.error("Failed to delete sales record", error=str(e))
raise
@staticmethod
async def get_products_list(tenant_id: str, db: AsyncSession) -> List[Dict[str, Any]]:
"""Get list of all products with sales data for tenant"""
try:
# Query to get unique products with aggregated sales data
query = (
select(
SalesData.product_name,
func.count(SalesData.id).label('total_sales'),
func.sum(SalesData.quantity_sold).label('total_quantity'),
func.sum(SalesData.revenue).label('total_revenue'),
func.min(SalesData.date).label('first_sale_date'),
func.max(SalesData.date).label('last_sale_date'),
func.avg(SalesData.quantity_sold).label('avg_quantity'),
func.avg(SalesData.revenue).label('avg_revenue')
)
.where(SalesData.tenant_id == tenant_id)
.group_by(SalesData.product_name)
.order_by(desc(func.sum(SalesData.revenue)))
)
result = await db.execute(query)
products_data = result.all()
# Format the response
products = []
for row in products_data:
products.append({
'product_name': row.product_name,
'total_sales': row.total_sales,
'total_quantity': int(row.total_quantity) if row.total_quantity else 0,
'total_revenue': float(row.total_revenue) if row.total_revenue else 0.0,
'first_sale_date': row.first_sale_date.isoformat() if row.first_sale_date else None,
'last_sale_date': row.last_sale_date.isoformat() if row.last_sale_date else None,
'avg_quantity': float(row.avg_quantity) if row.avg_quantity else 0.0,
'avg_revenue': float(row.avg_revenue) if row.avg_revenue else 0.0
})
logger.debug("Products list retrieved successfully",
tenant_id=tenant_id,
product_count=len(products))
return products
except Exception as e:
logger.error("Failed to get products list from database",
error=str(e),
tenant_id=tenant_id)
raise