27 lines
1.0 KiB
Python
27 lines
1.0 KiB
Python
![]() |
from decimal import Decimal
|
||
|
from django.dispatch import receiver
|
||
|
from django.db.models.signals import pre_save, post_save
|
||
|
from django.db.models import F
|
||
|
from django.db.models.functions import Least
|
||
|
from users.models import TGUser, ClickTransaction
|
||
|
from misc.models import Setting
|
||
|
|
||
|
|
||
|
@receiver(post_save, sender=ClickTransaction, dispatch_uid='referral_transaction_signal')
|
||
|
def referral_signal(sender, instance, created, **kwargs):
|
||
|
if not created:
|
||
|
return
|
||
|
if referred_by_user := instance.user.referred_by:
|
||
|
referred_by_user.referral_storage = Least(
|
||
|
F('referral_storage') + instance.value * Decimal(Setting.objects.get(name='REFERRAL_PERCENT').value['value']),
|
||
|
referred_by_user.max_storage
|
||
|
)
|
||
|
referred_by_user.save()
|
||
|
for referree in instance.user.referrees.all():
|
||
|
referree.referral_storage = Least(
|
||
|
F('referral_storage') + instance.value * Decimal(Setting.objects.get(name='REVERSE_REFERRAL_PERCENT').value['value']),
|
||
|
referree.max_storage
|
||
|
)
|
||
|
referree.save()
|
||
|
|