Skip to content

Instantly share code, notes, and snippets.

@ignaciocassi
Created November 14, 2022 16:14
Show Gist options
  • Save ignaciocassi/c99d53ecf8389514a1ef8e06268d737a to your computer and use it in GitHub Desktop.
Save ignaciocassi/c99d53ecf8389514a1ef8e06268d737a to your computer and use it in GitHub Desktop.
cobranzas.py
def generar_archivos(nombre_caja, empresas):
cajas = ["CAJA1.txt",
"CAJA2.txt"]
if nombre_caja in cajas:
print("Comenzando registro de cobranzas en " + nombre_caja.strip(".txt") + ".")
try:
# Numero de operacion
num_operacion = 1
nombre = ingresa_valida_nombre()
arch = open("C:\\Users\\Nacho\\Desktop\\Facultad\\Progra1-2022\\TPO\\" + nombre_caja, "wt")
while nombre != "-1":
importe = ingresa_valida_importe()
empresa_recaudadora = ingresa_valida_empresa_recaudadora(empresas, nombre, importe)
if empresa_recaudadora != "-2":
arch.write(
str(num_operacion) + ";" + nombre + ";" + str(importe) + ";" + empresa_recaudadora + "\n")
num_operacion += 1
nombre = ingresa_valida_nombre()
except IOError:
print("Error al intentar abrir el archivo.")
finally:
arch.close()
else:
print("Error el nombre de la caja no fue reconocido, reintente... ")
def ingresa_valida_empresa_recaudadora(empresas, nombre, importe):
empresa_recaudadora = input("Ingrese el codigo de la empresa recaudadora: ")
while empresa_recaudadora not in empresas and empresa_recaudadora != "-2":
print("Error el codigo de empresa no fue reconocido, reintente... ")
registrar_error(nombre, importe)
empresa_recaudadora = "-2"
return empresa_recaudadora
def registrar_error(nombre, importe):
try:
arch = open("C:\\Users\\Nacho\\Desktop\\Facultad\\Progra1-2022\\TPO\\ARCHIVO ERROR.txt", "a")
arch.write(nombre + ";" + str(importe) + "\n")
except IOError:
print("Error al intentar abrir el archivo.")
finally:
arch.close()
def ingresa_valida_nombre():
nombre = input("Ingrese el nombre de la persona: ")
while not nombre.isalpha() and nombre != "-1":
print("El nombre solo puede contener letras, reintente... ")
nombre = input("Ingrese el nombre de la persona: ")
return nombre
def ingresa_valida_importe():
importe_cadena = input("Ingrese el importe a cobrar: ")
while not importe_cadena.isdecimal() or int(importe_cadena) <= 0:
print("El importe debe ser un numero entero positivo, reintente... ")
importe_cadena = input("Ingrese el importe a cobrar: ")
return int(importe_cadena)
def obtener_importe_total_recaudado(nombre_caja):
try:
arch = open("C:\\Users\\Nacho\\Desktop\\Facultad\\Progra1-2022\\TPO\\" + nombre_caja, "rt")
linea = arch.readline()
total_recaudado = 0
while linea:
linea = linea.strip("\n")
campos = linea.split(";")
importe = int(campos[2])
total_recaudado += importe
linea = arch.readline()
print("El importe total recaudado en la caja " + nombre_caja.strip(".txt") + " fue de de: $" + str(
total_recaudado))
return total_recaudado
except IOError:
print("Error al intentar abrir el archivo.")
finally:
arch.close()
def informar_recaudacion_total(total_recaudado):
print("El total recaudado en las cajas fue de $" + str(total_recaudado) + ".")
def generar_recaudaciones_por_empresa(empresas, cajas):
for empresa in empresas:
recaudacion = []
for caja in cajas:
try:
arch = open("C:\\Users\\Nacho\\Desktop\\Facultad\\Progra1-2022\\TPO\\" + caja, "rt")
linea = arch.readline()
while linea:
linea = linea.strip("\n")
campos = linea.split(";")
empresa_actual = campos[3]
recaudacion_actual = int(campos[2])
if empresa == empresa_actual:
recaudacion.append(linea)
linea = arch.readline()
except IOError:
print("Error al intentar abrir el archivo")
finally:
arch.close()
try:
arch = open("C:\\Users\\Nacho\\Desktop\\Facultad\\Progra1-2022\\TPO\\RECA_" + empresa + ".txt", "wt")
for registro in recaudacion:
campos = registro.split(";")
arch.write(";".join(campos[0:3]) + "\n")
except IOError:
print("Error al intentar abrir el archivo.")
finally:
arch.close()
def obtener_empresas_maximos_comprobantes(empresas, cajas):
empresas_comprobantes = dict()
for caja in cajas:
try:
arch = open("C:\\Users\\Nacho\\Desktop\\Facultad\\Progra1-2022\\TPO\\" + caja, "rt")
linea = arch.readline()
while linea:
linea = linea.strip("\n")
campos = linea.split(";")
empresa_actual = campos[3]
if empresa_actual not in empresas_comprobantes.keys():
empresas_comprobantes[empresa_actual] = 1
else:
empresas_comprobantes[empresa_actual] += 1
linea = arch.readline()
except IOError:
print("Error al intentar abrir el archivo")
finally:
arch.close()
informar_empresas_maximos_comprobantes(empresas_comprobantes)
def informar_empresas_maximos_comprobantes(empresas_comprobantes):
max_comprobantes = max(empresas_comprobantes.values())
print("Las empresas con maxima cantidad de comprobantes (max_comprobantes = " + str(max_comprobantes) + ") son: ")
for empresa in empresas_comprobantes.keys():
if empresas_comprobantes.get(empresa) == max_comprobantes:
print("Empresa " + empresa)
def generar_pagos_por_empresa(cajas):
pagos_empresa = dict()
for caja in cajas:
try:
arch = open("C:\\Users\\Nacho\\Desktop\\Facultad\\Progra1-2022\\TPO\\" + caja, "rt")
linea = arch.readline()
while linea:
linea = linea.strip("\n")
campos = linea.split(";")
empresa = campos[3]
if empresa not in pagos_empresa:
pagos_empresa[empresa] = 0
if empresa == "COD001":
pagos_empresa[empresa] += 5
elif empresa == "COD002":
pagos_empresa[empresa] += 10
elif empresa == "COD003" or empresa == "COD004":
pagos_empresa[empresa] += 25
linea = arch.readline()
except IOError:
print("Error al intentar abrir el archivo.")
finally:
arch.close()
return pagos_empresa
def informar_pagos_empresa(pagos_empresa):
print("Los pagos correspondientes a cada empresa son: ")
for empresa in pagos_empresa.keys():
print("Empresa: " + empresa + " Monto: " + str(pagos_empresa[empresa]))
def __main__():
empresas = ["COD001",
"COD002",
"COD003",
"COD004"]
cajas = ["CAJA1.txt",
"CAJA2.txt"]
# Generar archivos cobranzas
total_recaudado_caja = 0
for caja in cajas:
generar_archivos(caja, empresas)
total_recaudado_caja += obtener_importe_total_recaudado(caja)
informar_recaudacion_total(total_recaudado_caja)
obtener_empresas_maximos_comprobantes(empresas, cajas)
pagos_empresa = generar_pagos_por_empresa(cajas)
informar_pagos_empresa(pagos_empresa)
if __name__ == "__main__":
__main__()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment