Пример #1
0
 def calcular_exceso_medio_plazo_cobro(self):
     """
     Calcula el exceso medio de los cobros sobre los vencimientos de las
     facturas del cliente.
     Devuelve None si no hay datos suficientes para calcular.
     """
     plazos = []
     for f in self.facturasVenta:
         plazo = f.get_plazo_pagado()
         if plazo != None:
             plazo_ini = f.get_plazo_pago(default = 0)
             try:
                 plazo -= plazo_ini
             except TypeError:   # plazo_ini es una lista de días.
                 plazo_ini.sort()
                 plazo -= plazo_ini[-1]  # Me quedo con el día más lejano
                     # porque seguramente lo demás sea el día de pago, no
                     # el plazo entre vencimientos.
             plazos.append(plazo)
     if plazos:
         res = utils.media(plazos)
     else:
         res = None
     return res
Пример #2
0
 def rellenar_widgets(self):
     """
     Introduce la información del objeto actual
     en los widgets.
     No se chequea que sea != None, así que
     hay que tener cuidado de no llamar a 
     esta función en ese caso.
     """
     if self.objeto:
         self.wids['e_numalbaran'].set_text(self.objeto.numalbaran)
     referencias = {}    # Valores de referencia por producto.
     ## TODO: Refactorizar esto para sacar los cálculos de la capa vista.
     ##       Se debe poder calcular los valores de impresión desde 
     ##       cualquier parte de la aplicación sin tener que abrir esta 
     ##       ventana.
     # Rescato lotes y partidas.
     productos = {}
     for articulo in self.objeto.articulos:
         producto = articulo.productoVenta
         for atributo in ("lote", "loteCem", "partida", "partidaCem"):
             lote_o_partida = getattr(articulo, atributo)
             try:
                 if (lote_o_partida 
                     and lote_o_partida not in productos[producto]):
                     productos[producto].append(lote_o_partida)
             except KeyError:
                 productos[producto] = [lote_o_partida]
         # Valores de referencia.
         if producto.camposEspecificosRolloID:
             try:
                 fpar = articulo.partida.get_fecha_fabricacion()
                 cer = producto.camposEspecificosRollo.buscar_marcado(fpar)
                 if cer == None:
                     raise ValueError
             except (AttributeError, ValueError):
                 cer = producto.camposEspecificosRollo
             referencias[producto] = {
                 "Resistencia longitudinal": 
                     [cer.valorPruebaLongitudinalInf, 
                      cer.estandarPruebaLongitudinal, 
                      cer.valorPruebaLongitudinalSup],
                 "Alargamiento longitudinal": 
                     [cer.valorPruebaAlargamientoLongitudinalInf, 
                      cer.estandarPruebaAlargamientoLongitudinal, 
                      cer.valorPruebaAlargamientoLongitudinalSup], 
                 "Resistencia transversal": 
                     [cer.valorPruebaTransversalInf, 
                      cer.estandarPruebaTransversal, 
                      cer.valorPruebaTransversalSup], 
                 "Alargamiento transversal": 
                     [cer.valorPruebaAlargamientoTransversalInf, 
                      cer.estandarPruebaAlargamientoTransversal, 
                      cer.valorPruebaAlargamientoTransversalSup], 
                 "Resistencia a la compresión": 
                     [cer.valorPruebaCompresionInf, 
                      cer.estandarPruebaCompresion, 
                      cer.valorPruebaCompresionSup], 
                 "Perforación": 
                     [cer.valorPruebaPerforacionInf, 
                      cer.estandarPruebaPerforacion, 
                      cer.valorPruebaPerforacionSup], 
                 "Espesor": 
                     [cer.valorPruebaEspesorInf, 
                      cer.estandarPruebaEspesor,  
                      cer.valorPruebaEspesorSup], 
                 "Permeabilidad": 
                     [cer.valorPruebaPermeabilidadInf, 
                      cer.estandarPruebaPermeabilidad, 
                      cer.valorPruebaPermeabilidadSup], 
                 "Apertura de poros": 
                     [cer.valorPruebaPorosInf, 
                      cer.estandarPruebaPoros, 
                      cer.valorPruebaPorosSup], 
                 "Gramaje": 
                     [cer.valorPruebaGramajeInf, 
                      cer.estandarPruebaGramaje, 
                      cer.valorPruebaGramajeSup], 
                 "Punzonado piramidal": 
                     [cer.valorPruebaPiramidalInf, 
                      cer.estandarPruebaPiramidal, 
                      cer.valorPruebaPiramidalSup]} 
         elif producto.camposEspecificosBalaID:
             ceb = producto.camposEspecificosBala
             referencias[producto] = {
                 "Media título": [ceb.dtex, 
                                  ceb.dtex, 
                                  ceb.dtex]}     # Es el único valor que se 
                                                 # puede comparar.
     # Calculo medias.
     valores = {}
     for p in productos:
         valores[p] = {}
         for lote_o_partida in productos[p]:
             if isinstance(lote_o_partida, pclases.Lote):
                 descripciones_campo = (("Tenacidad", "tenacidad"), 
                                        ("Elongación", "elongacion"), 
                                        ("Encogimiento", "encogimiento"),
                                        ("% Grasa", "grasa"), 
                                        ("Media título", "mediatitulo"))
             elif isinstance(lote_o_partida, pclases.LoteCem):
                 descripciones_campo = (("Tenacidad", "tenacidad"), 
                                        ("Elongación", "elongacion"), 
                                        ("Encogimiento", "encogimiento"),
                                        ("% Grasa", "grasa"), 
                                        ("% Humedad", "humedad"), 
                                        ("Media título", "mediatitulo"))
             elif isinstance(lote_o_partida, pclases.Partida):
                 descripciones_campo = (("Gramaje", "gramaje"), 
                             ("Resistencia longitudinal", "longitudinal"), 
                             ("Alargamiento longitudinal", "alongitudinal"), 
                             ("Resistencia transversal", "transversal"), 
                             ("Alargamiento transversal", "atransversal"), 
                             ("Resistencia a la compresión", "compresion"), 
                             ("Perforación", "perforacion"), 
                             ("Espesor", "espesor"), 
                             ("Permeabilidad", "permeabilidad"), 
                             ("Apertura de poros", "poros"), 
                             ("Punzonado piramidal", "piramidal")) 
             elif isinstance(lote_o_partida, pclases.PartidaCem):
                 descripciones_campo = []
             for descripcion, campo in descripciones_campo:
                 valor = getattr(lote_o_partida, campo)
                 if valor is None or not lote_o_partida.esta_analizada():
                     # DONE: En teoría si no está analizada debería buscar 
                     # la partida anterior o posterior del mismo producto 
                     # que estuviera analizada (jmadrid). 
                     # Al final no. Me ha enviado otro correo con el nuevo 
                     # criterio para la impresión de valores nulos.
                     continue    # Ignoro valores nulos.
                 try:
                     valores[p][descripcion].append(valor)
                 except KeyError:
                     valores[p][descripcion] = [valor]
     # Y ahora sustituyo la lista de valores por su media:
     for p in valores:
         for campo in valores[p]:
             valores[p][campo] = utils.media(valores[p][campo])
     self.rellenar_tabla_datos(valores, referencias)
     self.rellenar_info_albaran(productos)
     self.wids['tv_datos'].expand_all()