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_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 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 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)\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 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 = principales.get((lista.codigo, categoria.codigo)) 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 set_pantalla_partidos(self): """Envia el comando para mostrar los botones para seleccionar la partido. """ partidos = self._get_partidos() listas = Lista.all() if not get_tipo_elec("interna") and len(partidos) == len(listas): self.cargar_listas() else: self.send_command("seleccion_partido", partidos)
def audios_cargar_listas(self, data): """Carga los audios de las listas.""" listas = [] for datum in data: if datum != COD_LISTA_BLANCO: lista = Lista.one(id_candidatura=datum).to_dict() else: lista = Candidatura.first(clase="Blanco").to_dict() listas.append(lista) self.audios("cargar_listas", listas)
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 _precache_datos(self): sleep(0.1) self.sesion.logger.debug("cacheando categorias") alianzas = self.agrupador.all() for categoria in Categoria.all(): candidatos = self._get_candidatos_categoria(categoria.codigo, None) if len(candidatos) > get_tipo_elec("colapsar_listas"): for alianza in alianzas: if len(alianza.listas) > 10: self._get_candidatos_categoria(categoria.codigo, alianza.codigo) self.sesion.logger.debug("cacheando listas") for lista in Lista.all(): self._get_dict_lista(lista) self.sesion.logger.debug("cacheando partidos") self._get_partidos() self.sesion.logger.debug("fin cache")
def seleccionar_lista(self, data): """Selecciona la lista y envia el comando para ver la pantalla de confirmacion. """ cod_lista, categoria_adhesion, cod_candidatos, es_ultima = data if es_ultima or cod_lista == COD_LISTA_BLANCO: lista = Lista.one(cod_lista) for candidato in lista.candidatos: if not candidato.categoria.consulta_popular: self.parent.seleccion.elegir_candidato(candidato) self.parent.seleccion.rellenar_de_blanco() categorias = self.get_data_categorias() self.send_command("actualizar_categorias", categorias) self.mostrar_confirmacion() else: if cod_candidatos is None: cod_candidatos = [] self.cargar_listas(cod_candidatos + [cod_lista], categoria_adhesion)
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 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 a_tag(self, cod_categoria=None, con_dnis=True): """Devuelve la informacion del recuento para almacenar en tag rfid.""" # valores ordenados por cod_lista,cod_categoria valores = [] if cod_categoria is not None: por_categoria = 1 categorias = Categoria.many(codigo=cod_categoria) else: por_categoria = 0 categorias = Categoria.many(sorted='codigo') principales = self._get_dict_candidatos() for lista in Lista.many(sorted='codigo'): for categoria in categorias: try: candidato = principales.get((lista.codigo, categoria.codigo)) if candidato is not None: cod_candidato = candidato.codigo valores.append(self._resultados[categoria.codigo, cod_candidato]) except AttributeError: #si no hay candidato lo ignoramos pass ordered_keys = sorted(self.campos_extra.keys()) for key in ordered_keys: valores.append(self.campos_extra[key]) ordered_keys = sorted(self.listas_especiales.keys()) for key in ordered_keys: valores.append(self.listas_especiales[key]) container = Container(por_categoria=str(por_categoria)) if por_categoria: container.cod_categoria = cod_categoria.encode('ascii') else: container.cod_categoria = "" # cod_mesa if SMART_PACKING: num_mesa = self.mesa.numero.encode('ascii') try: datos = pack(int(num_mesa), valores) except NameError: datos = pack(int(num_mesa), valores, max_bits=MAXBITS*2) else: cod_mesa = self.mesa.codigo.encode('ascii') datos = str(len(cod_mesa)) + cod_mesa + pack(valores) container.datos = datos documentos = [] for autoridad in self.autoridades: documentos.append(int(autoridad.nro_documento)) if con_dnis: documentos = [] for autoridad in self.autoridades: documentos.append(int(autoridad.nro_documento)) len_documentos = len(documentos) if len_documentos == 1: documentos += [0, 0] elif len_documentos == 2: documentos.append(0) elif len_documentos == 0: documentos = [0, 0, 0] documentos = pack_slow(documentos, 27) container.documentos = documentos struct = struct_recuento_dni else: struct = struct_recuento return struct.build(container)
def _get_tabla(self, width): ret = {} empujar_firmas = 0 lineas = [] # muestro la tabla solo si tiene recuento mostrar_partidos = False #any([lista.cod_partido for lista in Lista.all()]) if self.categoria is None: categorias = Categoria.many(sorted="posicion") else: categorias = Categoria.many(codigo=self.categoria) dx = 10 # ancho genérico de columnas ancho_col = 40 * self.zoom # calculo ancho columna descripción w = width - dx * 2 - len(categorias) * ancho_col w = w - ancho_col # resto ancho col. nº de lista Y_INICIAL = 420 if not self.de_muestra else 180 y2 = Y_INICIAL lineas.append((y2 * self.zoom, self.margin_left, self.margin_right)) filas = [] # listas ordenadas por numero, con blanco al final listas = [l for l in Lista.many(sorted='cod_partido, numero') if not l.es_blanco()] 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) def _sort_listas_paso(lista_a, lista_b): return cmp(lista_a.partido.nombre.upper(), lista_b.partido.nombre.upper()) if get_tipo_elec("paso"): listas = sorted(listas, _sort_listas_paso) else: listas = sorted(listas, _sort_listas) lista_blanca = Lista.one(COD_LISTA_BLANCO) if lista_blanca is not None: listas.append(lista_blanca) partido_actual = None num_listas = 0 guiones = ["-"] * (len(categorias) + 1) principales = self.recuento._get_dict_candidatos() for lista in listas: lista_partido = False partido = lista.partido es_blanco = lista.es_blanco() if mostrar_partidos and not es_blanco and \ partido_actual != lista.cod_partido: partido_actual = lista.cod_partido if num_listas == 0: filas = filas[:-1] else: num_listas = 0 una_lista = num_listas == 0 and len(partido.listas) == 1 if una_lista or partido.nombre == lista.nombre: lista_partido = True else: fila = [partido.nombre] + guiones filas.append(fila) lista_partido = False es_cand_consulta = lista.candidatos[0].cod_categoria == "CPO" numero = lista.numero if lista.numero != "BLC" and \ not es_cand_consulta else "" nombre_lista = lista.nombre if not lista_partido \ else partido.nombre if es_cand_consulta: nombre_lista = "Consulta Popular - " + nombre_lista if not es_blanco and not lista_partido and get_tipo_elec("paso"): nombre_lista = "-- " + nombre_lista fila = [nombre_lista, numero] for categoria in categorias: candidato = principales.get((lista.codigo, categoria.codigo)) resultado = "- " if candidato is not None: resultado = self.recuento.obtener_resultado( categoria.codigo, candidato.codigo) fila.append(resultado) num_listas += 1 filas.append(fila) empujar_firmas += len(filas) * 23 # Armando tabla superior x = self.margin_left y = (400 if not self.de_muestra else 160) * self.zoom ancho_columnas = [w, ancho_col] + [ancho_col] * len(categorias) titulo_columnas = [_("palabra_lista"), "Nº"] + \ [cat.codigo for cat in categorias] columnas = [] for i, titulo in enumerate(titulo_columnas): columna = [titulo] for fila in filas: max_chars = ancho_columnas[i] * 80 / 800 data = fila[i] if i > 0 else fila[i][:max_chars] columna.append(data) columnas.append((columna, x, y, ancho_columnas[i])) x += ancho_columnas[i] ret['alto_rectangulo'] = len(filas) * 23 ret['tabla'] = columnas titulo_columnas = ["Cod.", _("palabra_categoria"), "N°"] w = width - dx * 2 - ancho_col * 3 ancho_columnas = [ancho_col, w, ancho_col] y2 = 435 if not self.de_muestra else 193 lineas.append((y2 * self.zoom + empujar_firmas, self.margin_left, self.margin_right)) valores_especiales = [] for lista_esp in get_config("listas_especiales"): _cod_esp = lista_esp.split(".")[-1] valores_especiales.append( (_cod_esp, _("titulo_votos_%s" % _cod_esp), self.recuento.listas_especiales[lista_esp])) general = self.recuento.boletas_contadas() general += sum(self.recuento.listas_especiales.values()) valores_especiales.append((COD_TOTAL, _("total_general"), general)) x = self.margin_left y += empujar_firmas + 30 columnas = [] for i, titulo in enumerate(titulo_columnas): columna = [titulo] for fila in valores_especiales: columna.append(fila[i]) columnas.append((columna, x, y, ancho_columnas[i])) x += ancho_columnas[i] ret['alto_rectangulo_especiales'] = len(valores_especiales) * 23 ret['tabla_especiales'] = columnas empujar_firmas += len(valores_especiales) * 23 ret['lineas'] = lineas return ret, empujar_firmas
def _get_tabla(self, width): ret = {} empujar_firmas = 0 lineas = [] # muestro la tabla solo si tiene recuento mostrar_partidos = False #any([lista.cod_partido for lista in Lista.all()]) if self.categoria is None: categorias = Categoria.many(sorted="posicion") else: categorias = Categoria.many(codigo=self.categoria) dx = 10 # ancho genérico de columnas ancho_col = 40 * self.zoom # calculo ancho columna descripción w = width - dx * 2 - len(categorias) * ancho_col w = w - ancho_col # resto ancho col. nº de lista Y_INICIAL = 420 if not self.de_muestra else 180 y2 = Y_INICIAL lineas.append((y2 * self.zoom, self.margin_left, self.margin_right)) filas = [] # listas ordenadas por numero, con blanco al final listas = [ l for l in Lista.many(sorted='cod_partido, numero') if not l.es_blanco() ] 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) def _sort_listas_paso(lista_a, lista_b): return cmp(lista_a.partido.nombre.upper(), lista_b.partido.nombre.upper()) if get_tipo_elec("paso"): listas = sorted(listas, _sort_listas_paso) else: listas = sorted(listas, _sort_listas) lista_blanca = Lista.one(COD_LISTA_BLANCO) if lista_blanca is not None: listas.append(lista_blanca) partido_actual = None num_listas = 0 guiones = ["-"] * (len(categorias) + 1) principales = self.recuento._get_dict_candidatos() for lista in listas: lista_partido = False partido = lista.partido es_blanco = lista.es_blanco() if mostrar_partidos and not es_blanco and \ partido_actual != lista.cod_partido: partido_actual = lista.cod_partido if num_listas == 0: filas = filas[:-1] else: num_listas = 0 una_lista = num_listas == 0 and len(partido.listas) == 1 if una_lista or partido.nombre == lista.nombre: lista_partido = True else: fila = [partido.nombre] + guiones filas.append(fila) lista_partido = False es_cand_consulta = lista.candidatos[0].cod_categoria == "CPO" numero = lista.numero if lista.numero != "BLC" and \ not es_cand_consulta else "" nombre_lista = lista.nombre if not lista_partido \ else partido.nombre if es_cand_consulta: nombre_lista = "Consulta Popular - " + nombre_lista if not es_blanco and not lista_partido and get_tipo_elec("paso"): nombre_lista = "-- " + nombre_lista fila = [nombre_lista, numero] for categoria in categorias: candidato = principales.get((lista.codigo, categoria.codigo)) resultado = "- " if candidato is not None: resultado = self.recuento.obtener_resultado( categoria.codigo, candidato.codigo) fila.append(resultado) num_listas += 1 filas.append(fila) empujar_firmas += len(filas) * 23 # Armando tabla superior x = self.margin_left y = (400 if not self.de_muestra else 160) * self.zoom ancho_columnas = [w, ancho_col] + [ancho_col] * len(categorias) titulo_columnas = [_("palabra_lista"), "Nº"] + \ [cat.codigo for cat in categorias] columnas = [] for i, titulo in enumerate(titulo_columnas): columna = [titulo] for fila in filas: max_chars = ancho_columnas[i] * 80 / 800 data = fila[i] if i > 0 else fila[i][:max_chars] columna.append(data) columnas.append((columna, x, y, ancho_columnas[i])) x += ancho_columnas[i] ret['alto_rectangulo'] = len(filas) * 23 ret['tabla'] = columnas titulo_columnas = ["Cod.", _("palabra_categoria"), "N°"] w = width - dx * 2 - ancho_col * 3 ancho_columnas = [ancho_col, w, ancho_col] y2 = 435 if not self.de_muestra else 193 lineas.append((y2 * self.zoom + empujar_firmas, self.margin_left, self.margin_right)) valores_especiales = [] for lista_esp in get_config("listas_especiales"): _cod_esp = lista_esp.split(".")[-1] valores_especiales.append( (_cod_esp, _("titulo_votos_%s" % _cod_esp), self.recuento.listas_especiales[lista_esp])) general = self.recuento.boletas_contadas() general += sum(self.recuento.listas_especiales.values()) valores_especiales.append((COD_TOTAL, _("total_general"), general)) x = self.margin_left y += empujar_firmas + 30 columnas = [] for i, titulo in enumerate(titulo_columnas): columna = [titulo] for fila in valores_especiales: columna.append(fila[i]) columnas.append((columna, x, y, ancho_columnas[i])) x += ancho_columnas[i] ret['alto_rectangulo_especiales'] = len(valores_especiales) * 23 ret['tabla_especiales'] = columnas empujar_firmas += len(valores_especiales) * 23 ret['lineas'] = lineas return ret, empujar_firmas
def a_tag(self, cod_categoria=None, con_dnis=True): """Devuelve la informacion del recuento para almacenar en tag rfid.""" # valores ordenados por cod_lista,cod_categoria valores = [] if cod_categoria is not None: por_categoria = 1 categorias = Categoria.many(codigo=cod_categoria) else: por_categoria = 0 categorias = Categoria.many(sorted='codigo') principales = self._get_dict_candidatos() for lista in Lista.many(sorted='codigo'): for categoria in categorias: try: candidato = principales.get((lista.codigo, categoria.codigo)) if candidato is not None: cod_candidato = candidato.codigo valores.append(self._resultados[categoria.codigo, cod_candidato]) except AttributeError: #si no hay candidato lo ignoramos pass ordered_keys = sorted(self.campos_extra.keys()) for key in ordered_keys: valores.append(self.campos_extra[key]) ordered_keys = sorted(self.listas_especiales.keys()) for key in ordered_keys: valores.append(self.listas_especiales[key]) container = Container(por_categoria=str(por_categoria)) if por_categoria: container.cod_categoria = cod_categoria.encode('ascii') else: container.cod_categoria = "" # cod_mesa if SMART_PACKING: num_mesa = self.mesa.numero.encode('ascii') try: datos = pack(int(num_mesa), valores) except NameError: datos = pack(int(num_mesa), valores, max_bits=MAXBITS*2) else: cod_mesa = self.mesa.codigo.encode('ascii') datos = str(len(cod_mesa)) + cod_mesa + pack(valores) container.datos = datos documentos = [] for autoridad in self.autoridades: documentos.append(int(autoridad.nro_documento)) if con_dnis: documentos = [] for autoridad in self.autoridades: documentos.append(int(autoridad.nro_documento)) len_documentos = len(documentos) if len_documentos == 1: documentos.append(0) elif len_documentos == 0: documentos = [0, 0] documentos = pack_slow(documentos, 27) container.documentos = documentos struct = struct_recuento_dni else: struct = struct_recuento return struct.build(container)
def cargar_listas(self, cod_candidatos=None, cat=None): """Envia el comando para cargar las listas.""" if cod_candidatos is None: cod_candidatos = [] cod_partido = self.agrupacion.codigo if self.agrupacion is not None \ else None if cod_partido is None: listas = Lista.all() else: listas = self.agrupador.one(cod_partido).listas listas_dict = [] if MEZCLAR_LISTAS: listas.shuffle() for lista in listas: candidatos = lista.candidatos if len(candidatos): hash_lista = [candidato.codigo for candidato in candidatos] lista_dict = lista.to_dict() lista_dict['hash'] = hash_lista lista_dict['imagen'] = _image_name(lista.codigo) lista_dict['candidatos'] = [] for candidato in candidatos: candidato_dict = candidato.full_dict(_image_name) candidato_dict['hash_lista'] = hash_lista candidato_dict['categoria'] = candidato.categoria.nombre lista_dict['candidatos'].append(candidato_dict) listas_dict.append(lista_dict) if get_tipo_elec("adh_segmentada"): if cat is None: search_cat = Categoria.one(sorted="posicion") else: cat = Categoria.one(cat) search_cat = cat.next(consulta_popular=False) repite, listas_filtradas, next_search_cat = \ self._cat_con_adh(listas_dict, cat, search_cat, cod_candidatos) if repite and next_search_cat is not None: listas_dict = listas_filtradas ultima_cat = False else: ultima_cat = True listas_finales = [] for lista in listas_dict: for candidato in listas_filtradas: if lista['hash'] == candidato['hash_lista']: listas_finales.append(lista) listas_dict = listas_finales if len(listas_dict) > 1: if get_tipo_elec("adh_segmentada") and repite and \ get_tipo_elec("adh_segmentada_nivel") > len(cod_candidatos): self.send_command("cargar_adhesiones", [ listas_dict, search_cat.codigo, cod_candidatos, ultima_cat ]) else: self.send_command("cargar_listas_params", [listas_dict, None, cod_candidatos]) else: self.seleccionar_lista( [listas_dict[0]['codigo'], None, None, True])
def cargar_listas(self, cod_candidatos=None, cat=None): """Envia el comando para cargar las listas.""" if cod_candidatos is None: cod_candidatos = [] cod_partido = self.agrupacion.codigo if self.agrupacion is not None else None if cod_partido is None: listas = Lista.all() else: listas = self.agrupador.one(cod_partido).listas listas_dict = [] if MEZCLAR_LISTAS: listas.shuffle() for lista in listas: candidatos = lista.candidatos if len(candidatos): hash_lista = [candidato.codigo for candidato in candidatos] lista_dict = lista.to_dict() lista_dict["hash"] = hash_lista lista_dict["imagen"] = _image_name(lista.codigo) lista_dict["candidatos"] = [] for candidato in candidatos: candidato_dict = candidato.full_dict(_image_name) candidato_dict["hash_lista"] = hash_lista candidato_dict["categoria"] = candidato.categoria.nombre lista_dict["candidatos"].append(candidato_dict) listas_dict.append(lista_dict) if get_tipo_elec("adh_segmentada"): if cat is None: search_cat = Categoria.one(sorted="posicion") else: cat = Categoria.one(cat) search_cat = cat.next(consulta_popular=False) repite, listas_filtradas, next_search_cat = self._cat_con_adh(listas_dict, cat, search_cat, cod_candidatos) if repite and next_search_cat is not None: listas_dict = listas_filtradas ultima_cat = False else: ultima_cat = True listas_finales = [] for lista in listas_dict: for candidato in listas_filtradas: if lista["hash"] == candidato["hash_lista"]: listas_finales.append(lista) listas_dict = listas_finales if len(listas_dict) > 1: if ( get_tipo_elec("adh_segmentada") and repite and get_tipo_elec("adh_segmentada_nivel") > len(cod_candidatos) ): self.send_command("cargar_adhesiones", [listas_dict, search_cat.codigo, cod_candidatos, ultima_cat]) else: self.send_command("cargar_listas_params", [listas_dict, None, cod_candidatos]) else: self.seleccionar_lista([listas_dict[0]["codigo"], None, None, True])