serializers.py 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. #coding=utf-8
  2. import datetime
  3. from rest_framework import serializers
  4. from apps.exceptions import CustomError
  5. from django.db.models import Q
  6. from apps.foundation.models import BizLog
  7. from .models import *
  8. from apps.serializer_errors import dump_serializer_errors
  9. from apps.foundation.models import BizLog
  10. from apps.customer.models import Customer
  11. from apps.account.models import Branch
  12. from apps import base
  13. from libs.booleancharfield import PriceShowCharField
  14. class BranchSerializer(serializers.ModelSerializer):
  15. enabled_text = serializers.SerializerMethodField()
  16. class Meta:
  17. model = Branch
  18. fields = '__all__'
  19. def get_enabled_text(self, obj):
  20. if obj.enabled:
  21. return u'是'
  22. return u'否'
  23. @staticmethod
  24. def factory(user, data, id=None):
  25. if id:
  26. instance = Branch.getById(id)
  27. else:
  28. instance = None
  29. serializer = BranchSerializer(instance, data=data)
  30. serializer.user = user
  31. return serializer
  32. def validSave(self):
  33. if self.is_valid():
  34. return self.save()
  35. else:
  36. raise CustomError(dump_serializer_errors(self))
  37. def validate(self, data):
  38. if 'enabled' in data:
  39. data['enabled'] = True
  40. else:
  41. data['enabled'] = False
  42. return data
  43. def create(self, validated_data):
  44. instance = super(BranchSerializer, self).create(validated_data)
  45. instance.save()
  46. BizLog.objects.addnew(self.user, BizLog.INSERT, u"添加门店[%s],id=%s" % (instance.name, instance.id),validated_data)
  47. return instance
  48. def update(self, instance, validated_data):
  49. BizLog.objects.addnew(self.user, BizLog.UPDATE, u"修改门店[%s],id=%s" % (instance.name, instance.id),validated_data)
  50. instance = super(BranchSerializer, self).update(instance, validated_data)
  51. return instance
  52. class CustomerSerializer(serializers.ModelSerializer):
  53. create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
  54. class Meta:
  55. model = Customer
  56. fields = '__all__'
  57. class MemberCouponSerializer(serializers.ModelSerializer):
  58. activity_name = serializers.CharField(source='activity.title', read_only=True)
  59. coupon_name = serializers.CharField(source='coupon.name', read_only=True)
  60. write_off_text = serializers.SerializerMethodField()
  61. write_off_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
  62. class Meta:
  63. model = MemberCoupon
  64. fields = '__all__'
  65. def get_write_off_text(self, obj):
  66. if obj.write_off:
  67. return u'是'
  68. return u'否'
  69. class OrderSerializer(serializers.ModelSerializer):
  70. activity_name = serializers.CharField(source='activity.title', read_only=True)
  71. member_name = serializers.CharField(source='member.name', read_only=True)
  72. recommend_member_name = serializers.CharField(source='recommend_member.name', read_only=True)
  73. member_tel = serializers.CharField(source='member.tel', read_only=True)
  74. branch_name = serializers.CharField(source='branch.name', read_only=True)
  75. status_text = serializers.CharField(source='get_status_display', read_only=True)
  76. delete_text = serializers.SerializerMethodField()
  77. split_status_text = serializers.SerializerMethodField()
  78. create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
  79. amount = PriceShowCharField(read_only=True)
  80. rebate = PriceShowCharField(read_only=True)
  81. class Meta:
  82. model = Order
  83. fields = '__all__'
  84. def get_delete_text(self, obj):
  85. if obj.delete:
  86. return u'是'
  87. return u'否'
  88. def get_split_status_text(self, obj):
  89. if obj.status == Order.FINISH:
  90. account_detail = SplitAccountDetail.objects.filter(main_id=obj.splitaccount_id).first()
  91. if account_detail:
  92. return SplitAccountDetail.STATUS_CHOICES[account_detail.status][1]
  93. return ''
  94. return ''
  95. class CouponSerializer(serializers.ModelSerializer):
  96. branch_name = serializers.CharField(source='branch.name', read_only=True)
  97. create_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
  98. enabled_text = serializers.SerializerMethodField()
  99. class Meta:
  100. model = Coupon
  101. fields = '__all__'
  102. def get_enabled_text(self, obj):
  103. if obj.enabled:
  104. return u'是'
  105. return u'否'
  106. @staticmethod
  107. def factory(user, data, id=None):
  108. if id:
  109. instance = Coupon.getById(id)
  110. else:
  111. instance = None
  112. serializer = CouponSerializer(instance, data=data)
  113. serializer.user = user
  114. return serializer
  115. def validSave(self):
  116. if self.is_valid():
  117. return self.save()
  118. else:
  119. raise CustomError(dump_serializer_errors(self))
  120. def validate(self, data):
  121. if 'enabled' in data:
  122. data['enabled'] = True
  123. else:
  124. data['enabled'] = False
  125. return data
  126. def create(self, validated_data):
  127. instance = super(CouponSerializer, self).create(validated_data)
  128. instance.save()
  129. BizLog.objects.addnew(self.user, BizLog.INSERT, u"添加优惠券[%s],id=%s" % (instance.name, instance.id),validated_data)
  130. return instance
  131. def update(self, instance, validated_data):
  132. BizLog.objects.addnew(self.user, BizLog.UPDATE, u"修改优惠券[%s],id=%s" % (instance.name, instance.id),validated_data)
  133. instance = super(CouponSerializer, self).update(instance, validated_data)
  134. return instance
  135. class ActivitySerializer(serializers.ModelSerializer):
  136. create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
  137. check_status_text = serializers.CharField(source='get_check_status_display', read_only=True)
  138. enabled_text = serializers.SerializerMethodField()
  139. coupons = serializers.SerializerMethodField()
  140. class Meta:
  141. model = Activity
  142. fields = '__all__'
  143. def get_enabled_text(self, obj):
  144. if obj.enabled:
  145. return u'是'
  146. return u'否'
  147. def get_coupons(self, obj):
  148. data = []
  149. rows = ActivityCoupon.objects.filter(activity=obj)
  150. data.extend([s.id for s in rows])
  151. return data
  152. @staticmethod
  153. def factory(user, data, id=None):
  154. if id:
  155. instance = Activity.getById(id)
  156. else:
  157. instance = None
  158. serializer = ActivitySerializer(instance, data=data)
  159. serializer.user = user
  160. return serializer
  161. def validSave(self):
  162. if self.is_valid():
  163. return self.save()
  164. else:
  165. raise CustomError(dump_serializer_errors(self))
  166. def validate(self, data):
  167. if 'enabled' in data:
  168. data['enabled'] = True
  169. else:
  170. data['enabled'] = False
  171. return data
  172. def create(self, validated_data):
  173. instance = super(ActivitySerializer, self).create(validated_data)
  174. instance.save()
  175. BizLog.objects.addnew(self.user, BizLog.INSERT, u"添加活动[%s],id=%s" % (instance.title, instance.id),
  176. validated_data)
  177. return instance
  178. def update(self, instance, validated_data):
  179. BizLog.objects.addnew(self.user, BizLog.UPDATE, u"修改活动[%s],id=%s" % (instance.title, instance.id),
  180. validated_data)
  181. instance = super(ActivitySerializer, self).update(instance, validated_data)
  182. return instance
  183. class CouponComboboxSerializer(serializers.ModelSerializer):
  184. value = serializers.CharField(source='id', read_only=True)
  185. class Meta:
  186. model = Coupon
  187. fields = ('value', 'name',)