Exemple #1
0
def test_con_carga_pendiente_excluye_taken(db):
    m1 = AttachmentFactory().mesa
    m2 = AttachmentFactory().mesa
    assert set(Mesa.con_carga_pendiente()) == {m1, m2}
    m2.taken = timezone.now()
    m2.save()
    assert set(Mesa.con_carga_pendiente()) == {m1}
Exemple #2
0
def test_con_carga_pendiente_incluye_si_tiene_problema_resuelto(db):
    m2 = AttachmentFactory().mesa
    m1 = AttachmentFactory().mesa
    ProblemaFactory(mesa=m1, estado='resuelto')
    assert set(Mesa.con_carga_pendiente()) == {m1, m2}
    # nuevo problema
    ProblemaFactory(mesa=m1)
    assert set(Mesa.con_carga_pendiente()) == {m2}
Exemple #3
0
def contadores(request):
    e = Eleccion.objects.first()
    return {
        'adjuntos_count': Attachment.sin_asignar().count(),
        'mesas_pendientes_count': Mesa.con_carga_pendiente().count(),
        'mesas_a_confirmar_count': Mesa.con_carga_a_confirmar().count(),
        'primera_eleccion':
        e.id if e is not None else 1  # las urls esperan un entero.
        # aunque no exista el objeto
    }
Exemple #4
0
def test_con_carga_a_confirmar_categoria_desactivada(db):
    e1 = CategoriaFactory(activa=False)
    m1 = MesaFactory(categoria=[e1])
    VotoMesaReportadoFactory(carga__mesa=m1,
                             carga__categoria=e1,
                             opcion=e1.opciones.first(),
                             votos=10)
    assert Mesa.con_carga_a_confirmar().count() == 0
Exemple #5
0
def test_con_carga_a_confirmar(db):
    e1, e2 = eleccion = EleccionFactory.create_batch(2)
    m1 = MesaFactory(eleccion=eleccion)
    m2 = MesaFactory(eleccion=eleccion)

    VotoMesaReportadoFactory(mesa=m1, eleccion=e1, opcion=e1.opciones.first(), votos=10)
    assert set(Mesa.con_carga_a_confirmar()) == {m1}

    VotoMesaReportadoFactory(mesa=m2, eleccion=e1, opcion=e1.opciones.first(), votos=10)
    assert set(Mesa.con_carga_a_confirmar()) == {m1, m2}

    # confirmo la primer mesa.
    # no hay mas elecciones de m1 ya cargadas, por lo tanto no hay qué confirmar
    me = MesaEleccion.objects.get(eleccion=e1, mesa=m1)
    me.confirmada = True
    me.save()

    assert set(Mesa.con_carga_a_confirmar()) == {m2}
Exemple #6
0
def test_obtener_mesa_por_distrito_circuito_seccion_nro_encontrada(db):
    d1 = DistritoFactory(numero='1')
    s1 = SeccionFactory(numero='50', distrito=d1)
    c1 = CircuitoFactory(numero=2, seccion=s1)
    MesaFactory(numero=4012, lugar_votacion__circuito=c1, electores=100, circuito=c1)
    mesa = Mesa.obtener_mesa_en_circuito_seccion_distrito(4012, 2, 50, 1)
    assert mesa.numero == '4012'
    assert mesa.circuito.numero == '2'
    assert mesa.circuito.seccion.numero == '50'
    assert mesa.circuito.seccion.distrito.numero == '1'
Exemple #7
0
def chequear_resultado(request):
    """vista que elige una mesa con cargas a confirmar y redirige a la url correspondiente"""
    mesa = Mesa.con_carga_a_confirmar().order_by('?').first()
    if not mesa:
        return render(request, 'fiscales/sin-actas-cargadas.html')
    try:
        eleccion = mesa.siguiente_eleccion_a_confirmar()
    except Exception:
        return render(request, 'fiscales/sin-actas-cargadas.html')

    if not eleccion:
        return render(request, 'fiscales/sin-actas-cargadas.html')

    return redirect('chequear-resultado-mesa',
                    eleccion_id=eleccion.id,
                    mesa_numero=mesa.numero)
Exemple #8
0
 def validar_mesas(self):
     """
     Valida que el número de mesa debe estar dentro del circuito y seccción indicados.
     Dichas validaciones se realizar revisando la info en la bd
     """
     # Obtener todos los combos diferentes de: número de mesa, circuito, sección, distrito para validar
     grupos_mesas = self.df.groupby(['seccion', 'circuito', 'nro de mesa', 'distrito'])
     mesa_circuito_seccion_distrito = list(mesa for mesa, grupo in grupos_mesas)
     for seccion, circuito, nro_de_mesa, distrito in mesa_circuito_seccion_distrito:
         try:
             match_mesa = Mesa.obtener_mesa_en_circuito_seccion_distrito(
                 nro_de_mesa, circuito, seccion, distrito)
         except Mesa.DoesNotExist:
             self.anadir_error(
                 f'No existe mesa {nro_de_mesa} en circuito {circuito}, sección {seccion} y '
                 f'distrito {distrito}.'
             )
             self.log_debug(f'No existe mesa {nro_de_mesa} en circuito {circuito}, sección {seccion} y '
                            f'distrito {distrito}.')
             continue
         self.mesas_matches[nro_de_mesa] = match_mesa
         self.mesas.append(match_mesa)
Exemple #9
0
def elegir_acta_a_cargar(request):
    # se eligen mesas que nunca se intentaron cargar o que se asignaron a
    mesas = Mesa.con_carga_pendiente().order_by(
        'orden_de_carga', '-lugar_votacion__circuito__electores')
    if mesas.exists():
        mesa = mesas[0]
        # se marca que se inicia una carga
        mesa.taken = timezone.now()
        mesa.save(update_fields=['taken'])

        # que pasa si ya no hay elecciones sin carga?
        # estamos teniendo un error
        siguiente_eleccion = mesa.siguiente_eleccion_sin_carga()
        if siguiente_eleccion is None:
            return render(request, 'fiscales/sin-actas.html')
        siguiente_id = siguiente_eleccion.id

        return redirect('mesa-cargar-resultados',
                        eleccion_id=siguiente_id,
                        mesa_numero=mesa.numero)

    return render(request, 'fiscales/sin-actas.html')
Exemple #10
0
def test_con_carga_pendiente_incluye_mesa_con_categoria_sin_cargar(db):
    m1 = AttachmentFactory().mesa
    m2 = AttachmentFactory().mesa
    m3 = AttachmentFactory().mesa

    # mesa 2 ya se cargo, se excluirá
    categoria = m2.categoria.first()
    VotoMesaReportadoFactory(carga__mesa=m2,
                             carga__categoria=categoria,
                             opcion=categoria.opciones.first(),
                             votos=10)
    VotoMesaReportadoFactory(carga__mesa=m2,
                             carga__categoria=categoria,
                             opcion=categoria.opciones.last(),
                             votos=12)

    # m3 tiene mas elecciones.pendientes
    e2 = CategoriaFactory(id=100)
    e3 = CategoriaFactory(id=101)
    e4 = CategoriaFactory(id=102)
    m3.categoria_add(e2)
    m3.categoria_add(e3)
    m3.categoria_add(e4)
    m3.categoria_add(CategoriaFactory(id=101))
    categoria = m3.categoria.first()
    # se cargo primera y segunda categoria para la mesa 3
    VotoMesaReportadoFactory(carga__mesa=m3,
                             carga__categoria=categoria,
                             opcion=categoria.opciones.first(),
                             votos=20)
    VotoMesaReportadoFactory(carga__mesa=m3,
                             carga__categoria=e2,
                             opcion=e2.opciones.first(),
                             votos=20)

    assert set(Mesa.con_carga_pendiente()) == {m1, m3}
Exemple #11
0
def test_con_carga_pendiente_incluye_mesa_con_eleccion_sin_cargar(db):
    m1 = AttachmentFactory().mesa
    m2 = AttachmentFactory().mesa
    m3 = AttachmentFactory().mesa

    # mesa 2 ya se cargo, se excluirá
    eleccion = m2.eleccion.first()
    VotoMesaReportadoFactory(mesa=m2, eleccion=eleccion, opcion=eleccion.opciones.first(), votos=10)
    VotoMesaReportadoFactory(mesa=m2, eleccion=eleccion, opcion=eleccion.opciones.last(), votos=12)

    # m3 tiene mas elecciones pendientes
    e2 = EleccionFactory(id=100)
    e3 = EleccionFactory(id=101)
    e4 = EleccionFactory(id=102)
    m3.eleccion_add(e2)
    m3.eleccion_add(e3)
    m3.eleccion_add(e4)
    m3.eleccion_add(EleccionFactory(id=101))
    eleccion = m3.eleccion.first()
    # se cargo primera y segunda eleccion para la mesa 3
    VotoMesaReportadoFactory(mesa=m3, eleccion=eleccion, opcion=eleccion.opciones.first(), votos=20)
    VotoMesaReportadoFactory(mesa=m3, eleccion=e2, opcion=e2.opciones.first(), votos=20)

    assert set(Mesa.con_carga_pendiente()) == {m1, m3}
Exemple #12
0
def elegir_acta_a_cargar(request):
    """
    Para el conjunto de mesas con carga pendiente (es decir, que tienen categorias sin cargar)
    se elige una por orden de prioridad y tamaño del circuito, se actualiza
    la marca temporal de "asignación" y se redirige a la categoria a cargar para esa mesa.
    """
    mesas = Mesa.con_carga_pendiente().order_by(
        'orden_de_carga', '-lugar_votacion__circuito__electores')
    if mesas.exists():
        mesa = mesas[0]
        # se marca que se inicia una carga
        mesa.taken = timezone.now()
        mesa.save(update_fields=['taken'])

        siguiente_categoria = mesa.siguiente_categoria_sin_carga()
        if siguiente_categoria is None:
            return render(request, 'fiscales/sin-actas.html')
        siguiente_id = siguiente_categoria.id

        return redirect('mesa-cargar-resultados',
                        categoria_id=siguiente_id,
                        mesa_numero=mesa.numero)

    return render(request, 'fiscales/sin-actas.html')
Exemple #13
0
def test_con_carga_pendiente_excluye_si_tiene_problema_no_resuelto(db):
    m2 = AttachmentFactory().mesa
    m1 = AttachmentFactory().mesa
    ProblemaFactory(mesa=m1)
    assert set(Mesa.con_carga_pendiente()) == {m2}
Exemple #14
0
def test_obtener_mesa_por_distrito_circuito_seccion_nro_no_encontrada(db):
    with pytest.raises(Mesa.DoesNotExist):
        Mesa.obtener_mesa_en_circuito_seccion_distrito(10, 10, 10, 10)
Exemple #15
0
def test_con_carga_pendiente_excluye_sin_foto(db):
    m1 = MesaFactory()
    assert m1.attachments.count() == 0
    Mesa.con_carga_pendiente().count() == 0
Exemple #16
0
def test_con_carga_a_confirmar_eleccion_desactivada(db):
    e1 = EleccionFactory(activa=False)
    m1 = MesaFactory(eleccion=[e1])
    VotoMesaReportadoFactory(mesa=m1, eleccion=e1, opcion=e1.opciones.first(), votos=10)
    assert Mesa.con_carga_a_confirmar().count() == 0
Exemple #17
0
def test_con_carga_pendiente_incluye_taken_vencido(db):
    now = timezone.now()
    m1 = AttachmentFactory().mesa
    m2 = AttachmentFactory(mesa__taken=now - timedelta(minutes=3)).mesa
    assert set(Mesa.con_carga_pendiente()) == {m1, m2}