def go(titulo, ruta_archivo, datos_cliente, datos_albaran, lineas_contenido, totales, datos_de_la_empresa): """ Recibe el título del documento y la ruta completa del archivo PDF, los datos del cliente en un diccionario, los del albarán también como diccionario, las líneas como lista de listas, los totales como lista y otra lista con la ruta al logotipo como primer elemento y tantas líneas como datos de la empresa se quieran mostrar junto al logo. Devuelve uno o dos nombres de ficheros en PDF con el albarán/carta de porte y (opcionalmente) el documento de recogida de envases. """ doc = SimpleDocTemplate(ruta_archivo, title = titulo, topMargin = 4.30*cm, bottomMargin = 2*cm) #leftMargin = 1*cm, #rigthMargin = 1*cm) contenido = build_tabla_contenido(lineas_contenido) totales = build_tabla_totales(totales) #texto = build_texto() story = [#Spacer(1, 1.60 * cm), # Chispa más o menos los datos de cliente. #encabezado, Spacer(1, 3.50 * cm), contenido, Linea((1.05*cm, 24.5*cm - 3*cm), (1.05*cm, 2.5*cm + 0.25*cm)), Linea((PAGE_WIDTH - 1.05*cm, 24.5*cm - 3*cm), (PAGE_WIDTH - 1.05*cm, 2.5*cm + 0.25*cm)), Spacer(1, 0.15 * cm), totales, lastPageNumberFlowable(0.9*PAGE_WIDTH - 0.5*cm + 1, 1.0*cm)] #Spacer(1, 0.15 * cm), # Línea doble. #KeepTogether([LineaHorizontal(0.9 * PAGE_WIDTH), # Spacer(1, 0.05 * cm), # LineaHorizontal(0.9 * PAGE_WIDTH)]), #Spacer(1, 0.15 * cm), #CondPageBreak(13*cm), #logo_y_empresa, #Spacer(1, 0.25 * cm), #texto] story = utils.aplanar([i for i in story if i]) _cabecera_y_cliente = lambda c, d: cabecera_y_cliente(c, d, datos_cliente, datos_de_la_empresa, datos_albaran) _solo_cabecera = lambda c, d: solo_cabecera(c, d, datos_de_la_empresa, datos_albaran) doc.build(story, onFirstPage = _cabecera_y_cliente, onLaterPages = _solo_cabecera) return ruta_archivo
def go(ruta_archivo, producto, dic_valores, datos_de_la_empresa, albaran, orden = None): """ Genera, a partir de los datos recibidos, el PDF del certificado de calidad. Solo un producto. IN: ruta_archivo: Nombre del PDF que se generará. producto : Objeto pclases del producto. dic_valores: diccionario con las características a mostrar, el método de ensayo, la unidad y el valor numérico (como texto). albaran: Albarán de salida implicado en el certificado. datos_de_la_empresa: Registro de pclases con los datos de la empresa. OUT: ruta_archivo: La ruta completa en el dir. temp. del archivo generado. """ ruta_archivo = os.path.join(gettempdir(), ruta_archivo) doc = SimpleDocTemplate(ruta_archivo, title = "CERTIFICADO DE CALIDAD", topMargin = 2.5*cm, bottomMargin = 3*cm) #leftMargin = 1*cm, #rigthMargin = 1*cm) denominacion = build_denominacion(producto, albaran) marcado = build_marcado(datos_de_la_empresa) caracteristicas = build_caracteristicas(dic_valores, orden) pie = build_pie(datos_de_la_empresa) story = [denominacion, Spacer(1, 0.30 * cm), marcado, Spacer(1, 0.30 * cm), caracteristicas, Spacer(1, 1.00 * cm), pie] story = utils.aplanar([i for i in story if i]) _encabezado = lambda c, d: cabecera(c, datos_de_la_empresa) _pie = lambda c, d: pie(c, datos_de_la_empresa) doc.build(story, onFirstPage = _encabezado, onLaterPages = _pie) return ruta_archivo
def go(titulo, ruta_archivo, lineas_datos_empresa, datos_cliente, lineas_contenido, fecha_entradilla, totales = {}, texto = None, despedida = None, ruta_logo = None, validez = None, numpresupuesto = ""): """ Recibe el título del documento y la ruta completa del archivo. Si validez != None escribe una frase con la validez del presupuesto. """ doc = SimpleDocTemplate(ruta_archivo, title = titulo) encabezado = build_encabezado(lineas_datos_empresa) datos_cliente = build_datos_cliente(datos_cliente) entradilla = build_entradilla(fecha_entradilla, numpresupuesto) texto = build_texto(texto) contenido = build_tabla_contenido(lineas_contenido) totales = build_tabla_totales(totales) despedida = build_texto(despedida) story = [encabezado, datos_cliente, entradilla, Spacer(1, 0.2 * cm), texto, Spacer(1, 0.2 * cm), contenido, Spacer(1, 0.25 * cm), totales, Spacer(1, 2 * cm), despedida] if validez: story.insert(9, build_validez(validez)) story = utils.aplanar([i for i in story if i]) _dibujar_logo = lambda c, d: dibujar_logo(c, d, ruta_logo) doc.build(story, onFirstPage = _dibujar_logo) return ruta_archivo
def go(titulo, ruta_archivo, datos_cliente, datos_albaran, lineas_contenido, totales, datos_de_la_empresa, titular, recogida = True): """ Recibe el título del documento y la ruta completa del archivo PDF, los datos del cliente en un diccionario, los del albarán también como diccionario, las líneas como lista de listas, los totales como lista y otra lista con la ruta al logotipo como primer elemento y tantas líneas como datos de la empresa se quieran mostrar junto al logo. Devuelve uno o dos nombres de ficheros en PDF con el albarán/carta de porte y (opcionalmente) el documento de recogida de envases. «titular» es el nombre legal del responsable de la mercancía. """ # CWT: ¡JODER! Lo juro, en el CVS hay una versión de este fichero que era # una joyita y usaba ReportLab/Platypus en todo su esplendor para # construir una más que decente carta de portes. doc = SimpleDocTemplate(ruta_archivo, title = titulo, topMargin = 6.00*cm, bottomMargin = 13.2*cm) #leftMargin = 1*cm, #rigthMargin = 1*cm) #encabezado = build_encabezado(datos_albaran) contenido = build_tabla_contenido(lineas_contenido) totales = build_tabla_totales(totales) #texto = build_texto() story = [#Spacer(1, 1.60 * cm), # Chispa más o menos los datos de cliente. #encabezado, #Spacer(1, 0.15 * cm), contenido, Spacer(1, 0.15 * cm), totales, lastPageNumberFlowable(PAGE_WIDTH - 1.5*cm, 12.7*cm)] #Spacer(1, 0.15 * cm), # Línea doble. #KeepTogether([LineaHorizontal(0.9 * PAGE_WIDTH), # Spacer(1, 0.05 * cm), # LineaHorizontal(0.9 * PAGE_WIDTH)]), #Spacer(1, 0.15 * cm), #CondPageBreak(13*cm), #logo_y_empresa, #Spacer(1, 0.25 * cm), #texto] story = utils.aplanar([i for i in story if i]) _cabecera_y_cliente = lambda c, d: cabecera_y_cliente(c, d, datos_cliente, datos_de_la_empresa, titular, datos_albaran) doc.build(story, onFirstPage = _cabecera_y_cliente, onLaterPages = _cabecera_y_cliente) if recogida: ruta_archivo_envases = ruta_archivo[::-1].replace(".pdf"[::-1], "_env.pdf"[::-1], 1)[::-1] doc2 = SimpleDocTemplate(ruta_archivo_envases, title = titulo + " (doc. recogida envases)") mas_texto = build_mas_texto(titular) logo_y_empresa = build_marco_logo_y_empresa(datos_de_la_empresa) story = [#Última página: más texto genérico y cosas rellenables a mano. #PageBreak(), logo_y_empresa, mas_texto, Spacer(1, 4 * cm), # firmas, KeepTogether([LineaHorizontal(0.9 * PAGE_WIDTH), Spacer(1, 0.05 * cm), LineaHorizontal(0.9 * PAGE_WIDTH)]), cuadritos_en_ruta(), Spacer(1, 2*cm), build_todavia_mas_texto(), ] story = utils.aplanar([i for i in story if i]) doc2.build(story) else: ruta_archivo_envases = None return ruta_archivo, ruta_archivo_envases
def go(titulo, ruta_archivo, datos_cliente, datos_factura, lineas_contenido, totales, datos_de_la_empresa, observaciones = "", vencimientos = [], forma_de_pago = ""): """ Recibe el título del documento y la ruta completa del archivo PDF, los datos del cliente en un diccionario, los del factura también como diccionario, las líneas como lista de listas, los totales como lista y otra lista con la ruta al logotipo como primer elemento y tantas líneas como datos de la empresa se quieran mostrar junto al logo. """ doc = SimpleDocTemplate(ruta_archivo, title = titulo, topMargin = 4.30*cm, #bottomMargin = 2*cm) bottomMargin = 4*cm) #leftMargin = 1*cm, #rigthMargin = 1*cm) contenido = build_tabla_contenido(lineas_contenido) tabla_totales = build_tabla_totales(totales) vencimientos = build_tabla_vencimientos(observaciones, vencimientos, forma_de_pago) #texto = build_texto() story = [#Spacer(1, 1.60 * cm), # Chispa más o menos los datos de cliente. #encabezado, Spacer(1, 3.50 * cm), contenido, Linea((1.05*cm, 24.5*cm - 3*cm), (1.05*cm, 2.5*cm + 3*cm + 0.25*cm)), Linea((PAGE_WIDTH - 1.05*cm, 24.5*cm - 3*cm), (PAGE_WIDTH - 1.05*cm, 2.5*cm + 3*cm + 0.25*cm)), Spacer(1, 0.15 * cm), tabla_totales, Spacer(1, 0.25 * cm), vencimientos, lastPageNumberFlowable(0.9*PAGE_WIDTH - 0.5*cm + 1, 1.0*cm)] #Spacer(1, 0.15 * cm), # Línea doble. #KeepTogether([LineaHorizontal(0.9 * PAGE_WIDTH), # Spacer(1, 0.05 * cm), # LineaHorizontal(0.9 * PAGE_WIDTH)]), #Spacer(1, 0.15 * cm), #CondPageBreak(13*cm), #logo_y_empresa, #Spacer(1, 0.25 * cm), #texto] story = utils.aplanar([i for i in story if i]) _cabecera_y_cliente = lambda c, d: cabecera_y_cliente(c, d, datos_cliente, datos_de_la_empresa, datos_factura) _solo_cabecera = lambda c, d: solo_cabecera(c, d, datos_de_la_empresa, datos_factura) doc.build(story, onFirstPage = _cabecera_y_cliente, onLaterPages = _solo_cabecera) return ruta_archivo