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)