refactor referral logic on user creation and add partner points

remotes/origin/HEAD
Max Yakovenko 8 years ago
parent b9e2387916
commit a23c96bf0d
  1. 20
      referral/models.py

@ -15,7 +15,7 @@ from django.utils.translation import ugettext_lazy as _
# Create your models here. # Create your models here.
from registration.signals import user_activated from registration.signals import user_activated
from core.models import AbstractStatusModel, STATUS_ACTIVE from core.models import AbstractStatusModel, STATUS_ACTIVE, STATUS_CHOICES
from referral.mixins import StatsFormatterMixin from referral.mixins import StatsFormatterMixin
from referral.utils import get_cookie from referral.utils import get_cookie
@ -23,20 +23,22 @@ logger = logging.getLogger(__name__)
# --------------------------------- Referral status list ----------------------------# # --------------------------------- Referral status list ----------------------------#
REFERRAL_DEFAULT_STATUS = STATUS_ACTIVE REFERRAL_DEFAULT_CHOICE = STATUS_ACTIVE
# @TODO: translate into english and use translation # @TODO: translate into english and use translation
class Referral(AbstractStatusModel): class Referral(AbstractStatusModel):
CODE_LENGTH = 8 CODE_LENGTH = 8
user = models.OneToOneField(get_user_model(),verbose_name=_('пользователь'), on_delete=models.CASCADE, primary_key=True referral_owner = models.OneToOneField(get_user_model(), verbose_name=_('пользователь'), on_delete=models.CASCADE,
) primary_key=True
)
code = models.CharField(_('код'), max_length=255) code = models.CharField(_('код'), max_length=255)
status = models.SmallIntegerField(_('статус'), default=REFERRAL_DEFAULT_CHOICE, choices=STATUS_CHOICES)
@classmethod @classmethod
def create(cls, user, code): def create(cls, user, code):
referral = cls(user=user, code=code) referral = cls(referral_owner=user, code=code)
return referral return referral
@staticmethod @staticmethod
@ -93,8 +95,8 @@ def create_user_referral(sender, instance, created, **kwargs):
@receiver(post_save, sender=Referral) @receiver(post_save, sender=Referral)
def init_referral_stuff(sender, instance, created, *args, **kwargs): def init_referral_stuff(sender, instance, created, *args, **kwargs):
if created: if created:
if PartnerStats.objects.filter(user_id=instance.user_id).count() == 0: if PartnerStats.objects.filter(user=instance.referral_owner).count() == 0:
PartnerStats.objects.create(user=instance.user).save() PartnerStats.objects.create(user=instance.referral_owner).save()
if ReferralStats.active.filter(referral=instance).count() == 0: if ReferralStats.active.filter(referral=instance).count() == 0:
ReferralStats.active.create(referral=instance).save() ReferralStats.active.create(referral=instance).save()
@ -109,8 +111,8 @@ def update_ref_stats(sender, user, request, **kwargs):
referral.referralstats.save() referral.referralstats.save()
referral.user.partnerstats.total_regs += 1 referral.user.partnerstats.total_regs += 1
referral.user.partnerstats.save() referral.user.partnerstats.save()
user.referral = referral user.referral_code = referral
user.referral_user = referral.user user.referral_user = referral.referral_owner
user.save() user.save()
else: else:
logger.warning("Missing referral code in database: " + referral_code) logger.warning("Missing referral code in database: " + referral_code)

Loading…
Cancel
Save