change offer list and add party model and serializer
This commit is contained in:
@@ -94,4 +94,30 @@ class OffersSerializer(serializers.ModelSerializer):
|
||||
model = Offer
|
||||
fields = [
|
||||
'id', 'number', 'price', 'price_type', 'phone', 'comment', 'qqs',
|
||||
]
|
||||
]
|
||||
|
||||
|
||||
|
||||
class OrderListForOfferSerializer(serializers.ModelSerializer):
|
||||
offers = OffersSerializer(many=True)
|
||||
product = serializers.SerializerMethodField(method_name='get_product')
|
||||
unity = serializers.SerializerMethodField(method_name='get_unity')
|
||||
|
||||
class Meta:
|
||||
model = Order
|
||||
fields = [
|
||||
'id', 'product', 'unity', 'quantity', 'date', 'offers'
|
||||
]
|
||||
|
||||
def get_product(self, obj):
|
||||
return {
|
||||
'id': obj.product.id,
|
||||
'name': obj.product.name,
|
||||
'type': obj.product.type,
|
||||
}
|
||||
|
||||
def get_unity(self, obj):
|
||||
return {
|
||||
'id': obj.unity.id,
|
||||
'value': obj.unity.value
|
||||
}
|
||||
@@ -13,7 +13,8 @@ from core.apps.wherehouse.serializers.wherehouse import WhereHouseListSerializer
|
||||
# projects
|
||||
from core.apps.projects.models import Project, ProjectFolder
|
||||
from core.apps.projects.serializers.project import ProjectListSerializer, ProjectFolderListSerializer
|
||||
|
||||
# counterparty
|
||||
from core.apps.counterparty.models import Counterparty
|
||||
|
||||
|
||||
class OrderCreateSerializer(serializers.Serializer):
|
||||
@@ -64,7 +65,6 @@ class MultipleOrderCreateSerializer(serializers.Serializer):
|
||||
|
||||
def create(self, validated_data):
|
||||
with transaction.atomic():
|
||||
print(self.context['user'])
|
||||
resources = validated_data.pop('resources')
|
||||
common_date = validated_data.get('date')
|
||||
orders = []
|
||||
@@ -113,4 +113,47 @@ class OrderUpdateSerializer(serializers.ModelSerializer):
|
||||
model = Order
|
||||
fields = [
|
||||
'product', 'unity', 'quantity', 'project', 'project_folder', 'wherehouse', 'date',
|
||||
]
|
||||
]
|
||||
|
||||
|
||||
class MultipleOrderAddSerializer(serializers.Serializer):
|
||||
product_id = serializers.UUIDField()
|
||||
unity_id = serializers.UUIDField()
|
||||
project_folder_id = serializers.UUIDField(required=False)
|
||||
project_id = serializers.UUIDField(required=False)
|
||||
counterparty_id = serializers.UUIDField()
|
||||
wherehouse_id = serializers.UUIDField()
|
||||
|
||||
quantity = serializers.IntegerField()
|
||||
unit_amount = serializers.IntegerField()
|
||||
currency = serializers.ChoiceField(choices=[('uzs', 'uzs'), ('usd', 'usd')])
|
||||
amount = serializers.UUIDField()
|
||||
|
||||
def validate(self, data):
|
||||
product = Product.objects.filter(id=data['product_id']).first()
|
||||
if not product:
|
||||
raise serializers.ValidationError('product not found')
|
||||
unity = Unity.objects.filter(id=data['unity_id']).first()
|
||||
if not unity:
|
||||
raise serializers.ValidationError("Unity not found")
|
||||
wherehouse = WhereHouse.objects.filter(id=data['wherehouse_id'])
|
||||
if not wherehouse:
|
||||
raise serializers.ValidationError("WhereHouse not found")
|
||||
counterparty = Counterparty.objects.filter(id=data['counterparty_id']).first()
|
||||
if not counterparty:
|
||||
raise serializers.ValidationError("Counterparty not found")
|
||||
if data.get('project_id'):
|
||||
project = Project.objects.filter(id=data.get('project_id')).first()
|
||||
if not project:
|
||||
raise serializers.ValidationError("Project not found")
|
||||
data['project'] = project
|
||||
if data.get('project_folder_id'):
|
||||
project_folder = ProjectFolder.objects.filter(id=data.get('project_folder_id')).first()
|
||||
if not project_folder:
|
||||
raise serializers.ValidationError("Project Folder not found")
|
||||
data['project_folder'] = project_folder
|
||||
data['product'] = product
|
||||
data['unity'] = unity
|
||||
data['wherehouse'] = wherehouse
|
||||
data['counterparty'] = counterparty
|
||||
return data
|
||||
42
core/apps/orders/serializers/party.py
Normal file
42
core/apps/orders/serializers/party.py
Normal file
@@ -0,0 +1,42 @@
|
||||
from django.db import transaction
|
||||
|
||||
from rest_framework import serializers
|
||||
|
||||
from core.apps.orders.models import Party, PartyAmount, Order
|
||||
from core.apps.orders.serializers.order import MultipleOrderAddSerializer
|
||||
from core.apps.accounts.models import User
|
||||
|
||||
|
||||
class PartyCreateSerializer(serializers.Serializer):
|
||||
resources = MultipleOrderAddSerializer(many=True)
|
||||
mediator_id = serializers.UUIDField()
|
||||
delivery_date = serializers.DateField()
|
||||
payment_date = serializers.DateField()
|
||||
comment = serializers.CharField(required=False)
|
||||
|
||||
audit = serializers.ChoiceField(
|
||||
choices=[('CHECKED', 'tekshirildi'),('PROCESS', 'jarayonda')], required=False
|
||||
)
|
||||
audit_comment = serializers.CharField(required=False)
|
||||
|
||||
def validate(self, data):
|
||||
user = User.objects.filter(id=data['mediator_id']).first()
|
||||
if not user:
|
||||
raise serializers.ValidationError("User not found")
|
||||
data['user'] = user
|
||||
return data
|
||||
|
||||
def create(self, validated_data):
|
||||
with transaction.atomic():
|
||||
resources = validated_data.pop('resources')
|
||||
orders = []
|
||||
for resource in resources:
|
||||
orders.append(Order(
|
||||
product=resource['product'],
|
||||
unity=resource['unity'],
|
||||
project_folder=resource.get('project_folder'),
|
||||
project=resource.get('project'),
|
||||
counterparty=resource.get('counterparty'),
|
||||
wherehouse=resource.get('wherehouse'),
|
||||
|
||||
))
|
||||
Reference in New Issue
Block a user