serializers.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #coding=utf-8
  2. from rest_framework import serializers
  3. from django.db.models import Q
  4. from libs.booleancharfield import BooleanCharField
  5. from apps.serializer_errors import dump_serializer_errors
  6. from apps.exceptions import CustomError
  7. from models import Warehouse,WarehouseAdmin,WarehouseStock
  8. from apps.foundation.models import BizLog
  9. class WarehouseSerializer(serializers.ModelSerializer):
  10. enabled_text = BooleanCharField(source='enabled', read_only=True)
  11. is_default_text = BooleanCharField(source='is_default', read_only=True)
  12. user_text = serializers.SerializerMethodField()
  13. user_ids = serializers.SerializerMethodField()
  14. class Meta:
  15. model = Warehouse
  16. fields = '__all__'
  17. @staticmethod
  18. def factory(user,data,id=None):
  19. if id:
  20. instance = Warehouse.getById(id)
  21. else:
  22. instance = None
  23. serializer = WarehouseSerializer(instance, data=data)
  24. serializer.user = user
  25. return serializer
  26. def validSave(self):
  27. if self.is_valid():
  28. return self.save()
  29. else:
  30. raise CustomError(dump_serializer_errors(self))
  31. def get_user_text(self, obj):
  32. data = []
  33. rows = WarehouseAdmin.objects.filter(warehouse=obj)
  34. data.extend([s.user.name for s in rows])
  35. return ','.join(data)
  36. def get_user_ids(self, obj):
  37. data = []
  38. rows = WarehouseAdmin.objects.filter(warehouse=obj)
  39. data.extend([s.user_id for s in rows])
  40. return data
  41. def create(self, validated_data):
  42. item = Warehouse.objects.filter(type=validated_data['type'],name=validated_data['name']).first()
  43. if item:
  44. raise CustomError(u'仓别[%s]已存在' % validated_data['name'])
  45. instance = super(WarehouseSerializer, self).create(validated_data)
  46. Warehouse.updateDefault(instance)
  47. WarehouseStock.createByWarehouse(instance)
  48. BizLog.objects.addnew(
  49. self.user,
  50. BizLog.INSERT,
  51. u"添加仓别[%s],id=%d" % (instance.name, instance.id),
  52. validated_data
  53. )
  54. return instance
  55. def update(self, instance, validated_data):
  56. if 'type' in validated_data:
  57. if validated_data['type'] != instance.type:
  58. raise CustomError(u'禁止修改仓别的类型')
  59. item = Warehouse.objects.filter(Q(type=instance.type), Q(name=validated_data['name']),~Q(id=instance.id)).first()
  60. if item:
  61. raise CustomError(u'仓别[%s]已存在' % validated_data['name'])
  62. BizLog.objects.addnew(
  63. self.user,
  64. BizLog.UPDATE,
  65. u"修改仓别[%s],id=%s" % (instance.name, instance.id),
  66. validated_data
  67. )
  68. instance = super(WarehouseSerializer, self).update(instance,validated_data)
  69. Warehouse.updateDefault(instance)
  70. return instance