Created
November 14, 2022 16:14
-
-
Save ignaciocassi/c99d53ecf8389514a1ef8e06268d737a to your computer and use it in GitHub Desktop.
cobranzas.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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