Пример #1
0
class Controller:
    """
    *********************************
    *  A controller for a store DB  *
    *********************************
    """
    def __init__(self):
        self.model = Model()
        self.view = View()

    def start(self):
        self.view.start()
        self.main_menu()


    """
    *********************************
    *       General Controller      *
    *********************************
    """
    def main_menu(self):
        o = '0'
        while 0 != '3':
            self.view.main_menu()
            self.view.option('3')
            o = input()
            if o == '1':
                self.menu_usuario()
            elif o == '2':
                self.login()
            elif o == '3':
                self.view.end()
            else:
                self.view.not_valid_option()
        return

    def update_lists(self, fs, vs):
        fields = []
        vals = []
        for f,v in zip(fs,vs):
            if v != '':
                fields.append(f+' = %s')
                vals.append(v)
        return fields,vals


    def menu_usuario(self):
        o = '0'
        while o != '4':
            self.view.main_menu_usuario()
            self.view.option('4')
            o = input()
            if o == '1':
                self.usuario_peliculas()
            elif o == '2':
                self.usuario_funciones()
            elif o == '3':
                self.usuario_boletos()
            elif o == '4':
                self.main_menu()
                return
            else:
                self.view.not_valid_option()
        return

    def administrador_menu(self):
        o = '0'
        while o != '5':
            self.view.main_menu_admin()
            self.view.option('5')
            o = input()
            if o == '1':
                self.administrador_peliculas()
            elif o == '2':
                self.administrador_salas()
            elif o == '3':
                self.administrador_funciones()
            elif o == '4':
                self.administrador_boletos()
            elif o == '5':
                self.administrador_admins()
            elif o == '6':
                self.main_menu()
                return
            else:
                self.view.not_valid_option()
        return


    """
    *********************************
    *   Controllers for peliculas   *
    *********************************
    """

    def administrador_peliculas(self):
        o = '0'
        while o != '7':
            self.view.peliculas_menu_admin()
            self.view.option('7')
            o = input()
            if o == '1':
                self.agregar_pelicula()
            elif o == '2':
                self.read_a_pelicula()
            elif o == '3':
                self.read_all_peliculas()
            elif o == '4':
                self.read_peliculas_categoria()
            elif o == '5':
                self.update_pelicula()
            elif o == '6':
                self.delete_pelicula()
            elif o == '7':
                self.administrador_menu()
                return
            else:
                self.view.not_valid_option()
        return

    def usuario_peliculas(self):
        o = '0'
        while o != '3':
            self.view.pelicuas_menu_usuario()
            self.view.option('3')
            o = input()
            if o == '1':
                self.read_all_peliculas()
            elif o == '2':
                self.read_peliculas_categoria()
            elif o == '3':
                self.menu_usuario()
                return
            else:
                self.view.not_valid_option()
        return

    def ask_pelicula(self):
        self.view.ask('Nombre: ')
        nombre = input()
        self.view.ask('Sinopsis: ')
        sinopsis = input()
        self.view.ask('Categoria: ')
        categoria = input()
        self.view.ask('Duracion: ')
        duracion = input()
      
        return [nombre, sinopsis, categoria, duracion]

    def agregar_pelicula(self):
        nombre, sinopsis, categoria, duracion = self.ask_pelicula()
        out = self.model.agregar_pelicula(nombre, sinopsis, categoria, duracion)
        if out == True:
            self.view.ok(nombre,'agrego')
        else:
            self.view.error('NO SE PUDO AGREGAR LA PELICULA. REVISA')
        return

    def read_a_pelicula(self):
        self.view.ask('ID pelicula: ')
        id_pelicula = input()
        pelicula = self.model.read_a_pelicula(id_pelicula)
        if type(pelicula) == tuple:
            self.view.show_pelicula_header(' Datos de la pelicula '+id_pelicula+' ')
            self.view.show_a_pelicula(pelicula)
            self.view.show_pelicula_midder()
            self.view.show_pelicula_footer()
        else:
            if pelicula == None:
                self.view.error('LA PELICULA NO EXISTE')
            else:
                self.view.error('PROBLEMA AL LEER LA PELICULA. REVISA')
        return

    def read_all_peliculas(self):
        peliculas = self.model.read_all_pelicula()
        if type(peliculas) == list:
            self.view.show_pelicula_header(' Todas las peliculas ') 
            for pelicula in peliculas:
                self.view.show_a_pelicula(pelicula)
                self.view.show_pelicula_midder()
            self.view.show_pelicula_footer()
        else:
            self.view.error('PROBLEMA AL LEER LAS PELICULAS. REVISA')
        return

    def read_peliculas_categoria(self):
        self.view.ask('Categoria: ')
        categoria = input()
        peliculas = self.model.read_pelicula_categoria(categoria)
        if type(peliculas) == list:
            self.view.show_pelicula_header(' Peliculas categoria '+categoria+' ')
            for pelicula in peliculas:
                self.view.show_a_pelicula(pelicula)
                self.view.show_pelicula_midder()
            self.view.show_pelicula_footer
        else:
            self.view.error('PROBLEMA AL LEER LAS PELICULAS. REVISA')
        return


    def update_pelicula(self):
        self.view.ask('ID de pelicula a modificar: ')
        id_pelicula = input()
        pelicula = self.model.read_a_pelicula(id_pelicula)    
        if type(pelicula) == tuple:
            self.view.show_pelicula_header(' Datos de la pelicula '+id_pelicula+' ')
            self.view.show_a_pelicula(pelicula)
            self.view.show_pelicula_midder()
            self.view.show_pelicula_footer()
        else:
            if pelicula == None:
                self.view.error('LA PELICULA NO EXISTE')
            else:
                self.view.error('PROBLEMA AL LEER LA PELICULA')
            return
        self.view.msg('Ingresa los valores a modificar (vacio para dejarlo igual): ')
        whole_vals = self.ask_pelicula()
        fields, vals = self.update_lists(['Nombre', 'Sinopsis', 'Categoria', 'Duracion'], whole_vals)
        vals.append(id_pelicula)
        vals = tuple(vals)
        out = self.model.update_pelicula(fields,vals)
        if out == True:
            self.view.ok(id_pelicula, 'actualizo')
        else:
            self.view.error('NO SE PUDO ACTUALIZAR LA PELICULA. REVISA')
        return  


    def delete_pelicula(self):
        self.view.ask('Id de la pelicula a borrar: ')
        id_pelicula = input()
        count = self.model.delete_pelicula(id_pelicula)
        if count != 0:
            self.view.ok(id_pelicula, 'borro')
        else:
            if count == 0:
                self.view.error('LA PELICULA NO EXISTE')
            else:
                self.view.error('PROBLEMA AL BORRAR LA PELICULA. REVISA.')
        return
    
    """
    *********************************
    *   Controllers for salas       *
    *********************************
    """

    def administrador_salas(self):
        o = '0'
        while o != '8':
            self.view.sala_menu()
            self.view.option('8')
            o = input()
            if o == '1':
                self.agregar_sala()
            elif o == '2':
                self.read_a_sala()
            elif o == '3':
                self.read_all_salas()
            elif o == '4':
                self.update_sala()
            elif o == '5':
                self.agregar_asientos_sala()
            elif o == '6':
                self.eliminar_asientos_sala()
            elif o == '7':
                self.delete_sala()
            elif o == '8':
                self.administrador_menu()
                return
            else:
                self.view.not_valid_option()
        return

    def ask_sala(self):
        self.view.ask('Nombre: ')
        nombre = input()
        return [nombre]

    def agregar_sala(self):
        nombre = self.ask_sala()
        out = self.model.agregar_sala(nombre)
        if out == True:
            self.view.ok(nombre,'agrego')
        else:
            self.view.error('NO SE PUDO AGREGAR LA SALA. REVISA')
        return

    def read_a_sala(self):
        self.view.ask('ID sala: ')
        id_sala = input()
        sala = self.model.read_a_sala(id_sala)
        if type(sala) == tuple:
            self.view.show_sala_header(' Datos de la sala '+id_sala+' ')
            self.view.show_a_sala(sala)
            self.read_all_asientos(id_sala)
            self.view.show_sala_midder()
            self.view.show_sala_footer()
        else:
            if sala == None:
                self.view.error('LA SALA NO EXISTE')
            else:
                self.view.error('PROBLEMA AL LEER LA SALA. REVISA')
        return

    def read_all_salas(self):
        salas = self.model.read_all_salas()
        if type(salas) == list:
            self.view.show_sala_header(' Todas las salas ') 
            for sala in salas:
                self.view.show_sala_header('Sala '+str(sala[0])) 
                self.view.show_a_sala(sala)
                self.read_all_asientos(sala[0])
                self.view.show_sala_midder()
            self.view.show_pelicula_footer()
        else:
            self.view.error('PROBLEMA AL LEER LAS PELICULAS. REVISA')
        return

    def read_all_asientos(self,id_sala):
        asientos = self.model.read_asientos_sala(id_sala)
        if type(asientos) == list:
            if len(asientos) == 0:
                print('Aun no se egregan asientos')
                self.view.show_asiento_footer()
            else:
                self.view.show_asiento_header(' Asientos sala '+str(id_sala))
                for asiento in asientos:
                    self.view.show_a_asiento(asiento)
                self.view.show_asiento_footer()
        else:
            self.view.error('PROBLEMA AL LEER LOS ASIENTOS')
        return

    def read_asientos(self,asientos):
        if type(asientos) == list:
            self.view.show_asiento_header('Asientos Disponibles')
            for asiento in asientos:
                self.view.show_a_asiento(asiento)
            self.view.show_asiento_footer()
        else:
            self.view.error('PROBLEMA AL LEER LOS ASIENTOS')
        return

    def agregar_asientos_sala(self):
        self.read_all_salas()
        self.view.ask('ID de la sala: ')
        id_sala = input()
        self.view.ask('Cuantos asientos desea agregar? ')
        no_asientos = input()
        for a in range (0,int(no_asientos)):
            self.view.ask('Nombre del asiento: ')
            nombre = input()
            out = self.model.agregar_asiento(id_sala, nombre)
            if out == True:
                self.view.ok(nombre,'agrego')
            else:
                self.view.error('NO SE PUDO AGREGAR EL ASIENTO. REVISA')
        return


    def ask_sala(self):
        self.view.ask('Nombre: ')
        nombre = input()
        return [nombre]

    def update_sala(self):
        self.view.ask('ID de la sala a modificar: ')
        id_sala = input()
        sala = self.model.read_a_sala(id_sala)    
        if type(sala) == tuple:
            self.view.show_sala_header(' Datos de la sala '+id_sala+' ')
            self.view.show_a_sala(sala)
            self.view.show_sala_midder()
            self.view.show_sala_footer()
        else:
            if sala == None:
                self.view.error('LA SALA NO EXISTE')
            else:
                self.view.error('PROBLEMA AL LEER LA SALA')
            return
        self.view.msg('Ingresa los valores a modificar (vacio para dejarlo igual): ')
        whole_vals = self.ask_sala()
        fields, vals = self.update_lists(['nombre_sala'], whole_vals)
        vals.append(id_sala)
        vals = tuple(vals)
        out = self.model.update_sala(fields,vals)
        if out == True:
            self.view.ok(id_sala, 'actualizo')
        else:
            self.view.error('NO SE PUDO ACTUALIZAR LA SALA. REVISA')
        return  

    def eliminar_asientos_sala(self):
        self.view.ask('Id de la sala: ')
        id_sala = input()
        self.view.ask('ID del asiento: ')
        id_asiento = input()
        count = self.model.delete_asientos(id_sala, id_asiento)
        if count != 0:
            self.view.ok(id_asiento, 'borro')
        else:
            if count == 0:
                self.view.error('El ASIENTO NO EXISTE')
            else:
                self.view.error('PROBLEMA AL BORRAR EL ASIENTO')
        return

    def delete_sala(self):
        self.view.ask('ID de la sala: ')
        id_sala = input()
        count = self.model.delete_sala(id_sala)
        if count != 0:
            self.view.ok(id_sala, 'borro')
        else:
            if count == 0:
                self.view.error('LA SALA NO EXISTE')
            else:
                self.view.error('PROBLEMA AL BORRAR LA SALA')
        return

    """
    *********************************
    *   Controllers for Funciones   *
    *********************************
    """
    def usuario_funciones(self):
        o = '0'
        while o != '3':
            self.view.menu_funciones_usuario()
            self.view.option('3')
            o = input()
            if o == '1':
                self.read_all_funciones()
            elif o == '2':
                self.read_funciones_pelicula()
            elif o == '3':
                self.menu_usuario()
                return
            else:
                self.view.not_valid_option()
        return

    def administrador_funciones(self):
        o = '0'
        while o != '7':
            self.view.funciones_menu()
            self.view.option('7')
            o = input()
            if o == '1':
                self.agregar_funciones()
            elif o == '2':
                self.read_a_funcion()
            elif o == '3':
                self.read_all_funciones()
            elif o == '4':
                self.read_funciones_pelicula()
            elif o == '5':
                self.update_funcion()
            elif o == '6':
                self.delete_funcion()
            elif o == '7':
                self.administrador_menu()
                return
            else:
                self.view.not_valid_option()
        return

    def ask_funcion(self):
        self.view.ask('ID Pelicula: ')
        id_pelicula = input()
        self.view.ask('ID_sala: ')
        id_sala = input()
        self.view.ask('Fecha: ')
        fecha = input()
        self.view.ask('Hora: ')
        hora = input()
        self.view.ask('Precio: ')
        precio = input()
        self.view.ask('Idioma: ')
        idioma = input()
      
        return [id_pelicula, id_sala, fecha, hora, precio, idioma]


    def agregar_funciones(self):
        id_pelicula, id_sala, fecha, hora, precio, idioma = self.ask_funcion()
        out = self.model.agregar_funcion(id_pelicula, id_sala, fecha, hora, precio, idioma)
        if out == True:
            self.view.ok(fecha,'Funcion agregada')
        else:
            self.view.error('NO SE PUDO AGREGAR LA FUNCION. REVISA')
        return

    def read_a_funcion(self):
        self.view.ask('ID funcion: ')
        id_funcion = input()
        funcion = self.model.read_a_funcion(id_funcion)
        if type(funcion) == tuple:
            self.view.show_funcion_header(' Datos de la funcion '+id_funcion+' ')
            self.view.show_a_funcion(funcion)
            self.view.show_funcion_midder()
            self.view.show_funcion_footer()
        else:
            if funcion == None:
                self.view.error('LA FUNCION NO EXISTE')
            else:
                self.view.error('PROBLEMA AL LEER LA FUNCION')
        return
    
    def read_funcion(self,id_funcion):
        funcion = self.model.read_a_funcion(id_funcion)
        if type(funcion) == tuple:
            self.view.show_funcion_header(' Datos de la funcion '+id_funcion+' ')
            self.view.show_a_funcion(funcion)
            self.view.show_funcion_midder()
            self.view.show_funcion_footer()
        else:
            if funcion == None:
                self.view.error('LA FUNCION NO EXISTE')
            else:
                self.view.error('PROBLEMA AL LEER LA FUNCION')
        return
    
    def read_all_funciones(self):
        funciones = self.model.read_all_funciones()
        if type(funciones) == list:
            self.view.show_funcion_header(' Todas las funciones ')
            for funcion in funciones:
                self.view.show_a_funcion(funcion)
                self.view.show_funcion_midder()
            self.view.show_pelicula_footer()
        else:
            self.view.error('PROBLEMA AL LEER LAS FUNCIONES. REVISA')
        return

    def read_funciones_pelicula(self):
        self.view.ask('Nombre Pelicula: ')
        n_pelicula = input()
        funciones = self.model.read_funcion_pelicula(n_pelicula)
        if type(funciones) == list:
            self.view.show_funcion_header(' Funciones para pelicula '+n_pelicula+' ')
            for funcion in funciones:
                self.view.show_a_funcion(funcion)
                self.view.show_funcion_midder()
            self.view.show_pelicula_footer()
        else:
            self.view.error('PROBLEMA AL LEER LAS FUNCIONES. REVISA')
        return

    def update_funcion(self):
        self.view.ask('ID de funcion a modificar: ')
        id_funcion = input()
        funcion = self.model.read_a_funcion(id_funcion)    
        if type(funcion) == tuple:
            self.view.show_funcion_header(' Datos de la funcion '+id_funcion+' ')
            self.view.show_a_funcion(funcion)
            self.view.show_funcion_midder()
            self.view.show_funcion_footer()
        else:
            if funcion == None:
                self.view.error('LA FUNCION NO EXISTE')
            else:
                self.view.error('PROBLEMA AL LEER LA FUNCION')
            return
        self.view.msg('Ingresa los valores a modificar (vacio para dejarlo igual): ')
        whole_vals = self.ask_funcion()
        fields, vals = self.update_lists(['id_pelicula', 'id_sala', 'fecha', 'hora', 'precio', 'idioma'], whole_vals)
        vals.append(id_funcion)
        vals = tuple(vals)
        out = self.model.update_funcion(fields,vals)
        if out == True:
            self.view.ok(id_funcion, 'actualizo')
        else:
            self.view.error('NO SE PUDO ACTUALIZAR LA FUNCION. REVISA')
        return

    def delete_funcion(self):
        self.view.ask('ID de la FUNCION: ')
        id_funcion = input()
        count = self.model.delete_funcion(id_funcion)
        if count != 0:
            self.view.ok(id_funcion, 'borro')
        else:
            if count == 0:
                self.view.error('LA FUNCION NO EXISTE')
            else:
                self.view.error('PROBLEMA AL BORRAR LA FUNCION')
        return


    """
    *********************************
    *   Controllers for BOLETOS     *
    *********************************
    """
    def usuario_boletos(self):
        o = '0'
        while o != '2':
            self.view.boletos_menu_usuario()
            self.view.option('2')
            o = input()
            if o == '1':
                self.agregar_boleto()
            elif o == '2':
                self.menu_usuario()
                return
            else:
                self.view.not_valid_option()
        return

    def administrador_boletos(self):
        o = '0'
        while o != '6':
            self.view.boleto_menu()
            self.view.option('6')
            o = input()
            if o == '1':
                self.agregar_boleto()
            elif o == '2':
                self.read_a_boleto()
            elif o == '3':
                self.read_all_boletos()
            elif o == '4':
                self.read_boletos_funcion()
            elif o == '5':
                self.delete_funcion()
            elif o == '6':
                self.administrador_menu()
                return
            else:
                self.view.not_valid_option()
        return

    def ask_boleto(self):
        self.view.ask('ID Funcion: ')
        id_funcion = input()
        self.view.ask('ID_asiento: ')
        id_asiento = input()
      
        return [id_funcion, id_asiento]


    def agregar_boleto(self):
        self.read_all_funciones()
        self.view.ask('ID_FUNCION: ')
        id_funcion = input()
        funcion=self.model.read_a_funcion(id_funcion)
        asientos = self.model.read_asientos_sala(funcion[2])
        ocupados = self.model.asientos_funcion(id_funcion)
        desocupados = [a for a in asientos if not a in ocupados]
        self.read_asientos(desocupados)
        self.view.ask('ID_ASIENTO: ')
        id_asiento = input()
        des = []
        for i in desocupados:
            des.append(str(i[0]))
        if id_asiento in des:
            out = self.model.agregar_boleto(id_funcion, id_asiento)
            if out == True:
                self.view.ok(id_asiento,'agregado')
            else:
                self.view.error('NO SE PUDO AGREGAR EL BOLETO')
        else:
            self.view.error('ERROR AL SELECCIONAR ASIENTO')
        return


    def read_a_boleto(self):
        self.view.ask('ID Boleto: ')
        id_boleto = input()
        boleto = self.model.read_a_boleto(id_boleto)
        if type(boleto) == tuple:
            self.view.show_boleto_footer()
            self.view.show_boleto_header(' Datos de la boleto '+id_boleto+' ')
            self.view.show_boleto_footer()
            self.view.show_boleto(boleto)
            self.view.show_boleto_footer()
        else:
            if boleto == None:
                self.view.error('EL BOLETO NO EXISTE')
            else:
                self.view.error('PROBLEMA AL LEER EL BOLETO')
        return
    
    def read_all_boletos(self):
        boletos = self.model.read_all_boletos()
        if type(boletos) == list:
            self.view.show_funcion_header(' Todos los boletos ')
            for boleto in boletos:
                self.view.show_boleto(boleto)
                self.view.show_boleto_midder()
            self.view.show_pelicula_footer()
        else:
            self.view.error('PROBLEMA AL LEER LAS FUNCIONES. REVISA')
        return

    def read_boletos_funcion(self):
        self.read_all_funciones()
        self.view.ask('ID FUNCION: ')
        id_funcion = input()
        boletos = self.model.read_boletos_funcion(id_funcion)
        if type(boletos) == list:
            self.view.show_funcion_header(' Boletos de la funcion '+id_funcion+' ')
            for boleto in boletos:
                self.view.show_boleto(boleto)
                self.view.show_boleto_midder()
            self.view.show_pelicula_footer()
        else:
            self.view.error('PROBLEMA AL LEER LAS BOLETOS')
        return

    def delete_boleto(self):
        self.view.ask('ID del BOLETO: ')
        id_boleto = input()
        count = self.model.delete_boleto(id_boleto)
        if count != 0:
            self.view.ok(id_boleto, 'se borro')
        else:
            if count == 0:
                self.view.error('EL BOLETO NO EXISE')
            else:
                self.view.error('PROBLEMA AL BORRAR EL BOLETO')
        return


    """
    *********************************
    *   Controllers for ADMINS      *
    *********************************
    """
    def administrador_admins(self):
        o = '0'
        while o != '6':
            self.view.admin_menu()
            self.view.option('6')
            o = input()
            if o == '1':
                self.agregar_administrador()
            elif o == '2':
                self.read_a_administrador()
            elif o == '3':
                self.read_all_administradores()
            elif o == '4':
                self.update_administrador()
            elif o == '5':
                self.delete_administrador()
            elif o == '6':
                self.administrador_menu()
                return
            else:
                self.view.not_valid_option()
        return

    def ask_admin(self):
        self.view.ask('Nombre: ')
        nombre = input()
        self.view.ask('Apellido_P: ')
        apellido_p = input()
        self.view.ask('Apellido_M: ')
        apellido_m = input()
        self.view.ask('Usuario: ')
        usuario = input()
        self.view.ask('Contraseña: ')
        contraseña = input()
      
        return [nombre, apellido_p, apellido_m, usuario, contraseña]
    
    def agregar_administrador(self):
        nombre, apellido_p, apellido_m, usuario, contraseña = self.ask_admin()
        out = self.model.agregar_administrador(nombre, apellido_p, apellido_m, usuario, contraseña)
        if out == True:
            self.view.ok(nombre,'agrego')
        else:
            self.view.error('NO SE PUDO AGREGAR EL ADMINISTRADOR. REVISA')
        return

    def read_a_administrador(self):
        self.view.ask('ID ADMIN: ')
        id_admin = input()
        admin = self.model.read_administrador(id_admin)
        if type(admin) == tuple:
            self.view.show_admin_header(' Datos del Admin '+id_admin+' ')
            self.view.show_a_admin(admin)
            self.view.show_admin_midder()
            self.view.show_admin_footer()
        else:
            if admin == None:
                self.view.error('EL ADMINISTRADOR NO EXISTE')
            else:
                self.view.error('PROBLEMA AL LEER EL ADMIN. REVISA')
        return

    def read_all_administradores(self):
        admins = self.model.read_all_administradores()
        if type(admins) == list:
            self.view.show_admin_header(' Todos los administradores ') 
            for admin in admins:
                self.view.show_a_admin(admin)
                self.view.show_admin_midder()
            self.view.show_admin_footer()
        else:
            self.view.error('PROBLEMA AL LEER LOS ADMINISTRADORES. REVISA')
        return

    def update_administrador(self):
        self.view.ask('ID del administrador a modificar: ')
        id_admin = input()
        admin = self.model.read_administrador(id_admin)    
        if type(admin) == tuple:
            self.view.show_admin_header(' Datos del admin '+id_admin+' ')
            self.view.show_a_admin(admin)
            self.view.show_admin_midder()
            self.view.show_admin_footer()
        else:
            if admin == None:
                self.view.error('EL ADMINISTRADOR NO EXISTE')
            else:
                self.view.error('PROBLEMA AL LEER EL ADMIN')
            return
        self.view.msg('Ingresa los valores a modificar (vacio para dejarlo igual): ')
        whole_vals = self.ask_admin()
        fields, vals = self.update_lists(['nombre', 'apellido_p', 'apellido_m', 'usuario', 'contraseñna'], whole_vals)
        vals.append(id_admin)
        vals = tuple(vals)
        out = self.model.update_administrador(fields,vals)
        if out == True:
            self.view.ok(id_admin, 'actualizo')
        else:
            self.view.error('NO SE PUDO ACTUALIZAR EL ADMINISTRADOR. REVISA')
        return

    def delete_administrador(self):
        self.view.ask('ID del ADMIN: ')
        id_admin = input()
        count = self.model.delete_admin(id_admin)
        if count != 0:
            self.view.ok(id_admin, 'se borro')
        else:
            if count == 0:
                self.view.error('EL ADMINISTRADOR NO EXISE')
            else:
                self.view.error('PROBLEMA AL BORRAR')
        return

    def ask_login(self):
        self.view.ask('Usuario: ')
        usuario = input()
        self.view.ask('Contraseña: ')
        contraseña = input()
      
        return [usuario, contraseña]

    def login(self):
        self.view.login()
        usuario, contraseña = self.ask_login()
        login = self.model.admin_login(usuario,contraseña)
        if type(login) == tuple:
            self.view.show_admin_header(' BIENVENIDO '+login[0]+' ')
            self.view.show_admin_footer()
            self.administrador_menu()
        else:
            if login == None:
                self.view.error('CONTRASEÑA O USUARIO INCORRECTO')
            else:
                self.view.error('PROBLEMA AL INGRESAR')
        return
Пример #2
0
class Controller:
    
    """
    ************************************
    *  Controlador para cine Db        *
    ************************************
    """
    def __init__(self):
        self.model = Model()
        self.view = View()
     
    def start(self):
        self.view.start()
        self.menu_principal()

    def update_lists(self, fs, vs):
        fields = []
        vals = []
        for f, v in zip(fs,vs):
            if v != '':
                fields.append(f+' = %s')
                vals.append(v)
        return fields, vals


    clear = lambda: os.system('cls') #on Windows System

    """
    ************************************
    *   Controladores inicio/registro  *
    ************************************
    """
    def menu_principal(self):
        os.system ("cls") 
        o = '0'
        while o != '4':
            self.view.menu_principal()
            self.view.option('4')
            o = input()
            if o == '1':
                self.inicio_sesion_usuario()
            elif o == '2':
                self.inicio_sesion_administrador()
            elif o == '3':
                self.registro_usuario()
            elif o == '4':
                self.view.end()
            else:
                self.view.not_valid_option()
        return

    def ask_inicio(self):
        self.view.ask('Email: ')
        Email = input()
        self.view.ask('Password: '******'Datos de tu usuario')
            self.view.mostrar_usuario(usuario)
            self.view.mostrar_usuario_midder()
            self.view.mostrar_usuario_footer()
            self.menu_user()
        else:
            if usuario == None:
                self.view.err('El EMAIL O EL PASSWORD SON INCORRECTOS')
            else: 
                self.view.err('PROBLEMA AL LEER EL USUARIO. REVISA.')
            return

    def inicio_sesion_administrador(self):
        Email, password = self.ask_inicio()
        administrador = self.model.leer_administrador_email_password(Email, password)
        if type(administrador) == tuple:
            self.view.mostrar_admin_header('Datos de tu administrador')
            self.view.mostrar_admin(administrador)
            self.view.mostrar_admin_midder()
            self.view.mostrar_admin_footer()
            self.menu_admin()
        else:
            if administrador == None:
                self.view.err('El EMAIL O EL PASSWORD SON INCORRECTOS')
            else: 
                self.view.err('PROBLEMA AL LEER EL administrador. REVISA.')
            return          

    def registro_usuario(self):
        print('registo de usuarios')
        self.view.input('Nombre')
        Nombre = input()
        self.view.input('Email')
        Email = input()
        self.view.input('Contraseña')
        password = input()
        self.view.input('Telefono')
        Num = input()

        result = self.model.crear_usuario(Nombre, Email, password, Num)
        if result == True:
            self.view.msg('Usuario creado')
        else:
            self.view.err(result)

    def registro_admin(self):
        print('registo de administradores')
        self.view.input('Nombre')
        Nombre = input()
        self.view.input('Email')
        Email = input()
        self.view.input('Contraseña')
        password = input()
        self.view.input('Telefono')
        Num = input()

        result = self.model.crear_admin(Nombre, Email, password, Num)
        if result == True:
            self.view.msg('Administrador creado')
        else:
            self.view.err(result)
    
    """
    ************************************
    *       Controladores usuario      *
    ************************************
    """

    def menu_user(self):
        os.system ("cls") 
        o = '0'
        while o != '8':
            self.view.menu_user()
            self.view.option('8')
            o = input()
            if o == '1':
                self.leer_funciones()
            elif o == '2':
                self.horario_funcion()
            elif o == '3':
                self.fecha_funcion()
            elif o == '4':
                self.pelicula_funcion()
            elif o == '5':
                self.leer_peliculas()
            elif o == '6':
                self.crear_Ticket_usuario()
            elif o == '7':
                self.leer_Tickets_usuario()
            elif o == '8':
                self.view.end()
            else:
                self.view.not_valid_option()
        return

    
    """
    ************************************
    *   Controladores administradores  *
    ************************************||
    """

    def menu_admin(self):
        os.system ("cls") 
        o = '0'
        while o != '7':
            self.view.menu_admin()
            self.view.option('7')
            o = input()
            if o == '1':
                self.CtrlFunciones()
                pass
            elif o == '2':
                self.CtrlPeliculas()
            elif o == '3':
                self.Ctrlsalas()
            elif o == '4':
                self.CtrlButaca()
            elif o == '5':
                self.CtrlTicket()
            elif o == '6':
                self.CtrlUsuario()
            elif o == '7':
                self.view.end()
            else:
                self.view.not_valid_option()
        return

    """
    ************************************
    *   Controladores usuario/admin  *
    ************************************
    """

    def CtrlUsuario(self):
        os.system ("cls") 
        o = '0'
        while o != '9':
            self.view.menu_usuario()
            self.view.option('9')
            o = input()
            if o == '1':
                self.registro_usuario()
            elif o == '2':
                self.leer_usuarios()
            elif o == '3':
                self.actualizar_usuario()
            elif o == '4':
                self.eliminar_usuario()
            elif o == '5':
                self.registro_admin()
            elif o == '6':
                self.leer_admins()
            elif o == '7':
                self.actualizar_admin()
            elif o == '8':
                self.eliminar_admin()
            elif o == '9':
                self.view.end()
            else:
                self.view.not_valid_option()
        return

    '''USER'''
    def ask_usuario(self):
        self.view.ask('Nombre: ')
        Nombre = input()
        self.view.ask('Email: ')
        Email = input()
        self.view.ask('Num: ')
        Num = input()
        self.view.ask('password: '******'ID usuario: ')
        Id_Usuario = input()
        usuario = self.model.leer_usuario(Id_Usuario)
        if type(usuario) == tuple:
            self.view.mostrar_usuario_header('Datos del usuario'+Id_Usuario+' ')
            self.view.mostrar_usuario(usuario)
            self.view.mostrar_usuario_midder()
            self.view.mostrar_usuario_footer()
        else:
            if usuario == None:
                self.view.err('El USUARIO NO EXISTE')
            else: 
                self.view.err('PROBLEMA AL LEER EL USUARIO. REVISA.')
        return   

    def leer_usuarios(self):
        usuarios = self.model.leer_usuarios()
        if type(usuarios) == list:
            self.view.mostrar_usuario_header(' Todos lOs usuarios ')
            for usuario in usuarios:
                self.view.mostrar_usuario(usuario)
                self.view.mostrar_usuario_midder()
            self.view.mostrar_usuario_footer()
        else:
            self.view.err('PROBLEMA AL LEER LOS USUARIOS. REVISA')
        return

    def actualizar_usuario(self):
        self.view.ask('ID de la usuario: ')
        Id_Usuario = input()
        usuario = self.model.leer_usuario(Id_Usuario)
        if type(usuario) == tuple:
            self.view.mostrar_usuario_header(' identificador de la usuario '+Id_Usuario+' ')
            self.view.mostrar_usuario(usuario)
            self.view.mostrar_usuario_midder()
            self.view.mostrar_usuario_footer()
        else:
            if usuario == None:
                self.view.err('LA usuario NO EXISTE')
            else:
                self.view.err('PROBLEMA AL LEER LA usuario. REVISA')
            return
        self.view.msg('Ingresa los valores a modificar (vacio para dejarlo igual):')
        whole_vals = self.ask_usuario()
        fields, vals = self.update_lists(['Nombre','Email','Num','password'], whole_vals)
        vals.append(Id_Usuario)
        vals = tuple(vals)
        out = self.model.actualizar_usuario(fields, vals)
        if out == True:
            self.view.ok(Id_Usuario, 'actualizo')
        else:
            self.view.err('NO SE PUDO ACTUALIZAR EL USUARIO. REVISA.')
        return

    def eliminar_usuario(self):
        self.view.ask('ID usuario: ')
        Id_Usuario = input()
        count = self.model.eliminar_usuario(Id_Usuario)
        if count != 0:
               self.view.ok(Id_Usuario, 'borro')
        else: 
            if count == 0:
                self.view.err('EL USUARIO NO EXISTE')
            else:
                self.view.err('PROBLEMA AL BORRAR AL USUARIO. REVISA.')
        return


    '''ADMIN'''

    def ask_admin(self):
        self.view.ask('Nombre: ')
        Nombre = input()
        self.view.ask('Email: ')
        Email = input()
        self.view.ask('Num: ')
        Num = input()
        self.view.ask('password: '******'ID admin: ')
        Id_Administrador = input()
        admin = self.model.leer_admin(Id_Administrador)
        if type(admin) == tuple:
            self.view.mostrar_admin_header('Datos del admin'+Id_Administrador+' ')
            self.view.mostrar_admin(admin)
            self.view.mostrar_admin_midder()
            self.view.mostrar_admin_footer()
        else:
            if admin == None:
                self.view.err('El ADMINISTRADOR NO EXISTE')
            else: 
                self.view.err('PROBLEMA AL LEER EL ADMINISTRADOR. REVISA.')
        return   

    def leer_admins(self):
        admins = self.model.leer_admins()
        if type(admins) == list:
            self.view.mostrar_admin_header(' Todos los admins ')
            for admin in admins:
                self.view.mostrar_admin(admin)
                self.view.mostrar_admin_midder()
            self.view.mostrar_admin_footer()
        else:
            self.view.err('PROBLEMA AL LEER LOS ADMINISTRADOR. REVISA')
        return

    def actualizar_admin(self):
        self.view.ask('ID del admin: ')
        Id_Administrador = input()
        admin = self.model.leer_admin(Id_Administrador)
        if type(admin) == tuple:
            self.view.mostrar_admin_header(' identificador de la admin '+Id_Administrador+' ')
            self.view.mostrar_admin(admin)
            self.view.mostrar_admin_midder()
            self.view.mostrar_admin_footer()
        else:
            if admin == None:
                self.view.err('EL ADMINISTRADOR NO EXISTE')
            else:
                self.view.err('PROBLEMA AL LEER EL ADMINISTRADOR. REVISA')
            return
        self.view.msg('Ingresa los valores a modificar (vacio para dejarlo igual):')
        whole_vals = self.ask_admin()
        fields, vals = self.update_lists(['Nombre','Email','Num','password'], whole_vals)
        vals.append(Id_Administrador)
        vals = tuple(vals)
        out = self.model.actualizar_admin(fields, vals)
        if out == True:
            self.view.ok(Id_Administrador, 'actualizo')
        else:
            self.view.err('NO SE PUDO ACTUALIZAR EL ADMINISTRADOR. REVISA.')
        return

    def eliminar_admin(self):
        self.view.ask('ID admin: ')
        Id_Administrador = input()
        count = self.model.eliminar_admin(Id_Administrador)
        if count != 0:
               self.view.ok(Id_Administrador, 'borro')
        else: 
            if count == 0:
                self.view.err('EL ADMINISTRADOR NO EXISTE')
            else:
                self.view.err('PROBLEMA AL BORRAR AL ADMINISTRADOR. REVISA.')
        return


    """
    ************************************
    *   Controladores funciones  *
    ************************************
    """
    def CtrlFunciones(self):
        os.system ("cls") 
        o = '0'
        while o != '5':
            self.view.menu_funciones()
            self.view.option('5')
            o = input()
            if o == '1':
                self.crear_funcion()
            elif o == '2':
                self.leer_funciones()
            elif o == '3':
                self.actualizar_funcion()
            elif o == '4':
                self.eliminar_funcion()
            elif o == '5':
                self.view.end()
            else:
                self.view.not_valid_option()
        return

    def ask_funcion(self):
        self.view.ask('Id_Pelicula  : ')
        Id_Pelicula = input()
        self.view.ask('Id_Sala: ')
        Id_Sala = input()
        self.view.ask('fecha: ')
        fecha = input()
        self.view.ask('horario: ')
        horario = input()
        return[Id_Pelicula,Id_Sala,fecha,horario]

    def crear_funcion(self):
        print('Aregar funcion')
        self.view.ask('Id_Pelicula: ')
        Id_Pelicula = input()
        self.view.ask('Id_Sala: ')
        Id_Sala = input()
        self.view.ask('fecha: ')
        fecha = input()
        self.view.ask('horario: ')
        horario = input()


        result = self.model.crear_funcion(Id_Pelicula, Id_Sala, fecha, horario)
        if result == True:
            self.view.msg('funcion creada')
        else:
            self.view.err(result)

    def leer_funcion(self):
        self.view.ask('ID funcion: ')
        Id_Funcion = input()
        funcion = self.model.leer_funcion(Id_Funcion)
        if type(funcion) == tuple:
            self.view.mostrar_funcion_header('Datos de la funcion'+Id_Funcion+' ')
            self.view.mostrar_funcion(funcion)
            self.view.mostrar_funcion_midder()
            self.view.mostrar_funcion_footer()
        else:
            if funcion == None:
                self.view.err('LA FUNCION NO EXISTE')
            else: 
                self.view.err('PROBLEMA AL LEER LA FUNCION. REVISA.')
        return   

    def leer_funciones(self):
        funcions = self.model.leer_funciones()
        if type(funcions) == list:
            self.view.mostrar_funcion_header(' Todos las funciones ')
            for funcion in funcions:
                self.view.mostrar_funcion(funcion)
                self.view.mostrar_funcion_midder()
            self.view.mostrar_funcion_footer()
        else:
            self.view.err('PROBLEMA AL LEER LOS funcions. REVISA')
        return

    def actualizar_funcion(self):
        self.view.ask('ID de la funcion: ')
        Id_Funcion = input()
        funcion = self.model.leer_funcion(Id_Funcion)
        if type(funcion) == tuple:
            self.view.mostrar_funcion_header(' identificador de la funcion '+Id_Funcion+' ')
            self.view.mostrar_funcion(funcion)
            self.view.mostrar_funcion_midder()
            self.view.mostrar_funcion_footer()
        else:
            if funcion == None:
                self.view.err('LA funcion NO EXISTE')
            else:
                self.view.err('PROBLEMA AL LEER LA funcion. REVISA')
            return
        self.view.msg('Ingresa los valores a modificar (vacio para dejarlo igual):')
        whole_vals = self.ask_funcion()
        fields, vals = self.update_lists(['Id_Pelicula','Id_Sala','fecha','horario'], whole_vals)
        vals.append(Id_Funcion)
        vals = tuple(vals)
        out = self.model.actualizar_funcion(fields, vals)
        if out == True:
            self.view.ok(Id_Funcion, 'actualizo')
        else:
            self.view.err('NO SE PUDO ACTUALIZAR LA funcion. REVISA.')
        return

    def eliminar_funcion(self):
        self.view.ask('ID funcion: ')
        Id_Funcion = input()
        count = self.model.eliminar_funcion(Id_Funcion)
        if count != 0:
               self.view.ok(Id_Funcion, 'borro')
        else: 
            if count == 0:
                self.view.err('LA FUNCION NO EXISTE')
            else:
                self.view.err('PROBLEMA AL BORRAR LA FUNCION. REVISA.')
        return


    def horario_funcion(self):
        self.view.ask('Hora: (Formato de 24 horas: hh:mm:ss')
        horario = input()
        funcion = self.model.horario_funcion(horario)
        if type(funcion) == list:
            self.view.mostrar_funcion_header('Funciones con el horario '+horario+' ')
            for function in funcion:
                self.view.mostrar_funcion(function)
                self.view.mostrar_funcion_midder()
            self.view.mostrar_funcion_footer()
        else:
            self.view.err('PROBLEMA AL LEER LAS FUNCIONES. REVISA.')
        return

    def fecha_funcion(self):
        self.view.ask('Fecha: (AAAA-MM-DD)')
        fecha = input()
        funcion = self.model.fecha_funcion(fecha)
        if type(funcion) == list:
            self.view.mostrar_funcion_header('Funciones con la fecha '+fecha+' ')
            for function in funcion:
                self.view.mostrar_funcion(function)
                self.view.mostrar_funcion_midder()
            self.view.mostrar_funcion_footer()
        else:
            self.view.err('PROBLEMA AL LEER LAS FUNCIONES. REVISA.')
        return
    
    def pelicula_funcion(self):
        self.view.ask('Id de la pelicula: ')
        pelicula = input()
        funcion = self.model.pelicula_funcion(pelicula)
        if type(funcion) == list:
            self.view.mostrar_funcion_header('Funciones de la pelicula '+pelicula+' ')
            for function in funcion:
                self.view.mostrar_funcion(function)
                self.view.mostrar_funcion_midder()
            self.view.mostrar_funcion_footer()
        else:
            self.view.err('PROBLEMA AL LEER LAS FUNCIONES. REVISA.')
        return

    """
    ************************************
    *   Controladores peliculas  *
    ************************************
    """

    def CtrlPeliculas(self):
        os.system ("cls") 
        o = '0'
        while o != '5':
            self.view.menu_peliculas()
            self.view.option('5')
            o = input()
            if o == '1':
                self.crear_pelicula()
            elif o == '2':
                self.leer_peliculas()
            elif o == '3':
                self.actualizar_pelicula()
            elif o == '4':
                self.eliminar_pelicula()
            elif o == '5':
                self.view.end()
            else:
                self.view.not_valid_option()
        return

    def ask_pelicula(self):
        self.view.ask('Titulo: ')
        Titulo = input()
        self.view.ask('Genero: ')
        Genero = input()
        self.view.ask('Duracion: ')
        Duracion = input()
        self.view.ask('Idioma: ')
        Idioma = input()
        return[Titulo,Genero,Duracion,Idioma]

    def crear_pelicula(self):
        print('Aregar pelicula')
        self.view.ask('Titulo: ')
        Titulo = input()
        self.view.ask('Genero: ')
        Genero = input()
        self.view.ask('Duracion: ')
        Duracion = input()
        self.view.ask('Idioma: ')
        Idioma = input()

        result = self.model.crear_pelicula(Titulo, Genero, Duracion, Idioma)
        if result == True:
            self.view.msg('pelicula creada')
        else:
            self.view.err(result)

    def leer_pelicula(self):
        self.view.ask('ID pelicula: ')
        Id_Pelicula = input()
        pelicula = self.model.leer_pelicula(Id_Pelicula)
        if type(pelicula) == tuple:
            self.view.mostrar_pelicula_header('Datos de la pelicula'+Id_Pelicula+' ')
            self.view.mostrar_pelicula(pelicula)
            self.view.mostrar_pelicula_midder()
            self.view.mostrar_pelicula_footer()
        else:
            if pelicula == None:
                self.view.err('LA PELICULA NO EXISTE')
            else: 
                self.view.err('PROBLEMA AL LEER LA PELICULA. REVISA.')
        return   

    def leer_peliculas(self):
        peliculas = self.model.leer_peliculas()
        if type(peliculas) == list:
            self.view.mostrar_pelicula_header(' Todos las peliculas ')
            for pelicula in peliculas:
                self.view.mostrar_pelicula(pelicula)
                self.view.mostrar_pelicula_midder()
            self.view.mostrar_pelicula_footer()
        else:
            self.view.err('PROBLEMA AL LEER LOS peliculas. REVISA')
        return

    def actualizar_pelicula(self):
        self.view.ask('ID de la pelicula: ')
        Id_Pelicula = input()
        pelicula = self.model.leer_pelicula(Id_Pelicula)
        if type(pelicula) == tuple:
            self.view.mostrar_pelicula_header(' identificador de la pelicula '+Id_Pelicula+' ')
            self.view.mostrar_pelicula(pelicula)
            self.view.mostrar_pelicula_midder()
            self.view.mostrar_pelicula_footer()
        else:
            if pelicula == None:
                self.view.err('LA PELICULA NO EXISTE')
            else:
                self.view.err('PROBLEMA AL LEER LA PELICULA. REVISA')
            return
        self.view.msg('Ingresa los valores a modificar (vacio para dejarlo igual):')
        whole_vals = self.ask_pelicula()
        fields, vals = self.update_lists(['Titulo','Genero','Duracion','Idioma'], whole_vals)
        vals.append(Id_Pelicula)
        vals = tuple(vals)
        out = self.model.actualizar_pelicula(fields, vals)
        if out == True:
            self.view.ok(Id_Pelicula, 'actualizo')
        else:
            self.view.err('NO SE PUDO ACTUALIZAR LA PELICULA. REVISA.')
        return

    def eliminar_pelicula(self):
        self.view.ask('ID plicula: ')
        Id_Pelicula = input()
        count = self.model.eliminar_pelicula(Id_Pelicula)
        if count != 0:
               self.view.ok(Id_Pelicula, 'borro')
        else: 
            if count == 0:
                self.view.err('LA PELICULA NO EXISTE')
            else:
                self.view.err('PROBLEMA AL BORRAR LA PELICULA. REVISA.')
        return

    """
    ************************************
    *   Controladores Butaca  *
    ************************************
    """

    def CtrlButaca(self):
        os.system ("cls") 
        o = '0'
        while o != '5':
            self.view.menu_butaca()
            self.view.option('5')
            o = input()
            if o == '1':
                self.crear_butaca()
            elif o == '2':
                self.leer_butacas()
            elif o == '3':
                self.actualizar_butaca()
            elif o == '4':
                self.eliminar_butaca()
            elif o == '5':
                self.view.end()
            else:
                self.view.not_valid_option()
        return

    def ask_butaca(self):
        self.view.ask('ID: (ingrese el numero del asiento ) ')
        Id_Butaca = input()
        self.view.ask('Estado: (0 = disponible, 1 = ocupado) ')
        Estado = input()
        return[Id_Butaca,Estado]

    def crear_butaca(self):
        print('Aregar butaca')
        self.view.ask('Id_Butaca: (ingrese el numero del asiento) ')
        Id_Butaca = input()
        self.view.ask('Estado: (0 = disponible, 1 = ocupado) ')
        Estado = input()

        result = self.model.crear_butaca(Id_Butaca, Estado)
        if result == True:
            self.view.msg('butaca creada')
        else:
            self.view.err('Butaca ya creada.')

    def leer_butaca(self):
        self.view.ask('ID butaca: ')
        Id_butaca = input()
        butaca = self.model.leer_butaca(Id_butaca)
        if type(butaca) == tuple:
            self.view.mostrar_butaca_header('Datos de la butaca'+Id_butaca+' ')
            self.view.mostrar_butaca(butaca)
            self.view.mostrar_butaca_midder()
            self.view.mostrar_butaca_footer()
        else:
            if butaca == None:
                self.view.err('LA butaca NO EXISTE')
            else: 
                self.view.err('PROBLEMA AL LEER LA butaca. REVISA.')
        return   

    def leer_butacas(self):
        butacas = self.model.leer_butacas()
        if type(butacas) == list:
            self.view.mostrar_butaca_header(' Todos las butacas ')
            for butaca in butacas:
                self.view.mostrar_butaca(butaca)
                self.view.mostrar_butaca_midder()
            self.view.mostrar_butaca_footer()
        else:
            self.view.err('PROBLEMA AL LEER LOS butacas. REVISA')
        return

    def actualizar_butaca(self):
        self.view.ask('ID de la butaca: ')
        Id_butaca = input()
        butaca = self.model.leer_butaca(Id_butaca)
        if type(butaca) == tuple:
            self.view.mostrar_butaca_header(' identificador de la butaca '+Id_butaca+' ')
            self.view.mostrar_butaca(butaca)
            self.view.mostrar_butaca_midder()
            self.view.mostrar_butaca_footer()
        else:
            if butaca == None:
                self.view.err('LA butaca NO EXISTE')
            else:
                self.view.err('PROBLEMA AL LEER LA butaca. REVISA')
            return
        self.view.msg('Ingresa los valores a modificar (vacio para dejarlo igual):')
        whole_vals = self.ask_butaca()
        fields, vals = self.update_lists(['Id_Butaca','Estado','Duracion','Idioma'], whole_vals)
        vals.append(Id_butaca)
        vals = tuple(vals)
        out = self.model.actualizar_butaca(fields, vals)
        if out == True:
            self.view.ok(Id_butaca, 'actualizo')
        else:
            self.view.err('NO SE PUDO ACTUALIZAR LA butaca. REVISA.')
        return

    def eliminar_butaca(self):
        self.view.ask('ID butaca: ')
        Id_butaca = input()
        count = self.model.eliminar_butaca(Id_butaca)
        if count != 0:
               self.view.ok(Id_butaca, 'borro')
        else: 
            if count == 0:
                self.view.err('LA butaca NO EXISTE')
            else:
                self.view.err('PROBLEMA AL BORRAR LA butaca. REVISA.')
        return

    """
    ************************************
    *        Controladores salas       *
    ************************************
    """

    def Ctrlsalas(self):
        os.system ("cls") 
        o = '0'
        while o != '5':
            self.view.menu_salas()
            self.view.option('5')
            o = input()
            if o == '1':
                self.crear_sala()
            elif o == '2':
                self.leer_salas()
            elif o == '3':
                self.actualizar_Sala()
            elif o == '4':
                self.eliminar_Sala()
            elif o == '5':
                self.view.end()
            else:
                self.view.not_valid_option()
        return

    def ask_Sala(self):
        self.view.ask('Asientos: ')
        Asientos = input()
        self.view.ask('Tipo: ')
        Tipo = input()
        return[Asientos,Tipo]

    def crear_sala(self):
        print('Asientos en la sala')
        self.view.ask('Asientos: ')
        Asientos = input()
        print('Tipo  de la sala')
        self.view.ask('Tipo: ')
        Tipo = input()

        result = self.model.crear_Sala(Asientos, Tipo)
        if result == True:
            self.view.msg('sala creada')
        else:
            self.view.err(result)

    def leer_Sala(self):
        self.view.ask('ID sala: ')
        Id_Sala = input()
        sala = self.model.leer_Sala(Id_Sala)
        if type(sala) == tuple:
            self.view.mostrar_sala_header('Datos de la sala'+Id_Sala+' ')
            self.view.mostrar_sala(sala)
            self.view.mostrar_sala_midder()
            self.view.mostrar_sala_footer()
        else:
            if sala == None:
                self.view.err('LA SALA NO EXISTE')
            else: 
                self.view.err('PROBLEMA AL LEER LA SALA. REVISA.')
        return   

    def leer_salas(self):
        salas = self.model.leer_Salas()
        if type(salas) == list:
            self.view.mostrar_sala_header(' Todos las salas ')
            for sala in salas:
                self.view.mostrar_sala(sala)
                self.view.mostrar_sala_midder()
            self.view.mostrar_sala_footer()
        else:
            self.view.err('PROBLEMA AL LEER LOS salas. REVISA')
        return

    def actualizar_Sala(self):
        self.view.ask('ID de la sala: ')
        Id_Sala = input()
        sala = self.model.leer_Sala(Id_Sala)
        if type(sala) == tuple:
            self.view.mostrar_sala_header(' identificador de la sala '+Id_Sala+' ')
            self.view.mostrar_sala(sala)
            self.view.mostrar_sala_midder()
            self.view.mostrar_sala_footer()
        else:
            if sala == None:
                self.view.err('LA SALA NO EXISTE')
            else:
                self.view.err('PROBLEMA AL LEER LA SALA. REVISA')
            return
        self.view.msg('Ingresa los valores a modificar (vacio para dejarlo igual):')
        whole_vals = self.ask_Sala()
        fields, vals = self.update_lists(['Butaca','Tipo'], whole_vals)
        vals.append(Id_Sala)
        vals = tuple(vals)
        out = self.model.actualizar_Sala(fields, vals)
        if out == True:
            self.view.ok(Id_Sala, 'actualizo')
        else:
            self.view.err('NO SE PUDO ACTUALIZAR LA SALA. REVISA.')
        return

    def eliminar_Sala(self):
        self.view.ask('ID plicula: ')
        Id_Sala = input()
        count = self.model.eliminar_Sala(Id_Sala)
        if count != 0:
               self.view.ok(Id_Sala, 'borro')
        else: 
            if count == 0:
                self.view.err('LA SALA NO EXISTE')
            else:
                self.view.err('PROBLEMA AL BORRAR LA SALA. REVISA.')
        return

    """
    ************************************
    *   Controladores Tikets  *
    ************************************
    """

    def CtrlTicket(self):
        os.system ("cls") 
        o = '0'
        while o != '5':
            self.view.menu_Ticket()
            self.view.option('5')
            o = input()
            if o == '1':
                self.crear_Ticket()
            elif o == '2':
                self.leer_Tickets()
            elif o == '3':
                self.actualizar_Ticket()
            elif o == '4':
                self.eliminar_Ticket()
            elif o == '5':
                self.view.end()
            else:
                self.view.not_valid_option()
        return

    def ask_Ticket(self):
        self.view.ask('Id_Funcion  : ')
        Id_Funcion = input()
        self.view.ask('Id_Usuario: ')
        Id_Usuario = input()
        self.view.ask('Id_Butaca: ')
        Id_Butaca = input()
        return[Id_Funcion,Id_Usuario,Id_Butaca]

    def crear_Ticket(self):
        print('Aregar Ticket')
        self.view.ask('Id_Funcion: ')
        Id_Funcion = input()
        self.view.ask('Id_Usuario: ')
        Id_Usuario = input()
        self.view.ask('Id_Butaca: ')
        Id_Butaca = input()

        result = self.model.crear_Ticket(Id_Funcion, Id_Usuario, Id_Butaca)
        if result == True:
            self.view.msg('Ticket creado')
            print("creado")

    def crear_Ticket_usuario(self):
        print('Aregar Ticket')
        self.view.ask('Id_Funcion: ')
        Id_Funcion = input()
        Id_Usuario = self.sesion
        self.view.ask('Id_Butaca: ')
        Id_Butaca = input()

        result = self.model.crear_Ticket(Id_Funcion, Id_Usuario, Id_Butaca)
        if result == True:
            self.view.msg('Ticket creado')
            print("creado")

    def leer_Tickets_usuario(self):
        Id_Usuario = self.sesion
        tickets = self.model.leer_Tickets_usuario(Id_Usuario)
        if type(tickets) == list:
            self.view.mostrar_tickets_header('Tickets del usuario: ')
            for function in tickets:
                self.view.mostrar_tickets(function)
                self.view.mostrar_tickets_midder()
            self.view.mostrar_tickets_footer()
        else:
            self.view.err('PROBLEMA AL LEER LAS ticketsES. REVISA.')
        return

    def leer_Ticket(self):
        self.view.ask('ID Ticket: ')
        Id_Ticket = input()
        Ticket = self.model.leer_Ticket(Id_Ticket)
        if type(Ticket) == tuple:
            self.view.mostrar_Ticket_header('Datos de la Ticket'+Id_Ticket+' ')
            self.view.mostrar_Ticket(Ticket)
            self.view.mostrar_Ticket_midder()
            self.view.mostrar_Ticket_footer()
        else:
            if Ticket == None:
                self.view.err('LA Ticket NO EXISTE')
            else: 
                self.view.err('PROBLEMA AL LEER LA Ticket. REVISA.')
        return   

    def leer_Tickets(self):
        Tickets = self.model.leer_Tickets()
        if type(Tickets) == list:
            self.view.mostrar_Ticket_header(' Todos las Ticketes ')
            for Ticket in Tickets:
                self.view.mostrar_Ticket(Ticket)
                self.view.mostrar_Ticket_midder()
            self.view.mostrar_Ticket_footer()
        else:
            self.view.err('PROBLEMA AL LEER LOS Tickets. REVISA')
        return

    def actualizar_Ticket(self):
        self.view.ask('ID de la Ticket: ')
        Id_Ticket = input()
        Ticket = self.model.leer_Ticket(Id_Ticket)
        if type(Ticket) == tuple:
            self.view.mostrar_Ticket_header(' identificador de la Ticket '+Id_Ticket+' ')
            self.view.mostrar_Ticket(Ticket)
            self.view.mostrar_Ticket_midder()
            self.view.mostrar_Ticket_footer()
        else:
            if Ticket == None:
                self.view.err('LA Ticket NO EXISTE')
            else:
                self.view.err('PROBLEMA AL LEER LA Ticket. REVISA')
            return
        self.view.msg('Ingresa los valores a modificar (vacio para dejarlo igual):')
        whole_vals = self.ask_Ticket()
        fields, vals = self.update_lists(['Id_Funcion','Id_Usuario','Id_Butaca'], whole_vals)
        vals.append(Id_Ticket)
        vals = tuple(vals)
        out = self.model.actualizar_Ticket(fields, vals)
        if out == True:
            self.view.ok(Id_Ticket, 'actualizo')
        else:
            self.view.err('NO SE PUDO ACTUALIZAR LA Ticket. REVISA.')
        return

    def eliminar_Ticket(self):
        self.view.ask('ID del ticket: ')
        Id_Ticket = input()
        count = self.model.eliminar_Ticket(Id_Ticket)
        if count != 0:
               self.view.ok(Id_Ticket, 'borro')
        else: 
            if count == 0:
                self.view.err('LA Ticket NO EXISTE')
            else:
                self.view.err('PROBLEMA AL BORRAR EL TICKET. REVISA.')
        return