def rellenar_de_blanco(self): """Agrega voto en blanco a las categorias que no fueron votadas.""" for categoria in Categoria.many(): if self.candidato_categoria(categoria.codigo) is None: blanco = Candidatura.one(cod_categoria=categoria.codigo, clase="Blanco") if blanco is not None: self.elegir_candidato(blanco)
def audios_cargo_listas(self, data): """Carga los audios de las lista de los cargos.""" listas = [] for datum in data: lista = Candidatura.one(id_umv=datum).to_dict() listas.append(lista) self.audios("cargar_cargo_listas", listas)
def audios_cargar_consulta(self, data): """Carga los audios de la consulta popular.""" data_dict = {"cod_categoria": data[0]} candidatos = [] for elem in data[1]: candidato = Candidatura.one(id_umv=elem).to_dict() candidatos.append(candidato) data_dict["candidatos"] = candidatos self.audios("cargar_consulta_popular", data_dict)
def audios_mostrar_confirmacion(self, data): """Carga los audios de la confirmacion.""" paneles = [] for datum in data: categoria = Categoria.one(datum[0]).to_dict() candidato = Candidatura.one(datum[1]).to_dict() dict_panel = {"categoria": categoria, "candidato": candidato} paneles.append(dict_panel) self.audios("mostrar_confirmacion", paneles)
def a_human(self): texto = "{} - {}, {}, {} ({})\n".format(self.mesa.descripcion, self.mesa.escuela, self.mesa.municipio, self.mesa.departamento, self.mesa.codigo) for autoridad in self.autoridades: texto += "Autoridad: {}\n".format(autoridad.nro_documento) for categoria in Categoria.many(sorted="posicion", id_grupo=self.grupo_cat): texto += "{}\n".format(categoria.nombre) for lista in Lista.many(sorted='codigo'): candidato = Candidatura.one(cod_categoria=categoria.codigo, cod_lista=lista.codigo) if candidato is not None: votos = self.get_resultados(candidato.id_umv) texto += "\t{} - {} Votos: {}\n".format(lista.nombre, candidato.nombre, votos) candidato = Candidatura.one(cod_categoria=categoria.codigo, clase="Blanco") if candidato is not None: votos = self.get_resultados(candidato.id_umv) texto += "\t{}: {}\n".format(_("votos_en_blanco"), votos) texto += "\n" texto += "\nCampos extra:\n" ordered_keys = sorted(self.campos_extra.keys()) for key in ordered_keys: texto += "{}: {}\n".format(key, self.campos_extra[key]) texto += "\nListas Especiales:\n" ordered_keys = sorted(self.listas_especiales.keys()) for key in ordered_keys: titulo = _("titulo_votos_{}".format(key)) texto += "{}: {}\n".format(titulo, self.listas_especiales[key]) return texto
def seleccionar_candidatos(self, seleccion): """Selecciona los candidatos.""" for cod_categoria, cod_candidatos in list(seleccion.items()): muchos_candidatos = len(cod_candidatos) > 1 if muchos_candidatos: self.modulo.seleccion.borrar_categoria(cod_categoria) for cod_candidato in cod_candidatos: cod_candidato = int(cod_candidato) candidato = Candidatura.one(cod_candidato) self.modulo.seleccion.elegir_candidato(candidato, not muchos_candidatos)
def a_human(self): texto = "{} - {}, {}, {} ({})\n".format(self.mesa.descripcion, self.mesa.escuela, self.mesa.municipio, self.mesa.departamento, self.mesa.codigo) for autoridad in self.autoridades: texto += "Autoridad: {}\n".format(autoridad.nro_documento) for categoria in Categoria.many(sorted="posicion", id_grupo=self.grupo_cat): texto += "{}\n".format(categoria.nombre) for lista in Lista.many(sorted='codigo'): candidato = Candidatura.one(cod_categoria=categoria.codigo, cod_lista=lista.codigo) if candidato is not None: votos = self.get_resultados(candidato.id_umv) texto += "\t{} - {} Votos: {}\n".format( lista.nombre, candidato.nombre, votos) candidato = Candidatura.one(cod_categoria=categoria.codigo, clase="Blanco") if candidato is not None: votos = self.get_resultados(candidato.id_umv) texto += "\t{}: {}\n".format(_("votos_en_blanco"), votos) texto += "\n" texto += "\nCampos extra:\n" ordered_keys = sorted(self.campos_extra.keys()) for key in ordered_keys: texto += "{}: {}\n".format(key, self.campos_extra[key]) texto += "\nListas Especiales:\n" ordered_keys = sorted(self.listas_especiales.keys()) for key in ordered_keys: titulo = _("titulo_votos_{}".format(key)) texto += "{}: {}\n".format(titulo, self.listas_especiales[key]) return texto
def _get_datos_fila(self, categorias, agrupacion, partido_omitido): """Devuelve los datos de la tabla principal del acta. Argumentos: categorias -- las categorias que queremos mostrar en la tabla. agrupacion -- la agrupacion de la que estamos mostrando la tabla """ # primero vamos a averiguar la indentacion que queremos ponerle a esta # fila en la tabla. clases_a_mostrar = self.config("clases_a_mostrar", self.data["cod_datos"]) mostrar_numero = self.config("numero_lista_en_tabla", self.data["cod_datos"]) indentacion = clases_a_mostrar.index(agrupacion.clase) # si el partido no esta omitido vamos a ponerle profundidad. if not partido_omitido: nombre = " " * indentacion nombre += agrupacion.nombre # sino el nombre pasa de largo y queda el que está. else: nombre = agrupacion.partido.nombre # establecemos el numero de la lista. En alguna eleccion esto puede ser # mas complejo que traer el numero, puede ser la concatenacion de # varios numeros diferentes. if mostrar_numero and hasattr(agrupacion, "numero"): numero = str(agrupacion.numero) else: numero = "" # armamos la base de la fila. fila = [numero, nombre, indentacion] # Recorremos todas las categorias que queremos mostrar en este acta # buscando cuantos votos tiene cada candidato. for categoria in categorias: candidato = Candidatura.one(cod_lista=agrupacion.codigo, cod_categoria=categoria.codigo) # Si el candidato existe vamos a buscar cuantos votos tiene y sino # devolvemos "-" que se transforma en una cruz en el acta if candidato is not None: votos = self.recuento.get_resultados(candidato.id_umv) else: votos = "-" fila.append(votos) return fila, len(numero)
def get_resultados(self, id_umv=None): """Devuelve todos los resultados o uno en especifico.""" # si le pedimos uno solo busca los votos de ese candidato. if id_umv is not None: ret = self.pizarra.votos_candidato(id_umv) else: # Sino devolvemos todos votos = self.pizarra.get_votos_actuales() # Si el acta está desglosada devolvemos la categorias que tiene el # acta guardada if self.grupo_cat is not None: categorias_grupo = Categoria.many(id_grupo=self.grupo_cat) cods_categoria = [cat.codigo for cat in categorias_grupo] ret = {} for key in votos.keys(): cand = Candidatura.one(id_umv=key, cod_categoria__in=cods_categoria) if cand is not None: ret[key] = votos[key] else: # no esta desgolsada devolvemos todos los votos. ret = votos return ret
def desde_string(cls, tag, mesa=None): """Devuelve una seleccion a partir de la informacion de un tag rfid. """ seleccion = None try: datos_tag = struct_voto.parse(tag) except (RangeError, FieldError, ValueError): # Manejamos que no nos puedan meter cualquier datos_tag = None if datos_tag is not None: ubic = datos_tag.ubicacion.decode("utf-8") if mesa is not None: # verificamos la mesa if mesa.cod_datos != ubic: raise MesaIncorrecta() else: # OJO: Esto trae cualquier mesa del juego de datos. # No importa por que todas las mesas del mismo juego son # compatibles. Pero no nos permite identificar de que mesa es # el voto. mesa = Ubicacion.first(cod_datos=ubic) mesa.usar_cod_datos() seleccion = Seleccion(mesa) seleccion.serial = datos_tag.serial sel_por_cat = {} # recorremos cada uno de los pares de categoria/candidatos en el # tag str_opciones = datos_tag.opciones.decode() opciones = str_opciones.split(",") if len(opciones): for elem in opciones: if len(elem): cod_cat, id_umv = elem.split(":") id_umv = int(id_umv) sel_por_cat[cod_cat] = sel_por_cat.get(cod_cat, 0) + 1 # Buscamos el candidato votado para la categoria en # cuestion candidato = Candidatura.one(id_umv=id_umv, cod_categoria=cod_cat) # y lo elegimos (Si no encontró ninguno lanza un value # error). if candidato is None: raise ValueError() max_selecciones = int( candidato.categoria.max_selecciones) borrar = max_selecciones == 1 seleccion.elegir_candidato(candidato, borrar=borrar) if len(list(sel_por_cat.keys())) != len(Categoria.all()): # caso en el que la canditad de categorias votadas sea # diferente que la cantidad de categorias seleccion = None else: # aca verificamos que la cantidad de candidatos por # categoria sea menor o igual de la cantidad de selecciones # maximas que esperamos for cod_categoria, cantidad in list(sel_por_cat.items()): categoria = Categoria.one(cod_categoria) max_selec = int(categoria.max_selecciones) if categoria is None or cantidad > max_selec: seleccion = None break return seleccion
def __init__(self, controlador, data, data_key=None, repetir=True): blanco = Candidatura.one(clase="Blanco").to_dict() data.append(blanco) Asistente.__init__(self, controlador, data, data_key, repetir)