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}
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}
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 }
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
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}
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'
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)
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)
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')
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}
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}
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')
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}
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)
def test_con_carga_pendiente_excluye_sin_foto(db): m1 = MesaFactory() assert m1.attachments.count() == 0 Mesa.con_carga_pendiente().count() == 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
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}