def build_tabla_contenido(dic_material, lineas_ensayo, dic_peticion): """ Devuelve una lista de párrafos y líneas horizontales con las cuatro filas de material, ensayos, observaciones y persona que recogió el pedido. Extrae los datos que necesita de los diccionarios recibidos. """ linea = LineaHorizontal(ANCHO)# - MARGEN_IZQUIERDO - MARGEN_IZQUIERDO - 1*cm) # Para que la última línea de "recibido" esté pegada al fondo de la página # hay que meter espacio en observaciones (dejando, de paso, espacio para # anotaciones a boli). Como la página se construye dinámicamente, tengo # que estimar el espacio que falta en función a la información escrita # hasta ahora. #restante = 2*cm # TODO: Empiezo con una estimación al azar. Ya afinaré o acabaré # metiendo la línea "Recibido" como pie de página igual que hice con # los totales de factura_multipag. #espacio = Spacer(ANCHO, restante) estilos["Normal"].leading = 8 estilos["Normal"].leftIndent = 10 estilos["BodyText"].leftIndent = 30 #estilos["Normal"].fontSize -= 2 material0 = Paragraph("<u>MATERIAL A ENSAYAR:</u>", estilos["Normal"]) material1 = Paragraph(escribe(dic_material["material"]), estilos["BodyText"]) #material = Table([[material0], [material1]], hAlign = enums.TA_LEFT, # colWidths = (ANCHO)) #material.setStyle(TableStyle([ # ("VALIGN", (0, 0), (-1, -1), "MIDDLE"), # ('LINEABOVE', (0, 0), (-1, 0), 1, colors.black), # ('LINEBELOW', (0, 1), (-1, 1), 1, colors.black), # ])) ensayos0 = Paragraph("<u>ENSAYOS SOLICITADOS:</u>", estilos["Normal"]) ensayos1 = [] # Después se "aplanará" if not lineas_ensayo: lineas_ensayo = [""] # Que haya al menos un huequín que haga bonito. for ensayo in lineas_ensayo: ensayos1.append(Paragraph(escribe(ensayo), estilos["BodyText"])) observaciones0 = Paragraph("<u>OBSERVACIONES:</u>", estilos["Normal"]) observaciones1 = Paragraph(escribe(dic_peticion["observaciones"]), estilos["BodyText"]) recibido0 = Paragraph("Recibido por:", estilos["Normal"]) recibido1 = Paragraph(escribe(dic_peticion["recibido por"]), estilos["BodyText"]) res = [linea, Spacer(1, 0.05*cm), material0, material1, Spacer(1, 0.2*cm), linea, Spacer(1, 0.05*cm), ensayos0, ensayos1, Spacer(1, 0.2*cm), linea, Spacer(1, 0.05*cm), observaciones0, observaciones1] # , espacio, linea, recibido0, # recibido1, Spacer(1, 0.2*cm), linea] recibido = TablaFija(MARGEN_IZQUIERDO + 4*cm, 1*cm, [[recibido0], [recibido1]], hAlign = enums.TA_LEFT, colWidths = (ANCHO) ) recibido.setStyle(TableStyle([ ("VALIGN", (0, 0), (-1, -1), "MIDDLE"), ('LINEABOVE', (0, 0), (-1, 0), 1, colors.black), ('LINEBELOW', (0, 1), (-1, 1), 1, colors.black), ])) res.append(recibido) return res
def build_encabezado(lineas_empresa, dpeticion): """ Cuadro de encabezado con el logotipo de la empresa (posición 0 de lineas_empresa) y los datos recibidos (posiciones 1 en adelante). """ logo = lineas_empresa[0] info = lineas_empresa[1:] #estilos["h6"].fontSize -= 2 estilos["h6"].spaceAfter = 0 estilos["h6"].spaceBefore = 0 if lineas_empresa [0]: logo = Image(lineas_empresa[0]) logo.drawHeight = 1.5*cm * logo.drawHeight / logo.drawWidth logo.drawWidth = 1.5*cm else: logo = Paragraph("", estilos["h6"]) lineas_empresa = lineas_empresa[1:] #if len(lineas_empresa) <= 3: # empresa = Preformatted("\n".join(lineas_empresa) + # "\nHoja n.º: {hoja}" # "\nFecha pedido: {fecha pedido}".format(**dpeticion), # estilos["h6"]) #else: # texto_empresa = lineas_empresa[0] + "\n" # resto_lineas = lineas_empresa[1:] # pivot = len(resto_lineas)/2 # r1, r2 = resto_lineas[:pivot], resto_lineas[pivot:] # texto_empresa += ". ".join(r1) + "\n" + ". ".join(r2) # empresa = Preformatted(texto_empresa + # "\nHoja n.º: {hoja:d}" # "\nFecha pedido: {fecha pedido:s}".format(**dpeticion), # estilos["h6"]) empresa = [] for l in lineas_empresa: empresa.append(Paragraph(l, estilos["h6"])) estilos["h2"].spaceAfter = 0 estilos["h2"].spaceBefore = 0 estilos["h2"].alignment = enums.TA_LEFT estilos["h2"].fontSize = 10 estilos["h2"].leading = 10 empresa.append(Paragraph("Hoja n.º: {hoja:d}".format(**dpeticion), estilos["h2"])) empresa.append(Paragraph( "Fecha pedido: {fecha pedido:s}".format(**dpeticion), estilos["h2"])) estilos["h5"].alignment = enums.TA_CENTER datos = ([logo, Paragraph("SOLICITUD DE RECOGIDA", estilos["h5"]), empresa], ) #encabezado = TablaFija(MARGEN_IZQUIERDO + 5.9*cm, ALTO - 3*cm, encabezado = TablaFija(MARGEN_IZQUIERDO + 4*cm, ALTO - 3*cm, datos, hAlign = enums.TA_CENTER, colWidths = ( (ANCHO - MARGEN_IZQUIERDO - MARGEN_DERECHO - 4*cm) * (1/4.), (ANCHO - MARGEN_IZQUIERDO - MARGEN_DERECHO) * (1/4.), (ANCHO - MARGEN_IZQUIERDO - MARGEN_DERECHO) * (1/2.))) encabezado.setStyle(TableStyle([ ("ALIGN", (0, 0), (1, 0), "CENTER"), ("ALIGN", (2, 0), (2, 0), "LEFT"), ("VALIGN", (0, 0), (-1, -1), "MIDDLE"), ('GRID', (0, 0), (-1, -1), 1, colors.black), ])) return encabezado