Esempio n. 1
0
    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
Esempio n. 2
0
    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
Esempio n. 3
0
    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
Esempio n. 4
0
    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
Esempio n. 5
0
    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
Esempio n. 6
0
    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
Esempio n. 7
0
    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)
Esempio n. 8
0
File: voto.py Progetto: sunzu/vot.ar
    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)
Esempio n. 9
0
    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)
Esempio n. 10
0
    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)
Esempio n. 11
0
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
Esempio n. 12
0
    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")
Esempio n. 13
0
    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)
Esempio n. 14
0
File: voto.py Progetto: sunzu/vot.ar
    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)
Esempio n. 15
0
    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
Esempio n. 16
0
    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
Esempio n. 17
0
    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)
Esempio n. 18
0
    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
Esempio n. 19
0
    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
Esempio n. 20
0
    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)
Esempio n. 21
0
File: voto.py Progetto: sunzu/vot.ar
    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])
Esempio n. 22
0
    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])