fix 500 error
This commit is contained in:
@@ -1,10 +1,14 @@
|
||||
from django.db import transaction
|
||||
|
||||
from rest_framework import serializers
|
||||
|
||||
from core.apps.wherehouse.models import StockMovemend, StockMovmendProduct, Inventory, WhereHouse
|
||||
from core.apps.products.models import Unity, Product
|
||||
from core.apps.projects.models import ProjectFolder, Project
|
||||
from core.apps.products.models import Product, Unity
|
||||
from core.apps.projects.models import Project, ProjectFolder
|
||||
from core.apps.wherehouse.models import (
|
||||
Inventory,
|
||||
StockMovemend,
|
||||
StockMovmendProduct,
|
||||
WhereHouse,
|
||||
)
|
||||
|
||||
|
||||
class StockMovmendProductSerializer(serializers.Serializer):
|
||||
@@ -12,10 +16,10 @@ class StockMovmendProductSerializer(serializers.Serializer):
|
||||
quantity = serializers.IntegerField()
|
||||
|
||||
def validate(self, data):
|
||||
inventory = Inventory.objects.filter(id=data['inventory_id']).first()
|
||||
inventory = Inventory.objects.filter(id=data["inventory_id"]).first()
|
||||
if not inventory:
|
||||
raise serializers.ValidationError("Inventory not found")
|
||||
data['inventory'] = inventory
|
||||
data["inventory"] = inventory
|
||||
return data
|
||||
|
||||
|
||||
@@ -29,117 +33,150 @@ class StockMovmendCreateSerializer(serializers.Serializer):
|
||||
comment = serializers.CharField(required=False)
|
||||
|
||||
def validate(self, data):
|
||||
if data.get('project_folder_id'):
|
||||
project_folder = ProjectFolder.objects.filter(id=data['project_folder_id']).first()
|
||||
if data.get("project_folder_id"):
|
||||
project_folder = ProjectFolder.objects.filter(
|
||||
id=data["project_folder_id"]
|
||||
).first()
|
||||
if not project_folder:
|
||||
raise serializers.ValidationError("Project Folder not found")
|
||||
data['project_folder'] = project_folder
|
||||
if data.get('project_id'):
|
||||
project = Project.objects.filter(id=data['project_id']).first()
|
||||
data["project_folder"] = project_folder
|
||||
if data.get("project_id"):
|
||||
project = Project.objects.filter(id=data["project_id"]).first()
|
||||
if not project:
|
||||
raise serializers.ValidationError("Project not found")
|
||||
data['project'] = project
|
||||
wherehouse_to = WhereHouse.objects.filter(id=data['wherehouse_to_id']).first()
|
||||
data["project"] = project
|
||||
wherehouse_to = WhereHouse.objects.filter(id=data["wherehouse_to_id"]).first()
|
||||
if not wherehouse_to:
|
||||
raise serializers.ValidationError("WhereHouse to not found")
|
||||
wherehouse_from = WhereHouse.objects.filter(id=data['wherehouse_from_id']).first()
|
||||
wherehouse_from = WhereHouse.objects.filter(
|
||||
id=data["wherehouse_from_id"]
|
||||
).first()
|
||||
if not wherehouse_from:
|
||||
raise serializers.ValidationError("WhereHouse from not found")
|
||||
data['wherehouse_to'] = wherehouse_to
|
||||
data['wherehouse_from'] = wherehouse_from
|
||||
data["wherehouse_to"] = wherehouse_to
|
||||
data["wherehouse_from"] = wherehouse_from
|
||||
return data
|
||||
|
||||
def create(self, validated_data):
|
||||
with transaction.atomic():
|
||||
products = validated_data.pop('products')
|
||||
products = validated_data.pop("products")
|
||||
stock_movemend = StockMovemend.objects.create(
|
||||
project_folder=validated_data.get('project_folder'),
|
||||
project=validated_data.get('project'),
|
||||
date=validated_data.get('date'),
|
||||
comment=validated_data.get('comment'),
|
||||
wherehouse_to=validated_data.get('wherehouse_to'),
|
||||
wherehouse_from=validated_data.get('wherehouse_from'),
|
||||
recipient=self.context.get('user'),
|
||||
project_folder=validated_data.get("project_folder"),
|
||||
project=validated_data.get("project"),
|
||||
date=validated_data.get("date"),
|
||||
comment=validated_data.get("comment"),
|
||||
wherehouse_to=validated_data.get("wherehouse_to"),
|
||||
wherehouse_from=validated_data.get("wherehouse_from"),
|
||||
recipient=self.context.get("user"),
|
||||
)
|
||||
movmend_products = []
|
||||
for product in products:
|
||||
movmend_products.append(StockMovmendProduct(
|
||||
inventory=product.get('inventory'),
|
||||
quantity=product.get('quantity'),
|
||||
stock_movemend=stock_movemend,
|
||||
))
|
||||
movmend_products.append(
|
||||
StockMovmendProduct(
|
||||
inventory=product.get("inventory"),
|
||||
quantity=product.get("quantity"),
|
||||
stock_movemend=stock_movemend,
|
||||
)
|
||||
)
|
||||
StockMovmendProduct.objects.bulk_create(movmend_products)
|
||||
return stock_movemend
|
||||
|
||||
|
||||
class StockMovemendProductListSerializer(serializers.ModelSerializer):
|
||||
product = serializers.SerializerMethodField(method_name='get_product')
|
||||
unity = serializers.SerializerMethodField(method_name='get_unity')
|
||||
product = serializers.SerializerMethodField(method_name="get_product")
|
||||
unity = serializers.SerializerMethodField(method_name="get_unity")
|
||||
|
||||
class Meta:
|
||||
model = StockMovmendProduct
|
||||
fields = [
|
||||
'id', 'product', 'unity', 'quantity'
|
||||
]
|
||||
fields = ["id", "product", "unity", "quantity"]
|
||||
|
||||
def get_product(self, obj):
|
||||
return {
|
||||
'id': obj.inventory.product.id,
|
||||
'type': obj.inventory.product.type,
|
||||
'name': obj.inventory.product.name,
|
||||
}
|
||||
return (
|
||||
{
|
||||
"id": obj.inventory.product.id,
|
||||
"type": obj.inventory.product.type,
|
||||
"name": obj.inventory.product.name,
|
||||
}
|
||||
if obj.inventory.product
|
||||
else None
|
||||
)
|
||||
|
||||
def get_unity(self, obj):
|
||||
return {
|
||||
'id': obj.inventory.unity.id,
|
||||
'value': obj.inventory.unity.value,
|
||||
}
|
||||
return (
|
||||
{
|
||||
"id": obj.inventory.unity.id,
|
||||
"value": obj.inventory.unity.value,
|
||||
}
|
||||
if obj.inventory.unity
|
||||
else None
|
||||
)
|
||||
|
||||
|
||||
class StockMovemendListSerializer(serializers.ModelSerializer):
|
||||
movemend_products = StockMovemendProductListSerializer(many=True)
|
||||
wherehouse_to = serializers.SerializerMethodField(method_name='get_wherehouse_to')
|
||||
wherehouse_from = serializers.SerializerMethodField(method_name='get_wherehouse_from')
|
||||
recipient = serializers.SerializerMethodField(method_name='get_recipient')
|
||||
project_folder = serializers.SerializerMethodField(method_name='get_project_folder')
|
||||
project = serializers.SerializerMethodField(method_name='get_project')
|
||||
wherehouse_to = serializers.SerializerMethodField(method_name="get_wherehouse_to")
|
||||
wherehouse_from = serializers.SerializerMethodField(
|
||||
method_name="get_wherehouse_from"
|
||||
)
|
||||
recipient = serializers.SerializerMethodField(method_name="get_recipient")
|
||||
project_folder = serializers.SerializerMethodField(method_name="get_project_folder")
|
||||
project = serializers.SerializerMethodField(method_name="get_project")
|
||||
|
||||
class Meta:
|
||||
model = StockMovemend
|
||||
fields = [
|
||||
'id', 'number', 'wherehouse_to', 'wherehouse_from', 'recipient', 'project_folder',
|
||||
'project', 'movemend_type', 'date', 'comment', 'movemend_products'
|
||||
"id",
|
||||
"number",
|
||||
"wherehouse_to",
|
||||
"wherehouse_from",
|
||||
"recipient",
|
||||
"project_folder",
|
||||
"project",
|
||||
"movemend_type",
|
||||
"date",
|
||||
"comment",
|
||||
"movemend_products",
|
||||
]
|
||||
|
||||
def get_wherehouse_to(self, obj):
|
||||
return {
|
||||
'id': obj.wherehouse_to.id,
|
||||
'name': obj.wherehouse_to.name,
|
||||
}
|
||||
return (
|
||||
{
|
||||
"id": obj.wherehouse_to.id,
|
||||
"name": obj.wherehouse_to.name,
|
||||
}
|
||||
if obj.wherehouse_to
|
||||
else None
|
||||
)
|
||||
|
||||
def get_wherehouse_from(self, obj):
|
||||
return {
|
||||
'id': obj.wherehouse_from.id,
|
||||
'name': obj.wherehouse_from.name,
|
||||
}
|
||||
return (
|
||||
{
|
||||
"id": obj.wherehouse_from.id,
|
||||
"name": obj.wherehouse_from.name,
|
||||
}
|
||||
if obj.wherehouse_from
|
||||
else None
|
||||
)
|
||||
|
||||
def get_recipient(self, obj):
|
||||
return {
|
||||
'id': obj.recipient.id,
|
||||
'full_name': obj.recipient.full_name,
|
||||
} if obj.recipient else None
|
||||
return (
|
||||
{
|
||||
"id": obj.recipient.id,
|
||||
"full_name": obj.recipient.full_name,
|
||||
}
|
||||
if obj.recipient
|
||||
else None
|
||||
)
|
||||
|
||||
def get_project_folder(self, obj):
|
||||
return {
|
||||
'id': obj.project_folder.id,
|
||||
'name': obj.project_folder.name
|
||||
}
|
||||
return (
|
||||
{"id": obj.project_folder.id, "name": obj.project_folder.name}
|
||||
if obj.project_folder
|
||||
else None
|
||||
)
|
||||
|
||||
def get_project(self, obj):
|
||||
return {
|
||||
'id': obj.project.id,
|
||||
'name': obj.project.name
|
||||
} if obj.project else None
|
||||
return {"id": obj.project.id, "name": obj.project.name} if obj.project else None
|
||||
|
||||
|
||||
class StockMovemendProductUpdateSerializer(serializers.Serializer):
|
||||
@@ -147,12 +184,16 @@ class StockMovemendProductUpdateSerializer(serializers.Serializer):
|
||||
quantity = serializers.IntegerField()
|
||||
|
||||
def validate(self, data):
|
||||
movemend_product = StockMovmendProduct.objects.filter(id=data['movemend_product_id']).first()
|
||||
movemend_product = StockMovmendProduct.objects.filter(
|
||||
id=data["movemend_product_id"]
|
||||
).first()
|
||||
if not movemend_product:
|
||||
raise serializers.ValidationError("Stock Movemend Product not found")
|
||||
if movemend_product.inventory.quantity < data['quantity']:
|
||||
raise serializers.ValidationError("invalid quantity, quantity must les than product quantity")
|
||||
data['movemend_product'] = movemend_product
|
||||
if movemend_product.inventory.quantity < data["quantity"]:
|
||||
raise serializers.ValidationError(
|
||||
"invalid quantity, quantity must les than product quantity"
|
||||
)
|
||||
data["movemend_product"] = movemend_product
|
||||
return data
|
||||
|
||||
|
||||
@@ -162,31 +203,38 @@ class StockMovemendUpdateSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = StockMovemend
|
||||
fields = [
|
||||
'wherehouse_to', 'project_folder', 'project', 'date',
|
||||
'comment', 'movemend_products'
|
||||
"wherehouse_to",
|
||||
"project_folder",
|
||||
"project",
|
||||
"date",
|
||||
"comment",
|
||||
"movemend_products",
|
||||
]
|
||||
extra_kwargs = {'wherehouse_to': {'required': False}}
|
||||
extra_kwargs = {"wherehouse_to": {"required": False}}
|
||||
|
||||
def update(self, instance, validated_data):
|
||||
with transaction.atomic():
|
||||
instance.wherehouse_to = validated_data.get('wherehouse_to', instance.wherehouse_to)
|
||||
instance.project_folder = validated_data.get('project_folder', instance.project_folder)
|
||||
instance.project = validated_data.get('project', instance.project)
|
||||
instance.date = validated_data.get('date', instance.date)
|
||||
instance.comment = validated_data.get('comment', instance.comment)
|
||||
instance.wherehouse_to = validated_data.get(
|
||||
"wherehouse_to", instance.wherehouse_to
|
||||
)
|
||||
instance.project_folder = validated_data.get(
|
||||
"project_folder", instance.project_folder
|
||||
)
|
||||
instance.project = validated_data.get("project", instance.project)
|
||||
instance.date = validated_data.get("date", instance.date)
|
||||
instance.comment = validated_data.get("comment", instance.comment)
|
||||
instance.save()
|
||||
|
||||
movemend_products = validated_data.pop('movemend_products', [])
|
||||
movemend_products = validated_data.pop("movemend_products", [])
|
||||
if movemend_products:
|
||||
updated_products = []
|
||||
for product_data in movemend_products:
|
||||
product = product_data['movemend_product']
|
||||
product.quantity = product_data['quantity']
|
||||
product = product_data["movemend_product"]
|
||||
product.quantity = product_data["quantity"]
|
||||
updated_products.append(product)
|
||||
|
||||
StockMovmendProduct.objects.bulk_update(
|
||||
updated_products,
|
||||
fields=['quantity']
|
||||
updated_products, fields=["quantity"]
|
||||
)
|
||||
|
||||
return instance
|
||||
Reference in New Issue
Block a user