82 lines
2.9 KiB
Python
82 lines
2.9 KiB
Python
from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
|
|
from django.http import JsonResponse
|
|
from django.shortcuts import render
|
|
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(),
|
|
})
|
|
|
|
|
|
# 集团经营目标表
|
|
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')
|