def cargar_candidatos(self, cod_categoria, cod_partido=None): """"Envia los candidatos a la interfaz web.""" if self.agrupacion is not None and cod_partido is None: cod_partido = self.agrupacion.codigo cand_list = self._get_candidatos_categoria(cod_categoria, cod_partido) if MEZCLAR_CANDIDATOS: shuffle(cand_list) # si es una PASO y hay mas listas de las permitidas agrupamos por # Partido o Alianza segun sea el caso if cod_partido is None and get_tipo_elec("paso") and len(cand_list) > \ get_tipo_elec("colapsar_listas"): partidos = self._get_partidos() self.send_command( "cargar_partido_categorias", { 'candidatos': cand_list, 'cod_categoria': cod_categoria, 'partidos': partidos, 'agrupador': self.agrupador.__name__.lower() }) else: # En caso de que haya un solo candidato lo seleccionamos y pasamos # a la proxima categoria, esto es porque puede pasar que la # organizacion politica tenga una sola lista if len(cand_list) == 1: self.seleccionar_candidatos( [cod_categoria, [cand_list[0]['codigo']]]) else: self.send_command("cargar_candidatos", { 'candidatos': cand_list, 'cod_categoria': cod_categoria })
def get_constants(): translations = ("si", "no", "ver_qr", "alto_contraste", "muchas_gracias", "puede_retirar_boleta", "si_desea_verificarlo", "imprimiendo_voto", "no_retirar_boleta", "agradecimiento", "cancelar", "volver_al_inicio", "salir", "terminar_escrutinio", "aceptar", "boletas_procesadas", "escrutinio_mesa", "iniciar_instructivo", "finalizar_instructivo", "bienvenida_recuento", "boleta_unica_electronica", "caracteristicas_pantalla", "slide_2_titulo", "slide_2_contenido", "slide_3_subtitulo", "slide_3_recuadro_1", "slide_3_recuadro_2", "slide_3_recuadro_3", "slide_4_subtitulo", "slide_4_recuadro_1", "slide_5_subtitulo", "slide_5_recuadro_1", "slide_6_titulo", "slide_6_subtitulo", "presione_imprimir", "fiscales_qr", "introduzca_acta_transmision", "introduzca_cerfificado_escrutinio", "asegurese_firmar_acta", "introduzca_certificado_boletas", "slide_2_bullet_1", "slide_2_bullet_2", "slide_2_bullet_3", "introduzca_sobre_actas", "slide_3_bullet_1", "slide_3_bullet_2", "slide_3_bullet_3", "slide_3_bullet_4", "slide_3_bullet_5", "entregue_certif_transmision", "el_suplente_acercara", "introduzca_certificados_para_fiscales", "usted_puede_imprimir", "introduzca_acta_cierre_nuevamente") encabezado = get_config('datos_eleccion') constants_dict = { "juego_de_datos": JUEGO_DE_DATOS, "cod_lista_blanco": COD_LISTA_BLANCO, "elecciones_internas": get_tipo_elec("interna"), "elecciones_paso": get_tipo_elec("paso"), "mostrar_cursor": MOSTRAR_CURSOR, "encabezado": [(texto, encabezado[texto]) for texto in encabezado], "i18n": [(trans, _(trans)) for trans in translations], "palabra_lista": _("palabra_lista"), "palabra_nombre": _("palabra_nombre"), "palabra_categoria": _("palabra_categoria"), "palabra_siguiente": _("palabra_siguiente"), "palabra_anterior": _("palabra_anterior"), "palabra_imprimir": _("palabra_imprimir"), "terminar_escrutinio": _("terminar_escrutinio"), "terminar": _("terminar"), "salir": _("salir"), "sus_candidatos": _("sus_candidatos"), "candidato_no_seleccionado": _("candidato_no_seleccionado"), "cod_estado_espera": RECUENTO_NO_TAG, "cod_estado_ok": RECUENTO_OK, "cod_boleta_repetida": RECUENTO_ERROR_REPETIDO, "cod_error_lectura": RECUENTO_ERROR, "usar_qr": USAR_QR, "usa_armve": USA_ARMVE, "ext_img_voto": EXT_IMG_VOTO, "effects": EFECTOS_RECUENTO, "flavor": FLAVOR, "templates": get_templates(), "PATH_TEMPLATES_VOTO": "file:///%s/" % PATH_TEMPLATES_VOTO, "CIERRE_ESCRUTINIO": CIERRE_ESCRUTINIO, "CIERRE_TRANSMISION": CIERRE_TRANSMISION, "listas_especiales": get_config("listas_especiales"), "cod_estado_imprimiendo": RECUENTO_IMPRIMIENDO, "cod_estado_generando": RECUENTO_GENERANDO } return constants_dict
def get_constants(): translations = ( "si", "no", "ver_qr", "introduzca_acta_cierre", "alto_contraste", "muchas_gracias", "puede_retirar_boleta", "si_desea_verificarlo", "imprimiendo_voto", "no_retirar_boleta", "agradecimiento", "cancelar", "volver_al_inicio", "salir", "terminar_escrutinio", "aceptar", "boletas_procesadas", "escrutinio_mesa", "iniciar_instructivo", "finalizar_instructivo", "bienvenida_recuento", "boleta_unica_electronica", "caracteristicas_pantalla", "slide_2_titulo", "slide_2_contenido", "slide_3_subtitulo", "slide_3_recuadro_1", "slide_3_recuadro_2", "slide_3_recuadro_3", "slide_4_subtitulo", "slide_4_recuadro_1", "slide_5_subtitulo", "slide_5_recuadro_1", "slide_6_titulo", "slide_6_subtitulo", "presione_imprimir", "fiscales_qr", "introduzca_acta_transmision", "introduzca_cerfificado_escrutinio", "asegurese_firmar_acta", "introduzca_certificado_boletas", "slide_2_bullet_1", "slide_2_bullet_2", "slide_2_bullet_3", "introduzca_sobre_actas", "slide_3_bullet_1", "slide_3_bullet_2", "slide_3_bullet_3", "slide_3_bullet_4", "slide_3_bullet_5", "entregue_certif_transmision", "el_suplente_acercara", "introduzca_certificados_para_fiscales", "usted_puede_imprimir") encabezado = get_config('datos_eleccion') constants_dict = { "juego_de_datos": JUEGO_DE_DATOS, "cod_lista_blanco": COD_LISTA_BLANCO, "elecciones_internas": get_tipo_elec("interna"), "elecciones_paso": get_tipo_elec("paso"), "mostrar_cursor": MOSTRAR_CURSOR, "encabezado": [(texto, encabezado[texto]) for texto in encabezado], "i18n": [(trans, _(trans)) for trans in translations], "palabra_lista": _("palabra_lista"), "palabra_nombre": _("palabra_nombre"), "palabra_categoria": _("palabra_categoria"), "palabra_siguiente": _("palabra_siguiente"), "palabra_anterior": _("palabra_anterior"), "palabra_imprimir": _("palabra_imprimir"), "terminar_escrutinio": _("terminar_escrutinio"), "terminar": _("terminar"), "salir": _("salir"), "sus_candidatos": _("sus_candidatos"), "candidato_no_seleccionado": _("candidato_no_seleccionado"), "cod_estado_espera": RECUENTO_NO_TAG, "cod_estado_ok": RECUENTO_OK, "cod_boleta_repetida": RECUENTO_ERROR_REPETIDO, "cod_error_lectura": RECUENTO_ERROR, "usar_qr": USAR_QR, "usa_armve": USA_ARMVE, "ext_img_voto": EXT_IMG_VOTO, "effects": EFECTOS_RECUENTO, "flavor": FLAVOR, "templates": get_templates(), "PATH_TEMPLATES_VOTO": "file:///%s/" % PATH_TEMPLATES_VOTO, "CIERRE_ESCRUTINIO": CIERRE_ESCRUTINIO, "CIERRE_TRANSMISION": CIERRE_TRANSMISION, "listas_especiales": get_config("listas_especiales"), "cod_estado_imprimiendo": RECUENTO_IMPRIMIENDO, "cod_estado_generando": RECUENTO_GENERANDO } return constants_dict
def cargar_candidatos(self, cod_categoria, cod_partido=None): """"Envia los candidatos a la interfaz web.""" if self.agrupacion is not None and cod_partido is None: cod_partido = self.agrupacion.codigo cand_list = self._get_candidatos_categoria(cod_categoria, cod_partido) if MEZCLAR_CANDIDATOS: shuffle(cand_list) # si es una PASO y hay mas listas de las permitidas agrupamos por # Partido o Alianza segun sea el caso if cod_partido is None and get_tipo_elec("paso") and len(cand_list) > \ get_tipo_elec("colapsar_listas"): partidos = self._get_partidos() self.send_command("cargar_partido_categorias", {'candidatos': cand_list, 'cod_categoria': cod_categoria, 'partidos': partidos, 'agrupador': self.agrupador.__name__.lower()}) else: # En caso de que haya un solo candidato lo seleccionamos y pasamos # a la proxima categoria, esto es porque puede pasar que la # organizacion politica tenga una sola lista if len(cand_list) == 1: self.seleccionar_candidatos([cod_categoria, [cand_list[0]['codigo']]]) else: self.send_command("cargar_candidatos", {'candidatos': cand_list, 'cod_categoria': cod_categoria})
def seleccionar_modo(self, modo): """Envia el comando de cargar categorias o el de cargar listas dependiendo del modo de votacion elegido. """ self.reiniciar_seleccion() if get_tipo_elec("paso"): self.agrupacion = None if modo == BOTON_VOTAR_POR_CATEGORIAS: self.cargar_categorias() elif modo == BOTON_LISTA_COMPLETA: if get_tipo_elec("paso"): self.set_pantalla_partidos() else: self.cargar_listas()
def _cat_con_adh(self, listas, cat, search_cat, cod_candidatos, repite=False): if cat is not None and len(cod_candidatos): lis_con_cand = self._matchea_adhesiones(cod_candidatos, listas, cat) listas = lis_con_cand ids_lista = set() listas_filtradas = [] for lista in listas: for candidato in lista["candidatos"]: if candidato["cod_categoria"] == search_cat.codigo: if candidato["codigo"] in ids_lista: repite = True else: ids_lista.add(candidato["codigo"]) listas_filtradas.append(candidato) next_search_cat = search_cat.next(consulta_popular=False) if ( len(listas_filtradas) == len(listas) or len(listas_filtradas) < 2 or get_tipo_elec("adh_segmentada_nivel") <= len(cod_candidatos) ) and next_search_cat is not None: repite, listas_filtradas, next_search_cat = self._cat_con_adh( listas, cat, next_search_cat, cod_candidatos, repite ) return repite, listas_filtradas, next_search_cat
def seleccionar_idioma(self, idioma): cambiar_locale(idioma) self.send_constants() if get_tipo_elec("interna"): self.set_pantalla_partidos() else: self.get_pantalla_modos()
def _cat_con_adh(self, listas, cat, search_cat, cod_candidatos, repite=False): if cat is not None and len(cod_candidatos): lis_con_cand = self._matchea_adhesiones(cod_candidatos, listas, cat) listas = lis_con_cand ids_lista = set() listas_filtradas = [] for lista in listas: for candidato in lista['candidatos']: if candidato['cod_categoria'] == search_cat.codigo: if candidato['codigo'] in ids_lista: repite = True else: ids_lista.add(candidato['codigo']) listas_filtradas.append(candidato) next_search_cat = search_cat.next(consulta_popular=False) if (len(listas_filtradas) == len(listas) or len(listas_filtradas) < 2 or get_tipo_elec("adh_segmentada_nivel") <= len(cod_candidatos)) and \ next_search_cat is not None: repite, listas_filtradas, next_search_cat = \ self._cat_con_adh(listas, cat, next_search_cat, cod_candidatos, repite) return repite, listas_filtradas, next_search_cat
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_constants(ubicacion=None): translations = ("conformar_voto", "si", "votar_por_categorias", "votar_lista_completa", "su_seleccion", "votar_en_blanco", "confirmar_voto", "alto_contraste", "introduzca_boleta", "si_tiene_dudas", "su_voto_impreso", "no", "muchas_gracias", "puede_retirar_boleta", "si_desea_verificarlo", "imprimiendo_voto", "no_retirar_boleta", "agradecimiento", "este_es_su_voto", "volver_al_inicio", "aguarde_unos_minutos", "seleccionar_idioma", "aceptar", "cancelar", "confirmar_seleccion", "cargando_interfaz", "espere_por_favor", "verificando_voto") encabezado = get_config('datos_eleccion') constants_dict = { "juego_de_datos": JUEGO_DE_DATOS, "ubicacion": ubicacion, "cod_lista_blanco": COD_LISTA_BLANCO, "elecciones_internas": get_tipo_elec("interna"), "elecciones_paso": get_tipo_elec("paso"), "agrupar_por_partido": AGRUPAR_POR_PARTIDO, "mostrar_cursor": MOSTRAR_CURSOR, "encabezado": [(texto, encabezado[texto]) for texto in encabezado], "i18n": [(trans, _(trans)) for trans in translations], "palabra_lista": _("lista"), "sus_candidatos": _("sus_candidatos"), "candidato_no_seleccionado": _("candidato_no_seleccionado"), "usa_armve": USA_ARMVE, "ext_img_voto": EXT_IMG_VOTO, "effects": EFECTOS_VOTO, "flavor": FLAVOR, "templates": get_templates(), "numeros_templates": NUMEROS_TEMPLATES[FLAVOR], "PATH_TEMPLATES_VOTO": "file:///%s/" % PATH_TEMPLATES_VOTO, "ADHESION_SEGMENTADA": get_tipo_elec("adh_segmentada"), "USAR_BUFFER_IMPRESION": USAR_BUFFER_IMPRESION, "COLAPSAR_LISTAS_PASO": get_tipo_elec("colapsar_listas"), "COLAPSAR_INTERNAS_PASO": get_tipo_elec("colapsar_partidos"), "BARRA_SELECCION": BARRA_SELECCION, "asistida": False, } return constants_dict
def get_constants(ubicacion=None): translations = ( "conformar_voto", "si", "votar_por_categorias", "votar_lista_completa", "su_seleccion", "votar_en_blanco", "confirmar_voto", "alto_contraste", "introduzca_boleta", "si_tiene_dudas", "su_voto_impreso", "no", "muchas_gracias", "puede_retirar_boleta", "si_desea_verificarlo", "imprimiendo_voto", "no_retirar_boleta", "agradecimiento", "este_es_su_voto", "volver_al_inicio", "aguarde_unos_minutos", "seleccionar_idioma", "aceptar", "cancelar", "confirmar_seleccion", "cargando_interfaz", "espere_por_favor", "verificando_voto") encabezado = get_config('datos_eleccion') constants_dict = { "juego_de_datos": JUEGO_DE_DATOS, "ubicacion": ubicacion, "cod_lista_blanco": COD_LISTA_BLANCO, "elecciones_internas": get_tipo_elec("interna"), "elecciones_paso": get_tipo_elec("paso"), "agrupar_por_partido": AGRUPAR_POR_PARTIDO, "mostrar_cursor": MOSTRAR_CURSOR, "encabezado": [(texto, encabezado[texto]) for texto in encabezado], "i18n": [(trans, _(trans)) for trans in translations], "palabra_lista": _("lista"), "sus_candidatos": _("sus_candidatos"), "candidato_no_seleccionado": _("candidato_no_seleccionado"), "usa_armve": USA_ARMVE, "ext_img_voto": EXT_IMG_VOTO, "effects": EFECTOS_VOTO, "flavor": FLAVOR, "templates": get_templates(), "numeros_templates": NUMEROS_TEMPLATES[FLAVOR], "PATH_TEMPLATES_VOTO": "file:///%s/" % PATH_TEMPLATES_VOTO, "ADHESION_SEGMENTADA": get_tipo_elec("adh_segmentada"), "USAR_BUFFER_IMPRESION": USAR_BUFFER_IMPRESION, "COLAPSAR_LISTAS_PASO": get_tipo_elec("colapsar_listas"), "COLAPSAR_INTERNAS_PASO": get_tipo_elec("colapsar_partidos"), "BARRA_SELECCION": BARRA_SELECCION, "asistida": False, } return constants_dict
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 cargar_candidatos(self, cod_categoria, cod_partido=None): """"Envia los candidatos a la interfaz web.""" if self.agrupacion is not None and cod_partido is None: cod_partido = self.agrupacion.codigo cand_list = self._get_candidatos_categoria(cod_categoria, cod_partido) if MEZCLAR_CANDIDATOS: shuffle(cand_list) # si es una PASO y hay mas listas de las permitidas agrupamos por # Partido o Alianza segun sea el caso if cod_partido is None and get_tipo_elec("paso") and len(cand_list) > get_tipo_elec("colapsar_listas"): partidos = {} for candidato in cand_list: cod_partido = candidato["partido"]["codigo"] if cod_partido not in partidos: candidato["partido"]["imagen"] = _image_name(cod_partido) partidos[cod_partido] = candidato["partido"] partidos = partidos.values() shuffle(partidos) self.send_command( "cargar_partido_categorias", { "candidatos": cand_list, "cod_categoria": cod_categoria, "partidos": partidos, "agrupador": self.agrupador.__name__.lower(), }, ) else: # En caso de que haya un solo candidato lo seleccionamos y pasamos # a la proxima categoria, esto es porque puede pasar que la # organizacion politica tenga una sola lista if len(cand_list) == 1: self.seleccionar_candidatos([cod_categoria, [cand_list[0]["codigo"]]]) else: self.send_command("cargar_candidatos", {"candidatos": cand_list, "cod_categoria": cod_categoria})
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 seleccionar_partido(self, data): """Selecciona el partido y envia el comando para ver la pantalla de modos. """ if data[1] is None: self.agrupacion = self.agrupador.one(data[0]) if get_tipo_elec("paso"): if data[1] is None: self.cargar_listas() else: self.cargar_candidatos(data[1], data[0]) else: self.get_pantalla_modos()
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 _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 _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 _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 _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 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])
def numero_colapsado(self): return 15 if hasattr(self, "agrupacion_partidos") and \ self.agrupacion_partidos else get_tipo_elec("colapsar_partidos")