mirror of
https://gitlab.com/MoonTestUse1/AdministrationItDepartmens.git
synced 2025-08-14 00:25:46 +02:00
54 lines
1.6 KiB
Python
54 lines
1.6 KiB
Python
"""Statistics CRUD operations"""
|
|
from sqlalchemy.orm import Session
|
|
from sqlalchemy.sql import func
|
|
from datetime import datetime, timedelta
|
|
from ..models.request import Request, RequestStatus
|
|
|
|
def get_statistics(db: Session, period: str = "week"):
|
|
"""Get statistics for the given period"""
|
|
try:
|
|
# Calculate date range
|
|
end_date = datetime.now()
|
|
if period == "week":
|
|
start_date = end_date - timedelta(days=7)
|
|
elif period == "month":
|
|
start_date = end_date - timedelta(days=30)
|
|
else:
|
|
start_date = end_date - timedelta(days=7) # default to week
|
|
|
|
# Get total requests
|
|
total_requests = db.query(func.count(Request.id)).scalar() or 0
|
|
|
|
# Get requests by status
|
|
requests_by_status = (
|
|
db.query(Request.status, func.count(Request.id))
|
|
.group_by(Request.status)
|
|
.all()
|
|
)
|
|
|
|
# Convert to dictionary
|
|
status_counts = {
|
|
status.name: 0 for status in RequestStatus
|
|
}
|
|
for status, count in requests_by_status:
|
|
status_counts[status.name] = count
|
|
|
|
# Get recent requests
|
|
recent_requests = (
|
|
db.query(Request)
|
|
.filter(Request.created_at >= start_date)
|
|
.order_by(Request.created_at.desc())
|
|
.limit(5)
|
|
.all()
|
|
)
|
|
|
|
return {
|
|
"total_requests": total_requests,
|
|
"status_counts": status_counts,
|
|
"recent_requests": recent_requests
|
|
}
|
|
|
|
except Exception as e:
|
|
print(f"Error getting statistics: {e}")
|
|
raise
|