def manage(request): if not request.user.has_perm('events.change_eventvolunteer'): from django.core.exceptions import PermissionDenied raise PermissionDenied upcoming_events = Event.objects.filter().order_by('date_time') # This is stupid-inefficient for event in upcoming_events: event.type = VolunteerType.objects.all() for voltype in event.type: voltype.vol = EventVolunteer.objects.filter(event=event, type=voltype) # RIP performance for vol in voltype.vol: vol.profile = vol.get_profile() voltype.volnum = Event.num_volunteers_type(event, voltype=voltype) if request.user.is_authenticated: if EventVolunteer.objects.filter(volunteer=request.user, event=event, type=voltype).count() > 0: voltype.me = True top_pages = get_top_pages() context = { 'events': upcoming_events, 'top_pages': top_pages, } return render(request, 'manage.html', context)
def index(request): try: article_list = Article.objects.values( 'id', 'title', 'created_date').order_by('-created_date') selected = Article.objects.latest('created_date') except Article.DoesNotExist: selected = Article( created_by=None, created_date=None, title='Placeholder', content='You are seeing this page because you do not ' + 'have any other pages created.<br> Please add content in ' + 'the <a href="/admin/">admin panel</a>.') # Parse Markdown try: selected.content = markdown.markdown(selected.content) except AttributeError: pass if hasattr(selected, 'created_by'): creator = Volunteer.objects.get(user=selected.created_by) else: creator = None top_pages = get_top_pages() context = { 'top_pages': top_pages, 'article_list': article_list, 'selected': selected, 'creator': creator, 'loc': 'news:index', } return render(request, 'news/article.html', context)
def event(request, event_id, type_name): e_vol = get_event_volunteer(request.user, event_id, type_name) if not e_vol.has_volunteered(): raise PermissionDenied top_pages = get_top_pages() context = { 'top_pages': top_pages, 'event': Event.objects.get(pk=e_vol.event.pk), 'voltype': VolunteerType.objects.get(pk=e_vol.type.pk) } return render(request, 'event.html', context)
def driver(request): instructions = VolunteerType.objects.get(type='Driver').instructions top_pages = get_top_pages() volunteer = { 'is_driver': has_upcoming_vol(user=request.user, type='driver'), 'is_dispatcher': has_upcoming_vol(user=request.user, type='dispatcher'), } context = { 'instructions': instructions, 'top_pages': top_pages, 'volunteer': volunteer, } return render(request, 'driver.html', context)
def event_manage(request, event_id): if not request.user.has_perm('events.change_eventvolunteer'): raise PermissionDenied try: selected = Event.objects.filter(id=event_id) volunteers = get_volunteers(selected) except Event.DoesNotExist: from django.http import Http404 raise Http404("Event does not exist.") top_pages = get_top_pages() context = { 'top_pages': top_pages, 'selected': selected, 'volunteers': volunteers, } return render(request, 'event_manage.html', context)
def profile(request): try: volunteer = Volunteer.objects.get(user=request.user) except Volunteer.DoesNotExist: volunteer = Volunteer(user=request.user) volunteer.save() context = {'volunteer': volunteer} if request.method == 'POST': userform = ProfileForm(request.POST) if userform.is_valid(): if userform.save(request.user, volunteer): context['flash_type'] = 'success' context['flash_message'] = 'Saved!' else: context['flash_type'] = 'danger' context['flash_message'] = 'An error occurred.' else: userform = ProfileForm( initial={ 'first_name': request.user.first_name, 'last_name': request.user.last_name, 'username': request.user.username, 'email': request.user.email, 'service': volunteer.service, 'unit': volunteer.unit, 'rank': volunteer.rank, 'phone_number': volunteer.phone_number, 'vehicle_desc': volunteer.vehicle_desc, 'sup_name': volunteer.sup_name, 'sup_phone': volunteer.sup_phone, 'accepted_waiver': volunteer.accepted_waiver, 'reviewed_profile': volunteer.reviewed_profile }) if not volunteer.reviewed_profile: context['flash_type'] = 'warning' context[ 'flash_message'] = 'Your profile must be updated. Please click "Save" to verify.' top_pages = get_top_pages() context['form'] = userform context['top_pages'] = top_pages return render(request, 'profile.html', context)
def event(request, event_id): if not request.user.has_perm('events.change_eventvolunteer'): from django.core.exceptions import PermissionDenied raise PermissionDenied try: selected = Event.objects.get(id=event_id) volunteers = get_volunteers(selected) except Event.DoesNotExist: from django.http import Http404 raise Http404("Event does not exist.") top_pages = get_top_pages() context = { 'top_pages': top_pages, 'selected': selected, 'volunteers': volunteers, } return render(request, 'event.html', context)
def index(request): article_list = Article.objects.values('id', 'title', 'created_date').order_by('-created_date') selected = Article.objects.latest('created_date') # Parse Markdown try: selected.content = markdown.markdown(selected.content) except AttributeError: pass top_pages = get_top_pages() context = { 'top_pages': top_pages, 'article_list': article_list, 'selected': selected, 'creator': Volunteer.objects.get(user=selected.created_by), 'loc': 'news:index', } return render(request, 'news/article.html', context)
def article(request, article_id): try: article_list = Article.objects.values('id', 'title', 'created_date').order_by('-created_date') selected = Article.objects.get(id=article_id) # Parse Markdown try: selected.content = markdown.markdown(selected.content) except AttributeError: pass top_pages = get_top_pages() except Article.DoesNotExist: raise Http404("Article does not exist.") context = { 'top_pages': top_pages, 'article_list': article_list, 'selected': selected, 'creator': Volunteer.objects.get(user=selected.created_by), 'loc': 'news:article:' + str(article_id), } return render(request, 'news/article.html', context)
def profile(request): try: volunteer = Volunteer.objects.get(user=request.user) except Volunteer.DoesNotExist: volunteer = Volunteer(user=request.user) volunteer.save() context = {'volunteer': volunteer} if request.method == 'POST': userform = ProfileForm(request.POST) if userform.is_valid(): if userform.save(request.user, volunteer): context['flash_type'] = 'success' context['flash_message'] = 'Saved!' else: context['flash_type'] = 'danger' context['flash_message'] = 'An error occurred.' else: userform = ProfileForm(initial={ 'first_name': request.user.first_name, 'last_name': request.user.last_name, 'username': request.user.username, 'email': request.user.email, 'service': volunteer.service, 'rank': volunteer.rank, 'phone_number': volunteer.phone_number, 'vehicle_desc': volunteer.vehicle_desc, 'sup_name': volunteer.sup_name, 'sup_phone': volunteer.sup_phone, }) top_pages = get_top_pages() context['form'] = userform context['top_pages'] = top_pages return render(request, 'profile.html', context)
def article(request, article_id): try: article_list = Article.objects.values( 'id', 'title', 'created_date').order_by('-created_date') selected = Article.objects.get(id=article_id) # Parse Markdown try: selected.content = markdown.markdown(selected.content) except AttributeError: pass top_pages = get_top_pages() except Article.DoesNotExist: raise Http404("Article does not exist.") context = { 'top_pages': top_pages, 'article_list': article_list, 'selected': selected, 'creator': Volunteer.objects.get(user=selected.created_by), 'loc': 'news:article:' + str(article_id), } return render(request, 'news/article.html', context)
def upcoming_list(request): upcoming_events = \ Event.objects.filter( Q(date_time__lt=timezone.now() + timedelta(days=30), date_time__gt=timezone.now()) | Q(list_date__lte=timezone.now()), date_time__gt=timezone.now()).order_by('date_time') top_pages = get_top_pages() context = { 'events': upcoming_events, 'top_pages': top_pages, } if request.method == 'POST': # Verify user is logged in if volunteering if not request.user.is_authenticated: return redirect('/accounts/login/?next=%s' % request.path) from userprofiles.models import Volunteer try: if not Volunteer.objects.get(user=request.user).is_populated(): context['flash_type'] = 'warning' context['flash_message'] = \ '''You must first populate your <a href="/accounts/profile/">profile</a>.''' elif not Volunteer.objects.get(user=request.user).accepted_waiver: context['flash_type'] = 'warning' context['flash_message'] = \ '''Before volunteering you must accept the waiver in your <a href="/accounts/profile/">profile</a>.''' else: # Parse and verify type data = json.loads( urllib.parse.unquote( request.body.decode().split('&')[1].split('=')[0])) submitted_event = data['event'] if not isinstance(submitted_event, int): raise TypeError submitted_type = data['type'] if not isinstance(submitted_type, int): raise TypeError # Verify selected option is one that was presented presented = False for upcoming_event in upcoming_events: if upcoming_event.pk == submitted_event: presented = True break if not presented: raise Exception('Option unavailable') # Handle volunteer/unvolunteer vol_event = EventVolunteer( volunteer=request.user, event=Event.objects.get(pk=submitted_event), type=VolunteerType.objects.get(pk=submitted_type)) if not vol_event.has_volunteered(): if position_is_full(submitted_event, submitted_type): context['flash_type'] = 'warning' context['flash_message'] = \ 'This position is already filled.' else: if vol_event.event.date_time.date() + timedelta( days=-1) == timezone.localdate(): context['flash_type'] = 'warning' context['flash_message'] = \ '''If you volunteer on the same day as a shift, please call or text the on-call phone: <a href="{}"> {}</a>.'''.format( settings.ORG_PHONE_ALT, settings.ORG_PHONE_ALT_DISPLAY ) vol_event.save() else: do_unvolunteer(vol_event) except Volunteer.DoesNotExist: context['flash_type'] = 'warning' context['flash_message'] = \ '''You must first populate your <a href="/accounts/profile/">profile</a>.''' for event in upcoming_events: if request.user.has_perm('events.view_hidden_events_volunteertype'): event.type = VolunteerType.objects.all() else: event.type = VolunteerType.objects.filter(hidden=False) for voltype in event.type: voltype.volnum = Event.num_volunteers_type(event, voltype=voltype) if request.user.is_authenticated: if EventVolunteer.objects.filter(volunteer=request.user, event=event, type=voltype).count() > 0: voltype.me = True if request.user.is_authenticated: volunteer = { 'is_driver': has_upcoming_vol(user=request.user, type='driver'), 'is_dispatcher': has_upcoming_vol(user=request.user, type='dispatcher'), } context['volunteer'] = volunteer return render(request, 'upcoming_list.html', context)
def manage(request, start_date=None, end_date=None): context = {} if not request.user.has_perm('events.change_eventvolunteer'): from django.core.exceptions import PermissionDenied raise PermissionDenied try: start_date = datetime.strptime(start_date, "%d%b%y") end_date = datetime.strptime(end_date, "%d%b%y") except (ValueError, TypeError) as vtex: start_date = None end_date = None print("Invalid date recieved:\n{}".format(vtex)) if start_date is None or end_date is None: start_date = timezone.now() - timedelta(days=30) end_date = timezone.now() if request.method == 'POST': filter_form = EventManageDateSelectForm(request.POST) if filter_form.is_valid(): try: start_date = datetime.strptime( filter_form.cleaned_data['start_date'], "%d%b%y") end_date = datetime.strptime( filter_form.cleaned_data['end_date'], "%d%b%y") except (ValueError, TypeError) as vtex: print("Invalid date recieved:\n{}".format(vtex)) return redirect("/volunteer/manage/{}/{}".format( start_date.strftime("%d%b%y"), end_date.strftime("%d%b%y"))) else: context['flash_type'] = 'warning' context['flash_message'] = 'Could not parse dates' else: filter_form = EventManageDateSelectForm( initial={ 'start_date': start_date.strftime("%d%b%y"), 'end_date': end_date.strftime("%d%b%y") }) upcoming_events = Event.objects.filter( Q(date_time__lt=end_date + timedelta(days=1), date_time__gt=start_date)).order_by('date_time')[:50] # This is stupid-inefficient for event in upcoming_events: event.type = VolunteerType.objects.all() for voltype in event.type: voltype.vol = EventVolunteer.objects.filter(event=event, type=voltype) # RIP performance for vol in voltype.vol: vol.profile = vol.get_profile() voltype.volnum = Event.num_volunteers_type(event, voltype=voltype) # if request.user.is_authenticated: # if EventVolunteer.objects.filter( # volunteer=request.user, # event=event, # type=voltype).count() > 0: # voltype.me = True top_pages = get_top_pages() context['events'] = upcoming_events context['top_pages'] = top_pages context['form'] = filter_form return render(request, 'manage.html', context)
def upcoming_list(request): upcoming_events = Event.objects.filter(Q(date_time__lt=timezone.now() + timedelta(days=30), date_time__gt=timezone.now()) | Q(list_date__lte=timezone.now())).order_by('date_time') top_pages = get_top_pages() context = { 'events': upcoming_events, 'top_pages': top_pages, } if request.method == 'POST': # Verify user is logged in if volunteering if not request.user.is_authenticated: return redirect('/accounts/login/?next=%s' % request.path) from userprofiles.models import Volunteer try: if not Volunteer.objects.get(user=request.user).is_populated(): context['flash_type'] = 'warning' context['flash_message'] = 'You must first populate your <a href="/accounts/profile/">profile</a>.' else: # Parse and verify type data = json.loads(urllib.unquote(request.body.split('&')[1].split('=')[0])) submitted_event = data['event'] if not isinstance(submitted_event, int): raise TypeError submitted_type = data['type'] if not isinstance(submitted_type, int): raise TypeError # Verify selected option is one that was presented presented = False for upcoming_event in upcoming_events: if upcoming_event.pk == submitted_event: presented = True break if not presented: raise Exception('Option unavailable') # Handle volunteer/unvolunteer vol_event = EventVolunteer( volunteer=request.user, event=Event.objects.get(pk=submitted_event), type=VolunteerType.objects.get(pk=submitted_type)) if not vol_event.has_volunteered(): if position_is_full(submitted_event, submitted_type): context['flash_type'] = 'warning' context['flash_message'] = 'This position is already filled.' else: vol_event.save() else: do_unvolunteer(vol_event) except Volunteer.DoesNotExist: context['flash_type'] = 'warning' context['flash_message'] = 'You must first populate your <a href="/accounts/profile/">profile</a>.' for event in upcoming_events: event.type = VolunteerType.objects.all() for voltype in event.type: voltype.volnum = Event.num_volunteers_type(event, voltype=voltype) if request.user.is_authenticated: if EventVolunteer.objects.filter(volunteer=request.user, event=event, type=voltype).count() > 0: voltype.me = True if request.user.is_authenticated: volunteer = { 'is_driver': has_upcoming_vol(user=request.user, type='driver'), 'is_dispatcher': has_upcoming_vol(user=request.user, type='dispatcher'), } context['volunteer'] = volunteer return render(request, 'upcoming_list.html', context)