serializers.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. # coding=utf-8
  2. import json
  3. from django.conf import settings
  4. from rest_framework import serializers
  5. from django.db.models import Q, Sum
  6. from apps.order.models import Order
  7. from apps.rebate.models import CashRebate, PointRebate, TransferCashRebate, TransferCashRebateDetail
  8. from apps.base import Formater
  9. class OrderRebateSerializer(serializers.ModelSerializer):
  10. cash_rebate = serializers.SerializerMethodField()
  11. point_rebate = serializers.SerializerMethodField()
  12. status_text = serializers.CharField(source='get_status_display', read_only=True)
  13. customer_name = serializers.CharField(source='customer.name', read_only=True)
  14. customer_tel = serializers.CharField(source='customer.tel', read_only=True)
  15. total_amount = serializers.SerializerMethodField()
  16. create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
  17. transfer = serializers.SerializerMethodField()
  18. class Meta:
  19. model = Order
  20. fields = '__all__'
  21. def get_cash_rebate(self, obj):
  22. cash_bate = CashRebate.objects.filter(order=obj).aggregate(sum_amount=Sum('amount'))['sum_amount'] or 0
  23. return Formater.formatValueShow(cash_bate)
  24. def get_point_rebate(self, obj):
  25. point_rebate = PointRebate.objects.filter(order=obj).aggregate(sum_point=Sum('amount'))['sum_point'] or 0
  26. return point_rebate
  27. def get_total_amount(self, obj):
  28. return Formater.formatValueShow(obj.total_amount)
  29. def get_transfer(self, obj):
  30. transfer = TransferCashRebate.objects.filter(order=obj).count()
  31. return transfer
  32. class CashRebateSerializer(serializers.ModelSerializer):
  33. amount = serializers.SerializerMethodField()
  34. create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
  35. customer_name = serializers.CharField(source='customer.name', read_only=True)
  36. class Meta:
  37. model = CashRebate
  38. fields = '__all__'
  39. def get_amount(self, obj):
  40. return Formater.formatValueShow(obj.amount)
  41. class PointRebateSerializer(serializers.ModelSerializer):
  42. create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
  43. customer_name = serializers.CharField(source='customer.name', read_only=True)
  44. class Meta:
  45. model = PointRebate
  46. fields = '__all__'
  47. class TransferCashRebateSerializer(serializers.ModelSerializer):
  48. transfer_amount = serializers.SerializerMethodField()
  49. success_amount = serializers.SerializerMethodField()
  50. fail_amount = serializers.SerializerMethodField()
  51. transfer_status_text = serializers.CharField(source='get_transfer_status_display', read_only=True)
  52. transfer_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
  53. update_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
  54. class Meta:
  55. model = TransferCashRebate
  56. fields = '__all__'
  57. def get_transfer_amount(self, obj):
  58. return Formater.formatValueShow(obj.transfer_amount)
  59. def get_success_amount(self, obj):
  60. return Formater.formatValueShow(obj.success_amount)
  61. def get_fail_amount(self, obj):
  62. return Formater.formatValueShow(obj.fail_amount)
  63. class TransferCashRebateDetailSerializer(serializers.ModelSerializer):
  64. amount = serializers.SerializerMethodField()
  65. status_text = serializers.CharField(source='get_status_display', read_only=True)
  66. initiate_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
  67. update_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
  68. customer_name = serializers.CharField(source='customer.name', read_only=True)
  69. tel = serializers.CharField(source='customer.tel', read_only=True)
  70. transfer = serializers.SerializerMethodField()
  71. class Meta:
  72. model = TransferCashRebateDetail
  73. fields = '__all__'
  74. def get_amount(self, obj):
  75. return Formater.formatValueShow(obj.amount)
  76. def get_transfer(self, obj):
  77. count = TransferCashRebateDetail.objects.filter(Q(rebate=obj.rebate), ~Q(status=TransferCashRebateDetail.FAIL)).count()
  78. return count