-
Notifications
You must be signed in to change notification settings - Fork 0
/
facturarPrepago.py
159 lines (97 loc) · 4.69 KB
/
facturarPrepago.py
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
import Cliente as c
import Producto as p
import Prepago as pr
import Adiciona as a
import Consumo as co
from time import gmtime,strftime
import datetime
class facturarPrepago:
#Creamos un constructor standard de la clase facturarPrepago
def __init__(self):
self.control = None
#Funcion encargada de determinar si un producto esta afiliado a un plan prepago
def Es_Prepago(self,producto,lplan):
NombrePlan = producto.getNombre_Plan()
for p in lplan:
if ((NombrePlan == p.getNombre()) and (not (p.getIlimitado() in {0,1}))):
return True
return False
#Funcion encargada de devolver todos los productos prepago asoiados a un cliente
def Conseguir_Productos_Prepago(self,cliente,lproducto,lplan):
#Lista de productos a devolver
Productos = []
#Identificador del cliente
Identificador = cliente.getIde()
for producto in lproducto:
if (Identificador == producto.getId_Cliente()):
if (self.Es_Prepago(producto,lplan)):
Productos.append(producto)
return Productos
#Funcion que determina la renta del plan prepago asociado a un producto
def Renta_Prepago(self,producto,lplan):
renta = 0
for p in lplan:
if (producto.getNombre_Plan() == p.getNombre()):
renta = p.getRenta()
break
return renta
#Metodo que aplica la estrategia correspondiente.(facturar prepago)
#La funcion retornara el monto total, y un string que sera la impresion de la factura.
def aplicar(self,cliente,ladiciona,lconsumos,lincluPlan,lincluServ,lplan,lproductos,lservicios,mes,anio):
#Identificador del cliente que se desea facturar
Identificador = cliente.getIde()
#Productos prepago asociados al cliente
productos = self.Conseguir_Productos_Prepago(cliente,lproductos,lplan)
#variable que aloja temporalmente el plan asociado a cada producto
plan_producto = None
#Monto total de la factura en cuestion
costo_total = 0
#Informacion que se desea imprimir de la factura
Datos_Impresos = ""
Datos_Impresos += "Nombre: "+str(cliente.getNombre())+"\n"
Datos_Impresos += "Direccion: "+str(cliente.getDireccion())+"\n"
Datos_Impresos += "Periodo de facturacion (mes/anio): "+str(mes)+"/"+str(anio)+"\n"
Datos_Impresos += "Fecha de Emision: "+str(datetime.datetime.now())+"\n"
#COntador que se encarga de llevar un control de la cantidad de productos asociados a un cliente
contador = 1
#COntador que se encarga de llevar un control de los servicios adicionales (si es que estan) asociados a un producto
contador2 = 1
Datos_Impresos += "Productos Asociados: \n\n"
#Para cada uno de los productos asociados al cliente se consigue su informacion de facturacion
for producto in productos:
Datos_Impresos += ("%d. %s\n" % (contador,producto.getNombre()))
costo_producto = 0
adicionales_producto = []
#Conseguimos el plan asociado al producto
for p in lplan:
if (producto.getNombre_Plan() == p.getNombre()):
plan_producto = p
Datos_Impresos += ("Plan contratado: %s\n" % (p.getNombre()))
break
#Conseguimos el valor de la renta del plan asociado al prducto
renta = self.Renta_Prepago(producto,lplan)
Datos_Impresos += ("Costo: %d\n\n" % (renta))
costo_producto += renta
#Sacamos el nombre de todos los servicios adicionales asociados a cada producto
for adicionales in ladiciona:
if ((producto.getIdn() == adicionales.getId_Producto()) & (producto.getNombre() == adicionales.getNombre_Producto())):
adicionales_producto.append(adicionales)
if len(adicionales_producto)>0:
Datos_Impresos += "Servicios adicionales contratados: \n"
contador2 = 1
#Una vez encontrado el nombre de los servicios adicionales incluidos al producto, buscamos el costo de dichos servicios
for servi_adic in adicionales_producto:
#se debe buscar el costo del servicio adicional en la lista de servicios extras
for servicios in lservicios:
if (servi_adic.getNombre_Servicio() == servicios.getNombre()):
Datos_Impresos += "%d. %s\n" % (contador2,servi_adic.getNombre_Servicio())
Datos_Impresos += "Costo: %d\n" % (servicios.getCosto())
costo_producto += servicios.getCosto()
contador2 += 1
break
#Aumentamos en control de productos que se esta facturando
contador += 1
Datos_Impresos += "\nMonto total asociado al producto: %d\n\n" % (costo_producto)
costo_total += costo_producto
Datos_Impresos += "Monto total de la factura: %d\n\n" % (costo_total)
return(costo_total,Datos_Impresos)