Guest User

PRESUPUESTO REFACTORING

a guest
Nov 15th, 2011
214
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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
  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
  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()
  150.  
RAW Paste Data