예제 #1
0
def test_elecciones_para_mesa(db):
    e1, e2, e3 = EleccionFactory.create_batch(3)
    e4 = EleccionFactory(activa=False)
    m1 = MesaFactory(eleccion=[e1, e2])
    m2 = MesaFactory(eleccion=[e1, e2, e4])
    m3 = MesaFactory(eleccion=[e1])
    m4 = MesaFactory(eleccion=[e4])
    m5 = MesaFactory(eleccion=[e1, e2])

    # no hay elecciones comunes a todas las mesas
    assert list(
        Eleccion.para_mesas([m1, m2, m3, m4, m5]).order_by('id')
    ) == []

    # no hay elecciones comunes a todas las mesas
    assert list(
        Eleccion.para_mesas([m1, m2, m3, m5]).order_by('id')
    ) == [e1]

    assert list(
        Eleccion.para_mesas([m1, m2, m5]).order_by('id')
    ) == [e1, e2]

    assert list(
        Eleccion.para_mesas([m1, m3]).order_by('id')
    ) == [e1]

    assert list(
        Eleccion.para_mesas([m2, m4]).order_by('id')
    ) == []
예제 #2
0
파일: models.py 프로젝트: pandres/carreros
 def mesas_asignadas(self):
     eleccion = Eleccion.actual()
     if self.es_general:
         return Mesa.objects.filter(
             eleccion=eleccion, lugar_votacion__asignacion__fiscal=self
         ).order_by('numero')
     return Mesa.objects.filter(eleccion=eleccion, asignacion__fiscal=self).order_by('numero')
예제 #3
0
파일: views.py 프로젝트: pandres/carreros
 def get_context_data(self, **kwargs):
     context = super().get_context_data(**kwargs)
     context['eleccion'] = Eleccion.actual()
     if self.kwargs.get('tipo') == 'de_mesa':
         context['mesa'] = self.get_asignable()
     else:
         context['escuela'] = self.get_asignable()
     return context
예제 #4
0
파일: views.py 프로젝트: pandres/carreros
def cargar_resultados(request, eleccion_id, mesa_numero):
    fiscal = get_object_or_404(Fiscal, user=request.user)

    def fix_opciones(formset):
        # hack para dejar sólo la opcion correspondiente a cada fila
        # se podria hacer "disabled" pero ese caso quita el valor del
        # cleaned_data y luego lo exige por ser requerido.
        for i, (opcion,
                form) in enumerate(zip(Eleccion.opciones_actuales(), formset),
                                   1):
            form.fields['opcion'].choices = [(opcion.id, str(opcion))]

            form.fields['opcion'].widget.attrs['tabindex'] = 99 + i
            form.fields['votos'].widget.attrs['tabindex'] = i
            # si la opcion es obligatoria, se llenan estos campos
            if opcion.obligatorio:
                form.fields['votos'].required = True
            if i == 1:
                form.fields['votos'].widget.attrs['autofocus'] = True

    mesa = get_object_or_404(Mesa,
                             eleccion__id=eleccion_id,
                             numero=mesa_numero)
    data = request.POST if request.method == 'POST' else None
    qs = VotoMesaReportado.objects.filter(mesa=mesa, fiscal=fiscal)
    initial = [{'opcion': o} for o in Eleccion.opciones_actuales()]
    formset = VotoMesaReportadoFormset(data, queryset=qs, initial=initial)

    fix_opciones(formset)

    is_valid = False
    if qs:
        formset.convert_warnings = True  # monkepatch

    if request.method == 'POST' or qs:
        is_valid = formset.is_valid()

    # eleccion = Eleccion.objects.last()
    if is_valid:
        for form in formset:
            vmr = form.save(commit=False)
            vmr.mesa = mesa
            vmr.fiscal = fiscal
            # vmr.eleccion = eleccion
            vmr.save()

        if formset.warnings:
            messages.warning(request, 'Guardado con inconsistencias')
        else:
            messages.success(request, 'Guardado correctamente')

        return redirect('elegir-acta-a-cargar')

    return render(request, "fiscales/carga.html", {
        'formset': formset,
        'object': mesa
    })
예제 #5
0
    def fix_opciones(formset):
        # hack para dejar sólo la opcion correspondiente a cada fila
        # se podria hacer "disabled" pero ese caso quita el valor del
        # cleaned_data y luego lo exige por ser requerido.
        for i, (opcion, form) in enumerate(zip(Eleccion.opciones_actuales(), formset), 1):
            form.fields['opcion'].choices = [(opcion.id, str(opcion))]
            form.fields['opcion'].widget.attrs['tabindex'] = 99 + i

            form.fields['votos'].required = True
            form.fields['votos'].widget.attrs['tabindex'] = i
            if i == 1:
                form.fields['votos'].widget.attrs['autofocus'] = True
예제 #6
0
def cargar_resultados(request, asignacion_id):
    def fix_opciones(formset):
        # hack para dejar sólo la opcion correspondiente a cada fila
        # se podria hacer "disabled" pero ese caso quita el valor del
        # cleaned_data y luego lo exige por ser requerido.
        for i, (opcion, form) in enumerate(zip(Eleccion.opciones_actuales(), formset), 1):
            form.fields['opcion'].choices = [(opcion.id, str(opcion))]
            form.fields['opcion'].widget.attrs['tabindex'] = 99 + i

            form.fields['votos'].required = True
            form.fields['votos'].widget.attrs['tabindex'] = i
            if i == 1:
                form.fields['votos'].widget.attrs['autofocus'] = True

    asignacion = get_object_or_404(AsignacionVoluntario,
        id=asignacion_id, voluntario=request.user.voluntario
    )
    mesa, voluntario = asignacion.mesa, asignacion.voluntario
    data = request.POST if request.method == 'POST' else None
    qs = VotoMesaReportado.objects.filter(mesa=mesa, voluntario=voluntario)
    initial = [{'opcion': o} for o in Eleccion.opciones_actuales()]
    formset = VotoMesaReportadoFormset(data, queryset=qs, initial=initial)

    fix_opciones(formset)

    is_valid = False
    if qs:
        formset.convert_warnings = True  # monkepatch

    if request.method == 'POST' or qs:
        is_valid = formset.is_valid()

    # = Eleccion.objects.last()
    if is_valid:
        for form in formset:
            vmr = form.save(commit=False)
            vmr.mesa = mesa
            vmr.voluntario = voluntario
            vmr.save()

        if formset.warnings:
            messages.warning(request, 'Guardado con inconsistencias')
        else:
            messages.success(request, 'Guardado correctamente')

        return redirect('inicio')

    return render(request, "fiscales/carga.html",
                  {'formset': formset, 'object': mesa})
예제 #7
0
파일: views.py 프로젝트: pandres/carreros
    def form_valid(self, form):
        fiscal = form.save(commit=False)
        fiscal.tipo = self.kwargs.get('tipo')
        fiscal = self.verificar_fiscal_existente(fiscal)
        fiscal.save()
        asignable = self.get_asignable()
        eleccion = Eleccion.actual()
        if asignable.asignacion_actual:
            asignacion = asignable.asignacion_actual
            asignacion.fiscal = fiscal
            asignacion.save()
        elif isinstance(asignable, LugarVotacion):
            asignacion = AsignacionFiscalGeneral.objects.create(
                fiscal=fiscal, lugar_votacion=asignable, eleccion=eleccion)

        messages.success(self.request, 'Fiscal cargado correctamente')
        return redirect(asignable.get_absolute_url())
예제 #8
0
def opciones_actuales():
    try:
        return Eleccion.opciones_actuales().count()
    except:
        return 0
예제 #9
0
파일: views.py 프로젝트: pandres/carreros
 def get_context_data(self, **kwargs):
     context = super().get_context_data(**kwargs)
     context['eleccion'] = Eleccion.actual()
     return context