add camp redirect views
This commit is contained in:
parent
0acf3e0fee
commit
98bb51941e
|
@ -35,6 +35,10 @@ TIME_ZONE='{{ django_timezone }}'
|
||||||
MEDIA_ROOT='{{ django_media_root }}'
|
MEDIA_ROOT='{{ django_media_root }}'
|
||||||
PDF_ARCHIVE_PATH='{{ pdf_archive_path }}'
|
PDF_ARCHIVE_PATH='{{ pdf_archive_path }}'
|
||||||
|
|
||||||
|
# start redirecting to the next camp instead of the previous camp after
|
||||||
|
# this much of the time between the camps has passed
|
||||||
|
CAMP_REDIRECT_PERCENT=40
|
||||||
|
|
||||||
# PSP settings
|
# PSP settings
|
||||||
EPAY_MERCHANT_NUMBER='{{ epay_merchant_number }}'
|
EPAY_MERCHANT_NUMBER='{{ epay_merchant_number }}'
|
||||||
EPAY_MD5_SECRET='{{ epay_md5_secret }}'
|
EPAY_MD5_SECRET='{{ epay_md5_secret }}'
|
||||||
|
|
|
@ -29,11 +29,6 @@ urlpatterns = [
|
||||||
r'^news/',
|
r'^news/',
|
||||||
include('news.urls', namespace='news')
|
include('news.urls', namespace='news')
|
||||||
),
|
),
|
||||||
url(
|
|
||||||
r'^$',
|
|
||||||
TemplateView.as_view(template_name='frontpage.html'),
|
|
||||||
name='frontpage'
|
|
||||||
),
|
|
||||||
url(
|
url(
|
||||||
r'^contact/',
|
r'^contact/',
|
||||||
TemplateView.as_view(template_name='contact.html'),
|
TemplateView.as_view(template_name='contact.html'),
|
||||||
|
@ -73,6 +68,40 @@ urlpatterns = [
|
||||||
name='camp_list'
|
name='camp_list'
|
||||||
),
|
),
|
||||||
|
|
||||||
|
# camp redirect views here
|
||||||
|
|
||||||
|
url(
|
||||||
|
r'^$',
|
||||||
|
CampRedirectView.as_view(),
|
||||||
|
kwargs={'page': 'camp_detail'}
|
||||||
|
),
|
||||||
|
|
||||||
|
url(
|
||||||
|
r'^program/$',
|
||||||
|
CampRedirectView.as_view(),
|
||||||
|
kwargs={'page': 'schedule_index'}
|
||||||
|
),
|
||||||
|
|
||||||
|
url(
|
||||||
|
r'^info/$',
|
||||||
|
CampRedirectView.as_view(),
|
||||||
|
kwargs={'page': 'info'}
|
||||||
|
),
|
||||||
|
|
||||||
|
|
||||||
|
url(
|
||||||
|
r'^sponsors/$',
|
||||||
|
CampRedirectView.as_view(),
|
||||||
|
kwargs={'page': 'sponsors'}
|
||||||
|
),
|
||||||
|
|
||||||
|
|
||||||
|
url(
|
||||||
|
r'^villages/$',
|
||||||
|
CampRedirectView.as_view(),
|
||||||
|
kwargs={'page': 'village_list'}
|
||||||
|
),
|
||||||
|
|
||||||
# camp specific urls below here
|
# camp specific urls below here
|
||||||
|
|
||||||
url(
|
url(
|
||||||
|
|
|
@ -7,6 +7,7 @@ from psycopg2.extras import DateTimeTZRange
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
from django.urls import reverse
|
||||||
|
|
||||||
|
|
||||||
class Camp(CreatedUpdatedModel, UUIDModel):
|
class Camp(CreatedUpdatedModel, UUIDModel):
|
||||||
|
@ -46,6 +47,9 @@ class Camp(CreatedUpdatedModel, UUIDModel):
|
||||||
help_text='The camp teardown period.',
|
help_text='The camp teardown period.',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def get_absolute_url(self):
|
||||||
|
return reverse('camp_detail', kwargs={'camp_slug': self.slug})
|
||||||
|
|
||||||
def clean(self):
|
def clean(self):
|
||||||
''' Make sure the dates make sense - meaning no overlaps and buildup before camp before teardown '''
|
''' Make sure the dates make sense - meaning no overlaps and buildup before camp before teardown '''
|
||||||
errors = []
|
errors = []
|
||||||
|
|
|
@ -1,6 +1,30 @@
|
||||||
from django.views.generic import ListView, DetailView
|
from django.views.generic import ListView, DetailView
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from .models import *
|
from .models import *
|
||||||
|
from django.shortcuts import redirect
|
||||||
|
from .mixins import CampViewMixin
|
||||||
|
from django.views import View
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
|
|
||||||
|
class CampRedirectView(CampViewMixin, View):
|
||||||
|
def dispatch(self, request, *args, **kwargs):
|
||||||
|
# find the closest camp in the past
|
||||||
|
prevcamp = Camp.objects.filter(camp__endswith__lt=timezone.now()).order_by('-camp')[0]
|
||||||
|
# find the closest upcoming camp
|
||||||
|
nextcamp = Camp.objects.filter(camp__startswith__gt=timezone.now()).order_by('camp')[0]
|
||||||
|
# find the number of days between the two camps
|
||||||
|
daysbetween = (nextcamp.camp.lower - prevcamp.camp.upper).days
|
||||||
|
# find the number of days since the last camp ended
|
||||||
|
dayssinceprevcamp = (timezone.now() - prevcamp.camp.lower).days
|
||||||
|
# find the percentage of time passed
|
||||||
|
percentpassed = (dayssinceprevcamp / daysbetween) * 100
|
||||||
|
print(daysbetween, dayssinceprevcamp, percentpassed)
|
||||||
|
# do the redirect
|
||||||
|
if percentpassed > settings.CAMP_REDIRECT_PERCENT:
|
||||||
|
return redirect(kwargs['page'], camp_slug=nextcamp.slug)
|
||||||
|
else:
|
||||||
|
return redirect(kwargs['page'], camp_slug=prevcamp.slug)
|
||||||
|
|
||||||
|
|
||||||
class CampDetailView(DetailView):
|
class CampDetailView(DetailView):
|
||||||
|
|
Loading…
Reference in a new issue