serializers.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  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 AmountShowCharField
  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. category = serializers.IntegerField(source='purpose.category.id', read_only=True)
  106. amount = AmountShowCharField()
  107. create_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
  108. check_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
  109. class Meta:
  110. model = dbFinanceIncome
  111. fields = '__all__'
  112. @staticmethod
  113. def factory(user, data, id=None):
  114. if id:
  115. instance = dbFinanceIncome.getById(id)
  116. else:
  117. instance = None
  118. serializer = FinanceIncomeSerializer(instance, data=data)
  119. serializer.user = user
  120. return serializer
  121. def create(self, validated_data):
  122. validated_data['create_user'] = self.user
  123. validated_data['department'] = self.user.department
  124. instance = dbFinanceIncome.objects.create(**validated_data)
  125. BizLog.objects.addnew(
  126. self.user,
  127. BizLog.INSERT,
  128. u"添加收支单[%s],id=%d" % (instance.no, instance.id),
  129. validated_data
  130. )
  131. return instance
  132. def update(self, instance, validated_data):
  133. instance = super(FinanceIncomeSerializer, self).update(instance, validated_data)
  134. BizLog.objects.addnew(
  135. self.user,
  136. BizLog.UPDATE,
  137. u"修改收支单[%s],id=%d" % (instance.no, instance.id),
  138. validated_data
  139. )
  140. return instance
  141. def validate(self, data):
  142. data['amount'] = Formater.formatAmount(data['amount'])
  143. return data
  144. def validSave(self):
  145. if self.is_valid():
  146. return self.save()
  147. else:
  148. raise CustomError(dump_serializer_errors(self))