def test_user_last_activity(self):
        '''
        Test the helper function for last user activity
        '''
        self.user_login('admin')
        user = User.objects.get(username='******')
        log = WorkoutLog.objects.get(pk=1)
        session = WorkoutSession.objects.get(pk=1)

        self.assertEqual(user.usercache.last_activity, datetime.date(2014, 1, 30))
        self.assertEqual(get_user_last_activity(user), datetime.date(2014, 1, 30))

        # Log more recent than session
        log.date = datetime.date(2014, 10, 2)
        log.save()
        session.date = datetime.date(2014, 10, 1)
        session.save()
        user = User.objects.get(username='******')
        self.assertEqual(get_user_last_activity(user), datetime.date(2014, 10, 2))
        self.assertEqual(user.usercache.last_activity, datetime.date(2014, 10, 2))

        # Session more recent than log
        log.date = datetime.date(2014, 9, 1)
        log.save()
        session.date = datetime.date(2014, 10, 5)
        session.save()
        user = User.objects.get(username='******')
        self.assertEqual(get_user_last_activity(user), datetime.date(2014, 10, 5))
        self.assertEqual(user.usercache.last_activity, datetime.date(2014, 10, 5))

        # No logs, but session
        WorkoutLog.objects.filter(user=user).delete()
        user = User.objects.get(username='******')
        self.assertEqual(get_user_last_activity(user), datetime.date(2014, 10, 5))
        self.assertEqual(user.usercache.last_activity, datetime.date(2014, 10, 5))
Example #2
0
    def test_user_last_activity(self):
        '''
        Test the helper function for last user activity
        '''
        self.user_login('admin')
        user = User.objects.get(username='******')
        log = WorkoutLog.objects.get(pk=1)
        session = WorkoutSession.objects.get(pk=1)

        self.assertEqual(user.usercache.last_activity, datetime.date(2014, 1, 30))
        self.assertEqual(get_user_last_activity(user), datetime.date(2014, 1, 30))

        # Log more recent than session
        log.date = datetime.date(2014, 10, 2)
        log.save()
        session.date = datetime.date(2014, 10, 1)
        session.save()
        user = User.objects.get(username='******')
        self.assertEqual(get_user_last_activity(user), datetime.date(2014, 10, 2))
        self.assertEqual(user.usercache.last_activity, datetime.date(2014, 10, 2))

        # Session more recent than log
        log.date = datetime.date(2014, 9, 1)
        log.save()
        session.date = datetime.date(2014, 10, 5)
        session.save()
        user = User.objects.get(username='******')
        self.assertEqual(get_user_last_activity(user), datetime.date(2014, 10, 5))
        self.assertEqual(user.usercache.last_activity, datetime.date(2014, 10, 5))

        # No logs, but session
        WorkoutLog.objects.filter(user=user).delete()
        user = User.objects.get(username='******')
        self.assertEqual(get_user_last_activity(user), datetime.date(2014, 10, 5))
        self.assertEqual(user.usercache.last_activity, datetime.date(2014, 10, 5))
Example #3
0
    def handle(self, *args, **options):
        '''
        Process gyms and send emails
        '''

        today = datetime.date.today()

        for gym in Gym.objects.all():
            if int(options['verbosity']) >= 2:
                self.stdout.write("Processing gym '{}' ".format(gym))

            user_list = []
            trainer_list = []
            user_list_no_activity = []
            weeks = gym.config.weeks_inactive

            for profile in gym.userprofile_set.all():
                user = profile.user

                if user.has_perm('gym.gym_trainer'):
                    trainer_list.append(user)

                # Check appropriate permissions
                if is_any_gym_admin(user):
                    continue

                # Check user preferences
                if not user.gymuserconfig.include_inactive:
                    continue

                last_activity = get_user_last_activity(user)
                if not last_activity:
                    user_list_no_activity.append({'user': user, 'last_activity': last_activity})
                elif last_activity - today > datetime.timedelta(weeks=weeks):
                    user_list.append({'user': user, 'last_activity': last_activity})

            if user_list or user_list_no_activity:
                for trainer in trainer_list:

                    # Profile might not have email
                    if not trainer.email:
                        continue

                    # Check trainer preferences
                    if not trainer.gymadminconfig.overview_inactive:
                        continue

                    translation.activate(trainer.userprofile.notification_language.short_name)
                    subject = _('Reminder of inactive members')
                    context = {
                        'weeks': weeks,
                        'user_list': user_list,
                        'user_list_no_activity': user_list_no_activity
                    }
                    message = render_to_string('gym/email_inactive_members.html', context)
                    mail.send_mail(subject,
                                   message,
                                   EMAIL_FROM,
                                   [trainer.email],
                                   fail_silently=True)
Example #4
0
def update_activity_cache(sender, instance, **kwargs):
    '''
    Update the user's cached last activity date
    '''

    user = instance.user
    user.usercache.last_activity = get_user_last_activity(user)
    user.usercache.save()
Example #5
0
def update_activity_cache(sender, instance, **kwargs):
    '''
    Update the user's cached last activity date
    '''

    user = instance.user
    user.usercache.last_activity = get_user_last_activity(user)
    user.usercache.save()
Example #6
0
    def handle(self, **options):
        '''
        Process the options
        '''

        print('** Updating last activity')
        for user in User.objects.all():
            user.usercache.last_activity = get_user_last_activity(user)
            user.usercache.save()
Example #7
0
    def handle(self, **options):
        '''
        Process the options
        '''

        print('** Updating last activity')
        for user in User.objects.all():
            user.usercache.last_activity = get_user_last_activity(user)
            user.usercache.save()
Example #8
0
 def get_queryset(self):
     '''
     Return a list with the users, not really a queryset.
     '''
     out = []
     for u in User.objects.filter(userprofile__gym_id=self.kwargs['pk']):
         out.append({'obj': u,
                     'last_log': get_user_last_activity(u),
                     'perms': {'manage_gym': u.has_perm('gym.manage_gym'),
                               'manage_gyms': u.has_perm('gym.manage_gyms'),
                               'gym_trainer': u.has_perm('gym.gym_trainer'),
                               'any_admin': is_any_gym_admin(u)}})
     return out
Example #9
0
 def get_queryset(self):
     '''
     Return a list with the users, not really a queryset.
     '''
     out = []
     for u in User.objects.filter(userprofile__gym_id=self.kwargs['pk']):
         out.append({
             'obj': u,
             'last_log': get_user_last_activity(u),
             'perms': {
                 'manage_gym': u.has_perm('gym.manage_gym'),
                 'manage_gyms': u.has_perm('gym.manage_gyms'),
                 'gym_trainer': u.has_perm('gym.gym_trainer'),
                 'any_admin': is_any_gym_admin(u)
             }
         })
     return out
Example #10
0
    def handle(self, *args, **options):
        '''
        Process gyms and send emails
        '''

        today = datetime.date.today()

        for gym in Gym.objects.all():
            if int(options['verbosity']) >= 2:
                self.stdout.write("* Processing gym '{}' ".format(gym))

            user_list = []
            trainer_list = []
            user_list_no_activity = []
            weeks = gym.config.weeks_inactive

            if not weeks:
                if int(options['verbosity']) >= 2:
                    self.stdout.write("  Reminders deactivatd, skipping")
                continue

            for profile in gym.userprofile_set.all():
                user = profile.user

                if user.has_perm('gym.gym_trainer'):
                    trainer_list.append(user)

                # Check appropriate permissions
                if is_any_gym_admin(user):
                    continue

                # Check user preferences
                if not user.gymuserconfig.include_inactive:
                    continue

                last_activity = get_user_last_activity(user)
                if not last_activity:
                    user_list_no_activity.append({
                        'user': user,
                        'last_activity': last_activity
                    })
                elif last_activity - today > datetime.timedelta(weeks=weeks):
                    user_list.append({
                        'user': user,
                        'last_activity': last_activity
                    })

            if user_list or user_list_no_activity:
                for trainer in trainer_list:

                    # Profile might not have email
                    if not trainer.email:
                        continue

                    # Check trainer preferences
                    if not trainer.gymadminconfig.overview_inactive:
                        continue

                    translation.activate(
                        trainer.userprofile.notification_language.short_name)
                    subject = _('Reminder of inactive members')
                    context = {
                        'weeks': weeks,
                        'user_list': user_list,
                        'user_list_no_activity': user_list_no_activity
                    }
                    message = render_to_string(
                        'gym/email_inactive_members.html', context)
                    mail.send_mail(subject,
                                   message,
                                   EMAIL_FROM, [trainer.email],
                                   fail_silently=True)