serializers.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. # coding=utf-8
  2. from django.db.models import Q
  3. from rest_framework import serializers
  4. from apps.exceptions import CustomError
  5. from apps.foundation.models import BizLog
  6. from apps.serializer_errors import dump_serializer_errors
  7. from apps.supplier.models import Supplier
  8. from libs.booleancharfield import BooleanCharField
  9. class SupplierSerializer(serializers.ModelSerializer):
  10. type_text = serializers.CharField(source='get_type_display', read_only=True)
  11. enabled_text = BooleanCharField(source='enabled', read_only=True)
  12. class Meta:
  13. model = Supplier
  14. fields = '__all__'
  15. @staticmethod
  16. def factory(user,data, id=None):
  17. if id:
  18. instance = Supplier.getById(id)
  19. else:
  20. instance = None
  21. serializer = SupplierSerializer(instance, data=data)
  22. serializer.user = user
  23. return serializer
  24. def validSave(self):
  25. if self.is_valid():
  26. return self.save()
  27. else:
  28. raise CustomError(dump_serializer_errors(self))
  29. def create(self, validated_data):
  30. item = Supplier.objects.filter(name=validated_data['name'], type=validated_data['type']).first()
  31. if item:
  32. if validated_data['type'] == Supplier.MATERIAL:
  33. raise CustomError(u'原料供应商[%s]已存在' % validated_data['name'])
  34. if validated_data['type'] == Supplier.CONSUMABLE:
  35. raise CustomError(u'耗材供应商[%s]已存在' % validated_data['name'])
  36. instance = super(SupplierSerializer, self).create(validated_data)
  37. BizLog.objects.addnew(self.user, BizLog.INSERT, u"添加供应商[%s],id=%d" % (
  38. instance.name, instance.id), validated_data)
  39. return instance
  40. def update(self, instance, validated_data):
  41. if validated_data['type'] != instance.type:
  42. raise CustomError(u'供应商类别禁止修改!')
  43. item = Supplier.objects.filter(Q(type=validated_data['type']), Q(name=validated_data['name']),~Q(id=instance.id)).first()
  44. if item:
  45. if validated_data['type'] == Supplier.MATERIAL:
  46. raise CustomError(u'原料供应商[%s]已存在' % validated_data['name'])
  47. if validated_data['type'] == Supplier.CONSUMABLE:
  48. raise CustomError(u'耗材供应商[%s]已存在' % validated_data['name'])
  49. BizLog.objects.addnew(self.user, BizLog.UPDATE, u"修改供应商[%s],id=%d" % (
  50. instance.name, instance.id), validated_data)
  51. instance = super(SupplierSerializer, self).update(instance, validated_data)
  52. return instance