Files
eimzo/core/apps/contracts/views/contract_signature.py
2025-07-17 14:49:06 +05:00

44 lines
2.1 KiB
Python

from rest_framework import generics, status, permissions, views
from rest_framework.response import Response
from core.apps.contracts.models.contract import ContractSignature, ContractSignatureCode
from core.apps.contracts.serializers.contract_signature import ContractSignatureSerializer
from core.apps.contracts.tasks.contract_signature import send_contract_signature_code
class SendContractSignatureCodeApiView(views.APIView):
permission_classes = [permissions.IsAuthenticated]
def get(self, request, signature_id):
# TODO: create and send code with celery in backgroud
send_contract_signature_code.delay(signature_id)
return Response({"success": True, "message": "code send"}, status=status.HTTP_200_OK)
class SigningContractApiView(generics.GenericAPIView):
serializer_class = ContractSignatureSerializer
queryset = ContractSignature.objects.all()
permission_classes = [permissions.IsAuthenticated]
def post(self, request):
user = request.user
serializer = self.serializer_class(data=request.data, context={'user': user})
if serializer.is_valid():
data = serializer.validated_data
contract = data.get('contract')
contract_signature = data.get('contract_signature')
if contract.company == user:
if contract.status == 'created':
contract.status = 'signed_company'
elif contract.status == 'signed_customer':
contract.status = 'signed_contract'
else:
if contract.status == 'created':
contract.status = 'signed_customer'
elif contract.status == 'signed_company':
contract.status = 'signed_contract'
contract_signature.status = 'signed'
contract_signature.save()
contract.save()
return Response({'success': True, 'message': 'contract is signed'}, status=status.HTTP_200_OK)
return Response({'success': False, 'message': serializer.errors}, status=status.HTTP_400_BAD_REQUEST)