diff --git a/core/apps/wherehouse/serializers/stock_movmend.py b/core/apps/wherehouse/serializers/stock_movmend.py index 6e8a756..86e2a62 100644 --- a/core/apps/wherehouse/serializers/stock_movmend.py +++ b/core/apps/wherehouse/serializers/stock_movmend.py @@ -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 - + 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 \ No newline at end of file + return instance