Ejercicio: 2Eva2018TI_T2 Pago nomina mensual
Propuesta de solución en Python:
archivo de prueba: meshoratrabajada.txt
# CCPG1001-Fundamentos de programación FIEC-ESPOL
# 2Eva_IT2018_T2 Pago nomina mensual
# Propuesta modo simple pero larga
# Tarea: Proponer simplificaciones a los algoritmos
def calcularHoras(linea):
linea = linea.strip('\n')
partes = linea.split(',')
fecha = partes[0]
dia = int(partes[1])
esferiado = partes[2]
ID = partes [3]
nombre = partes[4]
sucursal = partes[5]
ciudad = partes[6]
horas = int(partes[7])
trabajado = [ID,ciudad, 0,0,0,0]
if (esferiado=='Si'):
trabajado[5] = horas
else:
if (dia>=6):
trabajado[4] = horas
else:
if (horas<=8):
trabajado[2] = horas
else:
trabajado[2] = 8
trabajado[3] = horas-8
return(trabajado)
def leerData(nomA):
total = {}
archivo = open(nomA,'r')
# factores
linea = archivo.readline()
linea = linea.strip('\n')
partes = linea.split(',')
VH = float(partes[1])
linea = archivo.readline()
linea = linea.strip('\n')
partes = linea.split(',')
HR = float(partes[1])
linea = archivo.readline()
linea = linea.strip('\n')
partes = linea.split(',')
HER = float(partes[1])
linea = archivo.readline()
linea = linea.strip('\n')
partes = linea.split(',')
HFDS = float(partes[1])
linea = archivo.readline()
linea = linea.strip('\n')
partes = linea.split(',')
HF = float(partes[1])
# encabezado
linea = archivo.readline()
# datos
linea = archivo.readline()
parafecha = linea.split(',')
parafecha = parafecha[0].split('-')
mes = parafecha[1]
anio = parafecha[2]
while not(linea==''):
trabajado = calcularHoras(linea)
ID = trabajado[0]
ciudad = trabajado[1]
normal = trabajado[2]*VH*HR
extra = trabajado[3]*VH*HER
finsem = trabajado[4]*VH*HFDS
feriado = trabajado[5]*VH*HF
if not(ciudad in total):
total[ciudad] = {ID:{'HR': normal,
'HER': extra,
'HFDS': finsem,
'HF': feriado}}
else:
if not(ID in total[ciudad]):
total[ciudad][ID] = {'HR': normal,
'HER': extra,
'HFDS': finsem,
'HF': feriado}
else:
total[ciudad][ID]['HR'] = total[ciudad][ID]['HR'] + normal
total[ciudad][ID]['HER'] = total[ciudad][ID]['HER'] + extra
total[ciudad][ID]['HFDS'] = total[ciudad][ID]['HFDS'] + finsem
total[ciudad][ID]['HF'] = total[ciudad][ID]['HF'] + feriado
linea = archivo.readline()
archivo.close()
pagonomina = (total,mes,anio)
return(pagonomina)
def generareporte(nomA):
pagonomina = leerData(nomA)
total = pagonomina[0]
mes = pagonomina[1]
anio = pagonomina[2]
ciudad = list(total.keys())
for lugar in ciudad:
narchivo = lugar+mes+'-'+anio+'.txt'
archivo = open(narchivo,'w')
registro = total[lugar]
# Tarea: Poner encabezado
for empleado in registro:
linea = empleado +','+str(total[lugar][empleado]['HR'])
extra = total[lugar][empleado]['HER']+ total[lugar][empleado]['HFDS'] +total[lugar][empleado]['HF']
linea = linea+','+str(extra)+'\n'
archivo.write(linea)
archivo.close()
mensaje = 'archivo guardado'
return(mensaje)
# PROGRAMA PRUEBA -------------------
# INGRESO
nomA = 'meshoratrabajada.txt'
# PROCEDIMIENTO
mensaje = generareporte(nomA)
# SALIDA
print(mensaje)