serializers.py 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  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. split_button = serializers.SerializerMethodField()
  82. class Meta:
  83. model = Order
  84. fields = '__all__'
  85. def get_delete_text(self, obj):
  86. if obj.delete:
  87. return u'是'
  88. return u'否'
  89. def get_split_button(self, obj):
  90. if obj.recommend_member and obj.rebate > 0:
  91. if obj.pay and obj.pay.status == Pay.CONFIRM and obj.pay.profit_sharing == "Y":
  92. account_detail = SplitAccountDetail.objects.filter(main_id=obj.splitaccount_id).first()
  93. if account_detail:
  94. if account_detail.status == SplitAccountDetail.PENDING:
  95. return '1' # 显示 刷新分账结果按钮
  96. elif account_detail.status == SplitAccountDetail.CLOSED or account_detail.status == SplitAccountDetail.DEFAULT:
  97. return '2' # 显示 分账按钮
  98. else:
  99. return ''
  100. return ''
  101. return ''
  102. return ''
  103. def get_split_status_text(self, obj):
  104. if obj.status == Order.FINISH:
  105. account_detail = SplitAccountDetail.objects.filter(main_id=obj.splitaccount_id).first()
  106. if account_detail:
  107. return SplitAccountDetail.STATUS_CHOICES[account_detail.status][1]
  108. return ''
  109. return ''
  110. class CouponSerializer(serializers.ModelSerializer):
  111. branch_name = serializers.CharField(source='branch.name', read_only=True)
  112. create_time = serializers.DateTimeField(format=base.DATETIME_FORMAT, read_only=True)
  113. enabled_text = serializers.SerializerMethodField()
  114. class Meta:
  115. model = Coupon
  116. fields = '__all__'
  117. def get_enabled_text(self, obj):
  118. if obj.enabled:
  119. return u'是'
  120. return u'否'
  121. @staticmethod
  122. def factory(user, data, id=None):
  123. if id:
  124. instance = Coupon.getById(id)
  125. else:
  126. instance = None
  127. serializer = CouponSerializer(instance, data=data)
  128. serializer.user = user
  129. return serializer
  130. def validSave(self):
  131. if self.is_valid():
  132. return self.save()
  133. else:
  134. raise CustomError(dump_serializer_errors(self))
  135. def validate(self, data):
  136. if 'enabled' in data:
  137. data['enabled'] = True
  138. else:
  139. data['enabled'] = False
  140. return data
  141. def create(self, validated_data):
  142. instance = super(CouponSerializer, self).create(validated_data)
  143. instance.save()
  144. BizLog.objects.addnew(self.user, BizLog.INSERT, u"添加优惠券[%s],id=%s" % (instance.name, instance.id),validated_data)
  145. return instance
  146. def update(self, instance, validated_data):
  147. BizLog.objects.addnew(self.user, BizLog.UPDATE, u"修改优惠券[%s],id=%s" % (instance.name, instance.id),validated_data)
  148. instance = super(CouponSerializer, self).update(instance, validated_data)
  149. return instance
  150. class ActivitySerializer(serializers.ModelSerializer):
  151. create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
  152. check_status_text = serializers.CharField(source='get_check_status_display', read_only=True)
  153. enabled_text = serializers.SerializerMethodField()
  154. coupons = serializers.SerializerMethodField()
  155. pic = serializers.SerializerMethodField()
  156. class Meta:
  157. model = Activity
  158. fields = '__all__'
  159. def get_pic(self, obj):
  160. if obj.pic:
  161. return settings.MEDIA_URL + obj.pic
  162. return ''
  163. def get_enabled_text(self, obj):
  164. if obj.enabled:
  165. return u'是'
  166. return u'否'
  167. def get_coupons(self, obj):
  168. data = []
  169. rows = ActivityCoupon.objects.filter(activity=obj)
  170. data.extend([s.id for s in rows])
  171. return data
  172. @staticmethod
  173. def factory(user, data, id=None):
  174. if id:
  175. instance = Activity.getById1(id)
  176. if not data['branch']:
  177. data['branch'] = instance.branch_id
  178. else:
  179. instance = None
  180. serializer = ActivitySerializer(instance, data=data)
  181. serializer.user = user
  182. return serializer
  183. def validSave(self):
  184. if self.is_valid():
  185. return self.save()
  186. else:
  187. raise CustomError(dump_serializer_errors(self))
  188. def validate(self, data):
  189. if 'enabled' in data:
  190. data['enabled'] = True
  191. else:
  192. data['enabled'] = False
  193. return data
  194. def create(self, validated_data):
  195. instance = super(ActivitySerializer, self).create(validated_data)
  196. instance.save()
  197. BizLog.objects.addnew(self.user, BizLog.INSERT, u"添加活动[%s],id=%s" % (instance.title, instance.id),
  198. validated_data)
  199. return instance
  200. def update(self, instance, validated_data):
  201. BizLog.objects.addnew(self.user, BizLog.UPDATE, u"修改活动[%s],id=%s" % (instance.title, instance.id),
  202. validated_data)
  203. instance = super(ActivitySerializer, self).update(instance, validated_data)
  204. return instance
  205. class CouponComboboxSerializer(serializers.ModelSerializer):
  206. value = serializers.CharField(source='id', read_only=True)
  207. class Meta:
  208. model = Coupon
  209. fields = ('value', 'name',)