Beispiel #1
0
    def desde_string(cls, tag, mesa=None):
        datos_tag = struct_voto.parse(tag)

        if mesa is not None:
            # verificamos la mesa
            if mesa.cod_datos != datos_tag.ubicacion:
                raise MesaIncorrecta()
        else:
            #OJO: ESTO trae cualquier mesa del juego de datos
            mesa = Ubicacion.one(cod_datos=datos_tag.ubicacion)
            current_data_code(datos_tag.ubicacion)

        candidatos = []
        for elem in datos_tag.voto_categoria:
            cod_categoria = elem["cod_categoria"].strip()
            cod_candidato = elem["cod_candidatura"].strip()

            if cod_candidato == COD_LISTA_BLANCO:
                candidato = Candidato.one(codigo__endswith=cod_candidato,
                                          cod_categoria=cod_categoria)
            else:
                candidato = Candidato.one(codigo__endswith="." + cod_candidato,
                                          cod_categoria=cod_categoria)
            candidatos.append(candidato)

        return Seleccion(mesa, None, candidatos)
Beispiel #2
0
    def desde_string(cls, tag, mesa=None):
        datos_tag = struct_voto.parse(tag)

        if mesa is not None:
            # verificamos la mesa
            if mesa.cod_datos != datos_tag.ubicacion:
                raise MesaIncorrecta()
        else:
            #OJO: ESTO trae cualquier mesa del juego de datos
            mesa = Ubicacion.one(cod_datos=datos_tag.ubicacion)
            current_data_code(datos_tag.ubicacion)

        if datos_tag.cod_interna != "":
            interna = Partido.one(datos_tag.cod_interna)
        else:
            interna = None

        candidatos = []
        for elem in datos_tag.voto_categoria:
            cod_categoria = elem["cod_categoria"].strip()
            cod_candidato = elem["cod_candidatura"].strip()

            if cod_candidato == COD_LISTA_BLANCO:
                candidato = Candidato.one(codigo__endswith=cod_candidato,
                                          cod_categoria=cod_categoria)
            else:
                candidato = Candidato.one(codigo__endswith="." + cod_candidato,
                                          cod_categoria=cod_categoria)
            candidatos.append(candidato)

        return Seleccion(mesa, None, candidatos)
Beispiel #3
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
Beispiel #4
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
Beispiel #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
Beispiel #6
0
    def mostrar_consulta_popular(self, cod_categoria):
        candidatos = Candidato.principales(cod_categoria)
        candidatos_dict = candidatos.full_dict(_image_name)

        if MEZCLAR_CONSULTA:
            shuffle(candidatos_dict)

        self.send_command("cargar_consulta_popular", [candidatos_dict, cod_categoria])
Beispiel #7
0
    def mostrar_consulta_popular(self, cod_categoria):
        candidatos = Candidato.principales(cod_categoria)
        candidatos_dict = candidatos.full_dict(_image_name)

        if MEZCLAR_CONSULTA:
            shuffle(candidatos_dict)

        self.send_command("cargar_consulta_popular",
                          [candidatos_dict, cod_categoria])
Beispiel #8
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
Beispiel #9
0
 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
Beispiel #10
0
    def _get_dict_candidatos(self):
        if self.__dict_candidatos is None:
            cand = {(candidato.cod_lista, candidato.cod_categoria): candidato
                    for candidato in Candidato.many(titular=True,
                                                    numero_de_orden=1)}

            self.__dict_candidatos = cand
        else:
            cand = self.__dict_candidatos

        return cand
Beispiel #11
0
    def _get_dict_candidatos(self):
        if self.__dict_candidatos is None:
            cand = {(candidato.cod_lista, candidato.cod_categoria): candidato
                    for candidato in Candidato.many(titular=True,
                                                    numero_de_orden=1)}

            self.__dict_candidatos = cand
        else:
            cand = self.__dict_candidatos

        return cand
Beispiel #12
0
 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
Beispiel #13
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
Beispiel #14
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
Beispiel #15
0
    def elegir_candidato(self, candidato, borrar=True):
        """Elegir un candidato."""
        if candidato is not None:
            if borrar:
                self.borrar_categoria(candidato.cod_categoria)
            self._candidatos.append(candidato)

            categorias_hijas = candidato.categoria.get_hijas()
            if len(categorias_hijas) > 0:
                for cat_hija in categorias_hijas:
                    principal = Candidato.one(cod_categoria=cat_hija.codigo,
                                              cod_lista=candidato.cod_lista,
                                              titular=True,
                                              numero_de_orden=1)
                    self.elegir_candidato(principal)
Beispiel #16
0
    def elegir_candidato(self, candidato, borrar=True):
        """Elegir un candidato."""
        if candidato is not None:
            if borrar:
                self.borrar_categoria(candidato.cod_categoria)
            self._candidatos.append(candidato)

            categorias_hijas = candidato.categoria.get_hijas()
            if len(categorias_hijas) > 0:
                for cat_hija in categorias_hijas:
                    principal = Candidato.one(cod_categoria=cat_hija.codigo,
                                              cod_lista=candidato.cod_lista,
                                              titular=True,
                                              numero_de_orden=1)
                    self.elegir_candidato(principal)
Beispiel #17
0
 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
Beispiel #18
0
    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
Beispiel #19
0
    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
Beispiel #20
0
    def seleccionar_candidatos(self, data):
        """Selecciona el candidato y envia el comando para cargar las
        categorias.
        """
        cod_categoria, cod_candidatos = data
        muchos_candidatos = len(cod_candidatos) > 1

        if muchos_candidatos:
            self.parent.seleccion.borrar_categoria(cod_categoria)

        for elem in data[1]:
            candidato = Candidato.one(elem)
            self.parent.seleccion.elegir_candidato(candidato, not muchos_candidatos)

        categoria = Categoria.one(cod_categoria)
        if categoria.consulta_popular:
            self.mostrar_confirmacion()
        else:
            self.cargar_categorias()
Beispiel #21
0
    def seleccionar_candidatos(self, data):
        """Selecciona el candidato y envia el comando para cargar las
        categorias.
        """
        cod_categoria, cod_candidatos = data
        muchos_candidatos = len(cod_candidatos) > 1

        if muchos_candidatos:
            self.parent.seleccion.borrar_categoria(cod_categoria)

        for elem in data[1]:
            candidato = Candidato.one(elem)
            self.parent.seleccion.elegir_candidato(candidato,
                                                   not muchos_candidatos)

        categoria = Categoria.one(cod_categoria)
        if categoria.consulta_popular:
            self.mostrar_confirmacion()
        else:
            self.cargar_categorias()
Beispiel #22
0
 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
Beispiel #23
0
 def rellenar_de_blanco(self):
     for categoria in Categoria.many(consulta_popular=False):
         if self.candidato_categoria(categoria.codigo) is None:
             blanco = Candidato.one(cod_categoria=categoria.codigo,
                                    cod_lista=COD_LISTA_BLANCO)
             self.elegir_candidato(blanco)
Beispiel #24
0
 def rellenar_de_blanco(self):
     for categoria in Categoria.many(consulta_popular=False):
         if self.candidato_categoria(categoria.codigo) is None:
             blanco = Candidato.one(cod_categoria=categoria.codigo,
                                    cod_lista=COD_LISTA_BLANCO)
             self.elegir_candidato(blanco)