update_badges.py 1.12 KB
# -*- coding: utf-8 -*-

from django.core.management.base import BaseCommand, CommandError

from accounts.models import User
from badger.utils import get_counters_to_badge
from badger.models import Badge


class Command(BaseCommand):
    help = "Updates the user's badges"

    def handle(self, *args, **kwargs):
        for badge in Badge.objects.filter(type='auto'):
            if not badge.comparison:
                continue
            for user in User.objects.all():
                user_counters = get_counters_to_badge(user)

                # TODO remove user if it doesn't sastify the conditions of the
                # badge anymore
                if badge.comparison == 'gte':
                    if user_counters[badge.user_attr] >= badge.value:
                        badge.awardees.add(user)
                elif badge.comparison == 'lte':
                    if user_counters[badge.user_attr] <= badge.value:
                        badge.awardees.add(user)
                elif badge.comparison == 'equal':
                    if user_counters[badge.user_attr] == badge.value:
                        badge.awardees.add(user)