35 lines
1.4 KiB
Python
35 lines
1.4 KiB
Python
from django.utils import timezone
|
|
|
|
from rest_framework import serializers
|
|
|
|
from core.apps.contracts.models.contract import ContractSignature, ContractSignatureCode
|
|
|
|
|
|
class ContractSignatureListSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = ContractSignature
|
|
fields = [
|
|
'id', 'status', 'signature_type', 'is_signature'
|
|
]
|
|
|
|
|
|
class ContractSignatureSerializer(serializers.Serializer):
|
|
code = serializers.IntegerField()
|
|
signature_id = serializers.UUIDField()
|
|
|
|
def validate(self, data):
|
|
user = self.context.get('user')
|
|
signature = ContractSignature.objects.filter(id=data.get('signature_id')).first()
|
|
if not signature:
|
|
raise serializers.ValidationError({"detail": "contract signature not found"})
|
|
if signature.contract_side.user != user:
|
|
raise serializers.ValidationError({'detail': 'this is not your code'})
|
|
signature_code = ContractSignatureCode.objects.filter(signature=signature, code=data.get('code')).first()
|
|
if not signature_code:
|
|
raise serializers.ValidationError({'detail': 'invalid code'})
|
|
if signature_code.expiration_time < timezone.now():
|
|
raise serializers.ValidationError({"detail": 'code is expired'})
|
|
data['contract'] = signature.contract_side.contract
|
|
data['contract_signature'] = signature
|
|
return data
|