def ver_candidatos(request, tipo): if not is_modulo_activo('votacion_%s' % tipo) and \ not is_modulo_activo('ver_candidaturas_%s' % tipo) and \ not request.user.is_superuser: return HttpResponseRedirect('/') candidatos = m.Candidato.objects.filter(tipo=tipo) candidatos_valida = candidatos.filter(valida=True).order_by( 'circunscripcion', 'fecha_alta') ccaa = [(k, list(v)) for (k, v) in groupby(candidatos_valida, lambda x: x.circunscripcion)] c = dict(ccaa=ccaa) return render(request, 'ver_candidatos.html', c)
def votacion(request, tipo, clase_votantes): if not is_modulo_activo('votacion_%s' % tipo) and not request.user.is_superuser: return HttpResponseRedirect('/') if request.method!="POST": return render(request, 'login.html', dict(tipo=tipo)) clave=request.POST['clave'] try: socio=clase_votantes.objects.get(clave=clave) except clase_votantes.DoesNotExist: mensaje = u'Verifique el identificador, por favor' messages.add_message(request, messages.INFO, mensaje) return render(request, 'login.html', dict(tipo=tipo)) puedeVotar, msg = socio.puedeVotar(True) if not puedeVotar: messages.add_message(request, messages.WARNING, u'No puede votar: %s' % msg) return HttpResponseRedirect('/') request.session['usu%s' % tipo]=socio.pk if tipo == 25: return HttpResponseRedirect('/papeleta_%s/%s/' % (tipo, 18)) if tipo == 50 and socio.circunscripcion.pk!=18: return HttpResponseRedirect('/papeleta_%s/%s/' % (tipo, socio.circunscripcion.pk)) else: return render(request, 'selector_usu.html', dict(tipo=tipo, ccaa=m.Circunscripcion.objects.all()))
def votacion(request, tipo, clase_votantes): if not is_modulo_activo( 'votacion_%s' % tipo) and not request.user.is_superuser: return HttpResponseRedirect('/') if request.method != "POST": return render(request, 'login.html', dict(tipo=tipo)) clave = request.POST['clave'] try: socio = clase_votantes.objects.get(clave=clave) except clase_votantes.DoesNotExist: mensaje = u'Verifique el identificador, por favor' messages.add_message(request, messages.INFO, mensaje) return render(request, 'login.html', dict(tipo=tipo)) puedeVotar, msg = socio.puedeVotar(True) if not puedeVotar: messages.add_message(request, messages.WARNING, u'No puede votar: %s' % msg) return HttpResponseRedirect('/') request.session['usu%s' % tipo] = socio.pk if tipo == 15: return HttpResponseRedirect('/papeleta_%s/%s/' % (tipo, 18)) if tipo == 60 and socio.circunscripcion.pk != 18: return HttpResponseRedirect('/papeleta_%s/%s/' % (tipo, socio.circunscripcion.pk)) else: return render(request, 'selector_usu.html', dict(tipo=tipo, ccaa=m.Circunscripcion.objects.all()))
def envia_clave(request, tipo, clase_votantes): MSG_DIRECCION_KO = u'Disculpa, pero esa dirección no está registrada como votante. Por favor, vota por correo postal.' if not is_modulo_activo('votacion_%s' % tipo) and not request.user.is_superuser: return HttpResponseRedirect('/') if request.method!="POST": return HttpResponseRedirect('/') email = request.POST.get('email') if not email: return HttpResponseRedirect('/votacion_%s/' % tipo) socios = clase_votantes.objects.filter(correo_electronico=email) level = messages.WARNING if not socios: msg = MSG_DIRECCION_KO elif len(socios) > 1: msg = u'Disculpa, pero esa dirección corresponde a más de una persona. Por favor, vota por correo postal.' else: socio = socios[0] if socio.clave or socio.puedeVotar(True)[0]: email_text = u'Estimado/a %s %s\r\nÉsta es tu clave: %s\r\nPuedes votar en https://elecciones.greenpeace.es' % (socio.nombre, socio.apellidos, socio.get_clave()) send_mail(u"[Greenpeace España/Elecciones] Clave para votar ", email_text, '*****@*****.**', [socio.correo_electronico], fail_silently= False) msg = u'Por favor, verifica tu buzón de correo. En breve te llegará un mensaje con la clave para votar.' level = messages.SUCCESS else: msg = MSG_DIRECCION_KO messages.add_message(request, level, msg) return HttpResponseRedirect('/votacion_%s/' % tipo)
def alegar(request, num): if not is_modulo_activo('alegaciones_50') and not is_modulo_activo('alegaciones_25') and not request.user.is_superuser: return HttpResponseRedirect('/') candidato = m.Candidato.objects.get(pk=num) if request.method == 'POST': form = AlegacionForm(request.POST) if form.is_valid(): candidato.alegaciones += '\n' + form.cleaned_data['alegacion'] candidato.save() return HttpResponseRedirect('/alegacion_ok/') else: form=form = AlegacionForm() data = dict( candidato=candidato, form=form, ) return render(request, 'formulario_alegacion.html', data)
def resultado(request, tipo, ccaa): modulo = is_modulo_activo('resultado_%s' % tipo) if not modulo and not request.user.is_superuser: return HttpResponseRedirect('/') elif not modulo: modulo = Plazo.objects.filter(modulo = 'resultado_%s' % tipo) c = dict(ccaa=ccaa, modulo=modulo[0]) return render(request, 'resultados.html', c)
def resultado(request, tipo, ccaa): modulo = is_modulo_activo('resultado_%s' % tipo) if not modulo and not request.user.is_superuser: return HttpResponseRedirect('/') elif not modulo: modulo = Plazo.objects.filter(modulo='resultado_%s' % tipo) c = dict(ccaa=ccaa, modulo=modulo[0]) return render(request, 'resultados.html', c)
def ver_candidatos(request, tipo): if not is_modulo_activo('votacion_%s' % tipo) and not request.user.is_superuser: return HttpResponseRedirect('/') candidatos = m.Candidato.objects.filter(tipo=tipo) candidatos_valida = candidatos.filter(valida=True).order_by('circunscripcion', 'fecha_alta') ccaa = [(k, list(v)) for (k, v) in groupby(candidatos_valida, lambda x:x.circunscripcion)] c = dict(ccaa=ccaa) return render(request, 'ver_candidatos.html', c)
def editar_candidato(request, tipo, id_candidato): if (not is_modulo_activo('comision_%s' % tipo) and not request.user.is_superuser): return HttpResponseRedirect('/') candidato = Candidato.objects.get(pk=id_candidato) assert candidato.tipo == tipo if request.method == 'POST': form = AdminCandidatoForm(request.POST, request.FILES, instance=candidato) if form.is_valid(): form.save() return HttpResponseRedirect('/comision_%s/' % tipo) info = dict(info='Se han detectado errores') else: if candidato.valida_sistema: info = dict(info='Ya validado') else: info = mv.getContact(candidato.correo_e, candidato.num_dni) if info: if info['Income_ultimos_12_meses_CONSEJO__c'] >= settings.MIN_INCOME: candidato.corriente = True candidato.save() if info['Birthdate']: candidato.fecha_nacimiento = parse_date(info['Birthdate']) if candidato.fecha_nacimiento <= settings.FECHA_MAXIMA_NACIMIENTO: candidato.mayor_edad = True candidato.save() if info['Fecha_de_antiguedad__c']: candidato.fecha_alta = parse_date( info['Fecha_de_antiguedad__c']) candidato.antiguedad_3a = candidato.fecha_alta <= settings.FECHA_MAXIMA_ANTIGUEDAD candidato.save() if tipo == 15: candidato.circunscripcion_correcta = True elif info['MailingPostalCode']: prefijo = info['MailingPostalCode'][:2] circunscripcion_por_cp = Provincia.objects.get( prefijo_cp=prefijo).circunscripcion candidato.circunscripcion_correcta = candidato.circunscripcion == circunscripcion_por_cp candidato.save() candidato.valida_sistema = candidato.corriente == True \ and candidato.circunscripcion_correcta == True\ and candidato.mayor_edad == True\ and candidato.antiguedad_3a == True candidato.save() else: info = dict(info='Sin resultados') form = form = AdminCandidatoForm(instance=candidato) data = dict( candidato=candidato, form=form, info=info, ) return render(request, 'editar_candidato.html', data)
def alegar(request, num): if not is_modulo_activo('alegaciones_60') and not is_modulo_activo( 'alegaciones_15') and not request.user.is_superuser: return HttpResponseRedirect('/') candidato = m.Candidato.objects.get(pk=num) if request.method == 'POST': form = AlegacionForm(request.POST) if form.is_valid(): candidato.alegaciones += '\n' + form.cleaned_data['alegacion'] candidato.save() return HttpResponseRedirect('/alegacion_ok/') else: form = form = AlegacionForm() data = dict( candidato=candidato, form=form, ) return render(request, 'formulario_alegacion.html', data)
def registrar_usu(request, ca, tipo, clase_votantes): if not is_modulo_activo( 'votacion_%s' % tipo) and not request.user.is_superuser: return HttpResponseRedirect('/') if request.method == "GET": return HttpResponseRedirect('/') id_usu = request.session.get('usu%s' % tipo) if not id_usu: return HttpResponseRedirect("/") circ = m.Circunscripcion.objects.get(pk=ca) usu = clase_votantes.objects.get(pk=id_usu) if tipo == 60: assert usu.circunscripcion_id == 18 or circ.pk == usu.circunscripcion_id, 'Se está votando por una circ no autorizada' puedeVotar, msg = usu.puedeVotar(True) if not puedeVotar: messages.add_message(request, messages.WARNING, 'No puede votar: ' + msg) return HttpResponseRedirect('/') usu.fecha_voto = datetime.datetime.now() usu.save() papeleta = m.Papeleta( circunscripcion=circ, usuario_registro=request.user.is_authenticated() and request.user or None) aspas = [int(v) for k, v in request.POST.items() if k.startswith('cdto')] if tipo == 60: max_candidatos = circ.puestos else: max_candidatos = settings.MAX_CANDIDATOS_15 assert len( aspas ) <= max_candidatos, u'No se puede votar a más candidatos que puestos' if request.POST.get('nulo'): assert not aspas, u'Aspas y nulo' papeleta.voto_nulo = True papeleta.voto_blanco = False elif request.POST.get('blanco'): assert not aspas, u'Aspas y blanco' papeleta.voto_blanco = True papeleta.voto_nulo = False else: assert aspas, u'Ni aspas ni blanco' papeleta.voto_blanco = False papeleta.voto_nulo = False papeleta.save() for aspa in aspas: candidato = m.Candidato.objects.get(pk=aspa) #Sólo en caso de hostilidad assert candidato.circunscripcion.pk == circ.pk, u'Se está votando por candidatos de otra papeleta' voto = m.Voto(candidato=candidato, papeleta=papeleta) voto.save() msg = u'<span style="font-size:300%;color:green;">Voto registrado</span>' messages.add_message(request, messages.SUCCESS, msg) return HttpResponseRedirect('/')
def comision(request, tipo): if (not is_modulo_activo('comision_%s' % tipo) and not request.user.is_superuser): return HttpResponseRedirect('/') candidatos = m.Candidato.objects.filter(tipo=tipo) candidatos_valida = candidatos.filter(valida=True).order_by('circunscripcion', 'fecha_alta') candidatos_novalida = candidatos.filter(valida=False).order_by('apellidos', 'nombre') candidatos_pendiente = candidatos.filter(valida__isnull=True).order_by('apellidos', 'nombre') ccaa = [(k, list(v)) for (k, v) in groupby(candidatos_valida, lambda x:x.circunscripcion)] c = dict(ccaa=ccaa, candidatos_novalida=candidatos_novalida, candidatos_pendiente=candidatos_pendiente) return render(request, 'admin_candidatos.html', c)
def alegaciones(request, tipo): if not is_modulo_activo( 'alegaciones_%s' % tipo) and not request.user.is_superuser: return HttpResponseRedirect('/') candidatos = m.Candidato.objects.filter(tipo=tipo) candidatos_valida = candidatos.filter(valida=True).order_by( 'circunscripcion', 'fecha_alta') candidatos_novalida = candidatos.exclude(valida=True).order_by( 'apellidos', 'nombre') ccaa = [(k, list(v)) for (k, v) in groupby(candidatos_valida, lambda x: x.circunscripcion)] c = dict(ccaa=ccaa, candidatos_novalida=candidatos_novalida) return render(request, 'alegaciones.html', c)
def registrar_usu(request,ca, tipo, clase_votantes): if not is_modulo_activo('votacion_%s' % tipo) and not request.user.is_superuser: return HttpResponseRedirect('/') if request.method=="GET": return HttpResponseRedirect('/') id_usu=request.session.get('usu%s' % tipo) if not id_usu: return HttpResponseRedirect("/") circ=m.Circunscripcion.objects.get(pk=ca) usu= clase_votantes.objects.get(pk=id_usu) if tipo == 50: assert usu.circunscripcion_id==18 or circ.pk==usu.circunscripcion_id, 'Se está votando por una circ no autorizada' puedeVotar, msg = usu.puedeVotar(True) if not puedeVotar: messages.add_message(request, messages.WARN, 'No puede votar: '+msg) return HttpResponseRedirect('/') usu.fecha_voto=datetime.datetime.now() usu.save() papeleta=m.Papeleta(circunscripcion=circ, usuario_registro=request.user.is_authenticated() and request.user or None) aspas=[int(v) for k,v in request.POST.items() if k.startswith('cdto')] if tipo == 50: max_candidatos = circ.puestos else: max_candidatos = settings.MAX_CANDIDATOS_25 assert len(aspas)<=max_candidatos, u'No se puede votar a más candidatos que puestos' if request.POST.get('nulo'): assert not aspas, u'Aspas y nulo' papeleta.voto_nulo=True papeleta.voto_blanco=False elif request.POST.get('blanco'): assert not aspas, u'Aspas y blanco' papeleta.voto_blanco=True papeleta.voto_nulo=False else: assert aspas, u'Ni aspas ni blanco' papeleta.voto_blanco = False papeleta.voto_nulo = False papeleta.save() for aspa in aspas: candidato=m.Candidato.objects.get(pk=aspa) #Sólo en caso de hostilidad assert candidato.circunscripcion.pk==circ.pk, u'Se está votando por candidatos de otra papeleta' voto=m.Voto(candidato=candidato, papeleta=papeleta) voto.save() msg = u'<span style="font-size:300%;color:green;">Voto registrado</span>' messages.add_message(request, messages.SUCCESS, msg) return HttpResponseRedirect('/')
def registrar_admin(request, ca, tipo): if not is_modulo_activo( 'recuento_%s' % tipo) and not request.user.is_superuser: return HttpResponseRedirect('/') if request.method == "GET": return HttpResponseRedirect('/') id_usu = request.session.get('usu%s' % tipo) if not request.user.is_authenticated() and not id_usu: return HttpResponseRedirect("../..") circ = m.Circunscripcion.objects.get(pk=ca) papeleta = m.Papeleta( circunscripcion=circ, usuario_registro=request.user.is_authenticated() and request.user or None) aspas = [int(v) for k, v in request.POST.items() if k.startswith('cdto')] if tipo == 60: assert len( aspas ) <= circ.puestos, u'No se puede votar a más candidatos que puestos' else: assert len(aspas) <= settings.MAX_CANDIDATOS_15 if request.POST.get('nulo'): assert not aspas, u'Aspas y nulo' papeleta.voto_nulo = True papeleta.voto_blanco = False elif request.POST.get('blanco'): assert not aspas, u'Aspas y blanco' papeleta.voto_blanco = True papeleta.voto_nulo = False else: assert aspas, u'Ni aspas ni blanco' papeleta.voto_blanco = False papeleta.voto_nulo = False papeleta.save() for aspa in aspas: candidato = m.Candidato.objects.get(pk=aspa) #Sólo en caso de hostilidad assert candidato.circunscripcion.pk == circ.pk, u'Se está votando por candidatos de otra papeleta' papeleta.voto_set.create(candidato=candidato) if not id_usu and request.user.is_authenticated(): return HttpResponseRedirect('./../') msg = u'<span style="font-size:300%;color:green;">Voto registrado</span>' messages.add_message(request, messages.SUCCESS, msg) return HttpResponseRedirect('.')
def editar_candidato(request, tipo, id_candidato): if (not is_modulo_activo('comision_%s' % tipo) and not request.user.is_superuser): return HttpResponseRedirect('/') candidato = Candidato.objects.get(pk=id_candidato) assert candidato.tipo == tipo if request.method == 'POST': form = AdminCandidatoForm(request.POST, request.FILES, instance=candidato) if form.is_valid(): form.save() return HttpResponseRedirect('/comision_%s/' % tipo) else: form=form = AdminCandidatoForm(instance=candidato) data = dict( candidato=candidato, form=form, ) return render(request, 'editar_candidato.html', data)
def registrar_admin(request, ca, tipo): if not is_modulo_activo('recuento_%s' % tipo) and not request.user.is_superuser: return HttpResponseRedirect('/') if request.method=="GET": return HttpResponseRedirect('/') id_usu=request.session.get('usu%s' % tipo) if not request.user.is_authenticated() and not id_usu: return HttpResponseRedirect("../..") circ=m.Circunscripcion.objects.get(pk=ca) papeleta=m.Papeleta(circunscripcion=circ, usuario_registro=request.user.is_authenticated() and request.user or None) aspas=[int(v) for k,v in request.POST.items() if k.startswith('cdto')] if tipo == 50: assert len(aspas) <= circ.puestos, u'No se puede votar a más candidatos que puestos' else: assert len(aspas) <= settings.MAX_CANDIDATOS_25 if request.POST.get('nulo'): assert not aspas, u'Aspas y nulo' papeleta.voto_nulo=True papeleta.voto_blanco=False elif request.POST.get('blanco'): assert not aspas, u'Aspas y blanco' papeleta.voto_blanco=True papeleta.voto_nulo=False else: assert aspas, u'Ni aspas ni blanco' papeleta.voto_blanco = False papeleta.voto_nulo = False papeleta.save() for aspa in aspas: candidato=m.Candidato.objects.get(pk=aspa) #Sólo en caso de hostilidad assert candidato.circunscripcion.pk==circ.pk, u'Se está votando por candidatos de otra papeleta' voto=m.Voto(candidato=candidato) papeleta.voto_set.add(voto) voto.save() if not id_usu and request.user.is_authenticated(): return HttpResponseRedirect('./../') msg = u'<span style="font-size:300%;color:green;">Voto registrado</span>' messages.add_message(request, messages.SUCCESS, msg) return HttpResponseRedirect('.')
def papeleta_usu(request, ca, tipo, clase_votantes): if not is_modulo_activo('votacion_%s' % tipo) and not request.user.is_superuser: return HttpResponseRedirect('/') usu=request.session.get('usu%s' % tipo) if not usu: return HttpResponseRedirect("/") socio=clase_votantes.objects.get(pk=usu) puedeVotar, msg = socio.puedeVotar(True) if not puedeVotar: mensaje=u'No puede votar en esta web; intente votar por correo postal: '+msg messages.add_message(request, messages.SUCCESS, mensaje) return render(request, 'mensaje_pub.html') circ=m.Circunscripcion.objects.get(pk=ca) plantilla = 'papeleta_pub.html' if tipo == 50: max_candidatos = circ.puestos assert socio.circunscripcion.pk == 18 or socio.circunscripcion == circ else: max_candidatos = settings.MAX_CANDIDATOS_25 return render(request, plantilla, locals())
def presentacion(request, tipo): if not is_modulo_activo('presentacion_%s' % tipo) and not request.user.is_superuser: return HttpResponseRedirect('/') plantilla = 'presentacion.html' form_class = NuevoCandidatoForm if tipo==50 else NuevoCandidato25Form if request.method == 'POST': # If the form has been submitted... form = form_class(request.POST, request.FILES) # A form bound to the POST data if form.is_valid(): candidato = form.save(commit=False) candidato.descripcion = candidato.descripcion or '-' candidato.tipo = 0 candidato.circunscripcion_id = 18 candidato.valida = None candidato.save() request.session['id_candidato'] = candidato.id return HttpResponseRedirect('/confirmar_%s/' % tipo) else: form = form_class() # An unbound form return render(request, plantilla, dict(form=form))
def papeleta_usu(request, ca, tipo, clase_votantes): if not is_modulo_activo( 'votacion_%s' % tipo) and not request.user.is_superuser: return HttpResponseRedirect('/') usu = request.session.get('usu%s' % tipo) if not usu: return HttpResponseRedirect("/") socio = clase_votantes.objects.get(pk=usu) puedeVotar, msg = socio.puedeVotar(True) if not puedeVotar: mensaje = u'No puede votar en esta web; intente votar por correo postal: ' + msg messages.add_message(request, messages.SUCCESS, mensaje) return render(request, 'mensaje_pub.html') circ = m.Circunscripcion.objects.get(pk=ca) plantilla = 'papeleta_pub.html' if tipo == 60: max_candidatos = circ.puestos assert socio.circunscripcion.pk == 18 or socio.circunscripcion == circ else: max_candidatos = settings.MAX_CANDIDATOS_15 return render(request, plantilla, locals())
def presentacion(request, tipo): if not is_modulo_activo( 'presentacion_%s' % tipo) and not request.user.is_superuser: return HttpResponseRedirect('/') plantilla = 'presentacion.html' form_class = NuevoCandidatoForm if tipo == 60 else NuevoCandidato15Form if request.method == 'POST': # If the form has been submitted... form = form_class(request.POST, request.FILES) # A form bound to the POST data if form.is_valid(): candidato = form.save(commit=False) candidato.tipo = 0 if tipo == 15: candidato.circunscripcion_id = 18 candidato.valida = None candidato.save() request.session['id_candidato'] = candidato.id return HttpResponseRedirect('/confirmar_%s/' % tipo) else: form = form_class() # An unbound form return render(request, plantilla, dict(form=form))
def comision(request, tipo): if (not is_modulo_activo('comision_%s' % tipo) and not request.user.is_superuser): return HttpResponseRedirect('/') full = request.GET.get('full', False) candidatos = m.Candidato.objects.filter(tipo=tipo) candidatos_valida = candidatos.filter(valida=True).order_by( 'circunscripcion', 'fecha_alta') candidatos_novalida = candidatos.filter(valida=False).order_by( 'apellidos', 'nombre') candidatos_pendiente = candidatos.filter(valida__isnull=True).order_by( 'apellidos', 'nombre') ccaa = [(k, list(v)) for (k, v) in groupby(candidatos_valida, lambda x: x.circunscripcion)] c = dict( ccaa=ccaa, candidatos_novalida=candidatos_novalida, candidatos_pendiente=candidatos_pendiente, full=full, ) return render(request, 'admin_candidatos.html', c)
def confirmar(request, tipo): if not is_modulo_activo( 'presentacion_%s' % tipo) and not request.user.is_superuser: return HttpResponseRedirect('/') candidato = Candidato.objects.get(pk=request.session['id_candidato']) if request.method == 'POST': # If the form has been submitted... candidato.tipo = tipo candidato.n_socio = 'n/a' candidato.save() envia_confirmacion(candidato) return HttpResponseRedirect('/ok2_%s/' % tipo) else: form = NuevoCandidatoConfirmacionForm(instance=candidato) if tipo == 15: del form.fields['circunscripcion'] c = dict(form=form, candidato=candidato) for k in form.fields: w = form.fields[k].widget if isinstance(w, Select): w.attrs['disabled'] = True else: w.attrs['readonly'] = True return render(request, 'presentacion_previa.html', c)
def envia_clave(request, tipo, clase_votantes): if not is_modulo_activo( 'votacion_%s' % tipo) and not request.user.is_superuser: return HttpResponseRedirect('/') if request.method != "POST": return HttpResponseRedirect('/') email = request.POST.get('email') if not email: return HttpResponseRedirect('/votacion_%s/' % tipo) msg = '' if tipo == 15: try: consejero = Consejero.objects.get(correo_electronico=email) email_text = u'Estimado/a %s\r\nÉsta es tu clave: %s\r\nPuedes votar en https://elecciones.greenpeace.es' % ( consejero.nombre, consejero.get_clave()) send_mail(u"[Greenpeace España/Elecciones] Clave para votar ", email_text, '*****@*****.**', [consejero.correo_electronico], fail_silently=False) msg = u'Por favor, verifica tu buzón de correo. En breve te llegará un mensaje con la clave para votar.' level = messages.SUCCESS except ObjectDoesNotExist: msg = u'''La votación está abierta solamente a los consejeros vigentes. Verifica que tu dirección de correo es la activa de la lista del Consejo''' level = messages.WARNING messages.add_message(request, level, msg) return HttpResponseRedirect('/votacion_%s/' % tipo) try: info = mv.getContact(email, email) if info: num_socio = info[u'AlizeConstituentID__c'] income = info['Income_ultimos_12_meses_CONSEJO__c'] fecha_alta = parse_date(info['Activation_Date__c']) today = datetime.date.today() meses_active = min(12, diff_month(today, fecha_alta)) if income / meses_active < settings.MIN_INCOME / 12: msg = u'''Parece que hay algún problema con el pago de tu cuota, por favor, ponte en contacto con nuestra oficina, teléfono: 900 535 025, correo electrónico: <a href="mailto:[email protected]">[email protected]</a>. Cuando esté resuelto, inténtalo de nuevo. Te esperamos.''' if info['Birthdate']: fecha_nacimiento = parse_date(info['Birthdate']) if fecha_nacimiento > settings.FECHA_MAXIMA_NACIMIENTO: msg = u'''Para poder participar en estas elecciones necesitabas ser mayor de edad en el momento de la convocatoria. Te esperamos en las próximas elecciones''' else: msg = u'''Para poder votar necesitas tener fecha de nacimiento en la base de datos. Por favor, ponte en contacto con nuestra oficina, teléfono: 900 535 025, correo electrónico: [email protected] o actualízala en Tu perfil greenpeace. Cuando esté resuelto, inténtalo de nuevo. Te esperamos.''' try: EmailValidator()(info['Email']) except ValidationError: msg = u'''Para poder votar electrónicamente, necesitamos que tengas una dirección de correo electrónico registrada en la base de datos de Greenpeace España para enviarte la clave. Por favor, ponte en contacto con nuestra oficina, teléfono: 900 535 025, correo electrónico: [email protected]. Cuando esté resuelto, inténtalo de nuevo. Te esperamos.''' if fecha_alta > settings.FECHA_CONVOCATORIA: msg = u'''Para poder participar en estas elecciones necesitabas pertenecer a Greenpeace España en el momento de su convocatoria. Te esperamos en las próximas elecciones.''' soc_local = mv.Socio.objects.filter(num_socio=num_socio).exclude( fecha_voto=None).first() if soc_local: msg = u'''El sistema tiene registrado tu voto en {:%d-%m-%Y %H:%M}'''.format( soc_local.fecha_voto) else: msg = u'''No hay ninguna persona en nuestra base de datos que cumpla esta condición. Por favor, ponte en contacto con nuestra oficina, teléfono: 900 535 025, correo electrónico: <a href="mailto:[email protected]">[email protected]</a>. Cuando esté resuelto, inténtalo de nuevo. Te esperamos.''' except mv.MultipleContactsError: info = None msg = u'''Hay más de una persona en nuestra base de datos que cumple esta condición.Por favor, ponte en contacto con nuestra oficina, teléfono: 900 535 025, correo electrónico: [email protected]. Cuando esté resuelto, inténtalo de nuevo. Te esperamos.''' if msg == '': socio, created = mv.Socio.objects.get_or_create(num_socio=num_socio) socio.correo_electronico = info['Email'] socio.nombre = info['Name'] if info['MailingPostalCode']: prefijo = info['MailingPostalCode'][:2] try: circunscripcion_por_cp = Provincia.objects.get( prefijo_cp=prefijo).circunscripcion except ObjectDoesNotExist: circunscripcion_por_cp = Circunscripcion.objects.get(id=18) else: circunscripcion_por_cp = Circunscripcion.objects.get(id=18) socio.circunscripcion = circunscripcion_por_cp socio.save() email_text = u'Estimado/a %s\r\nÉsta es tu clave: %s\r\nPuedes votar en https://elecciones.greenpeace.es' % ( socio.nombre, socio.get_clave()) send_mail(u"[Greenpeace España/Elecciones] Clave para votar ", email_text, '*****@*****.**', [socio.correo_electronico], fail_silently=False) msg = u'Por favor, verifica tu buzón de correo. En breve te llegará un mensaje con la clave para votar.' level = messages.SUCCESS else: level = messages.WARNING messages.add_message(request, level, msg) return HttpResponseRedirect('/votacion_%s/' % tipo)
def confirmar(request, tipo): if not is_modulo_activo('presentacion_%s' % tipo) and not request.user.is_superuser: return HttpResponseRedirect('/') candidato = Candidato.objects.get(pk=request.session['id_candidato']) if request.method == 'POST': # If the form has been submitted... candidato.tipo = tipo candidato.n_socio = 'n/a' socios = list(mv.Socio.objects.filter(num_socio=candidato.n_socio.zfill(8))) socios += list(mv.Socio.objects.filter(num_socio_antiguo='S' + candidato.n_socio.zfill(7))) socios += list(mv.Socio.objects.filter(num_socio_antiguo=candidato.n_socio)) if len(socios) != 1: socios = mv.Socio.objects.filter(correo_electronico=candidato.correo_e) if len(socios) != 1: candidato.save() envia_confirmacion(candidato) return HttpResponseRedirect('/ok2_%s/' % tipo) socio = socios[0] candidato.valida_sistema = True candidato.fecha_alta = socio.fecha_socio candidato.valida_sistema = True if socio.fecha_nacimiento: if socio.fecha_nacimiento > datetime.datetime(2013 - 18, 4, 21): candidato.comentarios += '\nMenor de edad' candidato.valida_sistema = False else: candidato.comentarios += '\nFecha de nacimiento no disponible' candidato.valida_sistema = False if not socio.corriente: candidato.comentarios += '\nNo corriente' candidato.valida_sistema = False if tipo == 25: fecha_alta_tope = datetime.datetime(2013 - 3, 4, 21) else: fecha_alta_tope = datetime.datetime(2013 - 3, 10, 20) if socio.fecha_socio > fecha_alta_tope: candidato.comentarios += '\nSocio demasiado reciente' candidato.valida_sistema = False if socio.circunscripcion != candidato.circunscripcion: candidato.comentarios += u'\nNo coincide circunscripción' candidato.valida_sistema = False candidato.save() envia_confirmacion(candidato) if candidato.valida_sistema: return HttpResponseRedirect('/ok_%s/' % tipo) return HttpResponseRedirect('/ok2_%s/' % tipo) else: form = NuevoCandidatoConfirmacionForm(instance=candidato) if tipo == 25: del form.fields['descripcion'] del form.fields['circunscripcion'] c = dict(form=form, candidato=candidato) for k in form.fields: w = form.fields[k].widget if isinstance(w, Select): w.attrs['disabled'] = True else: w.attrs['readonly'] = True return render(request, 'presentacion_previa.html', c)