serializers.py 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. # coding=utf-8
  2. import json
  3. from rest_framework import serializers
  4. from apps.option.models import Option
  5. from django.conf import settings
  6. from utils.exceptions import CustomError
  7. from utils.booleancharfield import BooleanCharField, TimeCharField, DateCharField
  8. from utils.format import strftime,strfdate
  9. from .models import ReportCustomer,NewCustomer,Review
  10. from apps.order.models import Order
  11. class ReportCustomerSerializer(serializers.ModelSerializer):
  12. gender_text = serializers.CharField(source='get_gender_display', read_only=True)
  13. report_status_text = serializers.CharField(source='get_report_status_display', read_only=True)
  14. source_text = serializers.CharField(source='source.name', read_only=True)
  15. create_user_text = serializers.CharField(source='create_user.name', read_only=True)
  16. check_user_text = serializers.CharField(source='check_user.name', read_only=True)
  17. create_time_f = TimeCharField(source='create_time', read_only=True)
  18. project_text = serializers.SerializerMethodField()
  19. hit_customer = serializers.SerializerMethodField()
  20. hit_project = serializers.SerializerMethodField()
  21. hit_track_user = serializers.SerializerMethodField()
  22. hit_process = serializers.SerializerMethodField()
  23. hit_last_stalk = serializers.SerializerMethodField()
  24. hit_store = serializers.SerializerMethodField()
  25. def get_hit_store(self, obj):
  26. customer = NewCustomer.objects.filter(store__agent=obj.store.agent,tel=obj.tel).order_by('-id').first()
  27. if customer:
  28. return customer.store.name
  29. else:
  30. return ''
  31. def get_hit_last_stalk(self, obj):
  32. customer = NewCustomer.objects.filter(store__agent=obj.store.agent,tel=obj.tel).order_by('-id').first()
  33. if customer:
  34. return strfdate(customer.end_time)
  35. else:
  36. return ''
  37. def get_hit_process(self, obj):
  38. customer = NewCustomer.objects.filter(store__agent=obj.store.agent,tel=obj.tel).order_by('-id').first()
  39. if customer:
  40. return customer.stage_progress.name
  41. else:
  42. return ''
  43. def get_hit_track_user(self, obj):
  44. customer = NewCustomer.objects.filter(store__agent=obj.store.agent,tel=obj.tel).order_by('-id').first()
  45. if customer:
  46. return customer.track_user.name
  47. else:
  48. return ''
  49. def get_hit_project(self, obj):
  50. customer = NewCustomer.objects.filter(store__agent=obj.store.agent,tel=obj.tel).order_by('-id').first()
  51. if customer:
  52. project = customer.project.all()
  53. return ','.join(project.values_list('name', flat=True))
  54. else:
  55. return ''
  56. def get_hit_customer(self, obj):
  57. customer = NewCustomer.objects.filter(store__agent=obj.store.agent,tel=obj.tel).order_by('-id').first()
  58. if customer:
  59. return customer.name
  60. else:
  61. return ''
  62. def get_project_text(self, obj):
  63. project = obj.project.all()
  64. return ','.join(project.values_list('name', flat=True))
  65. class Meta:
  66. model = ReportCustomer
  67. fields = '__all__'
  68. def create(self, validated_data):
  69. validated_data['create_user'] = self.context['request'].user
  70. store = self.context['request'].user.store
  71. if not store:
  72. raise CustomError('当前账号未绑定门店,禁止报备客户!')
  73. validated_data['store'] = store
  74. instance = super(ReportCustomerSerializer, self).create(validated_data)
  75. projects = self.initial_data['project']
  76. if projects:
  77. projects = json.loads(projects)
  78. else:
  79. raise CustomError(u'请选择项目!')
  80. for project in projects:
  81. instance.project.add(project)
  82. return instance
  83. def update(self, instance, validated_data):
  84. instance.project.clear()
  85. projects = self.initial_data['project']
  86. if projects:
  87. projects = json.loads(projects)
  88. else:
  89. raise CustomError(u'请选择项目')
  90. for project in projects:
  91. instance.project.add(project)
  92. instance = super(ReportCustomerSerializer, self).update(instance, validated_data)
  93. return instance
  94. class NewCustomerSerializer(serializers.ModelSerializer):
  95. track_user_text = serializers.CharField(source='track_user.name', read_only=True)
  96. create_user_text = serializers.CharField(source='create_user.name', read_only=True)
  97. potential_level_text = serializers.CharField(source='potential_level.name', read_only=True)
  98. stage_progress_text = serializers.CharField(source='stage_progress.name', read_only=True)
  99. stage_progress_sort = serializers.CharField(source='stage_progress.sort', read_only=True)
  100. status_text = serializers.CharField(source='get_status_display', read_only=True)
  101. create_time_f = TimeCharField(source='create_time', read_only=True)
  102. end_time_f = TimeCharField(source='end_time', read_only=True)
  103. next_time_f = DateCharField(source='next_time', read_only=True)
  104. source_text = serializers.CharField(source='source.name', read_only=True)
  105. gender_text = serializers.SerializerMethodField()
  106. project_text = serializers.SerializerMethodField()
  107. last_review = serializers.SerializerMethodField()
  108. enter_count = serializers.SerializerMethodField()
  109. last_enter_time = serializers.SerializerMethodField()
  110. def get_last_enter_time(self, obj):
  111. review = Review.objects.filter(customer=obj, is_entry=True).order_by('-create_time').first()
  112. if review:
  113. return strftime(review.create_time)
  114. else:
  115. return ''
  116. def get_enter_count(self, obj):
  117. review = Review.objects.filter(customer=obj, is_entry=True)
  118. return review.count()
  119. def get_last_review(self, obj):
  120. review = Review.objects.filter(customer=obj).order_by('-create_time').first()
  121. if review:
  122. return review.description
  123. else:
  124. return ''
  125. def get_project_text(self, obj):
  126. project = obj.project.all()
  127. return ','.join(project.values_list('name', flat=True))
  128. def get_gender_text(self, obj):
  129. return settings.GENDER_CHOICES[obj.report_customer.gender - 1][1]
  130. class Meta:
  131. model = NewCustomer
  132. fields = '__all__'
  133. def create(self, validated_data):
  134. validated_data['create_user'] = self.context['request'].user
  135. instance = super(NewCustomerSerializer, self).create(validated_data)
  136. return instance
  137. def update(self, instance, validated_data):
  138. instance = super(NewCustomerSerializer, self).update(instance, validated_data)
  139. # order = Order.objects.filter(customer=instance)
  140. # if not order:
  141. # Order.objects.create(customer=instance, service_user_id=instance.track_user.id)
  142. # if order:
  143. # Order.objects.filter(customer=instance)
  144. return instance
  145. class ReviewSerializer(serializers.ModelSerializer):
  146. create_user_text = serializers.CharField(source='create_user.name', read_only=True)
  147. check_user_text = serializers.CharField(source='check_user.name', read_only=True)
  148. check_status_text = serializers.CharField(source='get_check_status_display', read_only=True)
  149. create_time_f = TimeCharField(source='create_time', read_only=True)
  150. check_time_f = TimeCharField(source='check_time', read_only=True)
  151. next_time_f = DateCharField(source='customer.next_time', read_only=True)
  152. is_giveup_text = BooleanCharField(source='is_giveup', read_only=True)
  153. name = serializers.CharField(source='customer.name', read_only=True)
  154. tel = serializers.CharField(source='customer.tel', read_only=True)
  155. village = serializers.CharField(source='customer.village', read_only=True)
  156. address = serializers.CharField(source='customer.address', read_only=True)
  157. stage_progress_text = serializers.CharField(source='customer.stage_progress.name', read_only=True)
  158. project_text = serializers.SerializerMethodField()
  159. def get_project_text(self, obj):
  160. project = obj.customer.project.all()
  161. return ','.join(project.values_list('name', flat=True))
  162. class Meta:
  163. model = Review
  164. fields = '__all__'