from django.utils import timezone from rowers.models import Workout, PowerTimeFitnessMetric, Rower, PaidPlan import datetime from rowers.utils import myqueue import django_rq queue = django_rq.get_queue('default') queuelow = django_rq.get_queue('low') from rowers.tasks import handle_sendemail_expired from rowers.mytypes import otwtypes from django.contrib import messages from django.http import HttpResponse def getrower(user): try: r = Rower.objects.get(user=user) except Rower.DoesNotExist: r = Rower(user=user) r.save() return r from django.shortcuts import redirect allowed_paths = [ '/rowers/me/delete', '/', '/logout', '/logout/', '/rowers/me/gdpr-optin/', '/rowers/me/gdpr-optin-confirm/', '/rowers/me/gdpr-optin', '/rowers/me/gdpr-optin-confirm' '/rowers/exportallworkouts/', '/rowers/exportallworkouts', '/rowers/survey/' ] class SurveyMiddleWare(object): def __init__(self, get_response): self.get_response = get_response def __call__(self, request): if request.user.is_authenticated and request.path not in allowed_paths: r = getrower(request.user) nexturl = request.path if 'survey' in nexturl: nexturl = '/rowers/list-workouts' mustseesurvey = request.user.date_joined <= timezone.now()-datetime.timedelta(days=14) and not r.surveydone if mustseesurvey: return redirect( '/rowers/survey/?next=%s' % nexturl ) response = self.get_response(request) return response class GDPRMiddleWare(object): def __init__(self, get_response): self.get_response = get_response def __call__(self, request): if request.user.is_authenticated and request.path not in allowed_paths: r = getrower(request.user) nexturl = request.path if 'optin' in nexturl: nexturl = '/rowers/list-workouts' if not r.gdproptin: return redirect( '/rowers/me/gdpr-optin/?next=%s' % nexturl ) response = self.get_response(request) return response class RowerPlanMiddleWare(object): def __init__(self, get_response): self.get_response = get_response def __call__(self, request): if request.user.is_authenticated and request.user.rower.rowerplan not in ['basic','freecoach']: if request.user.rower.paymenttype == 'single': if request.user.rower.planexpires < timezone.now().date(): messg = 'Your paid plan has expired. We have reset you to a free basic plan.' messages.error(request,messg) r = getrower(request.user) r.rowerplan = 'basic' r.paymenttype = 'single' basicplans = PaidPlan.objects.filter(shortname='basic',price=0, paymentprocessor='braintree') r.paidplan = basicplans[0] r.save() # remove from Free Coach groups # send email job = myqueue(queue, handle_sendemail_expired, r.user.email, r.user.first_name, r.user.last_name, str(r.planexpires)) response = self.get_response(request) return response