Esempio n. 1
0
def decodear_string_apertura(array_datos):
    ret = u""
    string_datos = b''
    for elem in array_datos:
        string_datos += elem

    datos = unpack_slow(string_datos, 5)
    for codigo_letra in datos:
        letra = None
        # A-Z
        if 1 <= codigo_letra <= 27:
            letra = chr(codigo_letra + 64)
        # '
        elif codigo_letra == 28:
            letra = u"'"
        # Ñ
        elif codigo_letra == 29:
            letra = u"Ñ"
        # Espacio
        elif codigo_letra == 30:
            letra = u" "
        elif codigo_letra == 31:
            letra = ";"
        if letra is not None:
            ret += letra
    return ret
Esempio n. 2
0
    def desde_tag(cls, tag):
        """Devuelve un apertura a partir de la informacion de un tag rfid."""
        autoridades = []
        datos = struct_apertura.parse(tag)
        nro_mesa = datos.numero_mesa
        horas = datos.hora
        minutos = datos.minutos
        mesa = Ubicacion.first(numero=str(nro_mesa))
        nombres = decodear_string_apertura(datos.nombres).split(";")

        dnis = unpack_slow(datos.dnis, BITS_DNI)
        for i in range(datos.cantidad_autoridades):
            apellido = nombres.pop(0)
            nombre = nombres.pop(0)
            tipo = datos.tipos.pop(0)
            dni = dnis.pop(0)
            autoridad = Autoridad(apellido, nombre, tipo, dni)
            autoridades.append(autoridad)
        return Apertura(mesa, autoridades, hora={"horas": horas,
                                                 "minutos": minutos})
Esempio n. 3
0
    def desde_tag(cls, tag):
        """Devuelve un apertura a partir de la informacion de un tag rfid."""
        autoridades = []
        datos = struct_apertura.parse(tag)
        nro_mesa = datos.numero_mesa
        horas = datos.hora
        minutos = datos.minutos
        mesa = Ubicacion.first(numero=str(nro_mesa))
        nombres = decodear_string_apertura(datos.nombres).split(";")

        dnis = unpack_slow(datos.dnis, BITS_DNI)
        for i in range(datos.cantidad_autoridades):
            apellido = nombres.pop(0)
            nombre = nombres.pop(0)
            tipo = datos.tipos.pop(0)
            dni = dnis.pop(0)
            autoridad = Autoridad(apellido, nombre, tipo, dni)
            autoridades.append(autoridad)
        return Apertura(mesa,
                        autoridades,
                        hora={
                            "horas": horas,
                            "minutos": minutos
                        })
Esempio n. 4
0
    def desde_tag(cls, tag, con_dnis=True):
        # Si vamos a guardar los dnis usamos el struct con DNIS, sino no.
        if con_dnis:
            struct = struct_recuento_dni
        else:
            struct = struct_recuento
        # Parseamos el tag
        datos_tag = struct.parse(tag)
        # Nos fijamos si el tag tiene la data de una categoria o solo de una
        if SMART_PACKING:
            try:
                string_datos = b""
                for byte in datos_tag.datos:
                    string_datos += byte
                num_mesa, valores = unpack(string_datos)
            except IndexError as e:
                raise TagMalformado(e)
            mesa = Ubicacion.first(numero=str(num_mesa))
        else:
            tag = b""
            for byte in datos_tag.datos:
                tag += byte
            len_cod_mesa = int(tag[:2])
            cod_mesa = tag[2:2 + len_cod_mesa]
            mesa = Ubicacion.first(codigo=cod_mesa.decode("utf-8"))
            valores = unpack(tag[len_cod_mesa + 2:])

        if not mesa:
            raise MesaNoEncontrada()
        mesa.usar_cod_datos()
        recuento = Recuento(mesa)
        grupo = datos_tag.grupo
        # Establecemos el grupo del recuento, si viene en 0 lo establecemos en
        # None
        recuento.grupo_cat = grupo if grupo else None

        # Traemos las candidaturas que se guardaron en el recuento
        candidatos = Candidatura.para_recuento(recuento.grupo_cat)
        # leemos los valores y los seteamos en los resultados
        for candidato in candidatos:
            recuento.pizarra.set_votos_candidato(candidato.id_umv,
                                                 valores.pop(0))

        # extraemos los campos extras (boletas_contadas, total_boletas, etc)
        ordered_keys = sorted(recuento.campos_extra.keys())
        for key in ordered_keys:
            recuento.campos_extra[key] = valores.pop(0)

        # extraemos las listas especiales (OBS, IMP, NUL, REC, etc)
        ordered_keys = sorted(recuento.listas_especiales.keys())
        for key in ordered_keys:
            recuento.listas_especiales[key] = valores.pop(0)

        # si estan los DNIS los extraemos del tag
        if con_dnis:
            dnis = unpack_slow(datos_tag.documentos, BITS_DNI)
            for dni in dnis:
                autoridad = Autoridad("", "", 0, dni)
                recuento.autoridades.append(autoridad)

        return recuento
Esempio n. 5
0
    def desde_tag(cls, tag, con_dnis=True):
        # Si vamos a guardar los dnis usamos el struct con DNIS, sino no.
        if con_dnis:
            struct = struct_recuento_dni
        else:
            struct = struct_recuento
        # Parseamos el tag
        datos_tag = struct.parse(tag)
        # Nos fijamos si el tag tiene la data de una categoria o solo de una
        if SMART_PACKING:
            try:
                string_datos = b""
                for byte in datos_tag.datos:
                    string_datos += byte
                num_mesa, valores = unpack(string_datos)
            except IndexError as e:
                raise TagMalformado(e)
            mesa = Ubicacion.first(numero=str(num_mesa))
        else:
            tag = b""
            for byte in datos_tag.datos:
                tag += byte
            len_cod_mesa = int(tag[:2])
            cod_mesa = tag[2:2 + len_cod_mesa]
            mesa = Ubicacion.first(codigo=cod_mesa.decode("utf-8"))
            valores = unpack(tag[len_cod_mesa + 2:])

        if not mesa:
            raise MesaNoEncontrada()
        mesa.usar_cod_datos()
        recuento = Recuento(mesa)
        grupo = datos_tag.grupo
        # Establecemos el grupo del recuento, si viene en 0 lo establecemos en
        # None
        recuento.grupo_cat = grupo if grupo else None

        # Traemos las candidaturas que se guardaron en el recuento
        candidatos = Candidatura.para_recuento(recuento.grupo_cat)
        # leemos los valores y los seteamos en los resultados
        for candidato in candidatos:
            recuento.pizarra.set_votos_candidato(candidato.id_umv,
                                                 valores.pop(0))

        # extraemos los campos extras (boletas_contadas, total_boletas, etc)
        ordered_keys = sorted(recuento.campos_extra.keys())
        for key in ordered_keys:
            recuento.campos_extra[key] = valores.pop(0)

        # extraemos las listas especiales (OBS, IMP, NUL, REC, etc)
        ordered_keys = sorted(recuento.listas_especiales.keys())
        for key in ordered_keys:
            recuento.listas_especiales[key] = valores.pop(0)

        # si estan los DNIS los extraemos del tag
        if con_dnis:
            dnis = unpack_slow(datos_tag.documentos, BITS_DNI)
            for dni in dnis:
                autoridad = Autoridad("", "", 0, dni)
                recuento.autoridades.append(autoridad)

        return recuento