serializers.py 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. # coding=utf-8
  2. from rest_framework import serializers
  3. from utils.exceptions import CustomError
  4. from utils.serializersfield import BooleanCharField
  5. from apps.base import Formater
  6. from apps.coupon.models import Coupon, CouponItem
  7. class CouponSerializer(serializers.ModelSerializer):
  8. show_amount = serializers.SerializerMethodField()
  9. create_user_text = serializers.CharField(source='create_user.employee.name', read_only=True)
  10. date_type_text = serializers.CharField(source="get_date_type_display", read_only=True)
  11. create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
  12. def get_show_amount(self, obj):
  13. return Formater.formatAmountShow(obj.amount)
  14. class Meta:
  15. model = Coupon
  16. fields = '__all__'
  17. def validate(self, attrs):
  18. if 'amount' in attrs:
  19. attrs['amount'] = Formater.formatAmount(attrs['amount'])
  20. if attrs['validity_begin_time'] and attrs['validity_end_time'] and attrs['validity_begin_time'] > attrs['validity_end_time']:
  21. raise CustomError(u'无效的有效期开始/结束时间')
  22. if attrs['receive_begin_time'] and attrs['receive_end_time'] and attrs['receive_begin_time'] > attrs['receive_end_time']:
  23. raise CustomError(u'无效的领取开始/结束时间')
  24. return attrs
  25. def create(self, validated_data):
  26. user = self.context['request'].user
  27. validated_data['tenant'] = user.employee.tenant
  28. validated_data['create_user'] = user
  29. instance = super(CouponSerializer, self).create(validated_data)
  30. return instance
  31. def update(self, instance, validated_data):
  32. if instance.tenant != self.context['request'].user.employee.tenant:
  33. raise CustomError(u'禁止跨租户操作!')
  34. if instance.delete:
  35. raise CustomError(u'优惠券[%s]已经被删除,禁止操作' % instance.name)
  36. if instance.left_count > validated_data['total_count']:
  37. raise CustomError(u'总数量不能小于已领取数量!')
  38. instance = super(CouponSerializer, self).update(instance, validated_data)
  39. return instance
  40. class CouponItemSerializer(serializers.ModelSerializer):
  41. write_off_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
  42. write_off_user_text = serializers.CharField(source='write_off_user.employee.name', read_only=True)
  43. is_used_text = BooleanCharField(source='is_used', read_only=True)
  44. validity_begin_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
  45. validity_end_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
  46. create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
  47. customer_name = serializers.CharField(source='customer.name', read_only=True)
  48. customer_tel = serializers.CharField(source='customer.tel', read_only=True)
  49. coupon_name = serializers.CharField(source='coupon.name', read_only=True)
  50. amount = serializers.SerializerMethodField()
  51. def get_amount(self, obj):
  52. return Formater.formatAmountShow(obj.amount)
  53. class Meta:
  54. model = CouponItem
  55. fields = '__all__'