serializers.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. from rest_framework import serializers
  2. from .models import flowModel
  3. from container.models import MaterialChangeHistory,batchLogModel,ContainerDetailLogModel
  4. from decimal import Decimal
  5. class MaterialChangeHistorySerializer(serializers.ModelSerializer):
  6. class Meta:
  7. model = MaterialChangeHistory
  8. fields = '__all__'
  9. class batchLogSerializer(serializers.ModelSerializer):
  10. # 定义批次日志的序列化器,用于获取操作,字段只读
  11. bound_code = serializers.SerializerMethodField()
  12. batch_code = serializers.CharField(source='batch.bound_number', read_only=True)
  13. goods_unit = serializers.CharField(source='batch.goods_unit', read_only=True)
  14. check_status = serializers.IntegerField(source='batch.check_status', read_only=True)
  15. create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', required=False)
  16. class Meta:
  17. # 指定模型和排除字段
  18. model = batchLogModel
  19. fields= '__all__'
  20. read_only_fields = ['id']
  21. def get_bound_code(self, obj):
  22. """ 动态序列化关联的批次数据 """
  23. return obj.bound.bound_code if obj.bound else '无主单,涉及手动操作'
  24. class ContainerDetailLogSerializer(serializers.ModelSerializer):
  25. batch = serializers.SerializerMethodField()
  26. container_code = serializers.SerializerMethodField()
  27. goods_code = serializers.SerializerMethodField()
  28. goods_desc = serializers.SerializerMethodField()
  29. detail_goods_qty = serializers.SerializerMethodField()
  30. goods_qty = serializers.SerializerMethodField()
  31. goods_out_qty = serializers.SerializerMethodField()
  32. batch_goods_qty = serializers.SerializerMethodField() #计划入库数量
  33. batch_goods_in_qty = serializers.SerializerMethodField() #实际入库数量
  34. batch_goods_in_location_qty = serializers.SerializerMethodField() #实际在库数量
  35. batch_goods_out_qty = serializers.SerializerMethodField()
  36. create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', required=False)
  37. class Meta:
  38. # 指定模型和排除字段
  39. model = ContainerDetailLogModel
  40. fields= '__all__'
  41. read_only_fields = ['id']
  42. def get_batch(self, obj):
  43. """ 动态序列化关联的批次数据 """
  44. return obj.container_detail.batch.bound_number if obj.container_detail.batch else 'N/A'
  45. def get_container_code(self, obj):
  46. return obj.container_detail.container.container_code if obj.container_detail.container.container_code else 'N/A'
  47. def get_goods_code(self, obj):
  48. return obj.container_detail.goods_code if obj.container_detail.goods_code else 'N/A'
  49. def get_goods_desc(self, obj):
  50. return obj.container_detail.goods_desc if obj.container_detail.goods_desc else 'N/A'
  51. # 获取托盘最小单元detail的入库数量
  52. def get_detail_goods_qty(self, obj):
  53. return obj.container_detail.goods_qty if obj.container_detail.goods_qty else Decimal('0')
  54. # 获取托盘最小单元detail的 入库操作数量
  55. def get_goods_qty(self, obj):
  56. new_goods_qty = obj.new_goods_qty if obj.new_goods_qty else Decimal('0')
  57. old_goods_qty = obj.old_goods_qty if obj.old_goods_qty else Decimal('0')
  58. goods_qty = new_goods_qty - old_goods_qty
  59. return goods_qty if goods_qty else Decimal('0')
  60. # 获取托盘最小单元detail的 出库操作数量
  61. def get_goods_out_qty(self, obj):
  62. new_goods_out_qty = obj.new_goods_out_qty if obj.new_goods_out_qty else Decimal('0')
  63. old_goods_out_qty = obj.old_goods_out_qty if obj.old_goods_out_qty else Decimal('0')
  64. goods_out_qty = new_goods_out_qty - old_goods_out_qty
  65. return goods_out_qty if goods_out_qty else Decimal('0')
  66. # 获取批次的计划入库数量
  67. def get_batch_goods_qty(self, obj):
  68. return obj.container_detail.batch.goods_qty if obj.container_detail.batch.goods_qty else Decimal('0')
  69. # 获取批次的实际入库数量
  70. def get_batch_goods_in_qty(self, obj):
  71. return obj.container_detail.batch.goods_in_qty if obj.container_detail.batch.goods_in_qty else Decimal('0')
  72. # 获取批次的实际在库数量
  73. def get_batch_goods_in_location_qty(self, obj):
  74. return obj.container_detail.batch.goods_in_location_qty if obj.container_detail.batch.goods_in_location_qty else Decimal('0')
  75. # 获取批次的出库数量
  76. def get_batch_goods_out_qty(self, obj):
  77. return obj.container_detail.batch.goods_out_qty if obj.container_detail.batch.goods_out_qty else Decimal('0')
  78. class flowSerializer(serializers.ModelSerializer):
  79. problematic_field = serializers.IntegerField(allow_null=True)
  80. class Meta:
  81. model = flowModel
  82. fields = '__all__'