Ejemplo n.º 1
0
def build_validez(validez):
    txt_validez = "OFERTA VÁLIDA POR %s DESDE LA FECHA DE ESTE PRESUPUESTO"
    if validez == 1:
        mes = "UN MES"
    else:
        from formularios.numerals import numerals
        txt_meses = numerals(validez, 
                             moneda = "", 
                             fraccion = "", 
                             autoomitir = True).upper()
        mes = "%s MESES" % txt_meses
    txt_validez = txt_validez % (mes)
    a_derecha = ParagraphStyle("A derecha", 
                                parent = estilos["Normal"])
    a_derecha.alignment = enums.TA_RIGHT
    a_derecha.fontName = "Courier"
    a_derecha.fontSize = 8
    return Paragraph(txt_validez, a_derecha)
Ejemplo n.º 2
0
def go_from_facturaVenta(facturaVenta):
    """
    Construye el PDF a partir de un objeto facturaVenta y no de sus datos
    sueltos.
    """
    cliente = facturaVenta.cliente
    datos_cliente = {"código": cliente.id,
                     "cif": cliente.cif,
                     "razón social": cliente.nombre,
                     "dirección": cliente.direccion,
                     "población": cliente.ciudad,
                     "provincia": cliente.provincia}
    if cliente.cp and cliente.cp.strip():
        datos_cliente["población"] = (cliente.cp + " - "
                                      + datos_cliente["población"])
    datos_factura = {"fecha": utils.str_fecha(facturaVenta.fecha),
                     "número": facturaVenta.numfactura,
                     "codcliente": facturaVenta.cliente
                                    and `facturaVenta.cliente.id`
                                    or ""}
    iva = cliente.iva
    # TODO: ¿Usar el float2str_autoprecision?
    lineas_contenido = [(ldv.producto.codigo,
                         ldv.producto.descripcion,
                         ldv.cantidad,
                         ldv.precio * (1.0 - ldv.descuento) * (1 + iva))
                        for ldv in facturaVenta.lineasDeVenta]
    lineas_contenido += [("",
                          srv.concepto,
                          srv.cantidad,
                          srv.precio * (1.0 - srv.descuento) * (1 + iva))
                         for srv in facturaVenta.servicios]
    totales = [facturaVenta.calcular_base_imponible(),
               iva,
               facturaVenta.calcular_total()]
    try:
        dde = pclases.DatosDeLaEmpresa.select()[0]
        datos_de_la_empresa = [os.path.join("..", "imagenes", dde.logo),
                               dde.nombre +
                                (dde.cif and " (" + dde.str_cif_o_nif() +": " + dde.cif + ")" or ""),
                               dde.direccion,
                               "%s %s (%s), %s" % (dde.cp,
                                                   dde.ciudad,
                                                   dde.provincia,
                                                   dde.pais),
                               ]
        if dde.fax:
            if dde.fax.strip() == dde.telefono.strip():
                datos_de_la_empresa.append("Telf. y fax: %s" % dde.telefono)
            else:
                datos_de_la_empresa.append("Telf.: %s" % (dde.telefono))
                datos_de_la_empresa.append("Fax: %s" % (dde.fax))
        if dde.email:
            datos_de_la_empresa.append(dde.email)
    except IndexError:
        datos_de_la_empresa = [None]
    nomarchivo = os.path.join(gettempdir(),
                              "facturaVenta_%s.pdf" % give_me_the_name_baby())
    vencimientos = []
    forma_de_pago = []
    vtos = facturaVenta.vencimientosCobro[:]
    vtos.sort(lambda v1, v2: (v1.fecha < v2.fecha and 1)
                              or (v1.fecha > v2.fecha and -1)
                              or 0)
    for v in vtos:
        strvto = "%s (%s €)" % (utils.str_fecha(v.fecha),
                                utils.float2str(v.importe))
        vencimientos.append(strvto)
        forma_de_pago.append(v.observaciones)
    observaciones = ["Importa la presente factura:",
                     numerals.numerals(totales[-1],
                                       moneda = "EUROS",
                                       fraccion = "CÉNTIMOS").upper()]
    if facturaVenta.observaciones:
        observaciones.append(facturaVenta.observaciones)
    return go("Factura de venta %s (%s)" % (
                facturaVenta.cliente.nombre,
                utils.str_fecha(facturaVenta.fecha)),
              nomarchivo,
              datos_cliente,
              datos_factura,
              lineas_contenido,
              totales,
              datos_de_la_empresa,
              observaciones,
              vencimientos,
              forma_de_pago)