import os class Cliente: def __init__(self,nombre_cliente,zona_cliente): self.__nombre=nombre_cliente self.__zona=zona_cliente @property def nombre(self): return self.__nombre @property def zona(self): return self.__zona class Tecnico: def __init__(self,nombre_tecnico): self.__nombre_tecnico=nombre_tecnico self.__trabajos=0 self.__zona="Sin asignar" @property def nombre(self): return self.__nombre_tecnico @property def trabajos(self): return self.__trabajos def asignar_trabajo(self,zona): if self.__trabajos<4 and (zona==self.__zona or self.__zona=="Sin asignar"): self.__trabajos +=1 self.__zona=zona return True return False class Solicitud: __nsolicitud=0 # Variable de clase y encapsulada, llevara el número de veces que se crea una nueva solicitud def __init__(self): # Variables para las propiedades self.__ob_cliente="" self.__ob_tecnico=Tecnico("Sin asignar") Solicitud.__nsolicitud +=1 self.__solicitud=Solicitud.__nsolicitud # Propiedad que devuelve el numero de solicitud @property def numero_solicitud(self): return self.__solicitud # Propiedad para cliente @property def nombre_cliente(self):# leer el nombre del cliente return self.__ob_cliente.nombre @property def zona_trabajo(self):# leer la zona de trabajo return self.__ob_cliente.zona #@ingresar_cliente.setter def ingresar_cliente(self,ob_cliente):# Incluir cliente en la solicitud self.__ob_cliente= ob_cliente @property def nombre_tecnico(self): return self.__ob_tecnico.nombre @property def trabajos_tecnico(self): return self.__ob_tecnico.trabajos def ingresar_tecnico(self,ob_tecnico): self.__ob_tecnico= ob_tecnico def borrar(): if os.name == "nt": os.system("cls") else: os.system("clear") def menu(): borrar() print("------- Repara S.A. -------") print("1. Nueva Solicitud") print("2. Asignar Técnicos") print("3. Ver ordenes de trabajo") print("4. Salir") def menu_zona(): borrar() print("------- Repara S.A. -------") print("1. Norte") print("2. Sur") print("3. Este") print("4. Oeste") def nueva_solicitud(): borrar() cliente = input("Introduzca el nombre del cliente: ") zona="" while zona=="": menu_zona() opcion=input("Elija zona: ") if opcion=="1": zona="Norte" elif opcion=="2": zona="Sur" elif opcion=="3": zona="Este" elif opcion=="4": zona="Oste" return Cliente(cliente,zona) def mostrar_solicitud(): borrar() for solicitud in solicitudes: print("-"*20) print("Orden de trabajo número:", solicitud.numero_solicitud) print("nombre del solicitante:", solicitud.nombre_cliente) print("Zona donde realizar el trabajo:", solicitud.zona_trabajo) print("Técnico asociado al trabajo:", solicitud.nombre_tecnico) print("Número de trabajos del técnico: ",solicitud.trabajos_tecnico) print("-"*20) input("---Pulsa una tecla para continuar---") def asignar_trabajos(solicitudes): tecnicos =[Tecnico("Alverto"),Tecnico("Eduardo"),Tecnico("Eva"),Tecnico("Laura")] # Creo la lista de técnicos for solicitud in solicitudes: # Recorro la lista de tareas if solicitud.nombre_tecnico =="Sin asignar": # Compruebo si se le ha asignado un técnico for tecnico in tecnicos: # Recorro la lista de tecnicos a ver cul encaja con los requerimientos if tecnico.asignar_trabajo(solicitud.zona_trabajo):# Compruebo si se puede asignar técnico por número de trabajos y zona solicitud.ingresar_tecnico(tecnico) # Si se ha asignado técnico recorro las solicitudes a ver si hay mas del mismo cliente for mismocliente in solicitudes: if solicitud.nombre_cliente == mismocliente.nombre_cliente and solicitud.nombre_tecnico=="Sin asignar": if tecnico.asignar_trabajo(solicitud.zona_trabajo):# Compruebo si se puede asignar técnico por número de trabajos y zona solicitud.ingresar_tecnico(tecnico) break # Si se asigna un técnico ya no hay que vuscar mas else: # pense que esto nunca lo usaria pero si ha terminado con las lista de técnico es que no a podido asignar y hay una regña àra esto solicitud.ingresar_tecnico(Tecnico("No se ha podido asignar ningun técnico")) def crear_solictud_ficticia(): # Todo esto se podra eliminar al terminar las pruebas solicitud=Solicitud() solicitud.ingresar_cliente(Cliente("Rodrigo","Norte")) solicitudes.append(solicitud) solicitud1=Solicitud() solicitud1.ingresar_cliente(Cliente("Rodrigo","Norte")) solicitudes.append(solicitud1) solicitud2=Solicitud() solicitud2.ingresar_cliente(Cliente("Alicia","Sur")) solicitudes.append(solicitud2) solicitud3=Solicitud() solicitud3.ingresar_cliente(Cliente("Alvaro","Este")) solicitudes.append(solicitud3) solicitud4=Solicitud() solicitud4.ingresar_cliente(Cliente("Maria","Oeste")) solicitudes.append(solicitud4) solicitud5=Solicitud() solicitud5.ingresar_cliente(Cliente("Maria","Oeste")) solicitudes.append(solicitud5) solicitud6=Solicitud() solicitud6.ingresar_cliente(Cliente("Maria","Oeste")) solicitudes.append(solicitud6) solicitud7=Solicitud() solicitud7.ingresar_cliente(Cliente("Alejandra","Este")) solicitudes.append(solicitud7) solicitud8=Solicitud() solicitud8.ingresar_cliente(Cliente("Maria","Oeste")) solicitudes.append(solicitud8) solicitud9=Solicitud() solicitud9.ingresar_cliente(Cliente("Maria","Oeste")) solicitudes.append(solicitud9) solicitud10=Solicitud() solicitud10.ingresar_cliente(Cliente("Maria","Oeste")) solicitudes.append(solicitud10) opcion="0" solicitudes=[] #Creamos solicitudes sin pasar por el Menu para poder probar mejor crear_solictud_ficticia() while opcion!="4": menu() opcion=input("Elija opcion: ") if opcion=="1": solicitud=Solicitud() solicitud.ingresar_cliente(nueva_solicitud()) solicitudes.append(solicitud) elif opcion=="2": asignar_trabajos(solicitudes) elif opcion=="3": mostrar_solicitud()