Files
timerr/apps/reports/views.py
T
2026-07-15 00:12:31 +05:00

53 lines
1.9 KiB
Python

from datetime import date
from django.contrib.auth.decorators import login_required
from django.core.exceptions import PermissionDenied
from django.http import HttpResponse
from django.shortcuts import get_object_or_404, render
from apps.accounts.models import User
from apps.companies.models import Company
from .services import build_monthly_report
from .pdf import render_company_pdf
def selected_user(request):
if not request.user.is_app_admin:
return request.user
user_id = request.GET.get("user")
return get_object_or_404(User, pk=user_id) if user_id else request.user
def selected_period(request):
today = date.today()
return int(request.GET.get("year", today.year)), int(request.GET.get("month", today.month))
@login_required
def monthly_report(request):
user = selected_user(request)
year, month = selected_period(request)
report = build_monthly_report(user, year, month)
context = {
"report": report,
"users": User.objects.filter(is_active=True).order_by("last_name", "first_name", "username") if request.user.is_app_admin else (),
"companies": Company.objects.filter(projects__tasks__assignee=user, projects__tasks__work_date__year=year, projects__tasks__work_date__month=month).distinct(),
}
return render(request, "reports/monthly.html", context)
@login_required
def company_pdf(request, company_id):
user = selected_user(request)
if not request.user.is_app_admin and user.pk != request.user.pk:
raise PermissionDenied
year, month = selected_period(request)
company = get_object_or_404(Company, pk=company_id)
report = build_monthly_report(user, year, month, company=company)
pdf = render_company_pdf(report, company)
filename = f"report-{company.pk}-{user.username}-{year}-{month:02d}.pdf"
response = HttpResponse(pdf, content_type="application/pdf")
response["Content-Disposition"] = f'attachment; filename="{filename}"'
return response