def done(self, request, form_dict): try: for path, forms in form_dict.iteritems(): for name, form in forms.iteritems(): if name == 'initial_ep': #create election instance self.ep_data = form.cleaned_data else: if not hasattr(self, 'profile_data'): self.profile_data = {} cleaned_data = form.cleaned_data for key, value in cleaned_data['name'].iteritems(): cleaned_data[key] = value del cleaned_data['name'] self.profile_data.update(cleaned_data) party = Party.objects.create( region=self.election_instance.council.region, level=self.election_instance.council.level, name=self.ep_data['name'], abbreviation=self.ep_data['abbreviation']) eip = ElectionInstanceParty.objects.create( party=party, election_instance=self.election_instance, position=self.ep_data['position']) # list_length=self.ep_data['list_length']) #Create the profile created, profile = create_profile('party_admin', self.profile_data) #Link the profile to the party party.contacts.add(profile.user) #Create the invitation templates = profile_invite_email_templates('party_admin') #TODO: change invitation text based on created Invitation.create( user_from=request.user, user_to=profile.user, view=reverse('bo.party_contact_wizard', kwargs={'id': eip.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'], ) except: transaction.rollback() raise else: transaction.commit() if request.POST.get('skip', None) is not None: return redirect('bo.election_instance_view', id=self.election_instance.id) return redirect('bo.election_party_edit', id=eip.id)
def done(self, request, form_dict): try: for path, forms in form_dict.iteritems(): for name, form in forms.iteritems(): if name == 'initial_ep': #create election instance self.ep_data = form.cleaned_data else: if not hasattr(self, 'profile_data'): self.profile_data = {} cleaned_data = form.cleaned_data for key, value in cleaned_data['name'].iteritems(): cleaned_data[key] = value del cleaned_data['name'] self.profile_data.update(cleaned_data) party = Party.objects.create( region = self.election_instance.council.region, level = self.election_instance.council.level, name = self.ep_data['name'], abbreviation = self.ep_data['abbreviation']) eip = ElectionInstanceParty.objects.create( party=party, election_instance=self.election_instance, position=self.ep_data['position']) # list_length=self.ep_data['list_length']) #Create the profile created, profile = create_profile('party_admin', self.profile_data) #Link the profile to the party party.contacts.add(profile.user) #Create the invitation templates = profile_invite_email_templates('party_admin') #TODO: change invitation text based on created Invitation.create( user_from=request.user, user_to=profile.user, view=reverse('bo.party_contact_wizard', kwargs={'id': eip.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'], ) except: transaction.rollback() raise else: transaction.commit() if request.POST.get('skip', None) is not None: return redirect('bo.election_instance_view', id=self.election_instance.id) return redirect('bo.election_party_edit', id=eip.id)
def done(self, request, form_dict): """ Called after all steps are done """ try: # This needs to be easier !?! for path, forms in form_dict.iteritems(): for name, form in forms.iteritems(): if name == 'initial_ei': self.ei_data = form.cleaned_data else: if not hasattr(self, 'profile_data'): self.profile_data = {} cleaned_data = form.cleaned_data for key, value in cleaned_data['name'].iteritems(): cleaned_data[key] = value del cleaned_data['name'] self.profile_data.update(cleaned_data) #Get the election event ee = ElectionEvent.objects.get(pk=settings.ELECTION_EVENT_ID) #Create the council council = Council.objects.create( name=ugettext('Council of %(name)s') % {'name': self.ei_data['name']}, region=self.ei_data['region'], level=self.ei_data['level'] ) #Create the election instance ei = ElectionInstance.objects.create( name=self.ei_data['name'], council=council, election_event=ee, num_lists=1, start_date=datetime.datetime.now(), end_date=datetime.datetime.now(), wizard_start_date=datetime.datetime.now(), ) #Create the profile created, profile = create_profile('council_admin', self.profile_data) #Link the profile to the council council.chanceries.add(profile.user) ei.modules.clear() ei.modules = self.ei_data['modules'] questionset = self.ei_data['question_set'] if questionset: for qsq in questionset.questionsetquestion_set.order_by('position'): ElectionInstanceQuestion.objects.create( election_instance = ei, position = qsq.position, question=qsq.question, locked=True, ) #Create the invitation templates = profile_invite_email_templates('council_admin') #TODO: Change invitation text based on created or not Invitation.create( user_from=request.user, user_to=profile.user, view=reverse('bo.election_setup', kwargs={'election_instance_id': ei.pk}), text="<p>U bent aangekomen op de beheerderpagina van Wiekiesjij. Om Wiekiesjij gereed te maken voor uw verkiezingen volgen er nu een aantal schermen waarin u informatie kunt achterlaten. Wanneer deze informatie is ingevuld zullen we overgaan tot het uitnodigen van de partijen die zullen participeren in deze verkiezingen.</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'], ) except Exception: transaction.rollback() raise else: transaction.commit() if request.POST.get('skip', None) is not None: return redirect('bo.election_event') return redirect('bo.edit_council', id=ei.id)
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))
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))
def done(self, request, form_dict): try: for path, forms in form_dict.iteritems(): for name, form in forms.iteritems(): if name == 'initial_form': self.form_data = form.cleaned_data else: if not hasattr(self, 'form_data'): self.form_data = {} self.form_data.update(form.cleaned_data) #Store data tmp_data = { 'first_name': self.form_data['name']['first_name'], 'middle_name': self.form_data['name']['middle_name'], 'last_name': self.form_data['name']['last_name'], 'email': self.form_data['email'], 'gender': self.form_data['gender'], } created, self.candidate = create_profile('candidate', tmp_data) # If it's an existing user and (s)he is already in this party as candidate we won't allow it if not created and Candidacy.objects.filter( election_party_instance__pk=self. election_instance_party_id, candidate=self.candidate.user).count() != 0: request.user.message_set.create(message=ugettext( 'Elke kandidaat van een partij moet een uniek e-mail adres hebben.' )) #We need to commit the transaction, even if we didn't do anything, or the transaction manager will throw an error transaction.commit() return redirect('bo.election_party_view', self.election_instance_party_id) #Link candidate to party candidacy = Candidacy( election_party_instance=get_object_or_404( ElectionInstanceParty, pk=self.election_instance_party_id), candidate=self.candidate.user, position=self.position, ) candidacy.save() #Create invitation templates = profile_invite_email_templates('candidate') #TODO: change invitation text based on created Invitation.create( user_from=request.user, user_to=self.candidate.user, view=reverse('bo.politician_welcome', kwargs={'eip_id': self.eip.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'], ) except Exception: transaction.rollback() raise else: transaction.commit() return redirect('bo.election_party_view', self.election_instance_party_id)
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))
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))
def done(self, request, form_dict): try: for path, forms in form_dict.iteritems(): for name, form in forms.iteritems(): if name == 'initial_form': self.form_data = form.cleaned_data else: if not hasattr(self, 'form_data'): self.form_data = {} self.form_data.update(form.cleaned_data) #Store data tmp_data = { 'first_name': self.form_data['name']['first_name'], 'middle_name': self.form_data['name']['middle_name'], 'last_name': self.form_data['name']['last_name'], 'email': self.form_data['email'], 'gender': self.form_data['gender'], } created, self.candidate = create_profile('candidate', tmp_data) # If it's an existing user and (s)he is already in this party as candidate we won't allow it if not created and Candidacy.objects.filter(election_party_instance__pk=self.election_instance_party_id, candidate=self.candidate.user).count() != 0: request.user.message_set.create(message=ugettext('Elke kandidaat van een partij moet een uniek e-mail adres hebben.')) #We need to commit the transaction, even if we didn't do anything, or the transaction manager will throw an error transaction.commit() return redirect('bo.election_party_view', self.election_instance_party_id) #Link candidate to party candidacy = Candidacy( election_party_instance = get_object_or_404(ElectionInstanceParty, pk=self.election_instance_party_id), candidate = self.candidate.user, position = self.position, ) candidacy.save() #Create invitation templates = profile_invite_email_templates('candidate') #TODO: change invitation text based on created Invitation.create( user_from = request.user, user_to = self.candidate.user, view = reverse('bo.politician_welcome', kwargs={'eip_id': self.eip.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'], ) except Exception: transaction.rollback() raise else: transaction.commit() return redirect('bo.election_party_view', self.election_instance_party_id)