serializers.py 5.5 KB

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