def agregar_factura_de_abono(self, f, model, total, vencido):
     vtos = []
     vtos_emparejados = f.emparejar_vencimientos()
     for vto in vtos_emparejados['vtos']:
         try:
             cobro = vtos_emparejados[vto][0]
         except IndexError:
             cobro = None
         vtos.append([vto, None, cobro])
         # OJO: A diferencia que con el emparejar_vencimientos de pclases.FacturaCompra, no debería haber más de un 
         # cobro por vencimiento en los abonos ni haber cobros sin vencimientos (clave None del diccionario), ya 
         # que los vencimientos son ficticios, no se corresponden con ningún registro de la BD (es una clase "closured") 
         # y se crean sobre la marcha en la función. Como tampoco se permite asociar una misma factura de abono a más 
         # de un cobro (bien en factura o bien en pagaré), nunca habrá más de un "vencimiento" por abono.
     # XXX: Hasta aquí lo que hace el preparar_vencimientos con las facturasVenta. Ahora a agregarlo al TreeView.
     vtos = [v for v in vtos if (v[2]==None or (v[2].pagareCobro != None and v[2].pagareCobro.pendiente)) and v[0] != None]
         # Todos los que no tienen pagaré o si lo tienen, que esté pendiente
         # y los que sean realmente vencimientos (hay entradas en vtos que pueden tener v[0] a None).
     for v in vtos:
         if v[2]!=None and v[2].pagareCobro!=None:
             pagare = v[2].pagareCobro
         else:
             pagare = None
         fechavto = pagare and pagare.fechaCobro or v[0].fecha   # Fecha del vencimiento final: la del vencimiento de la factura
                                                                 # si no tiene pagaré o la del vencimiento del pagaré que cubre
                                                                 # el vencimiento de la factura.
         mes = utils.corregir_nombres_fecha(fechavto.strftime("%B '%y"))
         primero_mes = mx.DateTime.DateTimeFrom(day = 1, month = fechavto.month, year = fechavto.year)
         try:
             rowpadre = [r for r in model if r[2] == mes][0]
             padre = rowpadre.iter
         except IndexError:
             padre = model.append(None, ("", utils.str_fecha(primero_mes), mes, 0.0, "", "", 0))
         factura = v[0].get_factura_o_prefactura()
         model.append(padre, ("%s (%s)" % (factura.numfactura, factura.cliente and factura.cliente.nombre or "Sin cliente"), 
                              utils.str_fecha(factura.fecha), 
                              utils.str_fecha(v[0].fecha),
                              v[0].importe,
                              pagare and "%s (%s)" % (pagare.codigo, utils.str_fecha(pagare.fechaRecepcion)) or '',
                              pagare and utils.str_fecha(pagare.fechaCobro) or '',
                              pagare and pagare.id or v[0].id)
                      )
         total += v[0].importe
         model[padre][3] += v[0].importe
         if pagare:
             if pagare.fechaCobro <= mx.DateTime.localtime():
                 vencido += v[0].importe
         else:
             if v[0].fecha <= mx.DateTime.localtime():
                 vencido += v[0].importe
         # NOTA: Si la fecha del vencimiento ha vencido pero la del pagaré no, no la cuento como pendiente.
     return total, vencido
Example #2
0
def build_label_dia(dia, mes, anno):
    """
    Devuelve un gtk.Label de una cadena "Nombredía, día" con el 
    nombre del día del mes y año recibido.
    """
    diafecha = mx.DateTime.DateTimeFrom(day = dia, month = mes, year = anno)
    texto_label = utils.corregir_nombres_fecha(diafecha.strftime("%A, %d"))
    # En windows las tildes dentro de etiquetas small no se muestran bien. ¿BUG de GTK?
#    if os.name == 'nt':
#        texto_label = texto_label.replace("á", "a")
#        texto_label = texto_label.replace("é", "e")
    label = gtk.Label("<small>%s</small>" % (texto_label))
    label.set_use_markup(True)
    label.set_justify(gtk.JUSTIFY_RIGHT)
    label.set_property('xalign', 1)
    return label
def build_pie(datos_de_la_empresa):
    estilo_pie = ParagraphStyle("Estilo pie", 
                                parent = estilos["Normal"])
    estilo_pie.alignment = enums.TA_CENTER
    texto_fecha = Paragraph("En %s a %s" % (
                        datos_de_la_empresa.ciudad, 
                        utils.corregir_nombres_fecha(
                          mx.DateTime.localtime().strftime("%d de %B de %Y"))), 
                      estilo_pie)
    tabla_firmas = Table([["Responsable de laboratorio", 
                           "Responsable de calidad"]], 
                         colWidths = (PAGE_WIDTH / 2.0, PAGE_WIDTH / 2.0), 
                         style = [
                            ("FONT", (0, 0), (0, 0), "Times-Roman", 10), 
                            ("ALIGN", (0, 0), (-1, -1), "CENTER"), 
                         ])
    return KeepTogether([texto_fecha, Spacer(1, 1.0*cm), tabla_firmas])
 def agregar_factura(self, f, model, total, vencido):
     vtos = self.preparar_vencimientos(f)
     vtos = [v for v in vtos if (v[2]==None or (v[2].pagareCobro != None and v[2].pagareCobro.pendiente)) and v[0] != None]
         # Todos los que no tienen pagaré o si lo tienen, que esté pendiente
         # y los que sean realmente vencimientos (hay entradas en vtos que pueden tener v[0] a None).
     for v in vtos:
         if v[2]!=None and v[2].pagareCobro!=None:
             pagare = v[2].pagareCobro
         else:
             pagare = None
         fechavto = pagare and pagare.fechaCobro or v[0].fecha   # Fecha del vencimiento final: la del vencimiento de la factura
                                                                 # si no tiene pagaré o la del vencimiento del pagaré que cubre
                                                                 # el vencimiento de la factura.
         mes = utils.corregir_nombres_fecha(fechavto.strftime("%B '%y"))
         primero_mes = mx.DateTime.DateTimeFrom(day = 1, month = fechavto.month, year = fechavto.year)
         try:
             rowpadre = [r for r in model if r[2] == mes][0]
             padre = rowpadre.iter
         except IndexError:
             padre = model.append(None, ("", utils.str_fecha(primero_mes), mes, 0.0, "", "", 0))
         factura = v[0].get_factura_o_prefactura()
         model.append(padre, ("%s (%s)" % (factura.numfactura, factura.cliente and factura.cliente.nombre or "Sin cliente"), 
                              utils.str_fecha(factura.fecha), 
                              utils.str_fecha(v[0].fecha),
                              v[0].importe,
                              pagare and "%s (%s)" % (pagare.codigo, utils.str_fecha(pagare.fechaRecepcion)) or '',
                              pagare and utils.str_fecha(pagare.fechaCobro) or '',
                              pagare and pagare.id or v[0].id)
                      )
         total += v[0].importe
         model[padre][3] += v[0].importe
         if pagare:
             if pagare.fechaCobro <= mx.DateTime.localtime():
                 vencido += v[0].importe
         else:
             if v[0].fecha <= mx.DateTime.localtime():
                 vencido += v[0].importe
         # NOTA: Si la fecha del vencimiento ha vencido pero la del pagaré no, no la cuento como pendiente.
     return total, vencido
    def procesar_factura(self, f, model, subtotal, total, pendiente, cobrado, 
                         total_pagares, pendiente_pagares, cobrado_pagares, 
                         total_otros, pendiente_otros, cobrado_otros, 
                         total_vencimientos, total_cobrado_strict, 
                         nodos_clientes):
        # Nueva consulta CESCE (jpedrero)
        if f.cliente.riesgoAsegurado != -1:
            modelcesce = self.wids['tv_cesce'].get_model()
            fdp = None
            for v in f.vencimientosCobro:
                modelcesce.append((f.cliente.nombre, 
                                   "", 
                                   f.cliente.cif, 
                                   "", 
                                   utils.str_fecha(f.fecha), 
                                   utils.float2str(v.importe), 
                                   v.observaciones, 
                                   utils.str_fecha(v.fecha), 
                                   f.numfactura, 
                                   f.id))
        # Los otros dos TreeViews, más complejos:
        fecha = f.fecha
        mes = utils.corregir_nombres_fecha(fecha.strftime("%B '%y"))
        primero_mes = mx.DateTime.DateTimeFrom(day = 1, 
                                               month = fecha.month, 
                                               year = fecha.year)
        try:
            rowpadre = [r for r in model if r[2] == mes][0]
            padre = rowpadre.iter
        except IndexError:
            padre = model.append(None, ("", utils.str_fecha(primero_mes), 
                                        mes, 0.0, False, "", 0, "", "", "", 
                                        "", 0, 0, 0))
            subtotal[mes] = 0

        tf, cf, pf, tp, cp, pp, to, co, po, tv, tcs = agregar_a_model(
                                                    model, f, padre, 
                                                    self.wids['tv_facturas'], 
                                                    nodos_clientes)
        subtotal[mes] += tf
        total += tf
        pendiente += pf
        cobrado += cf
        total_pagares += tp
        pendiente_pagares += pp
        cobrado_pagares += cp
        total_otros += to
        pendiente_otros += po
        cobrado_otros += co
        total_vencimientos += tv    # No tiene por qué coincidir con el 
                    # total facturado, ya que puede haber facturas sin 
                    # vencimientos creados (no es lo normal, pero es lo 
                    # que se ha estado usando para facturas antiguas que 
                    # no deben aparecer como pendientes de cobro con 
                    # vencimientos pendientes de cobrar).
        total_cobrado_strict += tcs
        
        model[padre][0] = "%s €" % (utils.float2str(subtotal[mes]))     
            # Total facturado (con o sin vencimientos)
        model[padre][3] += tv
            # Total vencimientos.
        #model[padre][6] += tp                                           
            # Total en pagarés (vencidos o no)
        model[padre][6] += tcs
            # Total cobrado estricto (importe de los cobros, incluyendo
            # pagarés, vencidos o no, y pendientes o no; cheques, otros, etc.
        model[padre][12] += to
            # Total otros (cobrado o no)
        return (total, pendiente, cobrado, total_pagares, pendiente_pagares, 
                cobrado_pagares, total_otros, pendiente_otros, cobrado_otros, 
                total_vencimientos, total_cobrado_strict)