Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement