Пример #1
0
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)
Пример #2
0
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)
Пример #3
0
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)
Пример #4
0
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)
Пример #5
0
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)
Пример #6
0
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)
Пример #7
0
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)
Пример #8
0
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)
Пример #9
0
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)
Пример #10
0
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)
Пример #11
0
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)
Пример #12
0
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)
Пример #13
0
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)
Пример #14
0
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)
Пример #15
0
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)