Exemple #1
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
Exemple #2
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 = 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
Exemple #3
0
    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()
Exemple #4
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)
Exemple #5
0
    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()
Exemple #6
0
    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)
Exemple #7
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)
Exemple #8
0
    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)
Exemple #9
0
 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
Exemple #10
0
 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
Exemple #11
0
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)
Exemple #12
0
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)
Exemple #13
0
    def _get_data_mesas(self):
        # Uso un set para tomar las N distintas configuraciones
        configuraciones = set()
        # En mesas_demo guardo las mesas de ejemplo.
        mesas_demo = []

        # Tomo una mesa testigo por cada lugar diferente
        for obj in Ubicacion.many(clase="Mesa"):
            if obj.cod_datos not in configuraciones:
                configuraciones.add(obj.cod_datos)
                ext = obj.extranjera and _("extranjeros_demo") or ""
                mesas_demo.append((obj.numero, obj.municipio, ext))
        return mesas_demo
Exemple #14
0
    def _get_data_mesas(self):
        """Devuelve la data de los botones de cada ubicacion diferente."""
        # Uso un set para tomar las N distintas configuraciones
        configuraciones = set()
        # En mesas_capacitacion guardo las mesas de ejemplo.
        mesas_capacitacion = []

        # Tomo una mesa testigo por cada lugar diferente
        for obj in Ubicacion.many(clase="Mesa"):
            if obj.cod_datos not in configuraciones:
                configuraciones.add(obj.cod_datos)
                mesas_capacitacion.append((obj.numero, obj.departamento,
                                           obj.municipio, obj.extranjera))

        return mesas_capacitacion
Exemple #15
0
    def _get_data_mesas(self):
        # Uso un set para tomar las N distintas configuraciones
        configuraciones = set()
        # En mesas_demo guardo las mesas de ejemplo.
        mesas_demo = []

        # Tomo una mesa testigo por cada lugar diferente
        for obj in Ubicacion.many(clase="Mesa"):
            key = (obj.municipio, obj.extranjera)
            if key not in configuraciones:
                configuraciones.add(key)
                ext = obj.extranjera and "(Ext)" or ''
                mesas_demo.append(
                    (obj.numero, obj.departamento, obj.municipio, ext))
        return mesas_demo
Exemple #16
0
    def _get_data_mesas(self):
        """Devuelve la data de los botones de cada ubicacion diferente."""
        # Uso un set para tomar las N distintas configuraciones
        configuraciones = set()
        # En mesas_capacitacion guardo las mesas de ejemplo.
        mesas_capacitacion = []

        # Tomo una mesa testigo por cada lugar diferente
        for obj in Ubicacion.many(clase="Mesa"):
            if obj.cod_datos not in configuraciones:
                configuraciones.add(obj.cod_datos)
                mesas_capacitacion.append((obj.numero, obj.departamento,
                                           obj.municipio, obj.extranjera))

        return mesas_capacitacion
Exemple #17
0
    def _get_data_mesas(self):
        # Uso un set para tomar las N distintas configuraciones
        configuraciones = set()
        # En mesas_demo guardo las mesas de ejemplo.
        mesas_demo = []

        # Tomo una mesa testigo por cada lugar diferente
        for obj in Ubicacion.many(clase="Mesa"):
            key = (obj.municipio, obj.extranjera)
            if key not in configuraciones:
                configuraciones.add(key)
                ext = obj.extranjera and "(Ext)" or ''
                mesas_demo.append((obj.numero, obj.departamento,
                                   obj.municipio, ext))
        return mesas_demo
Exemple #18
0
def get_estado_mesas(id_ubicacion, acta_desglosada=False):
    """
        Recibe un id_ubicación de un establecimiento y devuelve los datos
        en el formato del server.
        [id_planilla, estado, numero_mesa, sexo, codigo_ubicacion]
        @TODO: Ver actas desglosadas.
    """
    mesas = []
    for u in Ubicacion.many(clase='Mesa',
                            codigo__startswith=id_ubicacion + '.'):
        datos_mesa = [[u.id_planilla, "Espera", u.numero, None, u.codigo]]
        if acta_desglosada:
            current_data_code(u.cod_datos)
            for c in Categoria.all():
                datos_mesa.append([c.codigo, c.nombre, c.posicion])
        mesas.append(datos_mesa)
    return mesas
Exemple #19
0
    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})
Exemple #20
0
    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})
Exemple #21
0
    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)
Exemple #22
0
 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
Exemple #23
0
 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
Exemple #24
0
    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
Exemple #25
0
def get_tag():
    mesa = Ubicacion.get(numero="1001")
    recuento = Recuento(mesa)
    seleccion = Seleccion(mesa)
    listas = Lista.all()
    lista = Lista.get(numero="207")
    for i in range(200):
        seleccion.elegir_lista(lista)
        recuento.sumar_seleccion(seleccion)
    lista = Lista.get(numero="38")
    for i in range(100):
        seleccion.elegir_lista(lista)
        recuento.sumar_seleccion(seleccion)
    lista = Lista.get(numero="603")
    for i in range(50):
        seleccion.elegir_lista(lista)
        recuento.sumar_seleccion(seleccion)
    for i in range(46):
        lista = choice(listas)
        seleccion.elegir_lista(lista)
        recuento.sumar_seleccion(seleccion)
    tag = seleccion.a_tag()
    return tag
Exemple #26
0
    def desde_string(cls, tag, mesa=None):
        """Devuelve una seleccion a partir de la informacion de un tag rfid.
        """
        seleccion = None

        try:
            datos_tag = struct_voto.parse(tag)
        except (RangeError, FieldError, ValueError):
            # Manejamos que no nos puedan meter cualquier
            datos_tag = None

        if datos_tag is not None:
            ubic = datos_tag.ubicacion.decode("utf-8")
            if mesa is not None:
                # verificamos la mesa
                if mesa.cod_datos != ubic:
                    raise MesaIncorrecta()
            else:
                # OJO: Esto trae cualquier mesa del juego de datos.
                # No importa por que todas las mesas del mismo juego son
                # compatibles. Pero no nos permite identificar de que mesa es
                # el voto.
                mesa = Ubicacion.first(cod_datos=ubic)
                mesa.usar_cod_datos()

            seleccion = Seleccion(mesa)
            seleccion.serial = datos_tag.serial

            sel_por_cat = {}
            # recorremos cada uno de los pares de categoria/candidatos en el
            # tag
            str_opciones = datos_tag.opciones.decode()
            opciones = str_opciones.split(",")
            if len(opciones):
                for elem in opciones:
                    if len(elem):
                        cod_cat, id_umv = elem.split(":")
                        id_umv = int(id_umv)
                        sel_por_cat[cod_cat] = sel_por_cat.get(cod_cat, 0) + 1

                        # Buscamos el candidato votado para la categoria en
                        # cuestion
                        candidato = Candidatura.one(id_umv=id_umv,
                                                    cod_categoria=cod_cat)
                        # y lo elegimos (Si no encontró ninguno lanza un value
                        # error).
                        if candidato is None:
                            raise ValueError()
                        max_selecciones = int(
                            candidato.categoria.max_selecciones)
                        borrar = max_selecciones == 1
                        seleccion.elegir_candidato(candidato, borrar=borrar)

                if len(list(sel_por_cat.keys())) != len(Categoria.all()):
                    # caso en el que la canditad de categorias votadas sea
                    # diferente que la cantidad de categorias
                    seleccion = None
                else:
                    # aca verificamos que la cantidad de candidatos por
                    # categoria sea menor o igual de la cantidad de selecciones
                    # maximas que esperamos
                    for cod_categoria, cantidad in list(sel_por_cat.items()):
                        categoria = Categoria.one(cod_categoria)
                        max_selec = int(categoria.max_selecciones)
                        if categoria is None or cantidad > max_selec:
                            seleccion = None
                            break

        return seleccion
Exemple #27
0
 def activar_impresion(self, nro_mesa):
     mesa = Ubicacion.one(numero=nro_mesa)
     self.mesa = mesa
     mesa.usar_cod_datos()
     self.estado = E_EN_CONFIGURACION
Exemple #28
0
 def activar_impresion(self, nro_mesa):
     mesa = Ubicacion.one(numero=nro_mesa)
     self.mesa = mesa
     mesa.usar_cod_datos()
     self.estado = E_EN_CONFIGURACION
Exemple #29
0
    # 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"):
Exemple #30
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
Exemple #31
0
 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
Exemple #32
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
Exemple #33
0
    # 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'):