Exemple #1
0
class ListaTrabajos:
	def __init__(self):
		self.RT = RepositorioTrabajos()
		self.TrabajoL = self.RT.get_all()

	def nuevo_trabajo(self, cliente, fecha_ingreso, fecha_entrega_propuesta, descripcion):
		#Recibe los datos de un trabajo, crea un nuevo trabajo y lo agrega a la lista Trabajos.
		T = Trabajo(cliente, fecha_ingreso, fecha_entrega_propuesta, None, descripcion,False)
		T.id_trabajo = self.RT.store(T)
		if T.id_trabajo == 0:
			print(T)
			return None
		else:
			self.TrabajoL.append(T)
			return T

	def BuscarPorID(self, id_trabajo):
		#Recibe un ID y retorna un trabajo.
		for T in self.TrabajoL:
			if T.id_trabajo == int(id_trabajo):
				return (T)
		print("El ID ingresado no coincide o pertenece con ningun trabajo asignado")
		return None

	def modificar_trabajo(self, fecha_ingreso, fecha_entrega_propuesta, fecha_entrega_real, descripcion, id_trabajo):
		#Recibe un trabajo y modifica los datos.
		T = self.BuscarPorID(id_trabajo)
		if T:
			T.fecha_ingreso = fecha_ingreso
			T.fecha_entrega_propuesta = fecha_entrega_propuesta
			T.fecha_entrega_real = fecha_entrega_real
			T.descripcion = descripcion
			return self.RT.update(T)
		return None
Exemple #2
0
class ListaTrabajos:
    def __init__(self):
        self.rt = RepositorioTrabajos()
        self.lista = self.rt.get_all()

    def nuevo_trabajo(self, cliente, fecha_ingreso, fecha_entrega_propuesta,
                      fecha_entrega_real, descripcion, retirado):
        t = Trabajo(cliente, fecha_ingreso, fecha_entrega_propuesta,
                    fecha_entrega_real, descripcion, retirado)
        t.id_trabajo = self.rt.store(t)
        if t.id_trabajo == 0:
            return None
        else:
            self.lista.append(t)
            return t
Exemple #3
0
class ListaClientes:
    def __init__(self):
        self.rc = RepositorioClientes()
        self.rt = RepositorioTrabajos()
        self.list_clientes = self.rc.get_all()
        self.listaTrabajo = self.rt.get_all()

    def nuevo_cliente_corporativo(self, nombre, nombre_contacto,
                                  telefono_contacto, telefono, mail):
        """Recibe los datos de un cliente corporativo, crea un nuevo cliente corporativo y lo agrega a lista de clientes"""
        c = ClienteCorporativo(nombre, nombre_contacto, telefono_contacto,
                               telefono, mail)
        c.id_cliente = self.rc.store(c)
        if c.id_cliente == 0:
            return None
        else:
            self.list_clientes.append(c)
            return c

    def nuevo_cliente_particular(self, nombre, apellido, telefono, mail):
        """Recibe los datos de un cliente particular, crea un nuevo cliente particular y lo agrega a la lista de clietes"""
        c = ClienteParticular(nombre, apellido, telefono, mail)
        c.id_cliente = self.rc.store(c)
        if c.id_cliente == 0:
            return None
        else:
            self.list_clientes.append(c)
            return c

    def _buscar_por_id(self, id_cliente):
        """Recibe un id de contacto y retorna el contacto que coincide con esa
        id, o None si ninguno de ellos coincide"""

        for C in self.list_clientes:
            if C.id_cliente == int(id_cliente):
                return (C)
        return None

    def modificar_datos_CP(self, nombre, apellido, telefono, mail, id_cliente):
        """Recibe los datos modificados y actualiza los datos del cliente particular"""
        Cp = self._buscar_por_id(id_cliente)
        if Cp:
            if nombre == '':
                nombre = Cp.nombre
            else:
                Cp.nombre = nombre
            if apellido == '':
                apellido = Cp.apellido
            else:
                Cp.apellido = apellido
            if telefono == '':
                telefono = Cp.telefono
            else:
                Cp.telefono = telefono
            if mail == '':
                mail = Cp.mail
            else:
                Cp.mail = mail
            return self.rc.update(Cp)
        return None

    def modificar_datos_CC(self, nombre_empresa, nombre_contacto,
                           telefono_contacto, telefono, mail, id_cliente):
        """Recibe los datos modificados y actualiza los datos del cliente corporativo"""
        Cc = self._buscar_por_id(id_cliente)
        if Cc:
            if nombre_empresa == '':
                nombre_empresa = Cc.nombre_empresa
            else:
                Cc.nombre_empresa = nombre_empresa
            if nombre_contacto == '':
                nombre_contacto = Cc.nombre_contacto
            else:
                Cc.nombre_contacto = nombre_contacto
            if telefono_contacto == '':
                telefono_contacto = Cc.telefono_contacto
            else:
                Cc.telefono_contacto = telefono_contacto
            if telefono == '':
                telefono = Cc.telefono
            else:
                Cc.telefono = telefono
            if mail == '':
                mail = Cc.mail
            else:
                Cc.mail = mail
            return self.rc.update(Cc)
        return None

    def eliminar_cliente(self, id_cliente):
        """"Recibe el ID de un cliente y lo elimina, en caso de contener trabajos, tambien los elimina"""
        C = self._buscar_por_id(id_cliente)
        for i in self.rt.get_all():
            if i.cliente.id_cliente == id_cliente:
                self.rt.delete(i)
            self.listaTrabajo = self.rt.get_all()
        self.rc.delete(C)
        self.list_clientes = self.rc.get_all()
        return True
Exemple #4
0
class ListaTrabajos:
    def __init__(self):
        self.rt = RepositorioTrabajos()
        self.listaTrabajo = self.rt.get_all()

    def nuevo_trabajo(self, cliente, fecha_ingreso, fecha_entrega_propuesta,
                      descripcion):
        "Recibe los datos de una trabajo, crea uno nuevo y lo agrega a la lista"
        t = Trabajo(cliente, fecha_ingreso, fecha_entrega_propuesta, None,
                    descripcion, False)
        t.id_trabajo = self.rt.store(t)
        if t.id_trabajo == 0:
            return None
        else:
            self.listaTrabajo.append(t)
            return t

    def _buscar_por_id(self, id_trabajo):
        """Recibe un id de trabajo y retorna el cliente que coincide con esa
        id, o None si ninguno de ellos coincide"""

        for t in self.listaTrabajo:
            if t.id_trabajo == int(id_trabajo):
                return (t)
        return None

    def modificar_datos_trabajo(self, fecha_ingreso, fecha_entrega_propuesta,
                                descripcion, id_trabajo):
        """Recibe un trabajo y modifica sus datos"""
        t = self._buscar_por_id(id_trabajo)
        if t:
            t.fecha_ingreso = fecha_ingreso
            t.fecha_entrega_propuesta = fecha_entrega_propuesta
            t.descripcion = descripcion
            return self.rt.update(t)
        return None

    def trabajo_finalizado(self, id_trabajo):
        """Recibe un trabajo y le modifica la fecha de entrega"""
        t = self._buscar_por_id(id_trabajo)
        if t:
            t.fecha_entrega_real = datetime.date.today()
            return self.rt.update(t)
        return None

    def retiro_trabajo(self, id_trabajo):
        """Recibe un trabajo y modifica el trabajo como retirado"""
        t = self._buscar_por_id(id_trabajo)
        if t:
            if t.fecha_entrega_real == None:
                t.retirado = True
                self.trabajo_finalizado(id_trabajo)
            else:
                t.retirado = True
            return self.rt.update(t)
        return None

    def eliminar_trabajo(self, id_trabajo):
        t = self._buscar_por_id(id_trabajo)
        if t:
            self.rt.delete(t)
            self.listaTrabajo = self.rt.get_all()
            return True
        return None
Exemple #5
0
class Menu:
    "Muestra un menu para que se responda a las opciones"

    def __init__(self):
        self.lista_clientes = ListaClientes()
        self.repositoriocl = RepositorioClientes()
        self.lista = self.repositoriocl.get_all()
        self.repositoriotr = RepositorioTrabajos()
        self.LT = ListaTrabajos()
        self.opciones = {
            "1": self.mostrar_clientes,
            "2": self.nuevo_cliente,
            "3": self.modificar_cliente,
            "4": self.eliminar_cliente,
            "5": self.carga_trabajo,
            "6": self.modificar_trabajo,
            "7": self.mostrar_trabajos,
            "8": self.HistorialTrabajosCl,
            "0": self.salir
        }

    def mostrar_menu(self):
        print("""
Menu del sistema:
1. Mostrar todos los clientes
2. Ingreso de nuevo cliente
3. Modificacion de cliente
4. Eliminacion de cliente
5. Carga de nuevo trabajo
6. Modificar datos de un trabajo
7. Mostrar todos los trabajos
8. Informe
0. Salir
""")

    def ejecutar(self):
        "Muestra el menu y responde a las opciones."
        while True:
            self.mostrar_menu()
            opcion = input("Ingresar una opcion: ")
            accion = self.opciones.get(opcion)
            if accion:
                accion()
            else:
                print("{0} no es una opcion valida".format(opcion))

    #CLIENTE // Mostrar todos los clientes.
    def mostrar_clientes(self, lista=None):
        if lista == None:
            lista = self.repositoriocl.get_all()
        for cliente in lista:
            print(cliente)
            print("==========================")

    #CLIENTE // Ingreso de cliente.
    def nuevo_cliente(self):
        tipo = "A"
        while tipo not in ("C", "c", "P", "p"):
            tipo = input(
                "Ingrese el tipo de cliente: C: Corporativo/ P:Particular")
        nombre = input("Ingrese el nombre:")
        if tipo in ("C", "c"):
            contacto = input("Ingrese el nombre del contacto: ")
            tc = input("Ingrese el telefono del contacto: ")
        else:
            apellido = input("Ingrese el apellido: ")
        tel = input("Ingrese el telefono: ")
        mail = input("Ingresa la direccion de email: ")
        if tipo in ("C", "c"):
            c = self.lista_clientes.nuevo_cliente_corporativo(
                nombre, contacto, tc, tel, mail)
        else:
            c = self.lista_clientes.nuevo_cliente_particular(
                nombre, apellido, tel, mail)
        if c is None:
            print("Error al cargar el cliente")
        else:
            print("Cliente cargado correctamente")

    #CLIENTE // Modificacion de cliente.
    def modificar_cliente(self):
        tipo = "A"
        id_cliente = int(input("Ingrese el ID del cliente registrado: "))
        while tipo not in ("C", "c", "P", "p"):
            tipo = input(
                "Ingrese el tipo de cliente: C: Corporativo/ P: Particular ")
        nombre = input("Ingrese el nombre: ")
        if tipo in ("C", "c"):
            contacto = input("Ingrese el nombre del contacto: ")
            tc = input("Ingrese el telefono del contacto: ")
        else:
            apellido = input("Ingrese el apellido: ")
        tel = input("Ingrese el telefono: ")
        mail = input("Ingresa la direccion de email: ")
        if tipo in ("C", "c"):
            cliente = ClienteCorporativo(nombre, contacto, tc, tel, mail,
                                         id_cliente)
            c = self.repositoriocl.update(cliente)
        else:
            cliente = ClienteParticular(nombre, apellido, tel, mail,
                                        id_cliente)
            c = self.repositoriocl.update(cliente)

        if c is None:
            print("Error al modificar el cliente")
        else:
            print("Cliente modificado correctamente")

    #CLIENTE // Suprimir un cliente.
    def eliminar_cliente(self):
        id_cliente = int(input("Ingrese el id del cliente"))
        c = self.repositoriocl.get_one(id_cliente)
        if c == None:
            print("El id del cliente no esta cargado en nuestra base de datos")
        else:
            self.repositoriocl.delete(c)
            print("El cliente fue eliminado correctamente!")

    #TRABAJO // Carga de un nuevo trabajo.
    def carga_trabajo(self):
        id_cliente = int(input("Ingrese el id del cliente: "))
        rc = RepositorioClientes()
        cl = rc.get_one(id_cliente)
        fecha_ingreso = datetime.date.today()
        dia = int(input("Ingrese el dia: "))
        mes = int(input("Ingrese el mes: "))
        anio = int(input("Ingrese el anio: "))
        fecha_entrega_propuesta = datetime.date(anio, mes, dia)
        descripcion_trabajo = input(
            "Ingrese una descripcion del trabajo a realizar: ")
        c = self.LT.nuevo_trabajo(cl, fecha_ingreso, fecha_entrega_propuesta,
                                  descripcion_trabajo)
        if c == None:
            print("Error, no puede cargarse el nuevo trabajo ")
        else:
            print("Trabajo cargado correctamente en la base de datos! ")

    #TRABAJO // Modificar datos de los trabajos cargados. // FechaING-PROP-REAL-DESC-ESTADO DEL TRABAJO.
    def modificar_trabajo(self):
        print(
            "Al ingresar un ID de trabajo se tendran que modificar todos los datos, en caso de que quede un campo vacio se modificara de esa forma"
        )
        id_trabajo = int(input("Ingrese el ID del trabajo: "))
        C = self.repositoriotr.get_one(id_trabajo)
        if C == None:
            print("No se encontro el trabajo")
        else:
            t = input(
                "Si desea modificar la fecha de ingreso presione f, de lo contrario presione 0 para continuar: "
            )
            if t in ("f", "F"):
                dia = int(input("Ingrese nuevamente el dia: "))
                mes = int(input("Ingrese nuevamente el mes: "))
                anio = int(input("Ingrese nuevamente el anio: "))
                print("Fecha modificada exitosamente! ")
                fechaingreso = datetime.date(anio, mes, dia)
            else:
                fechaingreso = C.fecha_ingreso
            t = input(
                "Si desea modificar la fecha de entrega propuesta de un trabajo presione la tecla e, de lo contrario presione 0 para continuar: "
            )
            if t in ("e", "E"):
                dia = int(input("Ingrese nuevamente el dia: "))
                mes = int(input("Ingrese nuevamente el mes: "))
                anio = int(input("Ingrese nuevamente el anio: "))
                print("Fecha modificada exitosamente! ")
                fentregapropuesta = datetime.date(anio, mes, dia)
            else:
                fentregapropuesta = C.fecha_entrega_propuesta
                print("Ningun dato se ha modificado")
            t = input(
                "Si desea modificar la fecha real de un trabajo presione la tecla r, de lo contrario presione 0 para continuar: "
            )
            if t in ("r", "R"):
                dia = int(input("Ingrese nuevamente el dia: "))
                mes = int(input("Ingrese nuevamente el mes: "))
                anio = int(input("Ingrese nuevamente el anio: "))
                print("Fecha modificada exitosamente! ")
                fentregareal = datetime.date(anio, mes, dia)
            else:
                fentregareal = C.fecha_entrega_real
                print("No se ha modificado la fecha! ")
            t = input(
                "Si desea modificar la descripcion de un trabajo presione la tecla t, de lo contrario presione 0 para continuar: "
            )
            if t in ("t", "T"):
                t = input("Ingrese la nueva descripcion del trabajo: ")
                print("Se ha modificado el nombre del trabajo! ")
                descripcion = t
            else:
                C.descripcion = descripcion
                print("La descripcion del trabajo no ha podido modificarse")
            trabajo = self.LT.modificar_trabajo(fechaingreso,
                                                fentregapropuesta,
                                                fentregareal, descripcion,
                                                id_trabajo)
            self.repositoriocl.update(trabajo)
            self.LT.TrabajoL = self.repositoriotr.get_all()

    #TRABAJO // Mostrar todos los trabajos.
    def mostrar_trabajos(self, listat=None):
        if listat == None:
            listat = self.repositoriotr.get_all()
        for cliente in listat:
            print(cliente)
            print("============================")

    #INFORME // Despliega una lista con los trabajos cargados en cada cliente.
    def HistorialTrabajosCl(self):
        "Pide un ID y muestra una lista con los trabajos cargados en cada cliente"
        for i in self.repositoriocl.get_all_particulares():
            print("=====================================")
            print("ID cliente: ", i.id_cliente, "- Nombre: ", i.nombre)
            print("=====================================")
        for i in self.repositoriocl.get_all_corporativos():
            print("=====================================")
            print("ID cliente: ", i.id_cliente, "- Nombre: ", i.nombre_empresa)
        id = int(input("Ingrese el ID del cliente: "))
        C = self.repositoriotr.get_one(id)
        if C == None:
            print()
        else:
            print("=====================================")
            print(C)
            print("=====================================")
            for I in self.LT.TrabajoL:
                if I.cliente.id_cliente == id:
                    print("========================================")
                    print("ID trabajo: ", I.id_trabajo)
                    print("Fecha de ingreso: ", I.fecha_ingreso)
                    print("Fecha entrega propuesta: ",
                          I.fecha_entrega_propuesta)
                    print("Fecha entrega real: ", I.fecha_entrega_real)
                    print("Descripcion: ", I.descripcion)
                    print("Retirado: ", I.retirado)
                    print("========================================")
                else:
                    print("========================================")
                    print("No se encontraron trabajos")
                    print("========================================")

    def salir(self):
        print("Gracias por utilizar el sistema.")
        sys.exit(0)
Exemple #6
0
class ListaTrabajos:
    def __init__(self):
        self.RT = RepositorioTrabajos()
        self.TrabajoL = self.RT.get_all()

    def NuevoTrabajo(self, cliente, fecha_ingreso, fecha_entrega_propuesta,
                     descripcion):
        """Recibe los datos de un trabajo, crea un nuevo trabajo y lo agrega a la lista trabajos"""
        T = Trabajo(cliente, fecha_ingreso, fecha_entrega_propuesta, None,
                    descripcion, False)
        T.id_trabajo = self.RT.store(T)
        if T.id_trabajo == 0:
            return None
        else:
            self.TrabajoL.append(T)
            return T

    def BuscarPorID(self, id_trabajo):
        """Recibe un ID y retorna un trabajo"""
        for T in self.TrabajoL:
            if T.id_trabajo == int(id_trabajo):
                return (T)
        return None

    def TrabajoFinalizado(self, id_trabajo):
        """Recibe un trabajo y le modifica la fecha de entrega"""
        T = self.BuscarPorID(id_trabajo)
        if T:
            T.fecha_entrega_real = datetime.date.today()
            return self.RT.update(T)
        return None

    def Trabajo_retirado(self, id_trabajo):
        """Recibe un trabajo y modifica el trabajo como retirado"""
        T = self.BuscarPorID(id_trabajo)
        if T:
            if T.fecha_entrega_real == None:
                T.retirado = True
                self.TrabajoFinalizado(id_trabajo)
            else:
                T.retirado = True
            return self.RT.update(T)
        return None

    def ModificarDatosT(self, fecha_ingreso, fecha_entrega_propuesta,
                        descripcion, id_trabajo):
        """Recibe un trabajo y modifica sus datos"""
        T = self.BuscarPorID(id_trabajo)
        if T:
            T.fecha_ingreso = fecha_ingreso
            T.fecha_entrega_propuesta = fecha_entrega_propuesta
            T.descripcion = descripcion
            return self.RT.update(T)
        return None

    def EliminarTrabajo(self, id_trabajo):
        T = self.BuscarPorID(id_trabajo)
        if T:
            self.RT.delete(T)
            self.TrabajoL = self.RT.get_all()
            return True
        return None
Exemple #7
0
class ListaClientes:
    def __init__(self):
        self.RC = RepositorioClientes()
        self.RT = RepositorioTrabajos()
        self.ClienteL = self.RC.get_all()
        self.ListaT = self.RT.get_all()



    def NuevoClienteCorp(self, nombre_empresa, nombre_contacto, telefono_contacto, telefono, mail):
        """Recibe los datos de un cliente corporativo, crea un nuevo cliente corporativo y lo agrega a lista de clientes"""
        C = ClienteCorporativo(nombre_empresa, nombre_contacto, telefono_contacto, telefono, mail)
        C.id_cliente = self.RC.store(C)
        if C.id_cliente == 0:
            return None
        else:
            self.ClienteL.append(C)
            return C

    def NuevoClientePart(self, nombre, apellido, telefono, mail):
        """Recibe los datos de un cliente particular, crea un nuevo cliente particular y lo agrega a la lista de clientes"""
        C = ClienteParticular(nombre, apellido, telefono, mail)
        C.id_cliente = self.RC.store(C)
        if C.id_cliente == 0:
            return None
        else:
            self.ClienteL.append(C)
            return C

    def BuscarPorID(self, id_cliente):
        """Recibe un ID y retorna un cliente"""
        for T in self.ClienteL:
            if T.id_cliente == int(id_cliente):
                return (T)
        return None


    def ModificarDatosCP(self, nombre, apellido, telefono ,mail, id_cliente):
        """Recibe los datos modificados y actualiza los datos del cliente particular"""
        C = self.BuscarPorID(id_cliente)
        if C:
            if nombre == '':
                nombre = C.nombre
            else:
                C.nombre = nombre
            if apellido == '':
                apellido = C.apellido
            else:
                C.apellido = apellido
            if telefono == '':
                telefono = C.telefono
            else:
                C.telefono = telefono
            if mail == '':
                mail = C.mail
            else:
                C.mail = mail
            return self.RC.update(C)
        return None

    def ModificarDatosCC(self, nombre_empresa, nombre_contacto, telefono_contacto, telefono, mail, id_cliente):
        """Recibe los datos modificados y actualiza los datos del cliente corporativo"""
        C = self.BuscarPorID(id_cliente)
        if C:
            if nombre_empresa == '':
                nombre_empresa = C.nombre_empresa
            else:
                C.nombre_empresa = nombre_empresa
            if nombre_contacto == '':
                nombre_contacto = C.nombre_contacto
            else:
                C.nombre_contacto = nombre_contacto
            if telefono_contacto == '':
                telefono_contacto = C.telefono_contacto
            else:
                C.telefono_contacto = telefono_contacto
            if telefono == '':
                telefono = C.telefono
            else:
                C.telefono = telefono
            if mail == '':
                mail = C.mail
            else:
                C.mail = mail
            return self.RC.update(C)
        return None

    def EliminarCliente(self, id_cliente):
        """"Recibe el ID de un cliente y lo elimina, en caso de contener trabajos, tambien los elimina"""
        C = self.BuscarPorID(id_cliente)
        for I in self.RT.get_all():
            if I.cliente.id_cliente == id_cliente:
                self.RT.delete(I)
            self.ListaT = self.RT.get_all()
        self.RC.delete(C)
        self.ClienteL = self.RC.get_all()
        return True
Exemple #8
0
class Menu:
    "Muestra ocpiones"

    def __init__(self):
        self.RC = RepositorioClientes()
        self.RT = RepositorioTrabajos()
        self.ListaC = ListaClientes()
        self.ListaT = ListaTrabajos()
        self.opciones = {
            "1": self.NuevoCliente,
            "2": self.MostrarClientes,
            "3": self.BuscarCliente,
            "4": self.ModificarDatosC,
            "5": self.BorrarCliente,
            "6": self.CargarNuevoT,
            "7": self.MostrarTrabajos,
            "8": self.FinalizarTrabajo,
            "9": self.RetirarTrabajo,
            "10": self.ModificarDatosT,
            "11": self.HistorialTrabajosPorC,
            "12": self.BorrarTrabajo,
            "0": self.salir
        }

    def MostrarMenu(self):
        print("""                                              ===============
                                               S I S T E M A 
                                              ===============
        MENU CLIENTES:                                                     MENU TRABAJOS:
        
        1. Ingresar un nuevo cliente                                       6. Cargar nuevo trabajo
        
        2. Mostrar todos los clientes                                      7. Mostrar todos los trabajos
        
        3. Buscar un cliente                                               8. Finalizar un trabajo
        
        4. Modificar los datos de un cliente                               9. Retirar un trabajo
        
        5. Borrar un cliente                                               10. Modificar los datos de un trabajo
        
                                                                           11. Historial de trabajos de un cliente
                                                                           
                                                                           12. Borrar un trabajo
                                                                           
        
        0. Salir del sistema
        """)

    def Ejecutar(self):
        "Mostrar y responder opciones"
        while True:
            self.MostrarMenu()
            opcion = input("INGRESA UNA OPCION: ")
            accion = self.opciones.get(opcion)
            if accion:
                accion()
            else:
                print("{0} no es una opcion valida")

    def NuevoCliente(self):
        "Ingresa un nuevo cliente, ya sea corporativo o particular"
        tipo = "N"
        while tipo not in ("C", "c", "P", "p"):
            tipo = input("""
    Escogio la opcion para ingresar un nuevo cliente, por favor elija el tipo de cliente e ingreselo
    
    C: Corporativo
    P: Particular
    
    Ingrese el tipo de cliente: """)
        if tipo in ("C", "c"):
            print(
                "\nA continuacion se pediran los datos correspondientes al nuevo cliente\n"
            )
            NombreEmpresa = input("Ingrese el nombre de la empresa: ")
            NombreContacto = input("Ingrese el nombre del contacto: ")
            TelCont = input("Ingrese el telefono del contacto: ")
        else:
            print(
                "\nA continuacion se pediran los datos correspondientes al nuevo cliente\n"
            )
            Nombre = input("Ingrese el nombre: ")
            Apellido = input("Ingrese el apellido: ")
        Tel = input("Ingrese el telefono: ")
        Mail = input("Ingrese el mail: ")
        if tipo in ("C", "c"):
            C = self.ListaC.NuevoClienteCorp(NombreEmpresa, NombreContacto,
                                             TelCont, Tel, Mail)
        else:
            C = self.ListaC.NuevoClientePart(Nombre, Apellido, Tel, Mail)
        if C is None:
            print("===========================================")
            print("Ocurrio un error al cargar al nuevo cliente")
            print("===========================================")
        else:
            print("\n===========================================")
            print("El clientes fue cargado con exito")
            print("===========================================\n")
            print(C)
            print("===========================================")
        input(
            "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
        )

    def MostrarClientes(self):
        "Muestra todos los clientes"
        c = self.RC.get_all()
        if c:
            l = self.RC.get_all_corporativos()
            print("""         =====================""")
            print("""         CLIENTES CORPORATIVOS""")
            print("""         =====================""")
            if l:
                for i in l:
                    print("========================================")
                    print(i)
                    print("========================================")
            t = self.RC.get_all_particulares()
            print("""         =====================""")
            print("""         CLIENTES PARTICULARES""")
            print("""         =====================""")
            if t:
                for i in t:
                    print("========================================")
                    print(i)
                    print("========================================")
            input(
                "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
            )
        else:
            print(
                "\nActualmente no se encuentra ningun cliente cargado en el sistema"
            )
            input(
                "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
            )

    def BuscarCliente(self):
        "Solicita un ID, busca al cliente con ese ID y lo muestra"
        c = self.RC.get_all()
        if c:
            print("\nEscogio la opcion para buscar un cliente\n")
            while True:
                try:
                    id_cliente = int(
                        input("Ingrese el ID del cliente que desea buscar: "))
                except ValueError:
                    print('Debe ingresar un numero')
                    continue
                break
            C = self.ListaC.BuscarPorID(id_cliente)
            if C == None:
                print(
                    "\n================================================================="
                )
                print(
                    "El ID ingresado no pertenece a ningun cliente cargado actualmente"
                )
                print(
                    "=================================================================\n"
                )
            else:
                print("\n===============================================\n")
                print(C)
                print("=================================================")
            input(
                "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
            )
        else:
            print(
                "\nActualmente no se encuentra ningun cliente particular guardado en el sistema"
            )
            input(
                "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
            )

    def ModificarDatosC(self):
        "Modificar los datos de un cliente, ya sea cliente corporativo o particular"
        tipo = "N"
        while tipo not in ("C", "c", "P", "p"):
            tipo = input("""
    Escogio la opcion para modificar un cliente, por favor elija el tipo de cliente e ingreselo
    
    C: Corporativo
    P: Particular
    
    Ingrese el tipo de cliente que desea modificar: """)
        if tipo in ("C", "c"):
            l = self.RC.get_all_corporativos()
            if l:
                print("\n" "         =====================" "")
                print("""         CLIENTES CORPORATIVOS""")
                print("""         =====================""")
                for I in l:
                    print("========================================\n")
                    print(I)
                    print("========================================\n")
                while True:
                    try:
                        id_cliente = int(input("Ingrese el ID del cliente: "))
                    except ValueError:
                        print('Debe ingresar un numero')
                        continue
                    break
                Cliente = self.ListaC.BuscarPorID(id_cliente)
                if Cliente:
                    print("========================================\n")
                    print(Cliente)
                    print(
                        "================================================================================="
                    )
                    print(
                        "Modifique el campo que desee, de no querer modificar algun campo dejelo vacio"
                    )
                    print(
                        "=================================================================================\n"
                    )
                    NombreEmpresa = input("Ingrese el nombre de la empresa: ")
                    NombreContacto = input("Ingrese el nombre del contacto: ")
                    TelCont = input("Ingrese el telefono del contacto: ")
                    Tel = input("Ingrese el telefono: ")
                    Mail = input("Ingrese el mail: ")
                    C = self.ListaC.ModificarDatosCC(NombreEmpresa,
                                                     NombreContacto, TelCont,
                                                     Tel, Mail, id_cliente)
                    if C == None:
                        print("\n========================================\n")
                        print(
                            "Ocurrio un error al modificar los datos del cliente"
                        )
                        print("========================================\n")
                        input(
                            "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
                        )
                    else:
                        print(
                            "\n===============================================================\n"
                        )
                        print("""Los datos del cliente se modificaron con exito
A continuacion se podran ver los datos del cliente actualizados""")
                        print(
                            "\n===============================================================\n"
                        )
                        print("\n========================================")
                        print(Cliente)
                        print("========================================")
                        input(
                            "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
                        )
                else:
                    print(
                        "\nEl ID ingresado no pertenece a ningun cliente corporativo guardado en el sistema"
                    )
                    input(
                        "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
                    )
            else:
                print(
                    "\nActualmente no se encuentra ningun cliente corporativo guardado en el sistema"
                )
                input(
                    "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
                )
        else:
            l = self.RC.get_all_particulares()
            if l:
                print("\n" "         =====================" "")
                print("""         CLIENTES PARTICULARES""")
                print("""         =====================""")
                for I in l:
                    print("========================================\n")
                    print(I)
                    print("========================================\n")
                while True:
                    try:
                        id_cliente = int(input("Ingrese el ID del cliente: "))
                    except ValueError:
                        print('Debe ingresar un numero')
                        continue
                    break
                Cliente = self.ListaC.BuscarPorID(id_cliente)
                if Cliente:
                    print("\n========================================\n")
                    print(Cliente)
                    print("========================================\n")
                    print(
                        "=============================================================================="
                    )
                    print(
                        "Modifique el campo que desee, de no querer modificar algun campo dejelo vacio"
                    )
                    print(
                        "==============================================================================\n"
                    )
                    Nombre = input("Ingrese el nombre: ")
                    Apellido = input("Ingrese el apellido: ")
                    Tel = input("Ingrese el telefono: ")
                    Mail = input("Ingrese el mail: ")
                    C = self.ListaC.ModificarDatosCP(Nombre, Apellido, Tel,
                                                     Mail, id_cliente)
                    if C == None:
                        print(
                            "\n================================================\n"
                        )
                        print(
                            "Ocurrio un error al modificar los datos del cliente"
                        )
                        print(
                            "==================================================\n"
                        )
                        input(
                            "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
                        )
                    else:
                        print(
                            "\n===============================================================\n"
                        )
                        print(
                            """Los datos del cliente fueron modificaros con exito
A continuacion se podran ver los datos del cliente actualizados""")
                        print(
                            "\n===============================================================\n"
                        )
                        print("========================================\n")
                        print(Cliente)
                        print("========================================")
                        input(
                            "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
                        )
                else:
                    print(
                        "\nEl ID ingresado no pertenece a ningun cliente particular guardado en el sistema"
                    )
                    input(
                        "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
                    )
            else:
                print(
                    "\nActualmente no se encuentra ningun cliente particular guardado en el sistema"
                )
                input(
                    "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
                )

    def BorrarCliente(self):
        "Solicita un ID y borra al cliente, en caso de que tenga trabajos pendientes, tambien los borra"
        l = self.RC.get_all_corporativos()
        if l:
            print("""         =====================""")
            print("""         CLIENTES CORPORATIVOS""")
            print("""         =====================""")
            for i in l:
                print("========================================")
                print("ID cliente: ", i.id_cliente, "- Nombre: ",
                      i.nombre_empresa)
                print("========================================")
        t = self.RC.get_all_particulares()
        if t:
            print("""         =====================""")
            print("""         CLIENTES PARTICULARES""")
            print("""         =====================""")
            for i in t:
                print("========================================")
                print("ID cliente: ", i.id_cliente, "- Nombre: ", i.nombre)
                print("========================================\n")
        if l or t:
            while True:
                try:
                    id_cliente = int(
                        input("Ingrese el ID del cliente a borrar: "))
                except ValueError:
                    print('Debe ingresar un numero')
                    continue
                break
            D = self.ListaC.BuscarPorID(id_cliente)
            if D:
                print("\n========================================\n")
                print(D)
                print("========================================\n")
                U = "J"
                while U not in ("S", "s", "N", "n"):
                    U = input("""¿Estas seguro que desea eliminar al cliente? 
    
    S: Si borrar al cliente
    N: No borrar al cliente
    
Ingrese una opcion: """)
                if U in ("S", "s"):
                    B = self.ListaC.EliminarCliente(id_cliente)
                    if B == None:
                        print("========================================")
                        print("Ocurrio un error al querer borrar al cliente")
                        print("========================================")
                        input(
                            "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
                        )
                    else:
                        print("\n========================================")
                        print("El cliente fue borrado con exito")
                        print("========================================")
                        input(
                            "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
                        )

                else:
                    print("\nHa decidido no borrar al cliente")
                    input(
                        "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
                    )
            else:
                print(
                    "\nEl ID ingresado no pertenece a ningun cliente guardado en el sistema"
                )
                input(
                    "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
                )
        else:
            print(
                "\nActualmente no se encuentra ningun cliente guardado en el sistema"
            )
            input(
                "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
            )

    def CargarNuevoT(self):
        "Solicita el ID de un cliente y carga los datos de un nuevo trabajo"
        l = self.RC.get_all_corporativos()
        if l:
            print("""         =====================""")
            print("""         CLIENTES CORPORATIVOS""")
            print("""         =====================""")
            for i in l:
                print("========================================")
                print("ID cliente: ", i.id_cliente, "- Nombre: ",
                      i.nombre_empresa)
                print("========================================")
        t = self.RC.get_all_particulares()
        if t:
            print("""         =====================""")
            print("""         CLIENTES PARTICULARES""")
            print("""         =====================""")
            for i in t:
                print("========================================")
                print("ID cliente: ", i.id_cliente, "- Nombre: ", i.nombre)
                print("========================================\n")
        if l or t:
            while True:
                try:
                    id_cliente = int(input("Ingrese el ID del cliente: "))
                except ValueError:
                    print('Debe ingresar un numero')
                    continue
                break
            C = self.ListaC.BuscarPorID(id_cliente)
            if C == None:
                print(
                    "\nEl ID ingresado no pertenece a ningun cliente guardado en el sistema"
                )
                input(
                    "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
                )
            else:
                fecha_ingreso = date.today()
                print("\nLa fecha de ingreso es: ", fecha_ingreso)
                print("\nA continuacion ingrese la fecha de entrega propuesta")
                while True:
                    try:
                        dia = int(input("Ingrese el dia (1 a 31): "))
                    except ValueError:
                        print('Debe ingresar un numero del 1 al 31')
                        continue
                    break
                while True:
                    try:
                        mes = int(input("Ingrese el mes (1 a 12): "))
                    except ValueError:
                        print('Debe ingresar un numero del 1 al 12')
                        continue
                    break
                while True:
                    try:
                        anio = int(input("Ingrese el año: "))
                    except ValueError:
                        print('Debe ingresar un numero')
                        continue
                    break
                fecha_entrega_propuesta = date(anio, mes, dia)
                descripcion = input(
                    "\nIngrese la descripcion del nuevo trabajo: ")
                T = self.ListaT.NuevoTrabajo(C, fecha_ingreso,
                                             fecha_entrega_propuesta,
                                             descripcion)
                if T == None:
                    print("\n========================================\n")
                    print("Ocurrio un error al cargar el nuevo trabajo")
                    print("========================================")
                    input(
                        "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
                    )

                else:
                    print("\n========================================")
                    print("El nuevo trabajo se cargo con exito\n")
                    print(T)
                    print("========================================\n")
                    input(
                        "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
                    )
        else:
            print(
                "\nActualmente no se encuentra ningun cliente guardado en el sistema por lo que no se puede cargar un nuevo trabajo"
            )
            input(
                "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
            )

    def MostrarTrabajos(self):
        "Muestra una lista con todos los trabajos"
        Lista = self.RT.get_all()
        if Lista:
            for Cliente in Lista:
                print("\n===========================================\n")
                print(Cliente)
                print("===========================================")
        else:
            print(
                "\nActualmente no se encuentra ningun trabajo cargado en el sistema"
            )
        input(
            "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
        )

    def FinalizarTrabajo(self):
        "Solicita un ID trabajo y modifica la fecha de entrega real"
        t = self.RT.get_all()
        if t:
            for i in t:
                print("========================================")
                print(i.cliente)
                print("ID trabajo: ", i.id_trabajo, "- Fecha entrega real: ",
                      i.fecha_entrega_real)
                print("========================================")
            print("\n========================================")
            while True:
                try:
                    id_trabajo = int(input("Ingrese el ID del trabajo: "))
                except ValueError:
                    print('Debe ingresar un numero')
                    continue
                break
            C = self.ListaT.BuscarPorID(id_trabajo)
            if C == None:
                print(
                    "\nEl ID ingresado no pertenece a ningun trabajo guardado en el sistema"
                )
                input(
                    "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
                )
            else:
                if C.fecha_entrega_real:
                    print(
                        "El estado del trabajo ya se encuentra como finalizado"
                    )
                    input(
                        "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
                    )
                else:
                    print("\n========================================\n")
                    print(C)
                    print("========================================")
                    tipo = "w"
                    while tipo not in ("S", "s", "N", "n"):
                        print(
                            "============================================================================"
                        )
                        tipo = input(
                            """¿Estas seguro que desea dar por finalizado el trabajo?
                            
    S: Finalizar trabajo
    N: No finalizar
            
    Ingresa una opcion: """)
                        print(
                            "============================================================================"
                        )
                    if tipo in ("S", "s"):
                        T = self.ListaT.TrabajoFinalizado(id_trabajo)
                        if T == None:
                            print(
                                "\n=============================================="
                            )
                            print(
                                "Error al modificar la entrega real del trabajo"
                            )
                            print(
                                "=============================================="
                            )
                            input(
                                "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
                            )
                        else:
                            print(
                                "\n===================================================="
                            )
                            print(
                                "\nLa entrega real del trabajo fue modificada con exito"
                            )
                            print(
                                "\n===================================================="
                            )
                            print(C)
                            print(
                                "===================================================="
                            )
                            input(
                                "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
                            )
                    else:
                        print(
                            "\n================================================================="
                        )
                        print(
                            "No se realizo ninguna modificacion en la finalizacion del trabajo"
                        )
                        print(
                            "=================================================================\n"
                        )
                        input(
                            "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
                        )
        else:
            print(
                "\nActualmente no se encuentra ningun trabajo cargado en el sistema"
            )
            input(
                "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
            )

    def RetirarTrabajo(self):
        "Solicita un ID trabajo y lo marca como retirado"
        t = self.RT.get_all()
        if t:
            for i in t:
                print("\n========================================")
                print(i.cliente)
                print("ID trabajo: ", i.id_trabajo, "- Retirado: ", i.retirado)
                print("=========================================\n")
            while True:
                try:
                    id_trabajo = int(input("Ingrese el ID del trabajo: "))
                except ValueError:
                    print('Debe ingresar un numero')
                    continue
                break
            C = self.ListaT.BuscarPorID(id_trabajo)
            if C == None:
                print(
                    "\nEl ID ingresado no pertenece a ningun trabajo guardado en el sistema"
                )
                input(
                    "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
                )
            else:
                if C.retirado == True:
                    print(
                        "\nEl estado del trabajo ya se encuntra como retirado")
                    input(
                        "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
                    )
                else:
                    print("\n========================================")
                    print(C)
                    print("========================================")
                    tipo = "w"
                    while tipo not in ("S", "s", "N", "n"):
                        print(
                            "\n======================================================"
                        )
                        tipo = input(
                            """¿Estas seguro que desea dar por finalizado el trabajo?
                        
    S: Retirar el trabajo
    N: No retirar el trabajo
        
    Ingresa una opcion: """)
                        print(
                            "======================================================"
                        )
                    if tipo in ("s", "S"):
                        T = self.ListaT.Trabajo_retirado(id_trabajo)
                        if T == None:
                            print("========================================")
                            print("Error al retirar el trabajo")
                            print("========================================")
                            input(
                                "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
                            )
                        else:
                            print("\n========================================")
                            print("El trabajo fue retirado con exito")
                            print("========================================\n")
                            print(C)
                            print("\n========================================")
                            input(
                                "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
                            )
                    else:
                        print(
                            "\n==========================================================="
                        )
                        print(
                            "No se realizo ninguna modificacion en el retiro del trabajo"
                        )
                        print(
                            "==========================================================="
                        )
                        input(
                            "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
                        )
        else:
            print(
                "\nActualmente no se encuentra ningun trabajo cargado en el sistema"
            )
            input(
                "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
            )

    def ModificarDatosT(self):
        "Solicita un ID trabajo y modifica los datos del trabajo"
        t = self.RT.get_all()
        if t:
            for i in t:
                print("\n========================================")
                print("ID trabajo: ", i.id_trabajo)
                print("Fecha de ingreso: ", i.fecha_ingreso)
                print("Fecha entrega propuesta: ", i.fecha_entrega_propuesta)
                print("Descripcion: ", i.descripcion)
                print("========================================\n")
            while True:
                try:
                    id_trabajo = int(input("Ingrese el ID del trabajo: "))
                except ValueError:
                    print('Debe ingresar un numero')
                    continue
                break
            C = self.ListaT.BuscarPorID(id_trabajo)
            if C == None:
                print(
                    "\nEl ID ingresado no pertenece a ningun trabajo guardado en el sistema"
                )
                input(
                    "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
                )
            else:
                print("\n=========================================")
                print(C.cliente)
                print("Trabajo:")
                print("Fecha de ingreso: ", C.fecha_ingreso)
                print("Fecha entrega propuesta: ", C.fecha_entrega_propuesta)
                print("Descripcion: ", C.descripcion)
                print(
                    "\n============================================================================="
                )
                print(
                    "Modifique el campo que desee, de no querer modificar algun campo dejelo vacio"
                )
                print(
                    "============================================================================="
                )
                tipo = "n"
                while tipo not in ("I", "i", "P", "p", "D", "d", "C", "c"):
                    while tipo not in ("C", "c"):
                        tipo = input(
                            """\n¿Estas seguro que desea hacer alguna modificacion?
                        
    I: Fecha de ingreso
    P: Fecha entrega propuesta
    D: Descripcion
    C: No deseo realizar una modificacion
    
    Ingrese una opcion: """)
                        if tipo in ("I", "i"):
                            print("==========================")
                            print("Modificar fecha de ingreso\n")
                            while True:
                                try:
                                    dia = int(
                                        input("Ingrese el dia (1 a 31): "))
                                except ValueError:
                                    print(
                                        'Debe ingresar un numero del 1 al 31')
                                    continue
                                break
                            while True:
                                try:
                                    mes = int(
                                        input("Ingrese el mes (1 a 12): "))
                                except ValueError:
                                    print(
                                        'Debe ingresar un numero del 1 al 12')
                                    continue
                                break
                            while True:
                                try:
                                    anio = int(input("Ingrese el año: "))
                                except ValueError:
                                    print('Debe ingresar un numero')
                                    continue
                                break
                            FechaIngreso = date(anio, mes, dia)
                            T = self.ListaT.ModificarDatosT(
                                FechaIngreso, C.fecha_entrega_real,
                                C.descripcion, id_trabajo)
                            if T == None:
                                print(
                                    "========================================="
                                )
                                print("Error al modificar el trabajo")
                                print(
                                    "========================================="
                                )
                                input(
                                    "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
                                )
                            else:
                                print(
                                    "\n========================================="
                                )
                                print(
                                    "Los datos que decidio modificar se modificaron con exito"
                                )
                                print(
                                    "=========================================\n"
                                )
                                print(C)
                                print(
                                    "========================================="
                                )
                        if tipo in ("P", "p"):
                            print("=====================================")
                            print("Modificar fecha de entregra propuesta\n")
                            while True:
                                try:
                                    dia = int(
                                        input("Ingrese el dia (1 a 31): "))
                                except ValueError:
                                    print(
                                        'Debe ingresar un numero del 1 al 31')
                                    continue
                                break
                            while True:
                                try:
                                    mes = int(
                                        input("Ingrese el mes (1 a 12): "))
                                except ValueError:
                                    print(
                                        'Debe ingresar un numero del 1 al 12')
                                    continue
                                break
                            while True:
                                try:
                                    anio = int(input("Ingrese el año: "))
                                except ValueError:
                                    print('Debe ingresar un numero')
                                    continue
                                break
                            FechaEntregaPropuesta = date(anio, mes, dia)
                            T = self.ListaT.ModificarDatosT(
                                C.fecha_ingreso, FechaEntregaPropuesta,
                                C.descripcion, id_trabajo)
                            if T == None:
                                print(
                                    "========================================="
                                )
                                print("Error al modificar el trabajo")
                                print(
                                    "========================================="
                                )
                                input(
                                    "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
                                )
                            else:
                                print(
                                    "\n========================================="
                                )
                                print(
                                    "Los datos que decidio modificar se modificaron con exito"
                                )
                                print(
                                    "=========================================\n"
                                )
                                print(C)
                                print(
                                    "========================================="
                                )
                        if tipo in ("D", "d"):
                            print("====================================")
                            print("Modificar la descripcion del trabajo\n")
                            Descripcion = input(
                                "Ingrese la descripcion del trabajo: ")
                            T = self.ListaT.ModificarDatosT(
                                C.fecha_ingreso, C.fecha_entrega_real,
                                Descripcion, id_trabajo)
                            if T == None:
                                print(
                                    "========================================="
                                )
                                print("Error al modificar el trabajo")
                                print(
                                    "========================================="
                                )
                                input(
                                    "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
                                )
                            else:
                                print(
                                    "\n========================================="
                                )
                                print(
                                    "Los datos que decidio modificar se modificaron con exito"
                                )
                                print(
                                    "=========================================\n"
                                )
                                print(C)
                                print(
                                    "========================================="
                                )
                    if tipo in ("C", "c"):
                        self.Ejecutar()
        else:
            print(
                "\nActualmente no se encuentra ningun trabajo cargado en el sistema"
            )
            input(
                "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
            )

    def BorrarTrabajo(self):
        "Solicita un ID trabajo y borra un trabajo"
        t = self.RT.get_all()
        if t:
            for i in t:
                print("\n========================================")
                print("ID trabajo: ", i.id_trabajo)
                print("Fecha de ingreso: ", i.fecha_ingreso)
                print("Fecha entrega propuesta: ", i.fecha_entrega_propuesta)
                print("Fecha de entrega real: ", i.fecha_entrega_real)
                print("Descripcion: ", i.descripcion)
                print("Retirado: ", i.retirado)
                print("=========================================\n")
            while True:
                try:
                    id_trabajo = int(input("Ingrese el ID del trabajo: "))
                except ValueError:
                    print('Debe ingresar un numero')
                    continue
                break
            C = self.ListaT.BuscarPorID(id_trabajo)
            if C == None:
                print(
                    "\nEl ID ingresado no pertenece a ningun trabajo guardado en el sistema"
                )
                input(
                    "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
                )
            else:
                print("\n=========================================")
                print(C)
                print("=========================================\n")
                tipo = "w"
                while tipo not in ("S", "s", "N", "n"):
                    tipo = input(
                        """¿Estas seguro que desea eliminar el trabajo?
                    
    S: Eliminar trabajo
    N: No eliminar trabajo
    
    Ingresa una opcion: """)
                if tipo in ("S", "s"):
                    T = self.ListaT.EliminarTrabajo(id_trabajo)
                    if T == None:
                        print("=========================================")
                        print("Ocurrio un error al eliminar el trabajo")
                        print("=========================================")
                        input(
                            "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
                        )

                    else:
                        print("\n=========================================")
                        print("El trabajo fue eliminado con exito")
                        print("=========================================")
                        input(
                            "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
                        )
                else:
                    print("\n==================================")
                    print("Ha decidido no eliminar el trabajo")
                    print("==================================")
                    input(
                        "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
                    )
        else:
            print(
                "\nActualmente no se encuentra ningun trabajo cargado en el sistema"
            )
            input(
                "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
            )

    def HistorialTrabajosPorC(self):
        """Solicita un ID y muestra una lista con los trabajos encargados por el cliente"""
        l = self.RC.get_all_corporativos()
        if l:
            print("""         =====================""")
            print("""         CLIENTES CORPORATIVOS""")
            print("""         =====================""")
            for i in l:
                print("========================================")
                print("ID cliente: ", i.id_cliente, "- Nombre: ",
                      i.nombre_empresa)
                print("========================================")
        t = self.RC.get_all_particulares()
        if t:
            print("""         =====================""")
            print("""         CLIENTES PARTICULARES""")
            print("""         =====================""")
            for i in t:
                print("========================================")
                print("ID cliente: ", i.id_cliente, "- Nombre: ", i.nombre)
                print("========================================\n")
        if l or t:
            while True:
                try:
                    id = int(input("\nIngrese el ID del cliente: "))
                except ValueError:
                    print('Debe ingresar un numero')
                    continue
                break
            C = self.ListaC.BuscarPorID(id)
            if C == None:
                print(
                    "\nEl ID ingresado no pertenece a ningun cliente guardado en el sistema"
                )
                input(
                    "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
                )
            else:
                print("\n========================================\n")
                print(C)
                print("========================================")
                t = self.ListaT.TrabajoL
                if t:
                    for I in t:
                        if I.cliente.id_cliente == id:
                            print("========================================\n")
                            print("ID trabajo: ", I.id_trabajo)
                            print("Fecha de ingreso: ", I.fecha_ingreso)
                            print("Fecha entrega propuesta: ",
                                  I.fecha_entrega_propuesta)
                            print("Fecha entrega real: ", I.fecha_entrega_real)
                            print("Descripcion: ", I.descripcion)
                            print("Retirado: ", I.retirado)
                            print("========================================")
                    input(
                        "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
                    )
                else:
                    print(
                        "\nActualmente el cliente no cuenta con ningun trabajo cargado en el sistema"
                    )
                    input(
                        "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
                    )
        else:
            print(
                "\nActualmente no se encuentra ningun cliente cargado en el sistema"
            )
            input(
                "\nPRESIONE CUALQUIER TECLA PARA VOLVER AL MENU PRINCIPAL DEL SISTEMA"
            )

    def salir(self):
        print("Muchas gracias por haber utilizado el sistema")
        sys.exit(0)
Exemple #9
0
class Lista_Trabajo:
    def __init__(self):
        self.rt = RepositorioTrabajos()
        self.lista = self.rt.get_all()
Exemple #10
0
class Menu:
    def __init__(self):
        self.rc = RepositorioClientes()
        self.rt = RepositorioTrabajos()
        self.lista_trabajo = Lista_Trabajo()
        self.lista_clientes = ListaClientes()
        self.opciones = {
            "1": self.mostrar_clientes,
            "2": self.nuevo_cliente,
            "3": self.modificar_particular,
            "4": self.modificar_corporativo,
            "5": self.borrar_cliente,
            "6": self.mostrar_trabajos,
            "7": self.nuevo_trabajo,
            "8": self.trabajo_finalizado,
            "9": self.trabajo_retirado,
            "10": self.modificar_trabajo,
            "11": self.mostrar_no_retirados,
            "12": self.eliminar_trabajo,
            "0": self.salir
        }

    def mostrar_menu(self):
        print("""
_________________________________________________
|Menu del sistema:                               |
|1. Mostrar todos los clientes                   |
|2. Agregar Nuevo Cliente                        |
|3. Modificar Cliente PARTICULAR                 |
|4. Modificar Cliente CORPORATIVO                |
|5. Borrar cliente                               |
|6. Mostrar Trabajos                             |
|7. Nuevo Trabajo                                |
|8. Finalizar Trabajo                            |
|9. Marcar trabajo como retirado                 |
|10. Modificar Trabajo                           |
|11. Mostrar trabajos finalizados no retirados   |
|12. Eliminar Trabajo                            |
|0. Salir                                        |
|________________________________________________|
""")

    def ejecutar(self):
        '''Mostrar el menu y responder las opciones'''
        while True:
            self.mostrar_menu()
            opcion = input("Ingrese una opcion: ")
            accion = self.opciones.get(opcion)
            if accion:
                accion()
            else:
                print("{0} no es una opcion valida".format(opcion))

    def mostrar_clientes(self, lista=None):
        if lista == None:
            lista = self.lista_clientes.lista
        print("Clientes: ")
        for cliente in lista:
            print("===========================================")
            print(cliente)
            print("===========================================")

    def nuevo_cliente(self):
        tipo = "A"
        while tipo not in ("C", "c", "P", "p"):
            tipo = input(
                "Ingrese el tipo de cliente: C:corporativo / P:Particular:  ")
        nombre = input("Ingrese el nombre: ")
        if tipo in ("C", "c"):
            contacto = input("ingrese el nombre del contacto: ")
            tc = input("ingrese el telefono del contacto: ")
        else:
            apellido = input("Ingrese el apellido: ")
        tel = input("Ingrese el Telefono: ")
        mail = input("Ingrese el Mail: ")

        if tipo in ("c", "C"):
            c = self.lista_clientes.nuevo_cliente_corporativo(
                nombre, contacto, tc, tel, mail)
        else:
            c = self.lista_clientes.nuevo_cliente_particular(
                nombre, apellido, tel, mail)
        if c is None:
            print("Error al cargar el cliente.")
        else:
            print("Cliente cargado con exito.")

    def modificar_particular(self):
        print("Modificar cliente Particular: ")
        id_cliente = int(input("Ingresa id de un Particular: "))
        obj_cliente = self.rc.get_one_particular(id_cliente)
        print(obj_cliente)
        opcion = int(
            input(""""Elige una opcion para modificar: 
                            1. Nombre
                            2. Apellido
                            3. Teléfono
                            4. Mail
                            0. Salir
                            : """))
        if opcion == 1:
            nuevo_nombre = input("Ingrese el nuevo NOMBRE:")
            obj_cliente.nombre = nuevo_nombre
            print("Nombre cambiado con exito.")

        elif opcion == 2:
            nuevo_apellido = input("Ingrese el nuevo APELLIDO: ")
            obj_cliente.apellido = nuevo_apellido
            print("Apellido cambiado con exito.")

        elif opcion == 3:
            nuevo_telefono = input("Ingrese el nuevo TELEFONO: ")
            obj_cliente.telefono = nuevo_telefono
            print("Telefono cambiado con exito.")

        elif opcion == 4:
            nuevo_mail = input("Ingrese un nuevo MAIL: ")
            obj_cliente.mail = nuevo_mail
            print("Mail cambiado con exito.")
        elif opcion == 0:
            return
        self.rc.update(obj_cliente)
        self.lista_clientes = ListaClientes()

    def modificar_corporativo(self):
        print("Modificar cliente Corporativo: ")
        id_cliente = int(input("Ingresa id de un Corporativo: "))
        obj_cliente = self.rc.get_one_corporativo(id_cliente)
        print(obj_cliente)
        opcion = int(
            input(""""Elige una opcion para modificar: 
                            1. Nombre empresa
                            2. Nombre contacto
                            3. Teléfono de contacto
                            4. Telefono
                            5. Mail
                            0. Salir
                            : """))
        if opcion == 1:
            nuevo_nombre_empresa = input(
                "Ingrese el nuevo NOMBRE DE LA EMPRESA:")
            obj_cliente.nombre_empresa = nuevo_nombre_empresa
            print("Nombre de empresa cambiado con exito.")

        elif opcion == 2:
            nuevo_nombre_contacto = input(
                "Ingrese el nuevo NOMBRE DE CONTACTO:")
            obj_cliente.nombre_contacto = nuevo_nombre_contacto
            print("Nombre de contacto cambiado con exito.")

        elif opcion == 3:
            nuevo_telefono_contacto = input(
                "Ingrese el nuevo TELEFONO DE CONTACTO: ")
            obj_cliente.telefono_contacto = nuevo_telefono_contacto
            print("Telefono de contacto cambiado con exito.")

        elif opcion == 4:
            nuevo_telefono = input("Ingrese el nuevo TELEFONO: ")
            obj_cliente.telefono = nuevo_telefono
            print("Telefono cambiado con exito.")

        elif opcion == 5:
            nuevo_mail = input("Ingrese un nuevo MAIL: ")
            obj_cliente.mail = nuevo_mail
            print("Mail cambiado con exito.")

        elif opcion == 0:
            return

        self.rc.update(obj_cliente)
        self.lista_clientes = ListaClientes()
        print("Cambio Exitoso:")
        print(obj_cliente)

    def borrar_cliente(self):
        lista = self.lista_clientes.lista
        for id_lista in lista:
            print(
                "=================================================================="
            )
            print(id_lista)
            print(
                "=================================================================="
            )
        id_elegido = int(
            input("Ingrese el ID del cliente que quiere eliminar: "))
        for id_lista in lista:
            if id_lista.id_cliente == id_elegido:
                cli = self.lista_clientes.rc.delete(id_lista)
                lista.remove(id_lista)
                print("Se elimino correctamente.")
                break

    def mostrar_trabajos(self, lista=None):
        if lista == None:
            lista = self.lista_trabajo.lista
        for trabajo in lista:
            print("====================================================")
            print("Cliente: ")
            print(trabajo.cliente)
            print("Trabajo: ")
            print("ID: ", trabajo.id_trabajo)
            print("Fecha de entrega: ", trabajo.fecha_entrega_propuesta)
            print("Fecha de entrega real: ", trabajo.fecha_entrega_real)
            print("Descripcion: ", trabajo.descripcion)
            print("Retirado: ", trabajo.retirado)
            print("====================================================")

    def nuevo_trabajo(self):
        obj_cliente = None
        while True:
            cliente = input("Ingrese el id del cliente: ")
            obj_cliente = self.rc.get_one(cliente)
            if obj_cliente != None:
                print(obj_cliente)
                break

        fecha_ingreso = datetime.date.today()
        while True:
            try:
                f = input("Ingrese la fecha propuesta (aaaa,mm,dd): ")
                fecha_propuesta = datetime.datetime.strptime(f, "%Y,%m,%d")
            except ValueError:
                print("Fecha no valida")
                continue
            break
        fecha_entrega_real = None
        descripcion = input("Ingrese la descripcion del trabajo: ")
        retirado = False

        nt = Trabajo(obj_cliente, fecha_ingreso, fecha_propuesta,
                     fecha_entrega_real, descripcion, retirado, None)
        resultado = self.rt.store(nt)
        self.lista_Trabajo = self.rt.get_all()

        print("Trabajo guardado exitosamente. Con el id ", resultado)

    def trabajo_finalizado(self):
        print("Finalizar trabajo: ")
        id_trabajo = int(input("Ingresa id del trabajo: "))
        obj_trabajo = self.rt.get_one(id_trabajo)

        obj_trabajo.fecha_entrega_real = datetime.date.today()
        print("")
        print("Trabajo finalizado con exito: ")
        print("")
        print("==============================================")
        print("ID: ", obj_trabajo.id_trabajo)
        print("Fecha de entrega: ", obj_trabajo.fecha_entrega_propuesta)
        print("Fecha de entrega real: ", obj_trabajo.fecha_entrega_real)
        print("Descripcion: ", obj_trabajo.descripcion)
        print("Retirado: ", obj_trabajo.retirado)
        print("==============================================")

        self.rt.update(obj_trabajo)
        self.lista_trabajo = Lista_Trabajo()

    def trabajo_retirado(self):
        print("Marcar trabajo retirado : ")
        id_trabajo = int(input("Ingresa id del trabajo: "))
        obj_trabajo = self.rt.get_one(id_trabajo)

        obj_trabajo.retirado = True
        print("")
        print("Trabajo retirado con exito: ")
        print("")
        print("==============================================")
        print("ID: ", obj_trabajo.id_trabajo)
        print("Fecha de entrega: ", obj_trabajo.fecha_entrega_propuesta)
        print("Fecha de entrega real: ", obj_trabajo.fecha_entrega_real)
        print("Descripcion: ", obj_trabajo.descripcion)
        print("Retirado: ", obj_trabajo.retirado)
        print("==============================================")

        self.rt.update(obj_trabajo)
        self.lista_trabajo = Lista_Trabajo()

    def modificar_trabajo(self):
        print("Modificar trabajo : ")
        id_trabajo = int(input("Ingresa id del trabajo: "))
        obj_trabajo = self.rt.get_one(id_trabajo)

        while True:
            try:
                f = input("Ingrese la nueva fecha propuesta (aaaa,mm,dd): ")
                fecha_propuesta = datetime.datetime.strptime(f, "%Y,%m,%d")
            except ValueError:
                print("Fecha no valida")
                continue
            break
        descripcion = input("Ingrese la nueva descripcion del trabajo: ")

        obj_trabajo.fecha_entrega_propuesta = fecha_propuesta
        obj_trabajo.descripcion = descripcion

        print("")
        print("Trabajo modificado con exito: ")
        print("")
        print("==============================================")
        print("ID: ", obj_trabajo.id_trabajo)
        print("Fecha de entrega: ", obj_trabajo.fecha_entrega_propuesta)
        print("Fecha de entrega real: ", obj_trabajo.fecha_entrega_real)
        print("Descripcion: ", obj_trabajo.descripcion)
        print("Retirado: ", obj_trabajo.retirado)
        print("==============================================")

        self.rt.update(obj_trabajo)
        self.lista_trabajo = Lista_Trabajo()

    def mostrar_no_retirados(self, lista=None):
        if lista == None:
            lista = self.lista_trabajo.lista
        for trabajo in lista:
            if trabajo.retirado == False and trabajo.fecha_entrega_real != None:
                print("===========================================")
                print("Cliente: ")
                print(trabajo.cliente)
                print("ID: ", trabajo.id_trabajo)
                print("Fecha de entrega: ", trabajo.fecha_entrega_propuesta)
                print("Fecha de entrega real: ", trabajo.fecha_entrega_real)
                print("Descripcion: ", trabajo.descripcion)
                print("Retirado: ", trabajo.retirado)
                print("===========================================")

    def eliminar_trabajo(self):
        id_elegido = int(
            input("Ingrese el ID del trabajo que quiere eliminar: "))
        obj_trabajo = self.rt.get_one(id_elegido)
        resultado = self.rt.delete(obj_trabajo)
        self.lista_trabajo = Lista_Trabajo()
        print("Eliminado: ", resultado)

    def salir(self):
        print("Saliste del programa. Gracias por todo.")
        sys.exit(0)
Exemple #11
0
class Menu:
    "Muestra ocpiones"

    def __init__(self):
        self.rc = RepositorioClientes()
        self.rt = RepositorioTrabajos()
        self.list_clientes = ListaClientes()
        self.listaTrabajo = ListaTrabajos()
        self.opciones = {
            "1": self.mostrar_clientes,
            "2": self.nuevo_cliente,
            "3": self.buscar_cliente,
            "4": self.modificar_datos_clientes,
            "5": self.borrar_cliente,
            "6": self.nuevo_trabajo,
            "7": self.mostrar_trabajos,
            "8": self.modificar_datos_trabajo,
            "9": self.finalizar_trabajo,
            "10": self.retirar_trabajo,
            "11": self.eliminar_trabajo,
            "12": self.historial_T,

            "0": self.salir
        }

    def mostrar_menu(self):
        print("""
Menú del sistema:
===================================================
- CLIENTES:                                                     
===================================================
1. Mostrar todos los clientes. 
2. Ingresar un nuevo cliente.                                       
3. Buscar un cliente.                                               
4. Modificar los datos de un cliente.                               
5. Eliminar un cliente.                                               
===================================================
- TRABAJOS:                                                                        
===================================================
6. Cargar nuevo trabajo.                                                                          
7. Mostrar todos los trabajos.
8. Modificar datos del trabajo.
9. Finalizar un trabajo.
10.Retirar un trabajo.
11.Eliminar un trabajo.
12.Ver Historial de trabajos de cada cliente.
===================================================
0. Salir del sistema
        """)

    def ejecutar(self):
        '''Mostrar el menu y responder a las opciones.
        '''
        while True:
            self.mostrar_menu()
            opcion = input("Ingresar una opción: ")
            accion = self.opciones.get(opcion)
            if accion:
                accion()
            else:
                print("{0} no es una opción válida".format(opcion))

    def mostrar_clientes(self):
        "Muestra todos los clientes"
        c = self.rc.get_all()
        if c:
            l = self.rc.get_all_corporativos()
            print("""         Clientes CORPORATIVOS:       """)
            if l:
                for i in l:
                    print("..................................................")
                    print(i)
                    print("..................................................")
            t = self.rc.get_all_particulares()

            print("""         Clientes PARTICULARES:        """)
            if t:
                for i in t:
                    print("..................................................")
                    print(i)
                    print("..................................................")
            input("\nPrecione 0 para volver al menu principal")
        else:
            print("\nNo hay cliente cargados en el sistema")
            input("\nPrecione 0 para volver al menu principal")

    def nuevo_cliente(self):
        "Ingresa un nuevo cliente, ya sea corporativo o particular"
        tipo = "A"
        while tipo not in ("C", "c", "P", "p"):
            tipo = input("Ingrese el tipo de Cliente: C:Corporativo / P:Particular")
        nombre = input("Ingrese el nombre: ")
        if tipo in ("C", "c"):
            nombre_contacto = input("Ingrese el nombre de contacto: ")
            telefono_contacto = input("Ingrese el telefono de contacto: ")
        else:
            apellido = input("Ingrese el apellido: ")
        telefono = input("Ingrese el numero de telefono: ")
        mail = input("Ingrese el correo electronico: ")
        if tipo in ("C", "c"):
            c = self.list_clientes.nuevo_cliente_corporativo(nombre, nombre_contacto, telefono_contacto, telefono, mail)
        else:
            c = self.list_clientes.nuevo_cliente_particular(nombre, apellido, telefono, mail)
        if c is None:
            print("Error al cargar cliente")
        else:
            print("Cliente cargado correctamente")

    def buscar_cliente(self):
        "Solicita un ID, busca al cliente con ese ID y lo muestra"
        c = self.rc.get_all()
        if c:
            while True:
                try:
                    id_cliente = int(input("Ingrese el ID del cliente que desea buscar: "))
                except ValueError:
                    print('Debe ingresar un numero')
                    continue
                break
            c = self.list_clientes._buscar_por_id(id_cliente)
            if c == None:
                print("El ID ingresado no pertenece a ningun cliente que este guardado en el sistema")
            else:
                print("\n................................................\n")
                print(c)
                print("..................................................")
            input("\nPrecione 0 para volver al menu principal")
        else:
            print("\nNo se encuentra ningun cliente particular que este guardado en el sistema")
            input("\nPrecione 0 para volver al menu principal")

    def modificar_datos_clientes(self):
        "Modificar los datos de un cliente, ya sea cliente corporativo o particular"
        tipo = "A"
        while tipo not in ("C", "c", "P", "p"):
            tipo = input("Ingrese el tipo de Cliente:  C:Corporativo / P:Particular")

        if tipo in ("C", "c"):
            l = self.rc.get_all_corporativos()
            if l:
                print("""         Clientes CORPORATIVOS           """)
                print("""-----------------------------------------""")
                for i in l:
                    print(i)
                    print("..................................................\n")
                    while True:
                        try:
                            id_cliente = int(input("Ingrese el ID del cliente: "))
                        except ValueError:
                            print('Debe ingresar un numero')
                            continue
                        break
                    cliente = self.list_clientes._buscar_por_id(id_cliente)
                    if cliente:
                        print(cliente)
                        print("Modifique el dato que desea: ")
                        print("..................................................\n")
                        nombre_empresa = input("Ingrese el nombre de la empresa: ")
                        nombre_contacto = input("Ingrese el nombre del contacto: ")
                        telefono_contacto = input("Ingrese el telefono del contacto: ")
                        telefono = input("Ingrese el telefono: ")
                        Mail = input("Ingrese el mail: ")
                        C = self.list_clientes.modificar_datos_CC(nombre_empresa, nombre_contacto, telefono_contacto,
                                                                  telefono, Mail, id_cliente)
                        if C == None:
                            print("Error al modificar los datos del cliente")
                            input("\nPrecione 0 para volver al menu principal")
                        else:
                            print("""Los datos fueron modificados con exito""")
                            print("\n................................................\n")
                            print(cliente)
                            print("..................................................")
                            input("\nPrecione 0 para volver al menu principal")
                    else:
                        print("\nEl ID ingresado no pertenece a ningun cliente corporativo que este guardado en el sistema")
                        input("\nPrecione 0 para volver al menu principal")
                else:
                    print("\nNo se encuentra ningun cliente corporativo que este guardado en el sistema")
                    input("\nPrecione 0 para volver al menu principal")
        else:
            l = self.rc.get_all_particulares()
            if l:
                print("""         Clientes PARTICULARES            """)
                print("""------------------------------------------""")
                for i in l:
                    print(i)
                    print("..................................................\n")
                while True:
                    try:
                        id_cliente = int(input("Ingrese el ID del cliente: "))
                    except ValueError:
                        print('Debe ingresar un numero')
                        continue
                    break
                cliente = self.list_clientes._buscar_por_id(id_cliente)
                if cliente:
                    print(cliente)
                    print("..................................................\n")

                    Nombre = input("Ingrese el nombre: ")
                    Apellido = input("Ingrese el apellido: ")
                    Tel = input("Ingrese el telefono: ")
                    Mail = input("Ingrese el mail: ")
                    C = self.list_clientes.modificar_datos_CP(Nombre, Apellido, Tel, Mail, id_cliente)
                    if C == None:
                        print("Error al modificar los datos del cliente")
                        input("\nPrecione 0 para volver al menu principal")
                    else:
                        print("Los datos fueron modificados con exito")
                        print(".................................................\n")
                        print(cliente)
                        print("..................................................")
                        input("\nPrecione 0 para volver al menu principal")
                else:
                    print("\nEl ID ingresado no pertenece a ningun cliente particular que este guardado en el sistema")
                    input("\nPrecione 0 para volver al menu principal")
            else:
                print("\nNo se encuentra ningun cliente particular que este guardado en el sistema")
                input("\nPrecione 0 para volver al menu principal")

    def borrar_cliente(self):
        "Solicita un ID y borra al cliente, en caso de que tenga trabajos pendientes, tambien los borra"
        b = self.rc.get_all_corporativos()
        if b:

            print("           Clientes CORPORATIVOS           ")
            print("-------------------------------------------")
            for i in b:
                print("ID cliente: ", i.id_cliente, "- Nombre: ", i.nombre_empresa)
                print("..................................................")
        t = self.rc.get_all_particulares()
        if t:
            print("""         CLIENTES PARTICULARES""")
            print("""-----------------------------------------""")
            for i in t:
                print("ID cliente: ", i.id_cliente, "- Nombre: ", i.nombre)
                print("..................................................\n")
        if b or t:
            while True:
                try:
                    id_cliente = int(input("Ingrese el ID del cliente: "))
                except ValueError:
                    print('Debe ingresar un numero')
                    continue
                break
            d = self.list_clientes._buscar_por_id(id_cliente)
            if d:
                print("\n..................................................\n")
                print(d)
                print("..................................................\n")
                f = "A"
                while f not in ("1", "2"):
                    f = input("""¿Seguro que desea eliminar al cliente? 
       1:Si Borrar.  / 2: No Borrar. 

       Ingrese una opcion: """)
                if f in ("1"):
                    a = self.list_clientes.eliminar_cliente(id_cliente)
                    if a == None:
                        print("Error al querer borrar al cliente")
                        print(".................................................")
                        input("\nPrecione 0 para volver al menu principal")
                    else:
                        print("El cliente fue eliminado con exito!")
                        print(".................................................")
                        input("\nPrecione 0 para volver al menu principal")

                else:
                    print("\nEl cliente no ha sido eliminado.")
                    input("\nPrecione 0 para volver al menu principal")
            else:
                print("\nEl ID ingresado no pertenece a ningun cliente que este guardado en el sistema")
                input("\nPrecione 0 para volver al menu principal")
        else:
            print("\nNo se encuentra ningun cliente que este guardado en el sistema")
            input("\nPrecione 0 para volver al menu principal")

    def nuevo_trabajo(self):
        "Solicita el ID de un cliente y carga los datos de un nuevo trabajo"
        b = self.rc.get_all_corporativos()
        if b:
            print("""         Clientes CORPORATIVOS          """)
            print("""-------------------------------------------""")
            for i in b:
                print("ID cliente: ", i.id_cliente, "- Nombre: ", i.nombre_empresa)
                print("............................................")
        t = self.rc.get_all_particulares()
        if t:
            print("""         Clientes PARTICULARES          """)
            print("""-------------------------------------------""")
            for i in t:
                print("ID cliente: ", i.id_cliente, "- Nombre: ", i.nombre)
                print(".............................................\n")
        if b or t:
            while True:
                try:
                    id_cliente = int(input("Ingrese el ID del cliente: "))
                except ValueError:
                    print('Debe ingresar un numero')
                    continue
                break
            C = self.list_clientes._buscar_por_id(id_cliente)
            if C == None:
                print("\nEl ID ingresado no pertenece a ningun cliente que este guardado en el sistema")
                input("\nPrecione 0 para volver al menu principal")
            else:
                fecha_ingreso = date.today()
                print("\nFecha de ingreso: ", fecha_ingreso)
                print("\nFecha de entrega propuesta: ")
                while True:
                    try:
                        dia = int(input("Ingrese el numero del dia: "))
                    except ValueError:
                        print("Debe ingresar un numero del 1 al 31")
                        continue
                    break
                while True:
                    try:
                        mes = int(input("Ingrese el numero del mes: "))
                    except ValueError:
                        print("Debe ingresar un numero del 1 al 12")
                        continue
                    break
                while True:
                    try:
                        anio = int(input("Ingrese el año: "))
                    except ValueError:
                        print("Debe ingresar un numero")
                        continue
                    break
                fecha_entrega_propuesta = date(anio, mes, dia)
                descripcion = input("\nIngrese descripcion del nuevo trabajo: ")
                t = self.listaTrabajo.nuevo_trabajo(C, fecha_ingreso, fecha_entrega_propuesta, descripcion)
                if t == None:
                    print("Error al cargar el nuevo trabajo")
                    print("..................................................")
                    input("\nPrecione 0 para volver al menu principal")

                else:
                    print("El nuevo trabajo se cargo con exito!\n")
                    print("-..................................................")
                    print(t)
                    print("..................................................\n")
                    input("\nPrecione 0 para volver al menu principal")
        else:
            print(
                "\nNo se encuentra ningun cliente que este guardado en el sistema")
            input("\nPrecione 0 para volver al menu principal")

    def mostrar_trabajos(self):
        "Muestra una lista con todos los trabajos"
        Lista = self.rt.get_all()
        if Lista:
            for Cliente in Lista:
                print(Cliente)
                print("..................................................")
        else:
            print("\nNo se encuentra ningun trabajo que este guardado en el sistema")
        input("\nPrecione 0 para volver al menu principal")

    def modificar_datos_trabajo(self):
        "Solicita un ID trabajo y modifica los datos del trabajo"
        t = self.rt.get_all()
        if t:
            for i in t:
                print("ID trabajo: ", i.id_trabajo)
                print("Fecha de ingreso: ", i.fecha_ingreso)
                print("Fecha entrega propuesta: ", i.fecha_entrega_propuesta)
                print("Descripcion: ", i.descripcion)
                print(".....................................................\n")
            while True:
                try:
                    id_trabajo = int(input("Ingrese el ID del trabajo: "))
                except ValueError:
                    print('Debe ingresar un numero')
                    continue
                break
            C = self.listaTrabajo._buscar_por_id(id_trabajo)
            if C == None:
                print("\nEl ID ingresado no pertenece a ningun trabajo que este guardado en el sistema")
                input("\nPrecione 0 para volver al menu principal")
            else:
                print(C.cliente)
                print("Trabajo:")
                print("Fecha de ingreso: ", C.fecha_ingreso)
                print("Fecha entrega propuesta: ", C.fecha_entrega_propuesta)
                print("Descripcion: ", C.descripcion)
                print("Modifique el dato que desea: ")
                print(".............................................................")
                tipo = "A"
                while tipo not in ("1", "2", "3", "4"):
                    while tipo not in ("4"):
                        tipo = input("""\n¿Desea hacer alguna modificacion?

       1: Fecha de ingreso / 2: Fecha entrega propuesta / 3: Descripcion / 4: Salir

       Ingrese una opcion: """)
                        if tipo in ("1"):
                            print("Modificar fecha de ingreso\n")
                            while True:
                                try:
                                    dia = int(input("Ingrese el numero del dia: "))
                                except ValueError:
                                    print('Debe ingresar un numero del 1 al 31')
                                    continue
                                break
                            while True:
                                try:
                                    mes = int(input("Ingrese el numero del mes: "))
                                except ValueError:
                                    print('Debe ingresar un numero del 1 al 12')
                                    continue
                                break
                            while True:
                                try:
                                    anio = int(input("Ingrese el año: "))
                                except ValueError:
                                    print('Debe ingresar un numero')
                                    continue
                                break
                            FechaIngreso = date(anio, mes, dia)
                            t = self.listaTrabajo.modificar_datos_trabajo(FechaIngreso, C.fecha_entrega_real,
                                                                          C.descripcion,
                                                                          id_trabajo)
                            if t == None:
                                print("Error al modificar el trabajo")
                                print("..................................................")
                                input("\nPrecione 0 para volver al menu principal")
                            else:
                                print("\n..................................................")
                                print("Los datos fueron modificados con exito!")
                                print("..................................................\n")
                                print(C)
                                print("..................................................")
                        if tipo in ("2"):
                            print("Modificar fecha de entregra propuesta\n")
                            while True:
                                try:
                                    dia = int(input("Ingrese el numero del dia: "))
                                except ValueError:
                                    print('Debe ingresar un numero del 1 al 31')
                                    continue
                                break
                            while True:
                                try:
                                    mes = int(input("Ingrese el numero del mes: "))
                                except ValueError:
                                    print('Debe ingresar un numero del 1 al 12')
                                    continue
                                break
                            while True:
                                try:
                                    anio = int(input("Ingrese el año: "))
                                except ValueError:
                                    print('Debe ingresar un numero')
                                    continue
                                break
                            FechaEntregaPropuesta = date(anio, mes, dia)
                            t = self.listaTrabajo.modificar_datos_trabajo(C.fecha_ingreso, FechaEntregaPropuesta,
                                                                          C.descripcion,
                                                                          id_trabajo)
                            if t == None:
                                print("Error al modificar el trabajo")
                                print("..................................................")
                                input("\nPrecione 0 para volver al menu principal")
                            else:
                                print("\n................................................")
                                print("Los datos fueron modificados con exito!")
                                print(".................................................\n")
                                print(C)
                                print("..................................................")
                        if tipo in ("3"):
                            print("..................................................")
                            print("Modificar la descripcion del trabajo\n")
                            Descripcion = input("Ingrese la descripcion del trabajo: ")
                            T = self.listaTrabajo.modificar_datos_trabajo(C.fecha_ingreso, C.fecha_entrega_real,
                                                                          Descripcion,
                                                                          id_trabajo)
                            if T == None:
                                print("..................................................")
                                print("Error al modificar el trabajo")
                                print("..................................................")
                                input("\nPrecione 0 para volver al menu principal")
                            else:
                                print("\n..................................................")
                                print("Los datos fueron modificados con exito!")
                                print("..................................................\n")
                                print(C)
                                print("..................................................")
                    if tipo in ("4"):
                        self.ejecutar()
        else:
            print("\nNo se encuentra ningun trabajo que este guardado en el sistema")
            input("\nPrecione 0 para volver al menu principal")

    def finalizar_trabajo(self):
        "Solicita un ID trabajo y modifica la fecha de entrega real"
        t = self.rt.get_all()
        if t:
            for i in t:
                print(i.cliente)
                print("ID trabajo: ", i.id_trabajo, "- Fecha entrega real: ", i.fecha_entrega_real)
                print("..................................................")
            while True:
                try:
                    id_trabajo = int(input("Ingrese el ID del trabajo: "))
                except ValueError:
                    print('Debe ingresar un numero')
                    continue
                break
            C = self.listaTrabajo._buscar_por_id(id_trabajo)
            if C == None:
                print("\nEl ID ingresado no pertenece a ningun trabajo que este guardado en el sistema")
                input("\nPrecione 0 para volver al menu principal")
            else:
                if C.fecha_entrega_real:
                    print("El estado del trabajo se encuentra como finalizado")
                    input("\nPrecione 0 para volver al menu principal")
                else:
                    print(C)
                    print("..................................................")
                    tipo = "A"
                    while tipo not in ("1", "2"):
                        tipo = input("""¿Desea finalizar el trabajo?
       1: Si Finalizar. / 2: No Finalizar.

       Ingresa una opcion: """)
                    if tipo in ("1"):
                        t = self.listaTrabajo.trabajo_finalizado(id_trabajo)
                        if t == None:
                            print("Error al modificar la entrega del trabajo")
                            print("..................................................")
                            input("\nPrecione 0 para volver al menu principal")
                        else:
                            print("\nEl trabajo fue finalizado con exito!")
                            print(C)
                            print("..................................................")
                            input("\nPrecione 0 para volver al menu principal")
                    else:
                        print("No se realizo modificacion en la finalizacion del trabajo")
                        print("..................................................\n")
                        input("\nPrecione 0 para volver al menu principal")
        else:
            print("\nNo se encuentra ningun trabajo que este cargado en el sistema")
            input("\nPrecione 0 para volver al menu principal")

    def retirar_trabajo(self):
        "Solicita un ID trabajo y lo marca como retirado"
        t = self.rt.get_all()
        if t:
            for i in t:
                print("\n.......................................................")
                print(i.cliente)
                print("ID trabajo: ", i.id_trabajo, "- Retirado: ", i.retirado)
                print("........................................................\n")
            while True:
                try:
                    id_trabajo = int(input("Ingrese el ID del trabajo: "))
                except ValueError:
                    print('Debe ingresar un numero')
                    continue
                break
            C = self.listaTrabajo._buscar_por_id(id_trabajo)
            if C == None:
                print("\nEl ID ingresado no pertenece a ningun trabajo que este guardado en el sistema")
                input("\nPrecione 0 para volver al menu principal")
            else:
                if C.retirado == True:
                    print("\nEl trabajo ya se encuentra como retirado")
                    input("\nPrecione 0 para volver al menu principal")
                else:
                    print("\n.....................................................")
                    print(C)
                    print(".......................................................")
                    tipo = "A"
                    while tipo not in ("1", "2"):
                        print("\n..................................................")
                        tipo = input("""¿Desea dar por retirado el trabajo?

       1: Si Retirar. / 2: No Retirar.

       Ingresa una opcion: """)
                    if tipo in ("1"):
                        T = self.listaTrabajo.retiro_trabajo(id_trabajo)
                        if T == None:
                            print("Error al retirar el trabajo")
                            print(".....................................................")
                            input("\nPrecione 0 para volver al menu principal")
                        else:
                            print("El trabajo fue retirado con exito!")
                            print("...................................................\n")
                            print(C)
                            print("\n...................................................")
                            input("\nPrecione 0 para volver al menu principal")
                    else:
                        print("No se realizo modificacion en el retiro del trabajo")
                        print(".........................................................")
                        input("\nPrecione 0 para volver al menu principal")
        else:
            print("\nNo se encuentra ningun trabajo que este guardado en el sistema")
            input("\nPrecione 0 para volver al menu principal")

    def eliminar_trabajo(self):
        "Solicita un ID trabajo y borra un trabajo"
        t = self.rt.get_all()
        if t:
            for i in t:
                print("ID trabajo: ", i.id_trabajo)
                print("Fecha de ingreso: ", i.fecha_ingreso)
                print("Fecha entrega propuesta: ", i.fecha_entrega_propuesta)
                print("Fecha de entrega real: ", i.fecha_entrega_real)
                print("Descripcion: ", i.descripcion)
                print("Retirado: ", i.retirado)
                print(".......................................................\n")
            while True:
                try:
                    id_trabajo = int(input("Ingrese el ID del trabajo: "))
                except ValueError:
                    print('Debe ingresar un numero')
                    continue
                break
            C = self.listaTrabajo._buscar_por_id(id_trabajo)
            if C == None:
                print("\nEl ID ingresado no pertenece a ningun trabajo que este guardado en el sistema")
                input("\nPrecione 0 para volver al menu principal")
            else:
                print("\n.................................................")
                print(C)
                print("..................................................\n")
                tipo = "A"
                while tipo not in ("1", "2"):
                    tipo = input("""¿Seguro que desea eliminar el trabajo?

       1: Si Eliminar. / 2: No Eliminar.

       Ingresa una opcion: """)
                if tipo in ("1"):
                    t = self.listaTrabajo.eliminar_trabajo(id_trabajo)
                    if t == None:
                        print("Error al eliminar el trabajo")
                        print("...........................................")
                        input("\nPrecione 0 para volver al menu principal")

                    else:
                        print("El trabajo fue eliminado con exito!")
                        print("............................................")
                        input("\nPrecione 0 para volver al menu principal")
                else:
                    print("El trabajo no se ha eliminado")
                    print("................................................")
                    input("\nPrecione 0 para volver al menu principal")
        else:
            print("\nNo se encuentra ningun trabajo que este guardado en el sistema")
            input("\nPrecione 0 para volver al menu principal")

        # HISTORIAL DE TRABAJOS de cada Cliente:

    def historial_T(self):
        """Solicita un ID y muestra una lista con los trabajos encargados por el cliente"""
        l = self.rc.get_all_corporativos()
        if l:
            print("""         CLIENTES CORPORATIVOS""")
            for i in l:
                print("...........................................................")
                print("ID cliente: ", i.id_cliente, "- Nombre: ", i.nombre_empresa)
                print("...........................................................")
        t = self.rc.get_all_particulares()
        if t:
            print("""         CLIENTES PARTICULARES""")
            for i in t:
                print("............................................................")
                print("ID cliente: ", i.id_cliente, "- Nombre: ", i.nombre)
                print("..........................................................\n")
        if l or t:
            while True:
                try:
                    id = int(input("\nIngrese el ID del cliente: "))
                except ValueError:
                    print('Debe ingresar un numero')
                    continue
                break
            C = self.list_clientes._buscar_por_id(id)
            if C == None:
                print("\nEl ID ingresado no pertenece a ningun cliente que este guardado en el sistema")
                input("\nPrecione 0 para volver al menu principal")
            else:
                print(C)
                print("...............................................................")
                t = self.listaTrabajo.listaTrabajo
                if t:
                    for U in t:
                        if U.cliente.id_cliente == id:
                            print("...................................................\n")
                            print("ID trabajo: ", U.id_trabajo)
                            print("Fecha de ingreso: ", U.fecha_ingreso)
                            print("Fecha entrega propuesta: ", U.fecha_entrega_propuesta)
                            print("Fecha entrega real: ", U.fecha_entrega_real)
                            print("Descripcion: ", U.descripcion)
                            print("Retirado: ", U.retirado)
                            print("......................................................")
                    input("\nPrecione 0 para volver al menu principal")
                else:
                    print("\nEl cliente no tiene ningun trabajo que este guardado en el sistema")
                    input("\nPrecione 0 para volver al menu principal")
        else:
            print("\nNo se encuentra ningun cliente que este guardado en el sistema")
            input("\nPrecione 0 para volver al menu principal")

    def salir(self):
        """Sale del sistema"""
        print("¡Gracias por utilizar el sistema!.")
        sys.exit(0)