› Foros › PC › Software libre
from record import record
class Fecha(record):
dia=0
mes=0
anyo=0
class Factura(record):
num_factura=0
concepto=''
cliente=''
importe=0
fecha=Fecha()
pagado=''
#esta funcion pregunta la fecha al usuario al introducir la factura
def lee_fecha(fecha):
fecha.dia=int(raw_input('Dia: '))
fecha.mes=int(raw_input('Mes: '))
fecha.anyo=int(raw_input('Anyo: '))
#y esta la muestra
def muestra_fecha(fecha):
return '%d/%d/%d'%(fecha.dia,fecha.mes,fecha.anyo)
#esta funcion es la que sirve para introducir una factura nueva
def lee_factura(factura):
factura.num_factura=int(raw_input('Numero de factura: '))
factura.concepto=raw_input('Concepto: ')
factura.cliente=raw_input('Cliente: ')
factura.importe=int(raw_input('Importe: '))
factura.fecha=Fecha()
lee_fecha(factura.fecha)
factura.pagado=raw_input('Pagado [si/no]: ')
#esta funcion es la que muestra una factura en concreto
def muestra_factura(factura):
print 'Numero de factura:',factura.num_factura
print 'Concepto: ',factura.concepto
print 'Cliente: ',factura.cliente
print 'Importe: ',factura.importe
print 'Fecha: ',muestra_fecha(factura.fecha)
print 'Pagado: ',factura.pagado
def lee_lista_factura():
opcion='si'
lista=[]
while opcion.lower()=='si':
factura=Factura()
lee_factura(factura)
lista.append(factura)
opcion=raw_input('Desea intoducir una nueva factura [si/no]: ')
return lista
def muestra_lista(lista):
for factura in lista:
muestra_factura(factura)
print '*****'*6
def compara_fechas(fecha1,fecha2):
if fecha1.anyo>fecha2.anyo:
return 1
elif fecha1.anyo<fecha2.anyo:
return -1
elif fecha1.mes>fecha2.mes:
return 1
elif fecha1.mes<fecha2.mes:
return -1
elif fecha1.dia>fecha2.dia:
return 1
elif fecha1.dia<fecha2.dia:
return -1
else: return 0
def selecciona_facturas(lista,fecha):
anteriores=[]
for factura in lista:
if compara_fechas(factura.fecha,fecha)==-1:
anteriores.append(factura)
return anteriores
def importe_total(lista):
importe=0
for factura in lista:
importe+=factura.importe
print '- La suma de todos los importes no pagados es de %d euros'%(importe)
#esta funcion selecciona facturas no pagadas pero no superiores a un tiempo de un anyo
def factura_no_pagada(factura, fecha):
if factura.pagado.lower() !='si':
if ((fecha.anyo)-(factura.fecha.anyo))>1:
return 0
if ((fecha.anyo)-(factura.fecha.anyo))==0:
return 1
elif ((fecha.anyo)-(factura.fecha.anyo))==1:
if ((fecha.mes)-(factura.fecha.mes))>=1:
return 0
elif ((fecha.mes)-(factura.fecha.mes))<0:
return 1
elif ((fecha.mes)-(factura.fecha.mes))==0:
if ((fecha.dia)-(factura.fecha.dia))<0:
return 1
elif ((fecha.dia)-(factura.fecha.dia))>=0:
return 0
#esta funcion muestra las facturas no pagadas desde hace 1 anyo
def factura_vencida(factura, fecha):
if factura.pagado.lower()!='si':
if ((fecha.anyo)-(factura.fecha.anyo))>1:
return 1
elif ((fecha.anyo)-(factura.fecha.anyo))<=0:
return 0
elif ((fecha.anyo)-(factura.fecha.anyo))==1:
if ((fecha.mes)-(factura.fecha.mes))>=1:
return 1
elif ((fecha.mes)-(factura.fecha.mes))<=0:
if ((fecha.dia)-(factura.fecha.dia))>=0:
return 1
elif ((fecha.dia)-(factura.fecha.dia))<0:
return 0
[b]#esta funcion importa una lista
def carga_fichero():
fichero=raw_input('Nombre del fichero de entrada de datos: ')
fe=open(fichero,'r')
factura=Factura()
linea=fe.readline()
while linea!='':
factura.num_factura=int(linea[:-1])
print factura.num_factura
linea=fe.readline()
factura.concepto=linea[:-1]
print factura.concepto
linea=fe.readline()
factura.cliente=linea[:-1]
print factura.cliente
linea=fe.readline()
factura.importe=int(linea[:-1])
print factura.importe
linea=fe.readline()
linea=linea[:-1]
lista2=linea.split()
print lista2
factura.fecha.dia=int(lista2[0])
factura.fecha.mes=int(lista2[1])
factura.fecha.anyo=int(lista2[2])
linea=fe.readline()
factura.pagado=linea[:-1]
print factura.pagado
if factura_vencida(factura, fechanueva):
lista.append(factura)
linea=fe.readline()
fe.close
[/b]
#esta funcion es la que muestra el menu
def menu():
while 1:#asi creamos un bucle infinito
print '--------------ELIGE UNA OPCION--------------'
print '\n'
print '1) Anyadir una factura a la lista'
print '2) Mostrar todas las facturas con fecha de emision anterior a la fecha introducida'
print '3) Mostrar el importe total de las facturas no pagadas hasta la fecha'
print '4) Guardar lista de facturas a un fichero'
print '5) Importar lista de facturas desde un fichero'
print '6) Mostrar el importe total de las facturas vencidas'
print '7) Salir'
print '\n'
print('\n')
opcion=int(raw_input('¿Que deseas hacer? '))
print('\n')
#aqui empieza la opcion 1- anyadir factura
if opcion==1:
print('-Anyade una factura a la lista')
factura=Factura()
lee_factura(factura)
lista.append(factura)
#aqui empieza la opcion 2-mostrar facturas anteriores a la fecha actual
elif opcion==2:
print '...lista de facturas anteriores a ',muestra_fecha(fechanueva)
muestra_lista(selecciona_facturas(lista,fechanueva))
importe_total(lista)
#aqui empieza la opcion 3-mostrar facturas no pagadas
elif opcion==3:
nopagados=[]
for f in selecciona_facturas(lista,fechanueva):
if factura_no_pagada(f, fechanueva):
nopagados.append(f)
muestra_lista(nopagados)
importe_total(nopagados)
[b] #aqui empieza la opcion 4- guardar facturas en un fichero
elif opcion==4:
fichero=raw_input('Nombre del fichero de salida de datos: ')
fs=open(fichero,'w')
for factura in lista:
fs.write('%d\n'%(factura.num_factura))
fs.write('%s\n'%(factura.concepto))
fs.write('%s\n'%(factura.cliente))
fs.write('%d\n'%(factura.importe))
fs.write('%d '%(factura.fecha.dia))
fs.write('%d '%(factura.fecha.mes))
fs.write('%s\n'%(factura.fecha.anyo))
fs.write('%s\n'%(factura.pagado))
fs.close
[/b]
#aqui empieza la opcion 5- importar facturas desde un fichero
elif opcion==5:
carga_fichero()
#opcion 6-mostrar facturas vencidas
elif opcion==6:
vencidas=[]
for factura in lista:
if factura_vencida(factura, fechanueva):
vencidas.append(factura)
muestra_lista(vencidas)
importe_total(vencidas)
#opcion 7, salir del programa
elif opcion==7:
print 'Gracias por usar este programa.'
break
print('-Por favor, antes de utilizar el programa introduce la fecha de hoy')
fechanueva=Fecha()
lee_fecha(fechanueva)
fechaintroducida=True
print 'La fecha introducida es: ',muestra_fecha(fechanueva)
lista=[]
print '\n------Bienvenido al gestor de facturas------'
menu()