change offer list and add party model and serializer

This commit is contained in:
behruz-dev
2025-08-21 11:34:48 +05:00
parent 7e2e62d48c
commit 1deca00816
7 changed files with 248 additions and 14 deletions

View File

@@ -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
}

View File

@@ -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

View 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'),
))