89 lines
3.5 KiB
Python
89 lines
3.5 KiB
Python
from django.db import transaction
|
|
|
|
from rest_framework import serializers
|
|
|
|
from core.apps.counterparty.models import Counterparty, CounterpartyFolder
|
|
from core.apps.shared.models import Region, District
|
|
|
|
|
|
class CounterpartyListSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Counterparty
|
|
fields = [
|
|
'id', 'inn', 'name', 'phone', 'type', 'folder', 'type', 'region', 'district',
|
|
'balance', 'balance_currency', 'balance_date', 'comment', 'is_archived',
|
|
'kredit_usd', 'kredit_uzs', 'total_kredit', 'debit_usd', 'debit_uzs', 'total_debit',
|
|
]
|
|
|
|
|
|
class CounterpartySerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Counterparty
|
|
fields = [
|
|
'id', 'name'
|
|
]
|
|
|
|
|
|
class CounterpartyCreateSerializer(serializers.Serializer):
|
|
inn = serializers.CharField()
|
|
name = serializers.CharField()
|
|
phone = serializers.CharField()
|
|
type = serializers.ChoiceField(choices=Counterparty.TYPE, required=False)
|
|
folder_id = serializers.UUIDField(required=False)
|
|
region_id = serializers.UUIDField(required=False)
|
|
district_id = serializers.UUIDField(required=False)
|
|
balance = serializers.IntegerField(required=False)
|
|
balance_date = serializers.DateField(required=False)
|
|
comment = serializers.CharField(required=False)
|
|
|
|
def validate(self, data):
|
|
if data.get('folder_id'):
|
|
folder = CounterpartyFolder.objects.filter(id=data.get('folder_id')).first()
|
|
if not folder:
|
|
raise serializers.ValidationError("Counterparty Folder not found")
|
|
data['folder'] = folder
|
|
if data.get('region_id'):
|
|
region = Region.objects.filter(id=data.get('region_id')).first()
|
|
if not region:
|
|
raise serializers.ValidationError("Region not found")
|
|
data['region'] = region
|
|
if data.get('district_id'):
|
|
district = District.objects.filter(id=data.get('district_id')).first()
|
|
if not district:
|
|
raise serializers.ValidationError("District not found")
|
|
return data
|
|
|
|
def create(self, validated_data):
|
|
with transaction.atomic():
|
|
return Counterparty.objects.create(
|
|
inn=validated_data.get('inn'),
|
|
name=validated_data.get('name'),
|
|
phone=validated_data.get('phone'),
|
|
type=validated_data.get('type'),
|
|
folder=validated_data.get('folder'),
|
|
region=validated_data.get('region'),
|
|
district=validated_data.get('district'),
|
|
balance=validated_data.get('balance'),
|
|
balance_date=validated_data.get('balance_date'),
|
|
comment=validated_data.get('comment'),
|
|
)
|
|
|
|
|
|
class CounterpartyUpdateSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Counterparty
|
|
fields = [
|
|
'inn', 'name', 'phone', 'type', 'folder', 'region', 'district', 'balance',
|
|
'balance_currency', 'balance_date', 'comment'
|
|
]
|
|
extra_kwargs = {
|
|
'name': {'required': False},
|
|
'type': {'required': False},
|
|
'folder': {'required': False},
|
|
'region': {'required': False},
|
|
'district': {'required': False},
|
|
'balance': {'required': False},
|
|
'balance_currency': {'required': False},
|
|
'balance_date': {'required': False},
|
|
'comment': {'required': False}
|
|
} |