Skip to content

Instantly share code, notes, and snippets.

@ricardosiri68
Forked from anonymous/gist:5653477
Last active December 17, 2015 18:29
Show Gist options
  • Save ricardosiri68/5653756 to your computer and use it in GitHub Desktop.
Save ricardosiri68/5653756 to your computer and use it in GitHub Desktop.
# -*- coding: utf-8 -*-
ayuda = """
"ADD":añadir una nueva empresa,
"USE":seleccionar una empresa de la lista por su nombre, USE [nombre de la empresa].
"VETERANO":obtener los datos del empleado con mayor antiguedad en la empresa.
"COMPARAR":comparar la empresa seleccionada con otra ingresando el nombre de esta ultima COMPARAR [nombre de la empresa]
"FUSIONAR":fusionar la empresa selaccionada con otra ingresando el nombre de esta ultima FUSIONAR [nombre de la empresa]
"SET":reescribir atributos de la empresa seleccionada [ opciones: NOMBRE, DESCRIPCION], SET [opcion] [valor]
"EMPRESAS":lista todas las empreas existentes
"DELETE": borra una empresa pasando el nombre como argumento. De no recibir argumento borra la empresa seleccionada, DELETE [nombre de la empresa]
# ----- EMPLEADOS ----
"ADD_EMPLEADO":añade empleados a la empresa seleccionada
"GET_EMPLEADO":selecciona un empleado de la empresa seleccionada
pasandole el DNI del empleado como parametro, GET_EMPLEADO [dni]
"SET_EMPLEADO":define atributos del empleado seleccionado [ opciones NOMBRE,DNI,EDAD,SUELDO,PUESTO,ANTIGUEDAD],
SET_EMPLEADO [opcion] [valor]
"DELETE_EMPLEADO":borra un empleado pasandole el dni como parametro, de no ingresar el dni borra el empleado que se encuentre seleccionado
"EMPLEADOS":lista todos los empleados de la empresa seleccionada
"AYUDA": imprime la lista de comandos
"QUIT": cierre total del sistema
"""
class Empleado:
def __init__(self, nombre, dni, edad, sueldo, antiguedad):
self.__nombre= nombre
self.__dni = dni
self.__edad = edad
self.__sueldo = sueldo
self.__antiguedad = antiguedad
self.__puesto = None
self.__puestos = ('Presidente', 'Gerente General',
'Gerente de Departamento', 'Jefe de Departamento', 'Empleado')
# ----- NOMBRE ----------
def setNombre(self, nombre):
nombre = reduce(lambda x,y: x+" "+y,nombre)
self.__nombre= nombre
def getNombre(self):
return self.__nombre
# ------- DNI -----------
def setDni(self, dni):
if dni[0].isdigit():
self.__dni= int(dni[0])
else:
print "EL DNI DEBE SER UN DIGITO"
def getDni(self):
return self.__dni
# ------- EDAD ----------
def setEdad(self, edad):
if edad[0].isdigit():
self.__edad = edad[0]
else:
print "LA EDAD DEBE SER UN DIGITO"
def getEdad(self):
return self.__edad
# ------- SUELDO --------
def setSueldo(self, sueldo):
if sueldo[0].isdigit():
self.__sueldo = sueldo[0]
else:
print "EL SUELDO DEBE SER UN DIGITO"
def getSueldo(self):
return self.__sueldo
# ------- PUESTO --------
def setPuesto(self,empresa, puesto):
if puesto in self.getPuestos():
if puesto == 'Presidente' and not empresa.hasPresidente():
self.__puesto = puesto
return "FELICITACIONES ES EL NUEVO PRECIDENTE"
elif puesto != 'Presidente':
self.__puesto = puesto
return "PUESTO OTORGADO"
else:
return "LA EMPRESA YA TIENE PRECIDENTE"
else:
return "NO EXISTE EL PUESTO PRETENDIDO"
def getPuesto(self):
return self.__puesto if self.__puesto else "----"
def getPuestos(self):
return self.__puestos
# ------- ANTIGUEDAD ----
def setAntiguedad(self, antiguedad):
if antiguedad[0].isdigit():
self.__antiguedad = antiguedad[0]
else:
print "LA ANTIGUEDAD DEBE SER UN DIGITO"
def getAntiguedad(self):
return self.__antiguedad
def __str__(self):
return "%s - %s" % (self.__nombre,self.__dni)
class Empresa:
def __init__(self, nombre, descripcion):
self.__nombre= nombre
self.__descripcion = descripcion
self.__empleados = set()
# ------- NOMBRE -------
def setNombre(self, nombre):
self.__nombre = reduce(lambda x,y: x+" "+y,nombre)
print "NOMBRE GUARDADO !!"
def getNombre(self):
return self.__nombre
# ------ DESCRIPCION ---
def setDescripcion(self, descripcion):
if type(descripcion) == type(""):
self.__descripcion = descripcion
else:
self.__descripcion = reduce(lambda y,x: y+" "+x,descripcion)
print "DESCRIPCION GUARDADA !!"
def getDescripcion(self):
return self.__descripcion
# ------ EMPLEADO ------
def addEmpleado(self,empleado):
self.__empleados.add(empleado)
def deleteEmpleado(self, empleado):
self.__empleados.remove(empleado)
def getEmpleado(self,i):
empleados = list(self.__empleados)
return empleados[i]
def getEmpleadosPuestos(self):
return [ empleado.getPuesto() for empleado in self.__empleados]
def hasPresidente(self):
return 'Presidente' in self.getEmpleadosPuestos()
def findPresidente(self):
for empleado in self.__empleados:
if 'Presidente' == empleado.getPuesto():
return empleado
return False
def getEmpleados(self):
return self.__empleados
def countEmpleados(self):
return len(self.__empleados)
def getEmpladoMoreOld(self):
# retorna el empleado con mas antiguedad
maxAntiguedad = 0
maxEmpleado = None
for empleado in self.__empleados:
if maxAntiguedad < empleado.getAntiguedad():
maxAntiguedad = empleado.getAntiguedad()
maxEmpleado = empleado
return maxEmpleado
def getEmpleadoByDni(self,dni):
for empleado in self.__empleados:
if empleado.getDni() == dni:
return empleado
return False
# ------- COMPARADORES ----
def getSumSueldos(self):
result = 0
for empleado in self.__empleados:
result += empleado.getSueldo()
return result
def compararEmpresa(self, empresa):
if self.getSumSueldos() > empresa.getSumSueldos():
return self
else:
return empresa
# ------- FUSION -----
def funsionarEmpresa(self, empresa):
presidenteA = self.findPresidente()
nombreA = self.getNombre()
descripcionA = self.getDescripcion()
presidenteB = empresa.findPresidente()
nombreB = empresa.getNombre()
descripcionB = empresa.getDescripcion()
if presidenteA and presidenteB:
if presidenteB.getAntiguedad() > presidenteA.getAntiguedad():
presidenteA.setPuesto(self,'Gerente General')
self.setNombre("%s & %s" % (nombreB,nombreA))
self.setDescripcion("%s.\n%s." % (descripcionB,descripcionA))
else:
presidenteB.setPuesto(self,'Gerente General')
self.setNombre("%s & %s" % (nombreA,nombreB))
self.setDescripcion("%s.\n%s." % (descripcionA,descripcionB))
else:
print "UNA DE LAS EMPRESAS NO TIENE PRESIDENTE VERIFIQUE SUS NOMINAS"
self.__empleados = self.__empleados.union(empresa.getEmpleados())
class Esso(Empresa):
def __init__(self):
Empresa.__init__(self,"esso","distribucion de hidrocarburos")
self.addEmpleado(Empleado("Richar",33,25,5000,4))
self.addEmpleado(Empleado("Noemi",22,64,5000,3))
self.addEmpleado(Empleado("Diego",11,17,4000,4))
class Edersa(Empresa):
def __init__(self):
Empresa.__init__(self,"edersa","tendido electrico")
self.addEmpleado(Empleado("Juan",23,24,5000,4))
self.addEmpleado(Empleado("Javier",33596925,33,2000,2))
self.addEmpleado(Empleado("Checho",33,50,7000,10))
class Main:
__empresas = set([Esso(),Edersa()])
__empresa = None
__empleado = None
def __init__(self):
self.__commands = {
"ADD":self.addEmpresa,
"USE":self.useEmpresa,
"VETERANO":self.getVeterano,
"COMPARAR":self.getComparar,
"FUSIONAR":self.setFusion,
"SET":self.setEmpresa,
"EMPRESAS":self.getEmpresas,
"DELETE": self.deleteEmpresa,
# ----- EMPLEADOS ----
"ADD_EMPLEADO":self.addEmpleado,
"GET_EMPLEADO":self.getEmpleado,
"SET_EMPLEADO":self.setEmpleado,
"DELETE_EMPLEADO":self.deleteEmpleado,
"EMPLEADOS":self.getEmpleados,
"AYUDA":self.ayuda,
"QUIT":quit,
}
print "Bienvenido al systema de gestion de empresas FUCKYOU"
while True:
if not self.__empresas:
print "aun no hay ninguna empresa definida"
self.addEmpresa("")
empresa = self.__empresa.getNombre() if self.__empresa else "-"
empleado = self.__empleado.getNombre() if self.__empleado else "-"
enter = raw_input("%s@%s>>" % (empleado,empresa))
command = enter.split()
if len(command) > 1:
if self.__commands.has_key(command[0]):
self.__commands[command[0]](command[1:])
else:
self.uknowCommandError(command[0])
elif len(command) > 0:
if self.__commands.has_key(command[0]):
self.__commands[command[0]]()
else:
self.uknowCommandError(command[0])
def ayuda(self):
global ayuda
print ayuda
def addEmpleado(self):
if self.__empresa:
msj = """
Ingrese los empleados con sus dados separados por coma (,) sin espacios
NOMBRE,DNI,EDAD,SUELDO,ANTIGUEDAD
<<< para salir ingrese \q >>>
"""
print msj
enter = raw_input(">")
while enter != "\q":
datos = enter.split(",")
if len(datos)==5:
nombre = datos[0]
try:
dni = int(datos[1])
edad = int(datos[2])
sueldo = float(datos[3])
antiguedad = int(datos[4])
self.__empresa.addEmpleado(Empleado(nombre,dni,edad,sueldo,antiguedad))
except:
print "DATOS MAL INGRESADOS INTENTE NUEVAMENTE"
else:
self.notArgumentsError()
enter = raw_input(">")
# ---- EMPLEADOS ------
def getEmpleados(self):
if self.__empresa:
print " NOMBRE - DNI - EDAD - SUELDO - PUESTO - ANTIGUEDAD "
for e in self.__empresa.getEmpleados():
print "%s%s%s$ %s%s%s" % (self.wrap(e.getNombre()),
self.wrap(e.getDni(),10),
self.wrap(e.getEdad(),6),
self.wrap(e.getSueldo(),9),
self.wrap(e.getPuesto(),20),
e.getAntiguedad()
)
else:
self.notEmpresaError()
def wrap(self, enter,num=15):
minLen = len(str(enter))
wp = " "*num
return "%s%s" % (enter,wp[minLen:])
def getEmpleado(self, enter= None):
if self.__empresa:
if enter:
empleado = self.__empresa.getEmpleadoByDni(int(enter[0]))
else:
empleado = None
print "DEBES INGRESAR EL DNI DEL EMPLEADO QUE QUIERES OBTENER"
if empleado:
self.__empleado = empleado
else:
self.notEmpresaError()
def setEmpleado(self, enter):
if self.__empleado:
if len(enter) > 1:
commands = {
"NOMBRE":self.__empleado.setNombre,
"DNI":self.__empleado.setDni,
"EDAD":self.__empleado.setEdad,
"SUELDO":self.__empleado.setSueldo,
"ANTIGUEDAD":self.__empleado.setAntiguedad,
"PUESTO":self.setPuesto
}
commands[enter[0]](enter[1:])
elif enter[0] == "PUESTO":
self.setPuesto()
else:
self.notArgumentsError()
else:
self.notEmpleadoError()
def setPuesto(self, enter = None):
if self.__empresa:
if self.__empleado:
if enter:
enter = reduce(lambda x,y: x+" "+y,enter)
print self.__empleado.setPuesto(self.__empresa,enter)
else:
print self.__empleado.getPuestos()
enter = raw_input("Ingrese el puesto pretendido eligiendo uno de la lista\n>")
print self.__empleado.setPuesto(self.__empresa,enter)
else:
self.notEmpleadoError()
else:
self.notEmpresaError()
def deleteEmpleado(self, enter = None):
if self.__empresa:
if not enter:
empleado = self.__empleado
if empleado:
self.__empresa.deleteEmpleado(empleado)
self.__empleado = None
else:
self.notEmpleadoError()
else:
empleado = self.__empresa.getEmpleadoByDni(int(enter[0]))
if empleado:
self.__empresa.deleteEmpleado(empleado)
else:
print "El DNI del empleado no coincide con ninguno en la nomina de la empresa"
else:
self.notEmpresaError()
# ------ EMPRESAS -------
def getEmpresa(self, nombre):
for empresa in self.__empresas:
if nombre == empresa.getNombre():
return empresa
def useEmpresa(self, enter):
if enter:
enter = reduce(lambda x,y: x+" "+y,enter)
if self.getEmpresa(enter):
self.__empresa = self.getEmpresa(enter)
self.__empleado = None
else:
self.unknowEmpresaError()
def addEmpresa(self, enter = None):
msj = """
Por fabor ingrese el nombre de una empresa
seguido de dos puntos (:) y un descriptivo:
<<< para salir ingrese \q >>>
"""
print msj
enter = raw_input(">")
while enter != "\q":
datos = enter.split(":")
if len(datos) > 1:
self.__empresas.add(Empresa(datos[0],datos[1]))
print "DATOS AÑADIDOS"
enter = raw_input(">")
def getEmpresas(self):
print "NOBMRE - CANT.EMPLEADOS -PRECIDENTE"
for empresa in self.__empresas:
presidente = empresa.findPresidente().getNombre() if empresa.findPresidente() else "----"
print "%s - %s - %s" % (empresa.getNombre(),empresa.countEmpleados(),presidente)
def getVeterano(self):
if self.__empresa:
empleado = self.__empresa.getEmpladoMoreOld()
print """
NOMBRE Y DNI: %s
EDAD: %s
SUELDO: $ %s
PUESTO: %s
ANTIGUEDAD: %s
""" % (empleado,empleado.getEdad(),empleado.getSueldo(),
empleado.getPuesto(),empleado.getAntiguedad())
def setEmpresa(self, enter):
if self.__empresa and enter:
commands = {
"NOMBRE":self.__empresa.setNombre,
"DESCRIPCION":self.__empresa.setDescripcion
}
if len(enter) > 1:
if commands.has_key(enter[0]):
commands[enter[0]](enter[1:])
else:
self.uknowCommandError(enter[0])
elif enter[0] == "DESCRIPCION":
self.setDescripcion()
else:
self.uknowCommandError(enter[0])
else:
self.notEmpresaError()
def setFusion(self, enter):
if self.__empresa:
data = reduce(lambda x,y: x+" "+y,enter)
empresa = self.getEmpresa(data)
if empresa:
self.__empresa.funsionarEmpresa(empresa)
self.__empresas.remove(empresa)
else:
self.unknowEmpresaError(data)
else:
self.notEmpresaError()
def getComparar(self, enter):
if self.__empresa:
data = reduce(lambda x,y: x+" "+y,enter)
empresa = self.getEmpresa(data)
if empresa:
mayor = self.__empresa.compararEmpresa(empresa)
print "EMPRESA MAS GRANDE:",mayor.getNombre().upper()
print self.__empresa.getNombre(),self.__empresa.getSumSueldos()
print empresa.getNombre(),empresa.getSumSueldos()
else:
self.unknowEmpresaError(data)
else:
self.notEmpresaError()
def setDescripcion(self):
print "Ingrse la descripcion de la empresa %s " % self.__empresa.getNombre()
descripcion = raw_input(">")
self.__empresa.setDescripcion(descripcion)
def deleteEmpresa(self, enter):
if enter:
emp = enter[0]
else:
emp = self.__empresa.getNombre()
self.__empresa = None
self.__empleado = None
empresas = list(self.__empresas)
for empresa in empresas:
if empresa.getNombre() == emp:
self.__empresas.remove(empresa)
print "EMPRESA %s BORRADA" % emp
# ------- ERRORS -----
def uknowCommandError(self,enter):
print "COMANDO DESCONOCIDO: <<<%s>>>" % enter
def unknowEmpresaError(self, enter):
print "EMPRESA <<<%s>>> DESCONOCIDA" % enter
def notArgumentsError(self):
print "FALTAN ARGUMENTOS PARA PODER EJECUTAR EL COMANDO"
def notEmpresaError(self):
print "NO SE ENCUENTRA DENTRO DE UNA EMPRESA"
def notEmpleadoError(self):
print "NO TIENE DEFINIDO UN EMPLEADO"
Main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment