45 lines
2.0 KiB
Python
45 lines
2.0 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
|
|
from core.apps.shared.utils.response import error_message, success_message
|
|
|
|
|
|
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 success_message("code send", 200)
|
|
|
|
|
|
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 success_message('contract signed', 200)
|
|
return error_message(serializer.errors, 400) |