serializers.py 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. #coding=utf-8
  2. from rest_framework import serializers
  3. from django.db.models import Q
  4. from apps import base
  5. from apps.account.models import User
  6. from apps.base import Formater
  7. from apps.exceptions import CustomError
  8. from apps.foundation.models import BizLog
  9. from apps.finance.models import FinanceCategory, FinancePurpose, dbFinanceIncome
  10. from apps.serializer_errors import dump_serializer_errors
  11. from libs.booleancharfield import CountShowCharField
  12. class FinanceCategorySerializer(serializers.ModelSerializer):
  13. enabled_text = serializers.SerializerMethodField()
  14. class Meta:
  15. model = FinanceCategory
  16. fields = '__all__'
  17. def get_enabled_text(self, obj):
  18. if obj.enabled:
  19. return u'是'
  20. return u'否'
  21. @staticmethod
  22. def factory(user, data, id=None):
  23. if id:
  24. instance = FinanceCategory.getById(id)
  25. else:
  26. instance = None
  27. serializer = FinanceCategorySerializer(instance, data=data)
  28. serializer.user = user
  29. return serializer
  30. def create(self, validated_data):
  31. validated_data['create_user'] = self.user
  32. instance = FinanceCategory.objects.create(**validated_data)
  33. BizLog.objects.addnew(
  34. self.user,
  35. BizLog.INSERT,
  36. u"添加财务收支类别[%s],id=%d" % (instance.name, instance.id),
  37. validated_data
  38. )
  39. return instance
  40. def update(self, instance, validated_data):
  41. instance = super(FinanceCategorySerializer, self).update(instance, validated_data)
  42. BizLog.objects.addnew(
  43. self.user,
  44. BizLog.UPDATE,
  45. u"修改财务收支类别[%s],id=%d" % (instance.name, instance.id),
  46. validated_data
  47. )
  48. return instance
  49. def validSave(self):
  50. if self.is_valid():
  51. return self.save()
  52. else:
  53. raise CustomError(dump_serializer_errors(self))
  54. class FinancePurposeSerializer(serializers.ModelSerializer):
  55. category_text = serializers.CharField(source='category.name', read_only=True)
  56. type_text = serializers.CharField(source='get_type_display', read_only=True)
  57. enabled_text = serializers.SerializerMethodField()
  58. def get_enabled_text(self, obj):
  59. if obj.enabled:
  60. return u'是'
  61. return u'否'
  62. class Meta:
  63. model = FinancePurpose
  64. fields = '__all__'
  65. @staticmethod
  66. def factory(user, data, id=None):
  67. if id:
  68. instance = FinancePurpose.getById(id)
  69. else:
  70. instance = None
  71. serializer = FinancePurposeSerializer(instance, data=data)
  72. serializer.user = user
  73. return serializer
  74. def create(self, validated_data):
  75. validated_data['create_user'] = self.user
  76. instance = FinancePurpose.objects.create(**validated_data)
  77. BizLog.objects.addnew(
  78. self.user,
  79. BizLog.INSERT,
  80. u"添加财务收支用途[%s],id=%d" % (instance.name, instance.id),
  81. validated_data
  82. )
  83. return instance
  84. def update(self, instance, validated_data):
  85. instance = super(FinancePurposeSerializer, self).update(instance, validated_data)
  86. BizLog.objects.addnew(
  87. self.user,
  88. BizLog.UPDATE,
  89. u"修改财务收支用途[%s],id=%d" % (instance.name, instance.id),
  90. validated_data
  91. )
  92. return instance
  93. def validSave(self):
  94. if self.is_valid():
  95. return self.save()
  96. else:
  97. raise CustomError(dump_serializer_errors(self))
  98. class FinanceIncomeSerializer(serializers.ModelSerializer):
  99. create_user_text = serializers.CharField(source='create_user.name', read_only=True)
  100. type_text = serializers.CharField(source='get_type_display', read_only=True)
  101. check_status_text = serializers.CharField(source='get_check_status_display', read_only=True)
  102. account_text = serializers.CharField(source='account.name', read_only=True)
  103. purpose_text = serializers.CharField(source='purpose.name', read_only=True)
  104. check_user_text = serializers.CharField(source='check_user.name', read_only=True)
  105. class Meta:
  106. model = dbFinanceIncome
  107. fields = '__all__'
  108. @staticmethod
  109. def factory(user, data, id=None):
  110. if id:
  111. instance = dbFinanceIncome.getById(id)
  112. else:
  113. instance = None
  114. serializer = FinanceIncomeSerializer(instance, data=data)
  115. serializer.user = user
  116. return serializer
  117. def create(self, validated_data):
  118. validated_data['create_user'] = self.user
  119. instance = dbFinanceIncome.objects.create(**validated_data)
  120. BizLog.objects.addnew(
  121. self.user,
  122. BizLog.INSERT,
  123. u"添加收支单[%s],id=%d" % (instance.no, instance.id),
  124. validated_data
  125. )
  126. return instance
  127. def update(self, instance, validated_data):
  128. instance = super(FinanceIncomeSerializer, self).update(instance, validated_data)
  129. BizLog.objects.addnew(
  130. self.user,
  131. BizLog.UPDATE,
  132. u"修改收支单[%s],id=%d" % (instance.no, instance.id),
  133. validated_data
  134. )
  135. return instance
  136. def validate(self, data):
  137. data['amount'] = Formater.formatAmount(data['amount'])
  138. return data
  139. def validSave(self):
  140. if self.is_valid():
  141. return self.save()
  142. else:
  143. raise CustomError(dump_serializer_errors(self))