def a_tag(self, grupo_cat=None, con_dnis=True): """Devuelve la informacion del recuento para almacenar en tag rfid.""" valores = [] candidatos = Candidatura.para_recuento(grupo_cat) for candidato in candidatos: resultado = self.get_resultados(candidato.id_umv) valores.append(resultado) 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() # cod_mesa if SMART_PACKING: num_mesa = self.mesa.numero.encode('ascii') try: datos = pack(int(num_mesa), valores) except NameError: # hacemos "upgrade" a chip de 2k datos = pack(int(num_mesa), valores, max_bits=MAXBITS*2) container.datos = datos else: cod_mesa = self.mesa.codigo.encode('ascii') packed = pack(valores) datos = str(len(cod_mesa)).zfill(2).encode() + cod_mesa + packed 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, BITS_DNI) container.len_docs = len(documentos) container.documentos = documentos struct = struct_recuento_dni else: struct = struct_recuento container.grupo = int(grupo_cat) if grupo_cat is not None else 0 return struct.build(container)
def a_tag(self, grupo_cat=None, con_dnis=True): """Devuelve la informacion del recuento para almacenar en tag rfid.""" valores = [] candidatos = Candidatura.para_recuento(grupo_cat) for candidato in candidatos: resultado = self.get_resultados(candidato.id_umv) valores.append(resultado) 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() # cod_mesa if SMART_PACKING: num_mesa = self.mesa.numero.encode('ascii') try: datos = pack(int(num_mesa), valores) except NameError: # hacemos "upgrade" a chip de 2k datos = pack(int(num_mesa), valores, max_bits=MAXBITS * 2) container.datos = datos else: cod_mesa = self.mesa.codigo.encode('ascii') packed = pack(valores) datos = str(len(cod_mesa)).zfill(2).encode() + cod_mesa + packed 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, BITS_DNI) container.len_docs = len(documentos) container.documentos = documentos struct = struct_recuento_dni else: struct = struct_recuento container.grupo = int(grupo_cat) if grupo_cat is not None else 0 return struct.build(container)
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