View difference between Paste ID: G3y5r1yP and PxK4aUuq
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()