from datetime import timedelta import operator import functools import collections from collections import OrderedDict from datetime import datetime from rest_framework.views import APIView from rest_framework.response import Response from rest_framework.permissions import AllowAny from rest_framework.generics import CreateAPIView from rest_framework import status from rest_framework.authtoken.models import Token from django.core.exceptions import ObjectDoesNotExist from django.contrib.auth import get_user_model from django.utils import timezone from . import models, serializers from . import RemoveBg, PaperLayout import json from PIL import Image import base64 def write_file_from_object_file(object_file, file_path): file_data = base64.b64decode(object_file) with open(file_path, 'wb') as file: file.write(file_data) class CreateUserApiView(CreateAPIView): permission_classes = [AllowAny] serializer_class = serializers.CreateUserSerializer def post(self, request): print('posteed') print(request.data) serializers = self.get_serializer(data=request.data) serializers.is_valid(raise_exception=True) self.perform_create(serializers) headers = self.get_success_headers(serializers.data) # Create a token than will be used for future auth token = Token.objects.create(user=serializers.instance) token_data = {'token': token.key} return Response( {**serializers.data, **token_data}, status=status.HTTP_201_CREATED, headers=headers) class SendImage(APIView): def get(self,request): return Response(status=status.HTTP_200_OK) def post(self,request): print(request.data) image = request.data['image'] qty = request.data['qty'] size = request.data['img_size'] # img size bw = request.data['bw'] # img is black or white paper = request.data['paper_size'] # paper size to print out bgcolor = request.data['bg_color'] try: PPD = models.PassportDetail.objects.get(is_done=False) except ObjectDoesNotExist: #the passport detail dnexist create one PPD = models.PassportDetail.objects.create(size=size,paper=paper,bgcolor=bgcolor) if bw == "true": PPD.bw = True PPD.save() models.Images.objects.create(image=image,img_qty=qty,ppd=PPD) # models.Images.objects.create(image=image,img_qty=qty) return Response(PPD.id) class GenerateImage(APIView): def get(self,request): PDDID = request.GET.get('pdid') PD = models.PassportDetail.objects.get(id=PDDID) PD.is_done = True PD.save() images_list = models.Images.objects.filter(ppd=PD) images = [] for img in images_list: print(img) images.append((img.image.url[1:],img.img_qty)) paper_size = tuple(int(x) for x in PD.paper.split(",")) img_size = tuple(float(x) for x in PD.size.split(",")) bg_color = tuple(int(x) for x in PD.bgcolor.split(",")) gap = 40; # gap between images; img_max_width = img_size[0] * 300 img_max_height = img_size[1] * 300 aspect_ratio = img_max_width / img_max_height output_di = 'img/' print("Start Removing",PD.bw) RemoveBg.RemoveBackground(images,aspect_ratio,bg_color,output_di,PD.bw).remove() PaperLayout.GeneratePhoto(paper_size,gap,images,img_max_width,img_max_height,raw_export=output_di).export() print("end Removing") return Response(status=status.HTTP_200_OK) # const token = '5499662958:AAEAoWy0khLJMf238ZwvvEoBV1FKfaVF6S0'; # const chatid = '-618629809'; # # 'https://api.telegram.org/bot' + # token + # '/sendDocument?chat_id=' + # chatid; # class SalesTwoDigits(APIView): # # permission_classes = [AllowAny]P # def get(self, request): # user = get_user_model().objects.get(username=request.user,is_plan=True, # is_salesDigits=True) # try: # G = models.TwoDigitsGroup.objects.get(user=user, is_done=False) # print('Group M Exists') # except ObjectDoesNotExist: # print('Group M Not Exits') # G = models.TwoDigitsGroup.objects.create(user=user) # print('Group M Created') # data = models.SalesTwoDigits.objects.filter(user=user,group=G) # ser = serializers.SalesTwoDigitSerializer(data,many=True) # return Response(ser.data) # def post(self, request): # name = request.data['customername'] # phoneno = request.data['phoneno'] # digits = request.data['digits'] # totalamount = request.data['totalamount'] # print(request.user) # user = get_user_model().objects.get(username=request.user,is_plan=True, # is_salesDigits=True) # try: # G = models.TwoDigitsGroup.objects.get(user=user, is_done=False) # print('Group M Exists') # except ObjectDoesNotExist: # print('Group M Not Exits') # G = models.TwoDigitsGroup.objects.create(user=user) # print('Group M Created') # # print(str(name) +'\n') # # print(str(phoneno) + '\n') # # print(digits) # # print(int(totalamount)) # Sales = models.SalesTwoDigits.objects.create(customername=name,phoneno=phoneno,totalprice=totalamount,user=user,group=G) # # Sales1 = models.SalesTwoDigits.objects.create(customername=name,phoneno=phoneno,totalprice=totalamount,user=user,group=G1) # print('Sales Objects Created') # ds = json.loads(digits) # # print(p) # for d in ds: # print(d) # d1 = models.TwoDigits.objects.create(number=d['digits'],amount=d['amount'],user=user,sales=Sales) # print('D1 Create') # print('Finished All') # # product = models.Product.objects.get(id=b['name'], user=user) # # product.qty = int(product.qty) - int(b['qty']) # # product.save() # # a = models.SoldProduct.objects.create( # # name=product, price=b['price'], qty=b['qty'], sales=S) # # print(a) # # S.save() # return Response(status=status.HTTP_201_CREATED)