-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdistribuirCuenta.py
More file actions
executable file
·185 lines (147 loc) · 6.34 KB
/
Copy pathdistribuirCuenta.py
File metadata and controls
executable file
·185 lines (147 loc) · 6.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# Un programa de consola para repartir una factura de almuerzo o algo parecido entre varias personas.
# Las funcionalidades que se espera que esto tenga:
# - Tiene que tener en cuenta que la factura podría estar en valor de precio por unidad o precio total.
# - Tiene que tener en cuenta que una o más personas pueden ser cumpleañeros y sus subcuentas tienen que dividirse entre las demás personas.
# - Tiene que permitir agregar o quitar elementos de la factura.
# - Tiene que permitir agregar o quitar personas de las subcuentas.
# - Tiene que sacar los impuestos de cada cuenta.
# - Tiene que imprimir cada factura de forma entendible.
# - Tiene que poder leer su información de facturación y distribución de un solo fichero.
# - Tiene que ser usable desde la consola de python, importable en forma de un módulo.
#
# Cosas deseables:
# - Que envíe la cuenta a través del correo.
# Esta es la segunda versión porque antes hice un intento que se llama distribucionCumpleano.py
# Este es el programa que va a hacer que los amigos de la oficina amen de nuevo la consola y el super lenguaje de programación python. Está pensado para que sea fácil de editar de entender y manipular.
import sys
import manejoEntradas
class articulo:
def __init__(self, nombre, cantidad, precio, esUnitario = False):
self.numero = 0
self.nombre = nombre
self.cantidad = cantidad
if esUnitario:
self.precio = precio
else:
self.precio = precio / self.cantidad
def calcularTotal(self):
return self.precio * self.cantidad
class factura:
def __init__(self):
self.articulos = []
self.impuesto = 0.0
self.preciosUnitarios = False
def imprimir(self):
total = 0.0
festejado = 0.0
impuestos = 0.0
print("Número Nombre Cantidad Precio")
print("------ ------------------------- -------- ------------------")
for art in self.articulos:
print("{0: >6} {1: <25} {2: >8} {3: >18.2f}".format(art.numero, art.nombre, art.cantidad, art.precio))
total += art.cantidad * art.precio
print(" -----------------------------------------------------")
if festejado > 0.0:
print(" aporte festejado {0: >18.2f}".format(festejado))
print(" Sub-Total {0: >18.2f}".format(total))
impuestos = (total * self.impuesto) / 100
print(" Impuestos {0: >18.2f}".format(impuestos))
total += impuestos
print(" Total {0: >18.2f}".format(total))
class distribucion:
"""Una instancia de esta clase representa el estado del programa."""
def __init__(self):
self.fichero = ""
self.factura = ""
self.cumpleaneros = []
self.personas = []
self.subfacturas = {}
self.cambios = False
def escribir(self):
if self.fichero == "":
print("No se puede escribir, no tengo un nombre de fichero")
return
pass
def leer(self):
if self.fichero == "":
print("No se puede leer, no tengo un nombre de fichero")
return
pass
def captura(mensaje):
respondida = False
while not respondida:
valor = input(mensaje + "(menu = ir a menu principal)")
if valor == "menu":
menuPrincipal()
else:
respondida = True
return valor
def capturarFichero():
fichero = capturar("¿Cual es el nombre del fichero para esta cuenta?(en blanco = no salvar)")
return fichero
def capturarListaArticulos(previos):
return None
def eliminarArticulo(previos):
return None
def capturarFactura():
opc = 0
opciones = ["introducir impuesto", "introducir si es precio unitario", "agregar items", "eliminar items", "factura lista"]
lafactura = factura()
lafactura.impuesto = leerEntradaEnteroRango("¿Cual es el valor del impuesto?", 0, 100, 28)
lafactura.preciosUnitarios = leerEntradaSiNo("¿La factura tiene precios unitarios?")
lafactura.articulos = capturarListaArticulos()
while opc != 5:
opc = leerEntradaOpcion(opciones, "Elige una opción")
if opc == 1:
lafactura.impuesto = leerEntradaEnteroRango("¿Cual es el valor del impuesto?", 0, 100, 28)
elif opc == 2:
lafactura.preciosUnitarios = leerEntradaSiNo("¿La factura tiene precios unitarios?")
elif opc == 3:
lafactura.articulos = capturarListaArticulos(lafactura.articulos)
elif opc == 4:
lafactura.articulos = eliminarArticulos(lafactura.articulos)
return lafactura
def menuPrincipal(esSubMenu = True):
global ladist
print("Menú principal")
opciones = ["nombre fichero", "introducir factura",
"introducir cumpleañeros", "introducir otras personas",
"hacer distribución", "leer fichero", "escribir fichero", "salir"]
leerEntradaOpcion(opciones, "Elige una opción")
if esSubMenu:
opciones.append("Cancelar")
if sel = 0:
ladist.fichero = capturarFichero()
elif sel = 1:
ladist.factura = capturarFactura()
elif sel == 2:
ladist.cumpleaneros = capturarPersonas()
elif sel == 3:
ladist.personas = capturarPersonas()
elif sel = 4:
ladist.subfacturas = hacerDistribucion()
elif sel == 5:
ladist.leer()
elif sel == 6:
ladist.escribir()
elif sel == 7:
sys.exit(0)
elif sel == 8:
return
pass
def modoWizard():
global ladist
print ("Modo Wizard")
ladist.fichero = capturarFichero()
ladist.factura = capturarFactura()
ladist.cumpleaneros = capturarPersonas()
ladist.personas = capturarPersonas()
ladist.subfacturas = hacerDistribucion()
print("¿Desea hacer algo más o salir? (No = salir/si = mostrar menú principal)")
if (resp = "si"):
menuPrincipal(False)
ladist = distribucion()
modoWizard()
// menuPrincipal(False)