Beispiel #1
0
def politician_profile_connection_wizard(request,
                                         eip_id,
                                         user_id,
                                         connection_id=None):
    check_permissions(request, eip_id, 'candidate')
    return PoliticianProfileConnectionWizard(
        user_id=user_id, eip_id=eip_id, connection_id=connection_id)(request)
Beispiel #2
0
def election_setup_done(request, election_instance_id):
    check_permissions(request, election_instance_id, 'council_admin')
    election_instance = get_object_or_404(ElectionInstance,
                                          pk=election_instance_id)
    return render_to_response('backoffice/wizard/election_setup/done.html',
                              {'instance': election_instance},
                              context_instance=RequestContext(request))
Beispiel #3
0
def politician_profile_appearance_wizard(request,
                                         eip_id,
                                         user_id,
                                         appearance_id=None):
    check_permissions(request, eip_id, 'candidate')
    return PoliticianProfileAppearanceWizard(
        user_id=user_id, eip_id=eip_id, appearance_id=appearance_id)(request)
Beispiel #4
0
def answer_question_done(request, election_instance_party_id, user_id):
    '''
        answer_question thanks page.
    '''
    check_permissions(request, election_instance_party_id, 'candidate')

    user = get_object_or_404(User, pk=user_id)

    message = None

    if request.method == 'POST':
        form = AgreeForm(data=request.POST)
        if form.is_valid():
            data = form.cleaned_data
            user.profile.hns_dev = data['hns_dev']
            user.profile.science = data['science']

            user.profile.save()

            message = _('Your preference has been saved')
    else:
        initial = {
            'hns_dev': user.profile.hns_dev,
            'science': user.profile.science,
        }
        form = AgreeForm(initial=initial)

    return render_to_response('backoffice/wizard/question/answer_add/done.html', {
                                'questions': range(0, get_question_count(election_instance_party_id)),
                                'eip_id': election_instance_party_id,
                                'user_id': user_id,
                                'form': form,
                                'message': message,
                            },
                            context_instance=RequestContext(request))
Beispiel #5
0
def csv_import_candidates_step2(request, ep_id, error=False):
    check_permissions(request, ep_id, 'party_admin')
    if request.method == 'POST':
        form = CsvUploadForm(request.POST, request.FILES)
        if form.is_valid():
            #Save file in tmp dir
            file = form.files['file']
            filename = str(
                time.time()) + '.csv'  #about 1000 unique filenames per second?
            destination = open(settings.TMP_ROOT + '/' + filename, 'wb+')

            for chunk in file.chunks():
                destination.write(chunk)
            destination.close()
            request.session['csv_candidate_filename'] = filename
            return redirect('bo.csv_candidates_step3', ep_id)

    else:
        form = CsvUploadForm()
    eip = get_object_or_404(ElectionInstanceParty, pk=ep_id)
    forms = dict({'csv_upload': form})
    return render_to_response('backoffice/csv_candidates_2.html', {
        'forms': forms,
        'error': error,
        'ep_id': ep_id,
        'instance': eip.election_instance
    },
                              context_instance=RequestContext(request))
Beispiel #6
0
def politician_profile_setup_done(request, eip_id, user_id):
    check_permissions(request, eip_id, 'candidate')
    return render_to_response('backoffice/wizard/politician_profile/done.html',
                              {'user_id': user_id,
                              'eip_id': eip_id,
                              'questions': range(0, get_question_count(eip_id)),
                              },
                              context_instance=RequestContext(request))
Beispiel #7
0
def csv_import_candidates_step1(request, ep_id):
    check_permissions(request, ep_id, 'party_admin')
    eip = get_object_or_404(ElectionInstanceParty, pk=ep_id)
    return render_to_response('backoffice/csv_candidates_1.html', {
        'ep_id': ep_id,
        'instance': eip.election_instance
    },
                              context_instance=RequestContext(request))
Beispiel #8
0
def election_party_grow(request, id):
    check_permissions(request, id, 'party_admin')
    eip = get_object_or_404(ElectionInstanceParty, pk=id)
    if eip.list_length is None:
        eip.list_length = 0
    eip.list_length += 1
    eip.save()
    return redirect('bo.election_party_view', id=id)
Beispiel #9
0
def election_party_grow(request, id):
    check_permissions(request,id, 'party_admin')
    eip = get_object_or_404(ElectionInstanceParty, pk=id)
    if eip.list_length is None:
        eip.list_length = 0
    eip.list_length += 1
    eip.save()
    return redirect('bo.election_party_view', id=id)
Beispiel #10
0
def politician_profile_political_wizard(request,
                                        eip_id,
                                        user_id,
                                        political_id=None):
    check_permissions(request, eip_id, 'candidate')
    return PoliticianProfilePoliticalWizard(user_id=user_id,
                                            eip_id=eip_id,
                                            political_id=political_id)(request)
Beispiel #11
0
def election_party_view(request, id):
    check_permissions(request, id, 'party_admin')
    eip = get_object_or_404(ElectionInstanceParty, pk=id)
    return render_to_response('backoffice/election_party_view.html', {
        'instance': eip.election_instance,
        'eip': eip
    },
                              context_instance=RequestContext(request))
Beispiel #12
0
def csv_import_parties_step1(request, ei_id):
    check_permissions(request, ei_id, 'council_admin')
    ei_obj = get_object_or_404(ElectionInstance, pk=ei_id)
    return render_to_response('backoffice/csv_parties_1.html', {
        'ei_id': ei_id,
        'instance': ei_obj
    },
                              context_instance=RequestContext(request))
Beispiel #13
0
def election_instance_grow(request, id):
    check_permissions(request,id, 'council_admin')
    instance = get_object_or_404(ElectionInstance, pk=id)
    if instance.num_lists is None:
        instance.num_lists = 0
    instance.num_lists += 1
    instance.save()
    return redirect('bo.election_instance_view', id=id)
Beispiel #14
0
def answer_question(request, election_instance_party_id, user_id=None):
    '''
        AnswerQuestion - wizard.
        @param int election_instance_party_id - ElectionInstanceParty id
        @param int user_id User (Candidate=PoliticalProfile) id
    '''
    check_permissions(request, election_instance_party_id, 'candidate')
    return AnswerQuestion(election_instance_party_id=election_instance_party_id, user_id=user_id)(request)
Beispiel #15
0
def politician_profile_interest_wizard(request,
                                       eip_id,
                                       user_id,
                                       interest_id=None):
    check_permissions(request, eip_id, 'candidate')
    return PoliticianProfileInterestWizard(user_id=user_id,
                                           eip_id=eip_id,
                                           interest_id=interest_id)(request)
Beispiel #16
0
def election_instance_grow(request, id):
    check_permissions(request, id, 'council_admin')
    instance = get_object_or_404(ElectionInstance, pk=id)
    if instance.num_lists is None:
        instance.num_lists = 0
    instance.num_lists += 1
    instance.save()
    return redirect('bo.election_instance_view', id=id)
Beispiel #17
0
def politician_profile_interest_delete(request, interest_id, eip_id, user_id):
    check_permissions(request, eip_id, 'candidate')
    user = get_object_or_404(User, pk=user_id)
    try:
        interest = user.profile.interests.get(pk=interest_id)
        interest.delete()
    except ObjectDoesNotExist:
        pass
    return redirect('backoffice.views.politician_profile_interest', eip_id=eip_id, user_id = user_id)
Beispiel #18
0
def politician_profile_connection_delete(request, connection_id, eip_id, user_id):
    check_permissions(request, eip_id, 'candidate')
    user = get_object_or_404(User, pk=user_id)
    try:
        connection = user.profile.connections.get(pk=connection_id)
        connection.delete()
    except ObjectDoesNotExist:
        pass
    return redirect('backoffice.views.politician_profile_connection', eip_id=eip_id, user_id=user_id)
Beispiel #19
0
def politician_profile_political_delete(request, political_id, eip_id, user_id):
    check_permissions(request, eip_id, 'candidate')
    user = get_object_or_404(User, pk=user_id)
    try:
        political = user.profile.political.get(pk=political_id)
        political.delete()
    except ObjectDoesNotExist:
        pass
    return redirect('backoffice.views.politician_profile_political', eip_id=eip_id, user_id=user_id)
Beispiel #20
0
def politician_profile_link_delete(request, link_id, eip_id, user_id):
    check_permissions(request, eip_id, 'candidate')
    user = get_object_or_404(User, pk=user_id)
    try:
        link = user.profile.links.get(pk=link_id)
        link.delete()
    except ObjectDoesNotExist:
        pass
    return redirect('backoffice.views.politician_profile_link', eip_id=eip_id, user_id=user_id)
Beispiel #21
0
def politician_profile_appearance_delete(request, appearance_id, eip_id, user_id):
    check_permissions(request, eip_id, 'candidate')
    user = get_object_or_404(User, pk=user_id)
    try:
        appearance = user.profile.appearances.get(pk=appearance_id)
        appearance.delete()
    except ObjectDoesNotExist:
        pass
    return redirect('backoffice.views.politician_profile_appearance', eip_id=eip_id, user_id=user_id)
Beispiel #22
0
def party_contact_wizard_done(request, id):
    check_permissions(request, id, 'party_admin')
    eip = get_object_or_404(ElectionInstanceParty, pk=id)

    return render_to_response('backoffice/wizard/partycontact/done.html', {
        'eip': eip,
        'instance': eip.election_instance
    },
                              context_instance=RequestContext(request))
Beispiel #23
0
def politician_profile_setup_done(request, eip_id, user_id):
    check_permissions(request, eip_id, 'candidate')
    return render_to_response(
        'backoffice/wizard/politician_profile/done.html', {
            'user_id': user_id,
            'eip_id': eip_id,
            'questions': range(0, get_question_count(eip_id)),
        },
        context_instance=RequestContext(request))
Beispiel #24
0
def election_instance_statistics_view(request, id):
    """
    Show an overview of parties, and completeness of their respective candidate profiles
    """

    check_permissions(request, id, 'party_admin')
    instance = get_object_or_404(ElectionInstance, pk=id)

    return render_to_response('backoffice/election_instance_statistics_view.html', {'instance': instance}, context_instance=RequestContext(request))
Beispiel #25
0
def election_party_add_candidate(request, id, pos):
    check_permissions(request, id, 'party_admin')
    if Candidacy.objects.filter(election_party_instance__pk=id,
                                position=pos).count() != 0:
        request.user.message_set.create(message=ugettext(
            'U heeft al iemand op positie %(pos)s uitgenodigd.') %
                                        {'pos': pos})
        return redirect('bo.election_party_view', id=id)
    return AddCandidateWizard(id, pos)(request)
Beispiel #26
0
def election_instance_export_view(request, id):
    """
    Export a csv file containing an overview of parties for this election instance
    """

    check_permissions(request, id, 'council_admin')
    ei = get_object_or_404(ElectionInstance, pk=id)

    response = HttpResponse(mimetype='text/csv')
    response['Content-Disposition'] = 'attachment; filename=partijen.csv'
    writer = csv.writer(response)

    writer.writerow([
        'positie', 'partij', 'contactpersoon voornaam',
        'contactperson achternaam', 'contactpersoon-email', 'telefoon',
        'partij-email', ' ', 'kandidaat positie', 'kandidaat voornaam',
        'kandidaat achternaam', 'kandidaat email', 'kandidaat actief',
        'compleet?'
    ])

    for pidx, eip in ei.party_dict().items():
        if eip:
            contact = eip.party.contacts.all()[0]
            for cidx, candidate in eip.candidate_dict().items():
                row = [
                    pidx,
                    eip.party,
                    contact.profile.first_name.encode('utf-8'),
                    contact.profile.last_name.encode('utf-8'),
                    contact.email,
                    eip.party.telephone,
                    eip.party.email,
                    '',
                ]
                if candidate:
                    cu = candidate.candidate
                    # JB 20120828 Would prefer to use
                    # candidate.questions_incomplete(), but there's something wrong
                    # with that
                    questions = ei.questions.filter(
                        question_type__in=BACKOFFICE_QUESTION_TYPES)
                    if 0 < (questions.count() - candidate.answers.count()):
                        complete = "Incompleet"
                    else:
                        complete = "Compleet"

                    row = row + [
                        cidx,
                        cu.profile.first_name.encode('utf-8'),
                        cu.profile.last_name.encode('utf-8'), cu.email,
                        cu.is_active, complete
                    ]

                writer.writerow(row)

    return response
Beispiel #27
0
def politician_profile_appearance(request, eip_id, user_id):
    check_permissions(request, eip_id, 'candidate')
    user = get_object_or_404(User, pk=user_id)
    appearances = user.profile.appearances.all()
    return render_to_response('backoffice/wizard/politician_profile/appearances.html',
                              {'user_id': user_id, 'appearances': appearances,
                              'eip_id': eip_id,
                              'questions': range(0, get_question_count(eip_id)),
                              },
                              context_instance=RequestContext(request))
Beispiel #28
0
def answer_question(request, election_instance_party_id, user_id=None):
    '''
        AnswerQuestion - wizard.
        @param int election_instance_party_id - ElectionInstanceParty id
        @param int user_id User (Candidate=PoliticalProfile) id
    '''
    check_permissions(request, election_instance_party_id, 'candidate')
    return AnswerQuestion(
        election_instance_party_id=election_instance_party_id,
        user_id=user_id)(request)
Beispiel #29
0
def politician_profile_goal_delete(request, goal_id, eip_id, user_id):
    check_permissions(request, eip_id, 'candidate')
    user = get_object_or_404(User, pk=user_id)
    try:
        goal = user.profile.goals.get(pk=goal_id)
        goal.delete()
    except ObjectDoesNotExist:
        pass
    return redirect('backoffice.views.politician_profile_goal',
                    eip_id=eip_id,
                    user_id=user_id)
Beispiel #30
0
def council_edit(request, id):
    '''
    Council edit wizard.
    @param int election_instance_id
    @param int user_id

    Both parameters are required. It's obvious what they mean.
    '''
    check_permissions(request, id, 'council_admin')
    election_instance = get_object_or_404(ElectionInstance, pk=id)
    return CouncilEditWizard(election_instance)(request)
Beispiel #31
0
def politician_profile_link_delete(request, link_id, eip_id, user_id):
    check_permissions(request, eip_id, 'candidate')
    user = get_object_or_404(User, pk=user_id)
    try:
        link = user.profile.links.get(pk=link_id)
        link.delete()
    except ObjectDoesNotExist:
        pass
    return redirect('backoffice.views.politician_profile_link',
                    eip_id=eip_id,
                    user_id=user_id)
Beispiel #32
0
def politician_profile_interest_delete(request, interest_id, eip_id, user_id):
    check_permissions(request, eip_id, 'candidate')
    user = get_object_or_404(User, pk=user_id)
    try:
        interest = user.profile.interests.get(pk=interest_id)
        interest.delete()
    except ObjectDoesNotExist:
        pass
    return redirect('backoffice.views.politician_profile_interest',
                    eip_id=eip_id,
                    user_id=user_id)
Beispiel #33
0
def council_edit(request, id):
    '''
    Council edit wizard.
    @param int election_instance_id
    @param int user_id

    Both parameters are required. It's obvious what they mean.
    '''
    check_permissions(request, id, 'council_admin')
    election_instance = get_object_or_404(ElectionInstance, pk=id)
    return CouncilEditWizard(election_instance)(request)
Beispiel #34
0
def party_contact_wizard(request, id, user_id=None):
    check_permissions(request, id, 'party_admin')
    if user_id is None:
        if not (request.user.profile is None or request.user.profile.type != 'party_admin'):
            user_id = request.user.id
        elif request.user.is_staff or (request.user.profile and request.user.profile.type == 'council_admin'):
            user_id is None
        else:
            raise PermissionDeniedException()

    return PartyContactWizard(user_id=user_id, eip_id=id)(request)
Beispiel #35
0
def politician_profile_connection_delete(request, connection_id, eip_id,
                                         user_id):
    check_permissions(request, eip_id, 'candidate')
    user = get_object_or_404(User, pk=user_id)
    try:
        connection = user.profile.connections.get(pk=connection_id)
        connection.delete()
    except ObjectDoesNotExist:
        pass
    return redirect('backoffice.views.politician_profile_connection',
                    eip_id=eip_id,
                    user_id=user_id)
Beispiel #36
0
def election_instance_statistics_view(request, id):
    """
    Show an overview of parties, and completeness of their respective candidate profiles
    """

    check_permissions(request, id, 'party_admin')
    instance = get_object_or_404(ElectionInstance, pk=id)

    return render_to_response(
        'backoffice/election_instance_statistics_view.html',
        {'instance': instance},
        context_instance=RequestContext(request))
Beispiel #37
0
def politician_profile_appearance_delete(request, appearance_id, eip_id,
                                         user_id):
    check_permissions(request, eip_id, 'candidate')
    user = get_object_or_404(User, pk=user_id)
    try:
        appearance = user.profile.appearances.get(pk=appearance_id)
        appearance.delete()
    except ObjectDoesNotExist:
        pass
    return redirect('backoffice.views.politician_profile_appearance',
                    eip_id=eip_id,
                    user_id=user_id)
Beispiel #38
0
def politician_profile_appearance(request, eip_id, user_id):
    check_permissions(request, eip_id, 'candidate')
    user = get_object_or_404(User, pk=user_id)
    appearances = user.profile.appearances.all()
    return render_to_response(
        'backoffice/wizard/politician_profile/appearances.html', {
            'user_id': user_id,
            'appearances': appearances,
            'eip_id': eip_id,
            'questions': range(0, get_question_count(eip_id)),
        },
        context_instance=RequestContext(request))
Beispiel #39
0
def election_instance_view(request, id):
    check_permissions(request,id, 'council_admin')
    instance = get_object_or_404(ElectionInstance, pk=id)
    credit_left = instance.council.credit_left()
    pos_credit_left = credit_left
    if credit_left < 0:
        pos_credit_left = abs(credit_left)

    allocated = instance.council.credit - credit_left
    enough = True
    if credit_left < 0:
        enough = False

    return render_to_response('backoffice/election_instance_view.html', {'pos_credit_left':pos_credit_left,'credit_left':credit_left,'allocated':allocated,'enough':enough,'instance': instance}, context_instance=RequestContext(request))
Beispiel #40
0
def election_statistics_view(request, id):
    check_permissions(request, id, 'party_admin')

    from django.db import connection
    cursor = connection.cursor()
    cursor.execute(
        """
SELECT
	  g.name as partijNaam
	, f.list_length as lijstLengte
	, e.aantalKandidatenAangemaakt
	, e.aantalKandidatenAlEensIngelogd
	, e.aantalKandidatenKlaar
FROM
	 elections_electioninstanceparty f
	LEFT OUTER JOIN  (
			SELECT
				election_party_instance_id
				, COUNT(candidate_id) AS aantalKandidatenAangemaakt
				, SUM(is_active) AS aantalKandidatenAlEensIngelogd
				, SUM(heeftVragenIngevuld) AS aantalKandidatenKlaar
			FROM
				(
					SELECT
						  a.election_party_instance_id
						, a.candidate_id
						, b.is_active
						, d.heeftVragenIngevuld
					FROM
						elections_candidacy a
						LEFT OUTER JOIN (SELECT id, is_active FROM auth_user) b ON (b.id = a.candidate_id)
						LEFT OUTER JOIN (SELECT id, user_id FROM political_profiles_politicianprofile) c ON (a.candidate_id = c.user_id)
						LEFT OUTER JOIN (
							SELECT candidacy_id, COUNT(id) > 0 as heeftVragenIngevuld FROM elections_candidacy_answers GROUP BY candidacy_id
						) d ON (c.id = d.candidacy_id)
				) h
			GROUP BY
				election_party_instance_id
	) e  ON (e.election_party_instance_id = f.id)
	LEFT OUTER JOIN elections_party g ON (e.election_party_instance_id = g.id)
WHERE f.election_instance_id = %s
    """, [id])
    statistics = dictfetchall(cursor)
    eip = get_object_or_404(ElectionInstanceParty, pk=id)
    return render_to_response('backoffice/statistics.html', {
        'instance': eip.election_instance,
        'eip': eip,
        'statistics': statistics
    },
                              context_instance=RequestContext(request))
Beispiel #41
0
def party_contact_wizard(request, id, user_id=None):
    check_permissions(request, id, 'party_admin')
    if user_id is None:
        if not (request.user.profile is None
                or request.user.profile.type != 'party_admin'):
            user_id = request.user.id
        elif request.user.is_staff or (request.user.profile
                                       and request.user.profile.type
                                       == 'council_admin'):
            user_id is None
        else:
            raise PermissionDeniedException()

    return PartyContactWizard(user_id=user_id, eip_id=id)(request)
Beispiel #42
0
def election_setup(request, election_instance_id, user_id=None):
    '''
    Election setup wizard.
    @param int election_instance_id
    @param int user_id

    Both parameters are required. It's obvious what they mean.
    '''
    check_permissions(request,election_instance_id, 'council_admin')
    if user_id is None:
        user_id = request.user.id
        if not request.user.profile or request.user.profile.type != 'council_admin':
            raise PermissionDeniedException('You are not the correct user')

    return ElectionSetupWizard2(election_instance_id=election_instance_id, user_id=user_id)(request)
Beispiel #43
0
def election_instance_export_view(request, id):
    """
    Export a csv file containing an overview of parties for this election instance
    """

    check_permissions(request, id, 'council_admin')
    ei = get_object_or_404(ElectionInstance, pk=id)

    response = HttpResponse(mimetype='text/csv')
    response['Content-Disposition'] = 'attachment; filename=partijen.csv'
    writer = csv.writer(response)

    writer.writerow(['positie', 'partij', 'contactpersoon voornaam',
                     'contactperson achternaam', 'contactpersoon-email',
                     'telefoon', 'partij-email', ' ', 'kandidaat positie', 'kandidaat voornaam',
                     'kandidaat achternaam', 'kandidaat email', 'kandidaat actief', 'compleet?'])

    for pidx, eip in ei.party_dict().items():
        if eip:
            contact = eip.party.contacts.all()[0]
            for cidx, candidate in eip.candidate_dict().items():
		row = [pidx, eip.party,
			contact.profile.first_name.encode('utf-8'),
			contact.profile.last_name.encode('utf-8'),
			contact.email,
			eip.party.telephone, eip.party.email,'',]
		if candidate:
		    cu = candidate.candidate
		    # JB 20120828 Would prefer to use
                    # candidate.questions_incomplete(), but there's something wrong
                    # with that
                    questions = ei.questions.filter(question_type__in=BACKOFFICE_QUESTION_TYPES)
                    if 0 < (questions.count() - candidate.answers.count()):
                        complete = "Incompleet"
                    else:
                        complete = "Compleet"

		    row = row + [cidx,
				cu.profile.first_name.encode('utf-8'),
				cu.profile.last_name.encode('utf-8'),
                                 cu.email,
                                 cu.is_active,
                                 complete]


		writer.writerow(row)

    return response
Beispiel #44
0
def election_party_create(request, id, position):
    check_permissions(request,id, 'council_admin')
    instance = get_object_or_404(ElectionInstance, pk=id)
    #Fix for double submit exception
    try:
        eip = ElectionInstanceParty.objects.get(position=position, election_instance__id=id)
    except ElectionInstanceParty.DoesNotExist:
        eip = None

    if eip:
        if request.POST.get('skip', None) is not None:
            return redirect('bo.election_instance_view', id=id)
        return redirect('bo.election_party_edit', id=eip.id)

    wizard = AddElectionPartyWizard(instance, position)
    return wizard(request)
Beispiel #45
0
def politician_welcome(request, eip_id):
    check_permissions(request, eip_id, 'candidate')
    election_instance_party = get_object_or_404(ElectionInstanceParty, pk=eip_id)
    if not request.user.profile or request.user.profile.type != 'candidate':
        raise PermissionDeniedException('Geen toegang met de huidige account')
    else:
        user = get_object_or_404(election_instance_party.candidates, candidate=request.user).candidate

    return render_to_response('backoffice/wizard/politician_profile/welcome.html',
                              {'user_id': user.id,
                              'politician': user.profile,
                              'election_instance': election_instance_party.election_instance,
                              'eip_id': eip_id,
                              'questions': range(0, get_question_count(eip_id)),
                              },
                              context_instance=RequestContext(request))
Beispiel #46
0
def election_setup(request, election_instance_id, user_id=None):
    '''
    Election setup wizard.
    @param int election_instance_id
    @param int user_id

    Both parameters are required. It's obvious what they mean.
    '''
    check_permissions(request, election_instance_id, 'council_admin')
    if user_id is None:
        user_id = request.user.id
        if not request.user.profile or request.user.profile.type != 'council_admin':
            raise PermissionDeniedException('You are not the correct user')

    return ElectionSetupWizard2(election_instance_id=election_instance_id,
                                user_id=user_id)(request)
Beispiel #47
0
def election_party_create(request, id, position):
    check_permissions(request, id, 'council_admin')
    instance = get_object_or_404(ElectionInstance, pk=id)
    #Fix for double submit exception
    try:
        eip = ElectionInstanceParty.objects.get(position=position,
                                                election_instance__id=id)
    except ElectionInstanceParty.DoesNotExist:
        eip = None

    if eip:
        if request.POST.get('skip', None) is not None:
            return redirect('bo.election_instance_view', id=id)
        return redirect('bo.election_party_edit', id=eip.id)

    wizard = AddElectionPartyWizard(instance, position)
    return wizard(request)
Beispiel #48
0
def election_statistics_view(request, id):
    check_permissions(request,id, 'party_admin')

    from django.db import connection
    cursor = connection.cursor()
    cursor.execute("""
SELECT
	  g.name as partijNaam
	, f.list_length as lijstLengte
	, e.aantalKandidatenAangemaakt
	, e.aantalKandidatenAlEensIngelogd
	, e.aantalKandidatenKlaar
FROM
	 elections_electioninstanceparty f
	LEFT OUTER JOIN  (
			SELECT
				election_party_instance_id
				, COUNT(candidate_id) AS aantalKandidatenAangemaakt
				, SUM(is_active) AS aantalKandidatenAlEensIngelogd
				, SUM(heeftVragenIngevuld) AS aantalKandidatenKlaar
			FROM
				(
					SELECT
						  a.election_party_instance_id
						, a.candidate_id
						, b.is_active
						, d.heeftVragenIngevuld
					FROM
						elections_candidacy a
						LEFT OUTER JOIN (SELECT id, is_active FROM auth_user) b ON (b.id = a.candidate_id)
						LEFT OUTER JOIN (SELECT id, user_id FROM political_profiles_politicianprofile) c ON (a.candidate_id = c.user_id)
						LEFT OUTER JOIN (
							SELECT candidacy_id, COUNT(id) > 0 as heeftVragenIngevuld FROM elections_candidacy_answers GROUP BY candidacy_id
						) d ON (c.id = d.candidacy_id)
				) h
			GROUP BY
				election_party_instance_id
	) e  ON (e.election_party_instance_id = f.id)
	LEFT OUTER JOIN elections_party g ON (e.election_party_instance_id = g.id)
WHERE f.election_instance_id = %s
    """, [id]);
    statistics = dictfetchall(cursor)
    eip = get_object_or_404(ElectionInstanceParty, pk=id)
    return render_to_response('backoffice/statistics.html', {'instance': eip.election_instance, 'eip': eip, 'statistics': statistics}, context_instance=RequestContext(request))
Beispiel #49
0
def politician_welcome(request, eip_id):
    check_permissions(request, eip_id, 'candidate')
    election_instance_party = get_object_or_404(ElectionInstanceParty,
                                                pk=eip_id)
    if not request.user.profile or request.user.profile.type != 'candidate':
        raise PermissionDeniedException('Geen toegang met de huidige account')
    else:
        user = get_object_or_404(election_instance_party.candidates,
                                 candidate=request.user).candidate

    return render_to_response(
        'backoffice/wizard/politician_profile/welcome.html', {
            'user_id': user.id,
            'politician': user.profile,
            'election_instance': election_instance_party.election_instance,
            'eip_id': eip_id,
            'questions': range(0, get_question_count(eip_id)),
        },
        context_instance=RequestContext(request))
Beispiel #50
0
def csv_import_parties_step2(request, ei_id, error = False):
    check_permissions(request, ei_id, 'council_admin')
    if request.method == 'POST':
        form = CsvUploadForm(request.POST, request.FILES)
        if form.is_valid():
            #Save file in tmp dir
            file = form.files['file']
            filename = str(time.time()) + '.csv' #about 1000 unique filenames per second?
            destination = open(settings.TMP_ROOT + '/' + filename, 'wb+')

            for chunk in file.chunks():
                destination.write(chunk)
            destination.close()
            request.session['csv_party_filename'] = filename
            return redirect('bo.csv_parties_step3', ei_id = ei_id)

    else:
        form = CsvUploadForm()
    ei_obj = get_object_or_404(ElectionInstance, pk=ei_id)
    forms = dict({'csv_upload': form})
    return render_to_response('backoffice/csv_parties_2.html', {'forms':forms, 'error': error, 'ei_id': ei_id, 'instance':ei_obj}, context_instance=RequestContext(request))
Beispiel #51
0
def election_instance_view(request, id):
    check_permissions(request, id, 'council_admin')
    instance = get_object_or_404(ElectionInstance, pk=id)
    credit_left = instance.council.credit_left()
    pos_credit_left = credit_left
    if credit_left < 0:
        pos_credit_left = abs(credit_left)

    allocated = instance.council.credit - credit_left
    enough = True
    if credit_left < 0:
        enough = False

    return render_to_response('backoffice/election_instance_view.html', {
        'pos_credit_left': pos_credit_left,
        'credit_left': credit_left,
        'allocated': allocated,
        'enough': enough,
        'instance': instance
    },
                              context_instance=RequestContext(request))
Beispiel #52
0
def party_contact_wizard_done(request, id):
    check_permissions(request,id, 'party_admin')
    eip = get_object_or_404(ElectionInstanceParty, pk=id)

    return render_to_response('backoffice/wizard/partycontact/done.html', {'eip': eip, 'instance': eip.election_instance}, context_instance=RequestContext(request))
Beispiel #53
0
def csv_import_candidates_step1(request, ep_id):
    check_permissions(request, ep_id, 'party_admin')
    eip = get_object_or_404(ElectionInstanceParty, pk=ep_id)
    return render_to_response('backoffice/csv_candidates_1.html', {'ep_id':ep_id, 'instance':eip.election_instance}, context_instance=RequestContext(request))
Beispiel #54
0
def csv_import_parties_step1(request, ei_id):
    check_permissions(request, ei_id, 'council_admin')
    ei_obj = get_object_or_404(ElectionInstance, pk=ei_id)
    return render_to_response('backoffice/csv_parties_1.html', {'ei_id': ei_id, 'instance':ei_obj}, context_instance=RequestContext(request))
Beispiel #55
0
def csv_import_parties_step3(request, ei_id):
    check_permissions(request, ei_id, 'council_admin')
    ei_obj = get_object_or_404(ElectionInstance, pk=ei_id)
    try:
        lists = ElectionInstanceParty.objects.filter(election_instance=ei_obj).values_list('position', flat=True)
        parties = functions.get_parties_from_csv(request.session, lists)
    except:
        path = settings.TMP_ROOT + '/'
        if not os.path.isdir(path):
            os.remove(path + request.session['csv_party_filename'])
        request.session['csv_party_filename'] = ''
        return redirect('bo.csv_parties_step2', ei_id = ei_id, error='true')

    if request.method == 'POST':
        form = CsvConfirmForm(request.POST)
        if form.is_valid():

            council = ei_obj.council
            region = council.region
            level = council.level

            for party in parties.values():
                try:
                    #Store data
                    tmp_data = {
                        'first_name': party['contact_first_name'],
                        'middle_name': party['contact_middle_name'],
                        'last_name': party['contact_last_name'],
                        'email': party['contact_email'],
                        'gender': party['contact_gender'],
                    }
                    created, contact = create_profile('party_admin', tmp_data)

                    if contact is None:
                        continue

                    party_obj = Party.objects.create(
                        region = region,
                        level = level,
                        name = party['name'],
                        abbreviation = party['abbreviation'],
                    )

                    eip_obj = ElectionInstanceParty.objects.create(
                        election_instance = ei_obj,
                        party = party_obj,
                        position = unicode(party['list']),
                        list_length = 10, #TODO, maybe add in CSV
                    )

                    party_obj.contacts.add(contact.user)
                    party_obj.save()

                    #Create invitation
                    templates = profile_invite_email_templates('party_admin')
                    Invitation.create(
                        user_from = request.user,
                        user_to = contact.user,
                        view=reverse('bo.party_contact_wizard', kwargs={'id': eip_obj.pk}),
                        text='<p>U bent aangekomen op de beheerderpagina van Wiekiesjij. Om Wiekiesjij gereed te maken voor uw partij volgen er nu een aantal schermen waarin u informatie kunt achterlaten. Wanneer deze informatie is ingevuld zullen we overgaan tot het uitnodigen van de kandidaten van uw partij.</p><p>We beginnen met het instellen van een wachtwoord voor Wiekiesjij door op <strong>Accepteer uitnodiging</strong> te klikken. Heeft u al eens eerder gebruik gemaakt van Wiekiesjij, drukt u dan op <strong>Ik heb al een account</strong>.</p><p>Om het gereedmaken van Wiekiesjij zo gemakkelijk mogelijk te laten verlopen hebben we een snelle start [link] handleiding [/link] beschikbaar gesteld die u kunt raadplegen.</p>',
                        subject = ugettext('Invitation Wiekiesjij'),
                        html_template = templates['html'],
                        plain_template = templates['plain'],
                    )

                    max_list = int(party['list'])
                    if max_list > ei_obj.num_lists:
                        ei_obj.num_lists = max_list
                        ei_obj.save()

                except:
                    transaction.rollback()
                    raise
                else:
                    transaction.commit()

            os.remove(settings.TMP_ROOT + '/' + request.session['csv_party_filename'])
            request.session['csv_party_filename'] = ''
            return redirect('bo.election_instance_view', id=ei_id)
    else:
        form = CsvConfirmForm()
    ei_obj = get_object_or_404(ElectionInstance, id=ei_id)
    forms = dict({'csv_confirm': form})
    return render_to_response('backoffice/csv_parties_3.html', {'parties':parties, 'forms':forms, 'ei_id': ei_id, 'instance':ei_obj}, context_instance=RequestContext(request))
Beispiel #56
0
def politician_profile_political_wizard(request, eip_id, user_id, political_id=None):
    check_permissions(request, eip_id, 'candidate')
    return PoliticianProfilePoliticalWizard(user_id=user_id, eip_id=eip_id, political_id=political_id)(request)
Beispiel #57
0
def politician_profile_appearance_wizard(request, eip_id, user_id, appearance_id=None):
    check_permissions(request, eip_id, 'candidate')
    return PoliticianProfileAppearanceWizard(user_id=user_id, eip_id=eip_id, appearance_id=appearance_id)(request)
Beispiel #58
0
def politician_profile_link_wizard(request, eip_id, user_id, link_id=None):
    check_permissions(request, eip_id, 'candidate')
    return PoliticianProfileLinkWizard(user_id=user_id, eip_id=eip_id, link_id=link_id)(request)
Beispiel #59
0
def politician_profile_connection_wizard(request, eip_id, user_id, connection_id=None):
    check_permissions(request, eip_id, 'candidate')
    return PoliticianProfileConnectionWizard(user_id=user_id, eip_id=eip_id, connection_id=connection_id)(request)
Beispiel #60
0
def csv_import_candidates_step3(request, ep_id):
    check_permissions(request, ep_id, 'party_admin')
    eip_obj = get_object_or_404(ElectionInstanceParty, pk=ep_id)
    try:
        positions = Candidacy.objects.filter(election_party_instance=eip_obj).values_list('position', flat=True)
        candidate_emails = Candidacy.objects.filter(election_party_instance=eip_obj).values_list('candidate__email', flat=True)
        candidates = functions.get_candidates_from_csv(request.session, positions, candidate_emails)
    except:

        path = settings.TMP_ROOT + '/'
        if not os.path.isdir(path):
            os.remove(path + request.session['csv_candidate_filename'])
        request.session['csv_candidate_filename'] = ''
        return redirect('bo.csv_candidates_step2', ep_id=ep_id, error='true')

    if request.method == 'POST':
        form = CsvConfirmForm(request.POST)
        if form.is_valid():
            for candidate in candidates.values():
                try:
                    #Store data
                    tmp_data = {
                        'first_name': candidate['first_name'],
                        'middle_name': candidate['middle_name'],
                        'last_name': candidate['last_name'],
                        'initials': candidate['initials'],
                        'email': candidate['email'],
                        'gender': candidate['gender'],
                    }
                    created, candidate_obj = create_profile('candidate', tmp_data)

                    if candidate_obj is None:
                        continue

                    #Link candidate to party
                    Candidacy.objects.create(
                        election_party_instance = eip_obj,
                        candidate = candidate_obj.user,
                        position = candidate['position'],
                    )

                    #Create invitation TODO: view and text etc.
                    templates = profile_invite_email_templates('candidate')
                    Invitation.create(
                        user_from = request.user,
                        user_to = candidate_obj.user,
                        view = reverse('bo.politician_welcome', kwargs={'eip_id': eip_obj.id}),
                        text = '<p>Wiekiesjij is de voorkeurstemhulp van Nederland. Middels het beantwoorden een vijftiental vragen zullen bezoekers gekoppeld worden aan hun favoriete kandidaten. Middels de informatie die u hier invult zullen wij daarnaast in staat zijn om de bezoekers de mogelijkheid te bieden om te browsen tussen alle kandidaten, de partijen en is het mogelijk om de uitgebreide profielen van alle politici te bekijken.</p>',
                        subject = ugettext('Invitation Wiekiesjij'),
                        html_template = templates['html'],
                        plain_template = templates['plain'],
                    )

                    position = int(candidate['position'])
                    if position > eip_obj.list_length:
                        eip_obj.list_length = position
                        eip_obj.save()

                except:
                    transaction.rollback()
                    raise

            transaction.commit()
            os.remove(settings.TMP_ROOT + '/' + request.session['csv_candidate_filename'])
            request.session['csv_candidate_filename'] = ''
            return redirect('bo.election_party_view', id=ep_id)
    else:
        form = CsvConfirmForm()
    eip = get_object_or_404(ElectionInstanceParty, pk=ep_id)
    forms = dict({'csv_confirm': form})
    return render_to_response('backoffice/csv_candidates_3.html', {'candidates':candidates, 'forms':forms, 'ep_id':ep_id, 'instance':eip.election_instance}, context_instance=RequestContext(request))