Esempio n. 1
0
def dibujar_datos_empresa(canvas, datos_de_la_empresa):
    """
    Dibuja los datos de la empresa en la parte superior.
    """
    logo, empresa = build_logo_y_empresa_por_separado(datos_de_la_empresa)
    logo.drawOn(canvas, 1 * cm, PAGE_HEIGHT - 2.8 * cm)
    fuente = "Helvetica"
    tamanno = 16
    for i in range(len(empresa)):
        if i == 1:
            tamanno -= 4  # Primera línea (nombre empresa) un poco más grande.
        linea = PAGE_HEIGHT - 1.5 * cm
        el_encogedor_de_fuentes_de_doraemon(
            canvas, fuente, tamanno, 3.25 * cm, PAGE_WIDTH - 3 * cm, linea - (i * 0.55 * cm), escribe(empresa[i])
        )
Esempio n. 2
0
def cabecera_y_cliente(canvas, doc, datos_cliente, datos_de_la_empresa, datos_albaran):
    """
    Escribe el texto "ALBARÁN" y los datos del cliente.
    Los datos del cliente vienen en un diccionario con: 
    código (de cliente), cif, razón social, dirección, población, provincia.
    """
    fuente = "Helvetica"
    tamanno = 24
    canvas.saveState()
    canvas.setFont(fuente, tamanno)
    canvas.drawString(
        PAGE_WIDTH - canvas.stringWidth(escribe("ALBARÁN"), fuente, tamanno) - 1.0 * cm,
        PAGE_HEIGHT - 1.5 * cm,
        escribe("ALBARÁN"),
    )
    canvas.restoreState()
    tamanno = 12
    altura_linea = 16
    xCliente = (PAGE_WIDTH - 1 * cm) / 2.5
    linea = (PAGE_HEIGHT - 1.5 * cm) - 0.10 * cm - 2 * cm
    rectangulo(
        canvas,
        (xCliente - 0.2 * cm, PAGE_HEIGHT - 1.5 * cm + altura_linea - 2 * cm),
        (PAGE_WIDTH - 1 * cm, (PAGE_HEIGHT - 1.5 * cm + altura_linea) - (altura_linea * 5 + 0.5 * cm) - 2 * cm),
    )
    canvas.drawString(
        xCliente, linea, escribe("Cód. cliente: %s        C.I.F.: %s" % (datos_cliente["código"], datos_cliente["cif"]))
    )
    linea -= altura_linea
    el_encogedor_de_fuentes_de_doraemon(
        canvas, fuente, tamanno, xCliente, PAGE_WIDTH - 1 * cm, linea, escribe(datos_cliente["razón social"])
    )
    linea -= altura_linea
    el_encogedor_de_fuentes_de_doraemon(
        canvas, fuente, tamanno, xCliente, PAGE_WIDTH - 1 * cm, linea, escribe(datos_cliente["dirección"])
    )
    linea -= altura_linea
    canvas.drawString(xCliente, linea, escribe(datos_cliente["población"]))
    linea -= altura_linea
    canvas.drawString(xCliente, linea, escribe(datos_cliente["provincia"]))
    # Datos de la empresa
    dibujar_datos_empresa(canvas, datos_de_la_empresa)
    # Cabecera de factura
    build_tabla_cabecera(canvas, datos_albaran, 22.5 * cm)
Esempio n. 3
0
def cabecera_y_cliente(canvas, 
                       doc, 
                       datos_cliente, 
                       datos_de_la_empresa, 
                       titular, 
                       datos_albaran):
    """
    Escribe el texto "ALBARÁN/CARTA DE PORTE" y los datos del cliente.
    Los datos del cliente vienen en un diccionario con: 
    código (de cliente), cif, razón social, dirección, población, provincia.
    """
    fuente = "Helvetica"
    tamanno = 12
    canvas.drawString(1.0*cm, 
                      PAGE_HEIGHT - 1.5*cm, 
                      escribe("ALBARÁN/CARTA DE PORTE"))
    altura_linea = 16
    xCliente = (PAGE_WIDTH - 1*cm) / 2.5
    linea = (PAGE_HEIGHT-1.5*cm) - 0.10*cm 
    rectangulo(canvas, 
               (xCliente - 0.2*cm, PAGE_HEIGHT - 1.5*cm + altura_linea), 
               (PAGE_WIDTH - 1*cm, 
                (PAGE_HEIGHT- 1.5*cm + altura_linea)-(altura_linea*5 + 0.5*cm))
              )
    canvas.drawString(xCliente, 
                      linea, 
                      escribe(
                        "Cód. cliente: %s        C.I.F.: %s" % (
                            datos_cliente['código'], 
                            datos_cliente['cif'])))
    linea -= altura_linea
    el_encogedor_de_fuentes_de_doraemon(canvas, 
                                        fuente, 
                                        tamanno, 
                                        xCliente, 
                                        PAGE_WIDTH - 1*cm, 
                                        linea, 
                                        escribe("Razón social: %s" 
                                            % datos_cliente['razón social']))
    #canvas.drawString(xCliente, 
    #                  linea, 
    #                  escribe("Razón social: %s"%datos_cliente['razón social']))
    linea -= altura_linea
    el_encogedor_de_fuentes_de_doraemon(canvas, 
                                        fuente, 
                                        tamanno, 
                                        xCliente, 
                                        PAGE_WIDTH - 1*cm, 
                                        linea, 
                                        escribe("Dirección: %s" 
                                            % datos_cliente['dirección']))
    #canvas.drawString(xCliente, 
    #                  linea, 
    #                  escribe("Dirección: %s" % datos_cliente['dirección']))
    linea -= altura_linea
    canvas.drawString(xCliente, 
                      linea, 
                      escribe("Población: %s" % datos_cliente['población']))
    linea -= altura_linea
    canvas.drawString(xCliente, 
                      linea, 
                      escribe("Provincia: %s" % datos_cliente['provincia']))
    # Y el pie de página:
    logo, empresa = build_logo_y_empresa_por_separado(datos_de_la_empresa)
    LineaHorizontal(0.9 * PAGE_WIDTH).drawOn(canvas, 78.0, 12.5*cm)
    LineaHorizontal(0.9 * PAGE_WIDTH).drawOn(canvas, 78.0, 12.4 *cm)
    logo.drawOn(canvas, 3*cm, 10 * cm)
    fuente = "Helvetica"
    tamanno = 10
    for i in range(len(empresa)):
        linea = 11.5 * cm
        el_encogedor_de_fuentes_de_doraemon(canvas, 
                                            fuente, 
                                            tamanno, 
                                            5.25*cm, 
                                            PAGE_WIDTH - 1*cm, 
                                            linea - (i*0.5*cm), 
                                            escribe(empresa[i]))
    #logo_y_empresa.drawOn(canvas, 10.5*cm, 78.0)
    texto = build_texto(titular)
    lineas = []
    for l in [p.text for p in texto._content]:
        lineas.extend(l.split("\n"))
    y = 9.5*cm
    tamanno = 8
    centrado = False
    for linea in lineas:
        linea = linea.replace(" ", "")
        if "<b>" in linea:
            fuente = "Times-Bold"
            linea = linea.replace("<b>", "").replace("</b>", "")
            # Aprovechando que el Pisuerga...
            centrado = True
        else:
            fuente = "Times-Roman"
        if "<font size=12>" in linea:
            tamanno = 12
            linea = linea.replace("<font size=12>", "").replace("</font>", "")
        else:
            tamanno = 10
        lineas_agregadas = agregarFila(1*cm, 
                                       y, 
                                       PAGE_WIDTH - 1*cm, 
                                       escribe(linea), 
                                       canvas, 
                                       fuente, 
                                       tamanno, 
                                       centrado = centrado)
        y -= lineas_agregadas * 10
    #canvas.drawString(PAGE_WIDTH - 2*cm, 2*cm, str(canvas.getPageNumber()))
    #texto.drawOn(canvas, 9*cm, 72.0)
    # Página x de y.
    canvas.saveState()
    canvas.setFont("Times-Italic", 9)
    canvas.drawRightString(PAGE_WIDTH - 1.5*cm, 
                           12.7*cm, 
                           escribe("Página %d de " % canvas.getPageNumber()))
    canvas.doForm("lastPageNumber")
    canvas.restoreState()
    # Cabecera.
    # Sí, ahora va aquí. No hace falta que ponga el CWT, ¿o sí?
    canvas.saveState()
    x1 = 1.0 * cm + 1
    limite = x1 + 0.9 * PAGE_WIDTH
    incremento = (limite - x1) / 4
    y1 = 24.5 * cm
    y2 = y1 - 18
    for texto, clave in (("Fecha", "fecha"), 
                         ("Nº Albarán", "número"), 
                         ("Kilos", "kilos"), 
                         ("Bultos", "bultos")):
        x2 = x1 + incremento
        canvas.setFont("Times-Roman", 12)
        rectangulo(canvas, 
                   (x1, y1), 
                   (x2, y2), 
                   texto = escribe(datos_albaran[clave]), 
                   alinTxtX = "centro", 
                   alinTxtY = "centro")
        canvas.setFont("Times-Roman", 10)
        canvas.drawString(x1+0.2*cm, y1 + 3, texto)
        x1 += incremento
    canvas.restoreState()
Esempio n. 4
0
def cabecera_y_cliente(canvas,
                       doc,
                       datos_cliente,
                       datos_de_la_empresa,
                       datos_factura):
    """
    Escribe el texto "FACTURA" y los datos del cliente.
    Los datos del cliente vienen en un diccionario con:
    código (de cliente), cif, razón social, dirección, población, provincia.
    """
    fuente = "Helvetica"
    tamanno = 24
    # XXX CWT: Para poder taladrar y archivar sin comerse el cuerpo.
    canvas.translate(0.6*cm, 0)
    # XXX
    canvas.saveState()
    canvas.setFont(fuente, tamanno)
    canvas.drawString(PAGE_WIDTH
                        - canvas.stringWidth(escribe("FACTURA"),fuente,tamanno)
                        - 1.0*cm,
                      PAGE_HEIGHT - 1.5*cm,
                      escribe("FACTURA"))
    canvas.restoreState()
    tamanno = 12
    altura_linea = 16
    xCliente = (PAGE_WIDTH - 1*cm) / 2.5
    linea = (PAGE_HEIGHT-1.5*cm) - 0.10*cm - 2*cm
    rectangulo(canvas,
               (xCliente - 0.2*cm, PAGE_HEIGHT - 1.5*cm + altura_linea - 2*cm),
               (PAGE_WIDTH - 1*cm,
                (PAGE_HEIGHT- 1.5*cm + altura_linea)
                -(altura_linea*5 + 0.5*cm) - 2*cm),
               doble = True
              )
    canvas.drawString(xCliente,
                      linea,
                      escribe(
                        "Cód. cliente: %s        C.I.F.: %s" % (
                            datos_cliente['código'],
                            datos_cliente['cif'])))
    linea -= altura_linea
    el_encogedor_de_fuentes_de_doraemon(canvas,
                                        fuente,
                                        tamanno,
                                        xCliente,
                                        PAGE_WIDTH - 1*cm,
                                        linea,
                                        escribe(datos_cliente['razón social']))
    linea -= altura_linea
    el_encogedor_de_fuentes_de_doraemon(canvas,
                                        fuente,
                                        tamanno,
                                        xCliente,
                                        PAGE_WIDTH - 1*cm,
                                        linea,
                                        escribe(datos_cliente['dirección']))
    linea -= altura_linea
    canvas.drawString(xCliente,
                      linea,
                      escribe(datos_cliente['población']))
    linea -= altura_linea
    canvas.drawString(xCliente,
                      linea,
                      escribe(datos_cliente['provincia']))
    # Datos de la empresa
    dibujar_datos_empresa(canvas, datos_de_la_empresa)
    # Cabecera de factura
    build_tabla_cabecera(canvas, datos_factura, 22.5*cm)