90 lines
3.0 KiB
Python
90 lines
3.0 KiB
Python
from io import BytesIO
|
|
|
|
from django.http import HttpResponse
|
|
from django.shortcuts import render
|
|
from rest_framework.views import APIView
|
|
from apps.projectcode.selector import project_code_head_list, project_code_list, project_code_validation
|
|
from apps.projectcode.services import create_project_code
|
|
from rest_framework.permissions import IsAuthenticated
|
|
from rest_framework.response import Response
|
|
from rest_framework import serializers
|
|
from apps.projectcode.models import ProjectCodeHead as ProjectCodeHeadModel, ProjectCode as ProjectCodeModel
|
|
from rest_framework import status
|
|
import pandas as pd
|
|
# Create your views here.
|
|
|
|
|
|
class ProjectCodeExcelExportView(APIView):
|
|
#permission_classes = (IsAuthenticated,)
|
|
|
|
def get(self, request, id: int):
|
|
# export to excel and send excel file to response
|
|
|
|
project_code = project_code_list(id=id, is_used='false')
|
|
|
|
excel_file = BytesIO()
|
|
order_df = pd.DataFrame(project_code.values('id', 'code','is_used'))
|
|
|
|
order_df.to_excel(excel_file, engine='xlsxwriter', index=False)
|
|
excel_file.seek(0)
|
|
|
|
response = HttpResponse(excel_file.read(), content_type='application/ms-excel')
|
|
response['Content-Disposition'] = 'attachment; filename="output.xlsx"'
|
|
return response
|
|
|
|
|
|
|
|
class ProjectCodeValidationView(APIView):
|
|
permission_classes = (IsAuthenticated,)
|
|
|
|
def get(self, request, code):
|
|
project_code = project_code_validation(code)
|
|
return Response({'project_code_id': project_code.id}, status=status.HTTP_200_OK)
|
|
|
|
|
|
class CreateProjectCodeView(APIView):
|
|
permission_classes = (IsAuthenticated,)
|
|
|
|
class InputSerializer(serializers.Serializer):
|
|
title = serializers.CharField(max_length=200)
|
|
count = serializers.IntegerField()
|
|
|
|
def post(self, request):
|
|
serializer = self.InputSerializer(data=request.data)
|
|
serializer.is_valid(raise_exception=True)
|
|
project_code_head = create_project_code(**serializer.validated_data)
|
|
return Response({'projectcode_id': project_code_head.id}, status=status.HTTP_201_CREATED)
|
|
|
|
|
|
class ProjectCodeView(APIView):
|
|
|
|
permission_classes = (IsAuthenticated,)
|
|
|
|
class OutputSerializer(serializers.ModelSerializer):
|
|
project_code_head = serializers.StringRelatedField()
|
|
|
|
class Meta:
|
|
model = ProjectCodeModel
|
|
fields = '__all__'
|
|
|
|
def get(self, request, id):
|
|
is_used = request.query_params.get('is_used', 'false')
|
|
codes = project_code_list(id=id, is_used=is_used)
|
|
output = self.OutputSerializer(codes, many=True)
|
|
return Response(output.data, status=status.HTTP_200_OK)
|
|
|
|
|
|
class ProjectCodeHeadView(APIView):
|
|
permission_classes = (IsAuthenticated,)
|
|
|
|
class OutputSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = ProjectCodeHeadModel
|
|
fields = '__all__'
|
|
|
|
def get(self, request):
|
|
code_head = project_code_head_list()
|
|
output = self.OutputSerializer(code_head, many=True)
|
|
return Response(output.data, status=status.HTTP_200_OK)
|
|
|