SHOW:
|
|
- or go back to the newest paste.
1 | # -*- coding: utf-8 -*- | |
2 | ||
3 | import webbrowser | |
4 | ||
5 | from string import Template | |
6 | from constantes import * | |
7 | ||
8 | from helpers import leer_archivo, mostrar_texto | |
9 | ||
10 | ||
11 | class ModeloDePresupuesto: | |
12 | ||
13 | # Datos comerciales | |
14 | titulo = "PRESUPUESTO" | |
15 | encabezado_nombre = "Eugenia Bahit" | |
16 | encabezado_web = "www.eugeniabahit.com.ar" | |
17 | encabezado_email = "mail@mail.com" | |
18 | fecha = FECHA_ACTUAL | |
19 | vencimiento = FECHA_CADUCIDAD | |
20 | ||
21 | # Datos impositivos | |
22 | ALICUOTA_IVA = 21 | |
23 | ||
24 | # Propiedades relativas al formato | |
25 | html = TEMPLATE_HTML | |
26 | txt = TEMPLATE_TXT | |
27 | ||
28 | # Planes y servicios - Capítulo 3 | |
29 | planes = ('corporativo', 'personal', 'mantenimiento') | |
30 | corporativo = ['Diseño Sitio Web corporativo', 7200] | |
31 | personal = ['Diseño Sitio Web básico', 4500] | |
32 | mantenimiento = ['Mantenimiento sitio Web (mensual)', 500] | |
33 | lista_precios = {'corporativo':corporativo, | |
34 | 'personal':personal, | |
35 | 'mantenimiento':mantenimiento} | |
36 | ||
37 | # Setear los datos del cliente | |
38 | def set_cliente(self): | |
39 | self.empresa = raw_input(EMPRESA) | |
40 | self.cliente = raw_input(NOMBRE_CLIENTE) | |
41 | ||
42 | # Seleccionar tipo de plan | |
43 | def seleccionar_plan(self): | |
44 | texto_a_mostrar = ELEGIR_PLAN | |
45 | codigo_plan = 0 | |
46 | ||
47 | for plan in self.planes: | |
48 | texto_a_mostrar += '(%d)%s ' % (codigo_plan, plan) | |
49 | - | codigo_plan = codigo_plan+1 |
49 | + | codigo_plan = codigo_plan + 1 |
50 | ||
51 | texto_a_mostrar += ": " | |
52 | elegir_plan = raw_input(texto_a_mostrar) | |
53 | ||
54 | # Capturando excepciones (Capítulo 5) | |
55 | try: | |
56 | elegir_plan = int(elegir_plan) | |
57 | self.plan = self.planes[elegir_plan] | |
58 | except (ValueError, IndexError): | |
59 | mostrar_texto(DATO_INCORRECTO) | |
60 | self.seleccionar_plan() | |
61 | else: | |
62 | datos_servicio = self.lista_precios[self.planes[elegir_plan]] | |
63 | self.servicio = datos_servicio[0] | |
64 | importe = datos_servicio[1] | |
65 | self.importe = float(importe) | |
66 | ||
67 | # Calcular IVA | |
68 | def calcular_iva(self): | |
69 | self.monto_iva = self.importe * self.ALICUOTA_IVA / 100 | |
70 | ||
71 | # Calcula el monto total del presupuesto | |
72 | def calcular_neto(self): | |
73 | self.neto = self.importe + self.monto_iva | |
74 | ||
75 | # Armar numero de presupuesto | |
76 | def armar_numero_presupuesto(self): | |
77 | contador = open('contador.txt', 'r+') | |
78 | ultimo_num = int(contador.read()) | |
79 | - | nuevo = ultimo_num+1 |
79 | + | nuevo = ultimo_num + 1 |
80 | contador.seek(0) | |
81 | nuevo = str(nuevo) | |
82 | contador.write(nuevo) | |
83 | contador.close() | |
84 | self.numero_presupuesto = nuevo | |
85 | ||
86 | # Guardar presupuesto en archivo | |
87 | def guardar_presupuesto(self, txt, html): | |
88 | respuesta = raw_input(GUARDAR_ARCHIVO) | |
89 | # Si el usuario indica "n" | |
90 | if respuesta.lower() == 'n': | |
91 | mostrar_texto(txt) | |
92 | # Si en cambio el usuario indica "s" | |
93 | elif respuesta.lower() == 's': | |
94 | filename = 'presupuestos/' + self.numero_presupuesto + '.html' | |
95 | presupuesto = open(filename, 'w') | |
96 | presupuesto.write(html) | |
97 | presupuesto.close() | |
98 | mostrar_texto(CONFIRM_ARCHIVO_GUARDADO) | |
99 | self.mostrar_presupuesto(filename) | |
100 | # Sino | |
101 | else: | |
102 | mostrar_texto(OPCION_INCORRECTA) | |
103 | self.guardar_presupuesto(txt, html) | |
104 | ||
105 | # Mostrar presupuesto en navegador | |
106 | def mostrar_presupuesto(self, archivo): | |
107 | respuesta = raw_input(MOSTRAR_PRESUPUESTO) | |
108 | if respuesta.lower() == 's': | |
109 | webbrowser.open(BASE_DIR + "/" + archivo) | |
110 | ||
111 | # Armar el presupuesto | |
112 | def armar_presupuesto(self): | |
113 | """Esta función se encarga de armar todo el presupuesto""" | |
114 | self.armar_numero_presupuesto() | |
115 | txt = leer_archivo(self.txt) | |
116 | html = leer_archivo(self.html) | |
117 | ||
118 | # Armo un diccionario con todos los datos que utilizo en el template | |
119 | diccionario = dict(nombre=self.encabezado_nombre, | |
120 | web=self.encabezado_web, | |
121 | email=self.encabezado_email, | |
122 | titulo=self.titulo, | |
123 | numero=self.numero_presupuesto, | |
124 | fecha=self.fecha, | |
125 | empresa=self.empresa, | |
126 | cliente=self.cliente, | |
127 | plan=self.plan, | |
128 | servicio=self.servicio, | |
129 | precio=self.importe, | |
130 | iva=self.monto_iva, | |
131 | total=self.neto, | |
132 | limite=self.vencimiento) | |
133 | ||
134 | txt = Template(txt).safe_substitute(diccionario) | |
135 | html = Template(html).safe_substitute(diccionario) | |
136 | self.guardar_presupuesto(txt, html) | |
137 | ||
138 | # Método constructor | |
139 | def __init__(self): | |
140 | mostrar_texto(ENCABEZADO_MODULO) | |
141 | self.set_cliente() | |
142 | self.seleccionar_plan() | |
143 | self.calcular_iva() | |
144 | self.calcular_neto() | |
145 | self.armar_presupuesto() | |
146 | ||
147 | ||
148 | # Instanciar clase | |
149 | presupuesto = ModeloDePresupuesto() |