# coding=utf-8 import json from rest_framework import serializers from apps.option.models import Option from django.conf import settings from utils.exceptions import CustomError from utils.booleancharfield import BooleanCharField, TimeCharField from apps.option.serializers import OptionSerializer from .models import ReportCustomer,NewCustomer,Review class ReportCustomerSerializer(serializers.ModelSerializer): gender_text = serializers.CharField(source='get_gender_display', read_only=True) report_status_text = serializers.CharField(source='get_report_status_display', read_only=True) source_text = serializers.CharField(source='source.name', read_only=True) create_user_text = serializers.CharField(source='create_user.name', read_only=True) check_user_text = serializers.CharField(source='check_user.name', read_only=True) project_text = serializers.SerializerMethodField() def get_project_text(self, obj): project = obj.project.all() return ','.join(project.values_list('name', flat=True)) class Meta: model = ReportCustomer fields = '__all__' def create(self, validated_data): validated_data['create_user'] = self.context['request'].user store = self.context['request'].user.store if not store: raise CustomError('当前账号未绑定门店,禁止报备客户!') validated_data['store'] = store instance = super(ReportCustomerSerializer, self).create(validated_data) projects = self.initial_data['project'] if projects: projects = json.loads(projects) else: raise CustomError(u'请选择项目!') for project in projects: instance.project.add(project) return instance def update(self, instance, validated_data): instance.project.clear() projects = self.initial_data['project'] if projects: projects = json.loads(projects) else: raise CustomError(u'请选择项目') for project in projects: instance.project.add(project) instance = super(ReportCustomerSerializer, self).update(instance, validated_data) return instance class NewCustomerSerializer(serializers.ModelSerializer): track_user_text = serializers.CharField(source='track_user.name', read_only=True) create_user_text = serializers.CharField(source='create_user.name', read_only=True) potential_level_text = serializers.CharField(source='potential_level.name', read_only=True) stage_progress_text = serializers.CharField(source='stage_progress.name', read_only=True) create_time_f = TimeCharField(source='create_time', read_only=True) end_time_f = TimeCharField(source='end_time', read_only=True) next_time_f = TimeCharField(source='next_time', read_only=True) name = serializers.CharField(source='report_customer.name', read_only=True) tel = serializers.CharField(source='report_customer.tel', read_only=True) village = serializers.CharField(source='report_customer.village', read_only=True) address = serializers.CharField(source='report_customer.address', read_only=True) source_text = serializers.CharField(source='report_customer.source.name', read_only=True) project_text = serializers.CharField(source='report_customer.projects.name', read_only=True) gender_text = serializers.SerializerMethodField() def get_gender_text(self, obj): return settings.GENDER_CHOICES[obj.report_customer.gender - 1][1] class Meta: model = NewCustomer fields = '__all__' def create(self, validated_data): validated_data['create_user'] = self.context['request'].user instance = super(NewCustomerSerializer, self).create(validated_data) return instance def update(self, instance, validated_data): instance = super(NewCustomerSerializer, self).update(instance, validated_data) return instance class ReviewSerializer(serializers.ModelSerializer): create_user_text = serializers.CharField(source='create_user.name', read_only=True) check_user_text = serializers.CharField(source='check_user.name', read_only=True) check_status_text = serializers.CharField(source='get_check_status_display', read_only=True) create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True) check_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True) is_giveup_text = BooleanCharField(source='enable', read_only=True) class Meta: model = Review fields = '__all__'