diff --git a/account/models/user.py b/account/models/user.py index 2726cc5..3a7b30f 100644 --- a/account/models/user.py +++ b/account/models/user.py @@ -7,7 +7,7 @@ from django.contrib.auth.models import UserManager as _UserManager, AbstractUser from django.core.exceptions import ValidationError from django.db import models -from django.db.models import Q +from django.db.models import Q, Count from django.utils.translation import gettext_lazy as _ from phonenumber_field.modelfields import PhoneNumberField from phonenumber_field.phonenumber import PhoneNumber @@ -173,6 +173,12 @@ class User(BonusProgramMixin, AbstractUser): def invited_users(self): return User.objects.filter(user_inviter__inviter=self.id) + @property + def invited_users_with_orders(self): + return (self.invited_users + .annotate(_orders_count=Count('customer_orders')) + .filter(_orders_count__gt=0)) + @property def inviter(self): return User.objects.filter(user_invited__invited=self.id).first() diff --git a/account/serializers.py b/account/serializers.py index 919ee9f..327fb01 100644 --- a/account/serializers.py +++ b/account/serializers.py @@ -13,10 +13,15 @@ class UserSerializer(serializers.ModelSerializer): name = serializers.CharField(source='first_name') lastname = serializers.CharField(source='middle_name') surname = serializers.CharField(source='last_name') + invited_with_orders_count = serializers.SerializerMethodField() class Meta: model = User - fields = ('id', 'email', 'phone', 'role', 'name', 'lastname', 'surname', 'balance', 'referral_code', 'is_draft_user') + fields = ('id', 'email', 'phone', 'role', 'name', 'lastname', 'surname', + 'balance', 'referral_code', 'is_draft_user', 'invited_with_orders_count') + + def get_invited_with_orders_count(self, obj): + return obj.invited_users_with_orders.count() class BonusProgramTransactionSerializer(serializers.ModelSerializer):