Example #1
0
 def get_controller(self):
     self.controlador = Controlador(self)
Example #2
0
class Modulo(ModuloBase):
    """ Modulo de Recuento de votos.

        Este módulo permite hacer el recuento de votos de una mesa.
        El usuario debe pasar el tag a ser utilizado para el recuento de la
        mesa, y a continuacion debe pasar todas las boletas por el lector.
        El sistema va a totalizarlas y una vez que el usuario confirme el
        cierre de la mesa, emite un listado con la cantidad de copias
        indicadas.
    """

    @requiere_mesa_abierta
    def __init__(self, nombre):
        """Constructor"""
        self.web_template = "escrutinio"
        self.get_controller()
        ModuloBase.__init__(self, nombre)
        self._start_audio()
        self.set_volume()
        self.apertura = self.sesion.apertura
        self.ret_code = MODULO_RECUENTO
        self.get_rampa()
        if self.sesion.recuento is None:
            self.sesion.recuento = Recuento(self.sesion.mesa)
        self.estado = E_RECUENTO
        self.get_orden_certs()
        self.config_files = [COMMON_SETTINGS, nombre, "imaging"]
        self._load_config()

    def set_volume(self):
        volumen = VOLUMEN_GENERAL
        if hasattr(self.sesion, "agent"):
            machine_number = self.sesion.agent.get_machine_type()
            if machine_number == 1:
                volumen = VOLUMEN_ESCRUTINIO_P2
        self._player.set_volume(volumen)

    def get_orden_certs(self):
        self.orden_actas = SECUENCIA_CERTIFICADOS

    def get_controller(self):
        self.controlador = Controlador(self)

    def get_rampa(self):
        self.rampa = Rampa(self)

    def _inicio(self):
        """ Funcion llamada desde el controlador una vez que se encuentra lista
            la interfaz web
        """
        pass

    def beep(self, tipo_actualizacion):
        if tipo_actualizacion == ACT_BOLETA_NUEVA:
            self.play_sonido_ok()
        elif tipo_actualizacion == ACT_BOLETA_REPETIDA:
            self.play_sonido_warning()
        elif tipo_actualizacion in (ACT_ERROR, ACT_CLONADA):
            self.play_sonido_error()

    def procesar_voto(self, serial, tipo_tag, datos):
        tipo_actualizacion = ACT_ERROR
        seleccion = None
        if self.estado == E_RECUENTO:
            try:
                seleccion = Seleccion.desde_tag(datos, self.sesion.mesa)
                # Si el serial no fue ya sumado
                if not self.sesion.recuento.serial_sumado(serial):
                    # Si el voto no fue ya contado vemos.
                    if seleccion.serial == serial:
                        self._sumar_voto(seleccion, serial)
                        tipo_actualizacion = ACT_BOLETA_NUEVA
                    else:
                        tipo_actualizacion = ACT_ERROR
                        seleccion = None
                else:
                    # En caso de estar ya somado se avisa y no se cuenta.
                    tipo_actualizacion = ACT_BOLETA_REPETIDA
            except Exception as e:
                # cualquier circunstancia extraña se translada en un error.
                print(e)
                seleccion = None

            self.controlador.actualizar(tipo_actualizacion, seleccion)

    def _sumar_voto(self, seleccion, unicidad):
        """Suma un voto al recuento."""
        # Suma la seleccion al recuento.
        self.sesion.recuento.sumar_seleccion(seleccion, unicidad)

    def preguntar_salida(self):
        self.controlador.preguntar_salida()

    def error_lectura(self):
        self.controlador.actualizar(ACT_ERROR)

    def imprimir_documentos(self):
        """ Realiza las ultimas operaciones sobre el recuento antes de comenzar
            la impresion
        """
        self.estado = E_IMPRIMIENDO
        self._iniciar_secuencia()
        self.secuencia.ejecutar()

    def habilitar_copia_certificados(self):
        def _imprimiendo(tipo_acta, final=False):
            """Muestra que esta imprimiendo el recuento en el panel."""
            self.controlador.hide_dialogo()
            self.controlador.mostrar_imprimiendo()

        def _fin():
            """Limpia el panel de estado cuando dejó de imprimir."""
            self.controlador.mostrar_pantalla_copias()
        self.estado = E_IMPRIMIENDO
        self._iniciar_secuencia()
        # piso los callbacks de la secuencia para evitar que sea un caso super
        # especial como era antes.
        self.secuencia.callback_fin_secuencia = _fin
        self.secuencia.callback_post_fin_secuencia = _fin
        self.secuencia.callback_imprimiendo = _imprimiendo
        self.secuencia.actas_a_imprimir = []
        self.secuencia.acta_actual = [CIERRE_COPIA_FIEL, None]
        self.secuencia._pedir_acta()

    def _iniciar_secuencia(self):
        """Inicia la secuencia de impresion de las actas."""
        def callback_imprimiendo(tipo_acta, final=False):
            """Se llama a este callback cuando se empieza a imprimir."""
            self.controlador.hide_dialogo()
            self.controlador.mostrar_imprimiendo()

        def callback_espera(tipo_acta):
            """Callback que se llama para setear la pantalla de espera de
            insercion de actas."""
            self.controlador.pedir_acta(tipo_acta[0])

        def callback_error_registro(tipo_acta, final=False):
            """El callback al cual se llama cuando se genera un error de
            registro del acta."""
            self.rampa.expulsar_boleta()
            self.controlador.cargar_dialogo(
                "mensaje_popup_{}".format(tipo_acta[0]))

        def callback_post_fin_secuencia():
            self.controlador.set_pantalla_anterior_asistente()

        def callback_fin_secuencia():
            """Se llama cuando se terminó toda la secuencia de impresion."""
            if self.config("mostrar_asistente_cierre"):
                self.controlador.set_pantalla_asistente_cierre()
            else:
                self.controlador.mostrar_pantalla_copias()

        self.secuencia = SecuenciaActas(self, callback_espera,
                                        callback_error_registro,
                                        callback_imprimiendo,
                                        callback_fin_secuencia,
                                        callback_post_fin_secuencia)

    def salir(self):
        self.salir_a_modulo(MODULO_INICIO)

    def apagar(self):
        self.salir_a_modulo(SHUTDOWN)