123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- from rest_framework import serializers
- from .models import flowModel
- from container.models import MaterialChangeHistory,batchLogModel,ContainerDetailLogModel
- from decimal import Decimal
- class MaterialChangeHistorySerializer(serializers.ModelSerializer):
- class Meta:
- model = MaterialChangeHistory
- fields = '__all__'
- class batchLogSerializer(serializers.ModelSerializer):
-
- # 定义批次日志的序列化器,用于获取操作,字段只读
- bound_code = serializers.SerializerMethodField()
- batch_code = serializers.CharField(source='batch.bound_number', read_only=True)
- goods_unit = serializers.CharField(source='batch.goods_unit', read_only=True)
- check_status = serializers.IntegerField(source='batch.check_status', read_only=True)
- create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', required=False)
- class Meta:
- # 指定模型和排除字段
- model = batchLogModel
- fields= '__all__'
- read_only_fields = ['id']
- def get_bound_code(self, obj):
- """ 动态序列化关联的批次数据 """
- return obj.bound.bound_code if obj.bound else '无主单,涉及手动操作'
- class ContainerDetailLogSerializer(serializers.ModelSerializer):
- batch = serializers.SerializerMethodField()
- container_code = serializers.SerializerMethodField()
- goods_code = serializers.SerializerMethodField()
- goods_desc = serializers.SerializerMethodField()
- detail_goods_qty = serializers.SerializerMethodField()
- goods_qty = serializers.SerializerMethodField()
- goods_out_qty = serializers.SerializerMethodField()
- batch_goods_qty = serializers.SerializerMethodField() #计划入库数量
- batch_goods_in_qty = serializers.SerializerMethodField() #实际入库数量
- batch_goods_in_location_qty = serializers.SerializerMethodField() #实际在库数量
- batch_goods_out_qty = serializers.SerializerMethodField()
- create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', required=False)
- class Meta:
- # 指定模型和排除字段
- model = ContainerDetailLogModel
- fields= '__all__'
- read_only_fields = ['id']
- def get_batch(self, obj):
- """ 动态序列化关联的批次数据 """
- return obj.container_detail.batch.bound_number if obj.container_detail.batch else 'N/A'
- def get_container_code(self, obj):
- return obj.container_detail.container.container_code if obj.container_detail.container.container_code else 'N/A'
- def get_goods_code(self, obj):
- return obj.container_detail.goods_code if obj.container_detail.goods_code else 'N/A'
- def get_goods_desc(self, obj):
- return obj.container_detail.goods_desc if obj.container_detail.goods_desc else 'N/A'
-
- # 获取托盘最小单元detail的入库数量
- def get_detail_goods_qty(self, obj):
- return obj.container_detail.goods_qty if obj.container_detail.goods_qty else Decimal('0')
-
- # 获取托盘最小单元detail的 入库操作数量
- def get_goods_qty(self, obj):
-
- new_goods_qty = obj.new_goods_qty if obj.new_goods_qty else Decimal('0')
- old_goods_qty = obj.old_goods_qty if obj.old_goods_qty else Decimal('0')
- goods_qty = new_goods_qty - old_goods_qty
- return goods_qty if goods_qty else Decimal('0')
-
- # 获取托盘最小单元detail的 出库操作数量
- def get_goods_out_qty(self, obj):
-
- new_goods_out_qty = obj.new_goods_out_qty if obj.new_goods_out_qty else Decimal('0')
- old_goods_out_qty = obj.old_goods_out_qty if obj.old_goods_out_qty else Decimal('0')
- goods_out_qty = new_goods_out_qty - old_goods_out_qty
- return goods_out_qty if goods_out_qty else Decimal('0')
-
- # 获取批次的计划入库数量
- def get_batch_goods_qty(self, obj):
- return obj.container_detail.batch.goods_qty if obj.container_detail.batch.goods_qty else Decimal('0')
- # 获取批次的实际入库数量
- def get_batch_goods_in_qty(self, obj):
- return obj.container_detail.batch.goods_in_qty if obj.container_detail.batch.goods_in_qty else Decimal('0')
- # 获取批次的实际在库数量
- def get_batch_goods_in_location_qty(self, obj):
- return obj.container_detail.batch.goods_in_location_qty if obj.container_detail.batch.goods_in_location_qty else Decimal('0')
- # 获取批次的出库数量
- def get_batch_goods_out_qty(self, obj):
- return obj.container_detail.batch.goods_out_qty if obj.container_detail.batch.goods_out_qty else Decimal('0')
- class flowSerializer(serializers.ModelSerializer):
- problematic_field = serializers.IntegerField(allow_null=True)
- class Meta:
- model = flowModel
- fields = '__all__'
|