def desde_string(cls, tag, mesa=None): datos_tag = struct_voto.parse(tag) if mesa is not None: # verificamos la mesa if mesa.cod_datos != datos_tag.ubicacion: raise MesaIncorrecta() else: #OJO: ESTO trae cualquier mesa del juego de datos mesa = Ubicacion.one(cod_datos=datos_tag.ubicacion) current_data_code(datos_tag.ubicacion) candidatos = [] for elem in datos_tag.voto_categoria: cod_categoria = elem["cod_categoria"].strip() cod_candidato = elem["cod_candidatura"].strip() if cod_candidato == COD_LISTA_BLANCO: candidato = Candidato.one(codigo__endswith=cod_candidato, cod_categoria=cod_categoria) else: candidato = Candidato.one(codigo__endswith="." + cod_candidato, cod_categoria=cod_categoria) candidatos.append(candidato) return Seleccion(mesa, None, candidatos)
def desde_string(cls, tag, mesa=None): datos_tag = struct_voto.parse(tag) if mesa is not None: # verificamos la mesa if mesa.cod_datos != datos_tag.ubicacion: raise MesaIncorrecta() else: #OJO: ESTO trae cualquier mesa del juego de datos mesa = Ubicacion.one(cod_datos=datos_tag.ubicacion) current_data_code(datos_tag.ubicacion) if datos_tag.cod_interna != "": interna = Partido.one(datos_tag.cod_interna) else: interna = None candidatos = [] for elem in datos_tag.voto_categoria: cod_categoria = elem["cod_categoria"].strip() cod_candidato = elem["cod_candidatura"].strip() if cod_candidato == COD_LISTA_BLANCO: candidato = Candidato.one(codigo__endswith=cod_candidato, cod_categoria=cod_categoria) else: candidato = Candidato.one(codigo__endswith="." + cod_candidato, cod_categoria=cod_categoria) candidatos.append(candidato) return Seleccion(mesa, None, candidatos)
def desde_tag(cls, tag, con_dnis=True): if con_dnis: struct = struct_recuento_dni else: struct = struct_recuento datos_tag = struct.parse(tag) por_categoria = int(datos_tag.por_categoria) cod_categoria = datos_tag.cod_categoria if SMART_PACKING: num_mesa, valores = unpack("".join(datos_tag.datos)) mesa = Ubicacion.one(numero=str(num_mesa)) else: tag = "".join(datos_tag.datos) len_cod_mesa = int(tag[:2]) cod_mesa = tag[2:2 + len_cod_mesa] mesa = Ubicacion.one(cod_mesa) valores = unpack(tag[len_cod_mesa + 2:]) if not mesa: raise MesaNoEncontrada() current_data_code(mesa.cod_datos) if por_categoria: categorias = Categoria.many(codigo=cod_categoria) else: categorias = Categoria.many(sorted='codigo') recuento = Recuento(mesa) principales = recuento._get_dict_candidatos() # leemos los valores y los seteamos en los resultados # vienen ordenados por cod_lista,cod_categoria for lista in Lista.many(sorted='codigo'): for categoria in categorias: candidato = Candidato.one(cod_categoria=categoria.codigo, cod_lista=lista.codigo, titular=True, numero_de_orden=1) if candidato is not None: recuento._resultados[categoria.codigo, candidato.codigo] = valores.pop(0) ordered_keys = sorted(recuento.campos_extra.keys()) for key in ordered_keys: recuento.campos_extra[key] = valores.pop(0) ordered_keys = sorted(recuento.listas_especiales.keys()) for key in ordered_keys: recuento.listas_especiales[key] = valores.pop(0) if por_categoria: recuento.cod_categoria = cod_categoria if con_dnis: dnis = unpack_slow(datos_tag.documentos, 27) for dni in dnis: autoridad = Autoridad("", "", 0, dni) recuento.autoridades.append(autoridad) return recuento
def a_human(self): texto = "%s - %s, %s, %s (%s)\n" % (self.mesa.descripcion, self.mesa.escuela, self.mesa.municipio, self.mesa.departamento, self.mesa.codigo) for categoria in Categoria.many(sorted="posicion"): texto += "%s\n" % categoria.nombre for lista in Lista.many(sorted='codigo'): candidato = Candidato.one(cod_categoria=categoria.codigo, cod_lista=lista.codigo, titular=True, numero_de_orden=1) if candidato is not None: votos = self._resultados[categoria.codigo, candidato.codigo] texto += "\t%s - %s Votos: %s\n" % (lista.nombre, candidato.nombre, votos) texto += "\n" texto += "\nCampos extra:\n" ordered_keys = sorted(self.campos_extra.keys()) for key in ordered_keys: texto += "%s: %s\n" % (key, self.campos_extra[key]) texto += "\nListas Especiales:\n" ordered_keys = sorted(self.listas_especiales.keys()) for key in ordered_keys: texto += "%s: %s\n" % (_("titulo_votos_%s" % key), self.listas_especiales[key]) return texto
def a_human(self): texto = "%s - %s, %s (%s)\n" % (self.mesa.descripcion, self.mesa.escuela, self.mesa.comuna, self.mesa.codigo) for autoridad in self.autoridades: texto += "%s\n" % autoridad.nro_documento for categoria in Categoria.many(sorted="posicion"): texto += "%s\n" % categoria.nombre for lista in Lista.many(sorted='codigo'): candidato = Candidato.one(cod_categoria=categoria.codigo, cod_lista=lista.codigo, titular=True, numero_de_orden=1) if candidato is not None: votos = self._resultados[categoria.codigo, candidato.codigo] texto += "\t%s - %s Votos: %s\n" % (lista.nombre, candidato.nombre, votos) texto += "\n" texto += "\nCampos extra:\n" ordered_keys = sorted(self.campos_extra.keys()) for key in ordered_keys: texto += "%s: %s\n" % (key, self.campos_extra[key]) texto += "\nListas Especiales:\n" ordered_keys = sorted(self.listas_especiales.keys()) for key in ordered_keys: texto += "%s: %s\n" % (_("titulo_votos_%s" % key), self.listas_especiales[key]) return texto
def mostrar_consulta_popular(self, cod_categoria): candidatos = Candidato.principales(cod_categoria) candidatos_dict = candidatos.full_dict(_image_name) if MEZCLAR_CONSULTA: shuffle(candidatos_dict) self.send_command("cargar_consulta_popular", [candidatos_dict, cod_categoria])
def _get_data_listas(self): categorias = self._get_categorias() data_listas = [ l for l in Lista.many(sorted='cod_partido,codigo') if not l.es_blanco() ] if get_tipo_elec("paso"): def _sort_listas_paso(lista_a, lista_b): return cmp(lista_a.partido.nombre.upper(), lista_b.partido.nombre.upper()) data_listas = sorted(data_listas, _sort_listas_paso) else: def _sort_listas(lista_a, lista_b): return cmp( int(lista_a.numero) if lista_a.numero != "" else lista_a.codigo, int(lista_b.numero) if lista_b.numero != "" else lista_b.codigo) data_listas = sorted(data_listas, _sort_listas) lista_blanca = Lista.one(COD_LISTA_BLANCO) if lista_blanca is not None: data_listas.append(lista_blanca) listas = [] for lista in data_listas: lista_dict = lista.to_dict() if lista.partido is not None: lista_dict['nombre_partido'] = lista.partido.nombre lista_dict['candidatos'] = [] for categoria in categorias: candidatos = Candidato.many(cod_lista=lista.codigo, cod_categoria=categoria.codigo, titular=True, numero_de_orden=1) if candidatos: candidato = candidatos[0] candidato_dict = candidato.to_dict() candidato_dict['votos'] = \ self.sesion.recuento.obtener_resultado(categoria.codigo, candidato.codigo) else: candidato_dict = None lista_dict['candidatos'].append(candidato_dict) listas.append(lista_dict) cat_list = [] for categoria in categorias: cat_dict = categoria.to_dict() cat_dict['nombre'] = _(cat_dict['nombre']) cat_list.append(cat_dict) return cat_list, listas
def _get_categorias(self): """Devuelve las categorias para esta mesa y para esta partido en caso de que sea ese tipo de eleccion.""" if not get_tipo_elec("interna"): categorias = Categoria.many(sorted="posicion") else: cod_cats = set([candidato.categoria.codigo for candidato in Candidato.many(cod_partido=self.partido.codigo)]) categorias = Categoria.many(codigo__in=cod_cats, sorted="posicion") return categorias
def _get_dict_candidatos(self): if self.__dict_candidatos is None: cand = {(candidato.cod_lista, candidato.cod_categoria): candidato for candidato in Candidato.many(titular=True, numero_de_orden=1)} self.__dict_candidatos = cand else: cand = self.__dict_candidatos return cand
def _get_categorias(self): """Devuelve las categorias para esta mesa y para esta partido en caso de que sea ese tipo de eleccion.""" if not get_tipo_elec("interna"): categorias = Categoria.many(sorted="posicion") else: cod_cats = set([ candidato.categoria.codigo for candidato in Candidato.many( cod_partido=self.partido.codigo) ]) categorias = Categoria.many(codigo__in=cod_cats, sorted="posicion") return categorias
def get_nombres_imagenes(): nombres_imagenes = [] for candidato in Candidato.principales(): nombres_imagenes.append(_image_name(candidato.codigo)) for lista in Lista.all(): nombres_imagenes.append(_image_name(lista.codigo)) for partido in Partido.all(): nombres_imagenes.append(_image_name(partido.codigo)) for alianza in Alianza.all(): nombres_imagenes.append(_image_name(alianza.codigo)) return nombres_imagenes
def _get_data_listas(self): categorias = self._get_categorias() data_listas = [l for l in Lista.many(sorted='cod_partido,codigo') if not l.es_blanco()] if get_tipo_elec("paso"): def _sort_listas_paso(lista_a, lista_b): return cmp((lista_a.partido.nombre.upper(), lista_a.numero), (lista_b.partido.nombre.upper(), lista_b.numero)) data_listas = sorted(data_listas, _sort_listas_paso) else: def _sort_listas(lista_a, lista_b): return cmp(int(lista_a.numero)if lista_a.numero != "" else lista_a.codigo, int(lista_b.numero)if lista_b.numero != "" else lista_b.codigo) data_listas = sorted(data_listas, _sort_listas) lista_blanca = Lista.one(COD_LISTA_BLANCO) if lista_blanca is not None: data_listas.append(lista_blanca) listas = [] principales = {(candidato.cod_lista, candidato.cod_categoria): candidato for candidato in Candidato.many(titular=True, numero_de_orden=1)} for lista in data_listas: lista_dict = lista.to_dict() if lista.partido is not None: lista_dict['nombre_partido'] = lista.partido.nombre lista_dict['candidatos'] = [] for categoria in categorias: candidato = principales.get((lista.codigo, categoria.codigo)) if candidato is not None: candidato_dict = candidato.to_dict() candidato_dict['votos'] = \ self.sesion.recuento.obtener_resultado(categoria.codigo, candidato.codigo) else: candidato_dict = None lista_dict['candidatos'].append(candidato_dict) listas.append(lista_dict) cat_list = [] for categoria in categorias: cat_dict = categoria.to_dict() cat_dict['nombre'] = _(cat_dict['nombre']) cat_list.append(cat_dict) return cat_list, listas
def elegir_candidato(self, candidato, borrar=True): """Elegir un candidato.""" if candidato is not None: if borrar: self.borrar_categoria(candidato.cod_categoria) self._candidatos.append(candidato) categorias_hijas = candidato.categoria.get_hijas() if len(categorias_hijas) > 0: for cat_hija in categorias_hijas: principal = Candidato.one(cod_categoria=cat_hija.codigo, cod_lista=candidato.cod_lista, titular=True, numero_de_orden=1) self.elegir_candidato(principal)
def _get_categorias(self, consulta_popular=False, todas=False): """Devuelve las categorias para esta mesa y para esta partido en caso de que sea una interna no PASO.""" if not get_tipo_elec("interna"): filter = {"sorted": "posicion", "consulta_popular": consulta_popular} if not todas: filter["adhiere"] = None categorias = Categoria.many(**filter) else: candidatos = Candidato.many(cod_partido=self.agrupacion.codigo) cod_cats = set([candidato.categoria.codigo for candidato in candidatos]) filter = {"sorted": "posicion", "consulta_popular": consulta_popular, "codigo__in": cod_cats} if not todas: filter["adhiere"] = None categorias = Categoria.all(**filter) return categorias
def completa(self, interna=None): """Determina si la seleccion es completa (candidatos en todas las categorias).""" if get_tipo_elec("interna") and interna is not None: categorias = Categoria.all() cat_usadas = [] for categoria in categorias: has_cand = Candidato.one(cod_categoria=categoria.codigo, cod_interna=interna.codigo) if has_cand is not None: cat_usadas.append(categoria) len_categoria = len(cat_usadas) else: len_categoria = len(Categoria.all()) return len(self._candidatos) == len_categoria
def seleccionar_candidatos(self, data): """Selecciona el candidato y envia el comando para cargar las categorias. """ cod_categoria, cod_candidatos = data muchos_candidatos = len(cod_candidatos) > 1 if muchos_candidatos: self.parent.seleccion.borrar_categoria(cod_categoria) for elem in data[1]: candidato = Candidato.one(elem) self.parent.seleccion.elegir_candidato(candidato, not muchos_candidatos) categoria = Categoria.one(cod_categoria) if categoria.consulta_popular: self.mostrar_confirmacion() else: self.cargar_categorias()
def _get_categorias(self, consulta_popular=False, todas=False): """Devuelve las categorias para esta mesa y para esta partido en caso de que sea una interna no PASO.""" if not get_tipo_elec("interna"): filter = { 'sorted': "posicion", 'consulta_popular': consulta_popular } if not todas: filter['adhiere'] = None categorias = Categoria.many(**filter) else: candidatos = Candidato.many(cod_partido=self.agrupacion.codigo) cod_cats = set( [candidato.categoria.codigo for candidato in candidatos]) filter = { 'sorted': "posicion", 'consulta_popular': consulta_popular, 'codigo__in': cod_cats } if not todas: filter['adhiere'] = None categorias = Categoria.all(**filter) return categorias
def rellenar_de_blanco(self): for categoria in Categoria.many(consulta_popular=False): if self.candidato_categoria(categoria.codigo) is None: blanco = Candidato.one(cod_categoria=categoria.codigo, cod_lista=COD_LISTA_BLANCO) self.elegir_candidato(blanco)