XH_Digital_Management/application/perf_mgnt/views.py

82 lines
2.9 KiB
Python
Raw Normal View History

2024-05-29 09:27:39 +08:00
from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
from django.http import JsonResponse
2024-05-15 09:23:16 +08:00
from django.shortcuts import render
2024-05-29 09:27:39 +08:00
from django.views import View
from rest_framework import status
from rest_framework.response import Response
from rest_framework.decorators import api_view
from .models import GroupBusinessTarget
from .serializers import GroupBusinessTargetSerializer
@api_view(['POST'])
def create_group_business_target(request):
if request.method == 'POST':
serializer = GroupBusinessTargetSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class GroupBusinessTargetListView(View):
def get(self, request):
# 获取查询参数
primary_department = request.GET.get('primary_department', '')
year = request.GET.get('year', '')
project_nature = request.GET.get('project_nature', '')
# 过滤查询集
queryset = GroupBusinessTarget.objects.all()
if primary_department:
queryset = queryset.filter(primary_department=primary_department)
if year:
queryset = queryset.filter(year=year)
if project_nature:
queryset = queryset.filter(project_nature=project_nature)
# 分页
page = request.GET.get('page', 1)
paginator = Paginator(queryset, 10) # 每页10条记录
try:
targets = paginator.page(page)
except PageNotAnInteger:
targets = paginator.page(1)
except EmptyPage:
targets = paginator.page(paginator.num_pages)
# 序列化数据
target_list = [{
'target_id': target.target_id,
'primary_department': target.primary_department,
'year': target.year,
'project_nature': target.project_nature,
'sales': target.sales,
'total_revenue_target': target.total_revenue_target,
'new_revenue_target': target.new_revenue_target,
'existing_revenue_target': target.existing_revenue_target,
'cost_limit': target.cost_limit,
'gross_profit': target.gross_profit,
'expense_limit': target.expense_limit,
'operating_profit': target.operating_profit,
} for target in targets]
# 返回JSON响应
return JsonResponse({
'targets': target_list,
'page': targets.number,
'pages': paginator.num_pages,
'has_next': targets.has_next(),
'has_previous': targets.has_previous(),
})
2024-05-15 09:23:16 +08:00
# 集团经营目标表
def group_business_objectives(request):
return render(request, 'perf_mgnt/group_business_objectives.html')
def employee_performance_targets(request):
return render(request, 'perf_mgnt/employee_performance_targets.html')