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__'