59 lines
2.1 KiB
Python
59 lines
2.1 KiB
Python
import os
|
|
import platform
|
|
import json
|
|
from django.shortcuts import render, redirect, get_object_or_404
|
|
from django.utils import timezone
|
|
from django.contrib.auth.decorators import login_required
|
|
from .models import Worker, Project, Team, WorkLog
|
|
from .forms import WorkLogForm
|
|
|
|
def home(request):
|
|
"""Render the landing screen with dashboard stats."""
|
|
workers_count = Worker.objects.count()
|
|
projects_count = Project.objects.count()
|
|
teams_count = Team.objects.count()
|
|
recent_logs = WorkLog.objects.order_by('-date')[:5]
|
|
|
|
context = {
|
|
"workers_count": workers_count,
|
|
"projects_count": projects_count,
|
|
"teams_count": teams_count,
|
|
"recent_logs": recent_logs,
|
|
"current_time": timezone.now(),
|
|
}
|
|
return render(request, "core/index.html", context)
|
|
|
|
def log_attendance(request):
|
|
if request.method == 'POST':
|
|
form = WorkLogForm(request.POST, user=request.user)
|
|
if form.is_valid():
|
|
work_log = form.save(commit=False)
|
|
if request.user.is_authenticated:
|
|
work_log.supervisor = request.user
|
|
work_log.save()
|
|
form.save_m2m()
|
|
return redirect('home')
|
|
else:
|
|
form = WorkLogForm(user=request.user if request.user.is_authenticated else None)
|
|
|
|
# Build team workers map for frontend JS
|
|
teams_qs = Team.objects.filter(is_active=True)
|
|
if request.user.is_authenticated and not request.user.is_superuser:
|
|
teams_qs = teams_qs.filter(supervisor=request.user)
|
|
|
|
team_workers_map = {}
|
|
for team in teams_qs:
|
|
# Get active workers for the team
|
|
active_workers = team.workers.filter(is_active=True).values_list('id', flat=True)
|
|
team_workers_map[team.id] = list(active_workers)
|
|
|
|
context = {
|
|
'form': form,
|
|
'team_workers_json': json.dumps(team_workers_map)
|
|
}
|
|
|
|
return render(request, 'core/log_attendance.html', context)
|
|
|
|
def work_log_list(request):
|
|
logs = WorkLog.objects.all().order_by('-date')
|
|
return render(request, 'core/work_log_list.html', {'logs': logs}) |