serializers.py 4.8 KB

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