|
|
|
|
from rest_framework import viewsets
|
|
|
|
|
from .models import Employee, WorkTimeLog, Leave, OvertimeReport, Report
|
|
|
|
|
from .serializers import (
|
|
|
|
|
EmployeeSerializer, WorkTimeLogSerializer, LeaveSerializer,
|
|
|
|
|
OvertimeReportSerializer, ReportSerializer
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
from django.http import FileResponse
|
|
|
|
|
from django.shortcuts import get_object_or_404
|
|
|
|
|
from rest_framework import viewsets
|
|
|
|
|
from rest_framework.filters import OrderingFilter
|
|
|
|
|
from django_filters.rest_framework import DjangoFilterBackend
|
|
|
|
|
|
|
|
|
|
class WorkTimeLogViewSet(viewsets.ModelViewSet):
|
|
|
|
|
queryset = WorkTimeLog.objects.all()
|
|
|
|
|
serializer_class = WorkTimeLogSerializer
|
|
|
|
|
filter_backends = [DjangoFilterBackend, OrderingFilter]
|
|
|
|
|
filterset_fields = {
|
|
|
|
|
'employee__id': ['exact'],
|
|
|
|
|
'date': ['gte', 'lte'],
|
|
|
|
|
}
|
|
|
|
|
ordering_fields = ['date']
|
|
|
|
|
|
|
|
|
|
class LeaveViewSet(viewsets.ModelViewSet):
|
|
|
|
|
queryset = Leave.objects.all()
|
|
|
|
|
serializer_class = LeaveSerializer
|
|
|
|
|
filter_backends = [DjangoFilterBackend, OrderingFilter]
|
|
|
|
|
filterset_fields = {
|
|
|
|
|
'employee__id': ['exact'],
|
|
|
|
|
'start_date': ['gte', 'lte'],
|
|
|
|
|
'end_date': ['gte', 'lte'],
|
|
|
|
|
}
|
|
|
|
|
ordering_fields = ['start_date', 'end_date']
|
|
|
|
|
|
|
|
|
|
class OvertimeReportViewSet(viewsets.ModelViewSet):
|
|
|
|
|
queryset = OvertimeReport.objects.all()
|
|
|
|
|
serializer_class = OvertimeReportSerializer
|
|
|
|
|
filter_backends = [DjangoFilterBackend, OrderingFilter]
|
|
|
|
|
filterset_fields = {
|
|
|
|
|
'employee__id': ['exact'],
|
|
|
|
|
'date': ['gte', 'lte'],
|
|
|
|
|
}
|
|
|
|
|
ordering_fields = ['date']
|
|
|
|
|
|
|
|
|
|
def generate_employee_report(request, report_id):
|
|
|
|
|
"""
|
|
|
|
|
Генерация отчета с фильтрацией по диапазону дат.
|
|
|
|
|
"""
|
|
|
|
|
report = get_object_or_404(Report, id=report_id)
|
|
|
|
|
pdf_buffer = report.generate_pdf()
|
|
|
|
|
return FileResponse(pdf_buffer, as_attachment=True, filename=f"отчет_{report.employee.last_name}.pdf")
|
|
|
|
|
|
|
|
|
|
class EmployeeViewSet(viewsets.ModelViewSet):
|
|
|
|
|
queryset = Employee.objects.all()
|
|
|
|
|
serializer_class = EmployeeSerializer
|
|
|
|
|
|
|
|
|
|
# ViewSet для модели WorkTimeLog
|
|
|
|
|
class WorkTimeLogViewSet(viewsets.ModelViewSet):
|
|
|
|
|
queryset = WorkTimeLog.objects.all()
|
|
|
|
|
serializer_class = WorkTimeLogSerializer
|
|
|
|
|
|
|
|
|
|
# ViewSet для модели Leave
|
|
|
|
|
class LeaveViewSet(viewsets.ModelViewSet):
|
|
|
|
|
queryset = Leave.objects.all()
|
|
|
|
|
serializer_class = LeaveSerializer
|
|
|
|
|
|
|
|
|
|
# ViewSet для модели OvertimeReport
|
|
|
|
|
class OvertimeReportViewSet(viewsets.ModelViewSet):
|
|
|
|
|
queryset = OvertimeReport.objects.all()
|
|
|
|
|
serializer_class = OvertimeReportSerializer
|
|
|
|
|
|
|
|
|
|
# ViewSet для модели Report
|
|
|
|
|
class ReportViewSet(viewsets.ModelViewSet):
|
|
|
|
|
queryset = Report.objects.all()
|
|
|
|
|
serializer_class = ReportSerializer
|