Advertisement
Rodripelto

Ejercicio_Asignar_Trabajo

Sep 18th, 2020
140
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import os
  2.  
  3. class Cliente:
  4.     def __init__(self,nombre_cliente,zona_cliente):
  5.         self.__nombre=nombre_cliente
  6.         self.__zona=zona_cliente
  7.  
  8.     @property
  9.     def nombre(self):
  10.         return self.__nombre
  11.  
  12.     @property
  13.     def zona(self):
  14.         return self.__zona
  15.  
  16. class Tecnico:
  17.     def __init__(self,nombre_tecnico):
  18.         self.__nombre_tecnico=nombre_tecnico
  19.         self.__trabajos=0
  20.         self.__zona="Sin asignar"
  21.  
  22.     @property
  23.     def nombre(self):
  24.         return self.__nombre_tecnico
  25.  
  26.     @property
  27.     def trabajos(self):
  28.         return self.__trabajos
  29.  
  30.     def asignar_trabajo(self,zona):
  31.         if self.__trabajos<4 and (zona==self.__zona or self.__zona=="Sin asignar"):
  32.             self.__trabajos +=1
  33.             self.__zona=zona
  34.             return True
  35.         return False
  36.  
  37. class Solicitud:
  38.     __nsolicitud=0 # Variable de clase y encapsulada, llevara el número de veces que se crea una nueva solicitud
  39.  
  40.     def __init__(self):
  41.         # Variables para las propiedades
  42.         self.__ob_cliente=""
  43.         self.__ob_tecnico=Tecnico("Sin asignar")
  44.         Solicitud.__nsolicitud +=1
  45.         self.__solicitud=Solicitud.__nsolicitud
  46.  
  47.     # Propiedad que devuelve el numero de solicitud
  48.     @property
  49.     def numero_solicitud(self):
  50.         return self.__solicitud
  51.  
  52.     # Propiedad para cliente
  53.     @property
  54.     def nombre_cliente(self):# leer el nombre del cliente
  55.         return self.__ob_cliente.nombre
  56.  
  57.     @property
  58.     def zona_trabajo(self):# leer la zona de trabajo
  59.         return self.__ob_cliente.zona
  60.  
  61.     #@ingresar_cliente.setter
  62.     def ingresar_cliente(self,ob_cliente):# Incluir cliente en la solicitud
  63.         self.__ob_cliente= ob_cliente
  64.  
  65.     @property
  66.     def nombre_tecnico(self):
  67.         return self.__ob_tecnico.nombre
  68.  
  69.     @property
  70.     def trabajos_tecnico(self):
  71.         return self.__ob_tecnico.trabajos
  72.        
  73.     def ingresar_tecnico(self,ob_tecnico):
  74.         self.__ob_tecnico= ob_tecnico
  75.  
  76. def borrar():
  77.     if os.name == "nt":
  78.         os.system("cls")
  79.     else:
  80.         os.system("clear")
  81.  
  82. def menu():
  83.     borrar()
  84.     print("------- Repara S.A. -------")
  85.     print("1. Nueva Solicitud")
  86.     print("2. Asignar Técnicos")
  87.     print("3. Ver ordenes de trabajo")
  88.     print("4. Salir")
  89.  
  90. def menu_zona():
  91.     borrar()
  92.     print("------- Repara S.A. -------")
  93.     print("1. Norte")
  94.     print("2. Sur")
  95.     print("3. Este")
  96.     print("4. Oeste")
  97.  
  98. def nueva_solicitud():
  99.     borrar()
  100.     cliente = input("Introduzca el nombre del cliente: ")
  101.     zona=""
  102.     while zona=="":
  103.         menu_zona()
  104.         opcion=input("Elija zona: ")
  105.         if opcion=="1":
  106.             zona="Norte"
  107.         elif opcion=="2":
  108.             zona="Sur"
  109.         elif opcion=="3":
  110.             zona="Este"
  111.         elif opcion=="4":
  112.             zona="Oste"
  113.     return Cliente(cliente,zona)
  114.  
  115. def mostrar_solicitud():
  116.     borrar()
  117.     for solicitud in solicitudes:
  118.         print("-"*20)
  119.         print("Orden de trabajo número:", solicitud.numero_solicitud)
  120.         print("nombre del solicitante:", solicitud.nombre_cliente)
  121.         print("Zona donde realizar el trabajo:", solicitud.zona_trabajo)
  122.         print("Técnico asociado al trabajo:", solicitud.nombre_tecnico)
  123.         print("Número de trabajos del técnico: ",solicitud.trabajos_tecnico)
  124.         print("-"*20)
  125.     input("---Pulsa una tecla para continuar---")
  126.  
  127. def asignar_trabajos(solicitudes):
  128.     tecnicos =[Tecnico("Alverto"),Tecnico("Eduardo"),Tecnico("Eva"),Tecnico("Laura")] # Creo la lista de técnicos
  129.     for solicitud in solicitudes: # Recorro la lista de tareas
  130.         if solicitud.nombre_tecnico =="Sin asignar": # Compruebo si se le ha asignado un técnico
  131.             for tecnico in tecnicos: # Recorro la lista de tecnicos a ver cul encaja con los requerimientos
  132.                 if tecnico.asignar_trabajo(solicitud.zona_trabajo):# Compruebo si se puede asignar técnico por número de trabajos y zona
  133.                     solicitud.ingresar_tecnico(tecnico)
  134.                     # Si se ha asignado técnico recorro las solicitudes a ver si hay mas del mismo cliente
  135.                     for mismocliente in solicitudes:
  136.                         if solicitud.nombre_cliente == mismocliente.nombre_cliente and solicitud.nombre_tecnico=="Sin asignar":
  137.                             if tecnico.asignar_trabajo(solicitud.zona_trabajo):# Compruebo si se puede asignar técnico por número de trabajos y zona
  138.                                 solicitud.ingresar_tecnico(tecnico)
  139.  
  140.                     break # Si se asigna un técnico ya no hay que vuscar mas
  141.             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
  142.                 solicitud.ingresar_tecnico(Tecnico("No se ha podido asignar ningun técnico"))
  143.  
  144. def crear_solictud_ficticia():
  145.     # Todo esto se podra eliminar al terminar las pruebas
  146.     solicitud=Solicitud()
  147.     solicitud.ingresar_cliente(Cliente("Rodrigo","Norte"))
  148.     solicitudes.append(solicitud)
  149.     solicitud1=Solicitud()
  150.     solicitud1.ingresar_cliente(Cliente("Rodrigo","Norte"))
  151.     solicitudes.append(solicitud1)
  152.     solicitud2=Solicitud()
  153.     solicitud2.ingresar_cliente(Cliente("Alicia","Sur"))
  154.     solicitudes.append(solicitud2)
  155.     solicitud3=Solicitud()
  156.     solicitud3.ingresar_cliente(Cliente("Alvaro","Este"))
  157.     solicitudes.append(solicitud3)
  158.     solicitud4=Solicitud()
  159.     solicitud4.ingresar_cliente(Cliente("Maria","Oeste"))
  160.     solicitudes.append(solicitud4)
  161.     solicitud5=Solicitud()
  162.     solicitud5.ingresar_cliente(Cliente("Maria","Oeste"))
  163.     solicitudes.append(solicitud5)
  164.     solicitud6=Solicitud()
  165.     solicitud6.ingresar_cliente(Cliente("Maria","Oeste"))
  166.     solicitudes.append(solicitud6)
  167.     solicitud7=Solicitud()
  168.     solicitud7.ingresar_cliente(Cliente("Alejandra","Este"))
  169.     solicitudes.append(solicitud7)
  170.     solicitud8=Solicitud()
  171.     solicitud8.ingresar_cliente(Cliente("Maria","Oeste"))
  172.     solicitudes.append(solicitud8)
  173.     solicitud9=Solicitud()
  174.     solicitud9.ingresar_cliente(Cliente("Maria","Oeste"))
  175.     solicitudes.append(solicitud9)
  176.     solicitud10=Solicitud()
  177.     solicitud10.ingresar_cliente(Cliente("Maria","Oeste"))
  178.     solicitudes.append(solicitud10)
  179.  
  180. opcion="0"
  181. solicitudes=[]
  182. #Creamos solicitudes sin pasar por el Menu para poder probar mejor
  183. crear_solictud_ficticia()
  184. while opcion!="4":
  185.     menu()
  186.     opcion=input("Elija opcion: ")
  187.     if opcion=="1":
  188.         solicitud=Solicitud()
  189.         solicitud.ingresar_cliente(nueva_solicitud())
  190.         solicitudes.append(solicitud)
  191.     elif opcion=="2":
  192.         asignar_trabajos(solicitudes)
  193.     elif opcion=="3":
  194.         mostrar_solicitud()
Advertisement
RAW Paste Data Copied
Advertisement