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
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})
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 })
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
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