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
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
def recibir_mesaypin(self, data): """ Recibe la mesa y pin ingresada y la valida para pasar a la siguiente pantalla, o rechaza el ingreso y vuelve a pedir el ingreso de datos Respuesta es un json: {"mesa": 1, "pin": 23533} """ mesa = data['mesa'] pin = data['pin'] mesa_obj = Ubicacion.one(numero=mesa) if mesa_obj is not None and (pin is not None and hashlib.sha1(pin).hexdigest() == mesa_obj.pin): try: self.parent._validar_configuracion(mesa, pin) except: self.sesion.mesa = mesa_obj self.estado = E_INGRESO_DATOS self.set_pantalla({"callback": ""}) else: self.msg_mesaypin_incorrecto() self._intento += 1 if self._intento >= 3: self.sesion.impresora.expulsar_boleta() self.parent.quit()
def recibir_mesaypin(self, data): """ Recibe la mesa y pin ingresada y la valida para pasar a la siguiente pantalla, o rechaza el ingreso y vuelve a pedir el ingreso de datos Respuesta es un json: {"mesa": 1, "pin": A1C2E3G4} """ mesa_valida = False mesa = data['mesa'] pin = data['pin'] mesa_obj = Ubicacion.one(numero=mesa) if mesa_obj is not None: mesa_valida = mesa_obj.validar(self.sesion.salt, pin, self.sesion.key_credencial) if mesa_valida: self.modulo._validar_configuracion(mesa_obj) else: self.msg_mesaypin_incorrecto() self._intento += 1 if self._intento >= 3: self.sesion.impresora.expulsar_boleta() self.modulo.salir_a_modulo(MODULO_INICIO)
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)
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)
def _configurar_ubicacion_demo(self, tag, data=None): # Guardo una referencia a la configuracion anterior, para cuando salga # volver a configurarla #if self.pantalla: # self.pantalla.callback = self.controlador # self.pantalla.quit() mesa_obj = Ubicacion.one(numero=tag) self._mesa_anterior = sesion.mesa #self._configurar_mesa(mesa_obj) sesion.mesa = mesa_obj
def buffer_file_cmp(printer, file_name): current_data_code("EJ.01.01") mesa = Ubicacion.one(codigo="EJ.01.01.01.01") boleta = Seleccion(mesa) boleta.elegir_lista(Lista.one()) img = boleta.a_imagen() img = img.output() img = img.transpose(Image.ROTATE_90) data = img.getdata() printer.load_buffer_compressed(data)
def desde_tag(self, 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.one(numero=str(nro_mesa)) nombres = self.decodear_string(datos.nombres).split(";") for i in range(datos.cantidad_autoridades): apellido = nombres.pop(0) nombre = nombres.pop(0) tipo = datos.tipos.pop(0) dni = unpack_slow(datos.dnis.pop(0), 27)[0] autoridad = Autoridad(apellido, nombre, tipo, dni) autoridades.append(autoridad) return Apertura(mesa, autoridades, hora={"horas": horas, "minutos": minutos})
def _validar_configuracion(self, mesa=None, pin=None, con_acta_apertura=False, datos_tag=''): """ Recibe el numero de mesa y el pin de la pantalla de configuración y verifica que sea correcto. Si es *con_acta_apertura* se carga la mesa automaticamente y con datos tag carga los datos del presidente Si es correcto configura la mesa para dejarla operativa y pasa al menú de administración, en otro caso presenta la pantalla principal. """ mesa_obj = Ubicacion.one(numero=mesa) if mesa_obj is not None and \ (pin is not None and hashlib.sha1(pin).hexdigest() == mesa_obj.pin or con_acta_apertura): self._mesa = mesa_obj # Le seteo el atributo abierta si la configuracion de la mesa fue # con el acta de apertura self._configurar_mesa() if con_acta_apertura: apertura = Apertura.desde_tag(datos_tag) sesion.apertura = apertura self.estado = E_CONFIGURADA self.ret_code = MODULO_ADMIN if self.rampa.tiene_papel: self.rampa.expulsar_boleta() gobject.idle_add(self.quit) else: if sesion.lector is None: msg = _("error_conectar_lector") else: msg = _("mesa_pin_incorrectos") mensaje = {"aclaracion": msg} self.estado = E_INICIAL self.ventana.remove(self.ventana.children()[0]) self._cargar_ui_web() self.ventana.show_all() self._pantalla_principal() self.show_dialogo(mensaje, btn_aceptar=True)
def desde_dict(self, id_planilla, hora, data_dict, campos_extra): """Genera un recuento desde un diccionario con los datos. Argumentos: id_planilla -- el id_planilla del acta que queremos generar. hora -- un diccionario con la hora {"horas": int, "minutos": int} data_dict -- un diccionario con los datos. De key el id_ubicacion y de value la cantidad de votos. listas_especiales -- un diccionaio con las listas_especiales de key el id_de lista especial y de value un diccionario que a su vez tiene de key el codigo de categoria y la cantidad de votos especiales como valor. campos_extra -- un diccionario con los campos_extra como key y el valor numerico del campo extra como valor. """ mesa = Ubicacion.one(id_planilla=id_planilla) mesa.usar_cod_datos() recuento = Recuento(mesa, hora=hora) for key, value in data_dict.items(): recuento.pizarra.set_votos_candidato(key, value) recuento.campos_extra = campos_extra return recuento
def generar_lista_archivos(self): """Genera la lista de archivos de los cuales puede sacar settings.""" files = [] default = self._generar_nombre(DEFAULT_FILE) files.append(default) ubic_files = [] # Configuraciones por ubicacion. ubicacion = Ubicacion.one(codigo=self.id_ubicacion) while ubicacion is not None: if ubicacion.clase in NIVELES_CONFIG: file_ = self._generar_nombre(ubicacion.codigo) ubic_files.append(file_) ubicacion = ubicacion.parent ubic_files.reverse() files += ubic_files local = self._generar_nombre(OVERRIDE_FILE) files.append(local) return files
def _configurar_ubicacion_capacitacion(self, tag, data=None): """Establece la ubicacion para capacitar.""" mesa_obj = Ubicacion.one(numero=tag) mesa_obj.set_aes_key(b"\xff" * 16) self._mesa_anterior = self.sesion.mesa self.sesion.mesa = mesa_obj
def activar_impresion(self, nro_mesa): mesa = Ubicacion.one(numero=nro_mesa) self.mesa = mesa mesa.usar_cod_datos() self.estado = E_EN_CONFIGURACION
# Seteo el volumen del audio al maximo antes de iniciar audioplayer = WavPlayer(as_daemon=False) audioplayer.set_volume(VOLUMEN_GENERAL) audioplayer.close() if options.modulo is None: modulo = modulos_startup.pop() else: modulo = options.modulo if options.ubicacion is not None: from msa.core.data import Ubicacion from msa.voto.sesion import get_sesion sesion = get_sesion() sesion.mesa = Ubicacion.one(options.ubicacion) ejecutar = True res = '' while ejecutar: # Instancio una clase, y ejecuto su metodo main() # Este metodo debe devolver un string si quiere llamar a otro modulo paquete, nombre_mod = modulos_aplicacion[modulo] paquete = import_module(".%s" % paquete, "msa.voto.modulos") mod = getattr(paquete, nombre_mod)() res = mod.main() # Paso la escoba para evitar el leak de las imágenes de los candidatos # esto es quizá redundante, dados los pasos similares en ModuloVoto, # pero necesario. if hasattr(mod, 'pantalla'):
# Seteo el volumen del audio al maximo antes de iniciar audioplayer = WavPlayer(as_daemon=False) audioplayer.set_volume(VOLUMEN_GENERAL) audioplayer.close() if options.modulo is None: modulo = modulos_startup.pop() else: modulo = options.modulo if options.ubicacion is not None: from msa.core.data import Ubicacion from msa.voto.sesion import get_sesion sesion = get_sesion() sesion.mesa = Ubicacion.one(options.ubicacion) ejecutar = True res = "" while ejecutar: # Instancio una clase, y ejecuto su metodo main() # Este metodo debe devolver un string si quiere llamar a otro modulo paquete, nombre_mod = modulos_aplicacion[modulo] paquete = import_module(".%s" % paquete, "msa.voto.modulos") mod = getattr(paquete, nombre_mod)() res = mod.main() # Paso la escoba para evitar el leak de las imágenes de los candidatos # esto es quizá redundante, dados los pasos similares en ModuloVoto, # pero necesario. if hasattr(mod, "pantalla"):