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(titulo, ruta_archivo, lineas_datos_empresa, datos_cliente, ref_obra, datos_comercial, fecha = None, ruta_logo = None, datos_fiscales = "", logo_marcado = None, idioma = "es" ): """ Recibe el título del documento y la ruta completa del archivo. """ doc = SimpleDocTemplate(ruta_archivo, title = titulo) # Secciones encabezado = build_encabezado(idioma = idioma) # Logos y "título" datos_cliente = build_datos_cliente(datos_cliente, idioma) # Datos cliente par_fecha = build_fecha(fecha, idioma) # Fecha a la derecha datos_obra = build_datos_obra(ref_obra, idioma) # Cuadro con datos de obra texto = build_texto(idioma) # El texto es fijo. despedida = build_despedida(datos_comercial, idioma) story = [Spacer(1, 4 * cm), encabezado, datos_cliente, par_fecha, Spacer(1, 0.2 * cm), datos_obra, Spacer(1, 0.4 * cm), texto, Spacer(1, 1 * cm), despedida ] story = utils.aplanar([i for i in story if i]) _dibujar_logo = lambda c, d: dibujar_logo(c, d, ruta_logo, lineas_datos_empresa, datos_fiscales, logo_marcado, idioma) _dibujar_pie = lambda c, d: dibujar_pie(c, d, lineas_datos_empresa, datos_fiscales) doc.build(story, onFirstPage = _dibujar_logo) #, onLaterPages = _dibujar_pie) 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, lineas_datos_empresa, datos_cliente, lineas_contenido, fecha_entradilla, totales = {}, texto = None, despedida = None, ruta_logo = None, validez = None, condicionado = None, texto_riesgo = None, numpresupuesto = "", incluir_condicionado_general = True, forma_de_pago = None, dir_fiscal = None, firma_comercial = None, para_estudio = False, idioma = "es"): """ Recibe el título del documento y la ruta completa del archivo. Si validez != None escribe una frase con la validez del presupuesto. """ if idioma not in ("en", "es"): raise NotImplementedError,\ __file__ + ": Idioma '%s' no implementado." % idioma doc = SimpleDocTemplate(ruta_archivo, title = titulo) encabezado = build_encabezado(lineas_datos_empresa) try: nombrecliente = datos_cliente[0].replace(" ", "_") except: nombrecliente = "" datos_cliente = build_datos_cliente(datos_cliente) entradilla = build_entradilla(fecha_entradilla, numpresupuesto, para_estudio, lang = idioma) texto = build_texto(texto) contenido = build_tabla_contenido(lineas_contenido, lang = idioma) totales = build_tabla_totales(totales) despedida = build_texto(despedida) forma_pago = build_texto(forma_de_pago) comercial = build_texto(firma_comercial) story = [encabezado, datos_cliente, entradilla, Spacer(1, 0.2 * cm), contenido, Spacer(1, 0.25 * cm), totales, Spacer(1, 1 * cm), forma_pago, Spacer(1, 2 * cm), texto, Spacer(1, 0.2 * cm), despedida, Spacer(1, 0.5 * cm), comercial] #if validez: #story.insert(9, build_validez(validez)) if texto_riesgo: story.insert(-8, build_texto_riesgo(texto_riesgo)) #if condicionado: # El condicionado es el texto en sí. # story.insert(-2, Spacer(1, 2 * cm)) # story.insert(-2, build_condicionado(condicionado)) story = utils.aplanar([i for i in story if i]) _dibujar_logo = lambda c, d: dibujar_logo(c, d, ruta_logo, idioma) _dibujar_dir_fiscal = lambda c, d: dibujar_dir_fiscal(c, d, dir_fiscal) def dibujar_logo_y_dir_fiscal(c, d): _dibujar_logo(c, d) _dibujar_dir_fiscal(c, d) doc.build(story, onFirstPage = dibujar_logo_y_dir_fiscal, onLaterPages = _dibujar_dir_fiscal) # Agrego condiciones generales: if incluir_condicionado_general: from lib.PyPDF2 import PyPDF2 pdf_presupuesto = open(ruta_archivo, "rb") if idioma == "en": fcond = "condiciones_generales_en.pdf" else: fcond = "condiciones_generales.pdf" pdf_condiciones = open( os.path.join(os.path.dirname(os.path.abspath(__file__)), fcond), "rb") merger = PyPDF2.PdfFileMerger() merger.append(pdf_presupuesto) merger.append(pdf_condiciones) combinado = os.path.join(gettempdir(), "oferta_%d_%s_%s.pdf" % (numpresupuesto, sanitize(nombrecliente, strict = True), give_me_the_name_baby())) merger.write(open(combinado, "wb")) ruta_archivo = combinado 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