# coding=utf-8 from rest_framework import serializers from utils.exceptions import CustomError from utils.serializersfield import BooleanCharField from apps.base import Formater from apps.coupon.models import Coupon, CouponItem class CouponSerializer(serializers.ModelSerializer): show_amount = serializers.SerializerMethodField() create_user_text = serializers.CharField(source='create_user.employee.name', read_only=True) date_type_text = serializers.CharField(source="get_date_type_display", read_only=True) create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True) def get_show_amount(self, obj): return Formater.formatAmountShow(obj.amount) class Meta: model = Coupon fields = '__all__' def validate(self, attrs): if 'amount' in attrs: attrs['amount'] = Formater.formatAmount(attrs['amount']) if attrs['validity_begin_time'] and attrs['validity_end_time'] and attrs['validity_begin_time'] > attrs['validity_end_time']: raise CustomError(u'无效的有效期开始/结束时间') if attrs['receive_begin_time'] and attrs['receive_end_time'] and attrs['receive_begin_time'] > attrs['receive_end_time']: raise CustomError(u'无效的领取开始/结束时间') return attrs def create(self, validated_data): user = self.context['request'].user validated_data['tenant'] = user.employee.tenant validated_data['create_user'] = user instance = super(CouponSerializer, self).create(validated_data) return instance def update(self, instance, validated_data): if instance.tenant != self.context['request'].user.employee.tenant: raise CustomError(u'禁止跨租户操作!') if instance.delete: raise CustomError(u'优惠券[%s]已经被删除,禁止操作' % instance.name) if instance.left_count > validated_data['total_count']: raise CustomError(u'总数量不能小于已领取数量!') instance = super(CouponSerializer, self).update(instance, validated_data) return instance class CouponItemSerializer(serializers.ModelSerializer): write_off_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True) write_off_user_text = serializers.CharField(source='write_off_user.employee.name', read_only=True) is_used_text = BooleanCharField(source='is_used', read_only=True) validity_begin_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True) validity_end_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True) create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True) customer_name = serializers.CharField(source='customer.name', read_only=True) customer_tel = serializers.CharField(source='customer.tel', read_only=True) coupon_name = serializers.CharField(source='coupon.name', read_only=True) amount = serializers.SerializerMethodField() def get_amount(self, obj): return Formater.formatAmountShow(obj.amount) class Meta: model = CouponItem fields = '__all__'