Ejemplo n.º 1
0
def get_nombre_archivo_from_tv(tv):
    """
    Devuelve el nombre del archivo que se generará a partir
    del nombre del widget TreeView.
    """
    nomtreeview = tv.get_name().replace(" ", "_")
    nomarchivo = os.path.join(gettempdir(), "%s_%s.csv" % (nomtreeview, geninformes.give_me_the_name_baby()))
    return nomarchivo
Ejemplo n.º 2
0
def go_from_presupuesto(presupuesto):
    """
    Construye el PDF a partir de un objeto presupuesto y no de sus datos 
    sueltos.
    """
    try:
        dde = pclases.DatosDeLaEmpresa.select()[0]
        lineas_empresa = [dde.nombre, 
                          dde.direccion, 
                          "%s %s (%s), %s" % (dde.cp, 
                                              dde.ciudad, 
                                              dde.provincia, 
                                              dde.pais), 
                          "Telf.: %s" % (dde.telefono)]
        if dde.fax:
            lineas_empresa.append("Fax: %s" % (dde.fax))
        if dde.email:
            lineas_empresa.append(dde.email)
    except IndexError:
        lineas_empresa = []
    lineas_contenido = presupuesto.lineasDePedido + presupuesto.servicios
    datos_cliente = []
    if presupuesto.personaContacto != "":
        datos_cliente.append("A la atención de %s" % (presupuesto.personaContacto))
    datos_cliente.append(presupuesto.nombrecliente)
    datos_cliente.append(presupuesto.direccion)
    listadireccion = [presupuesto.cp, presupuesto.ciudad]
    if presupuesto.ciudad.strip() != presupuesto.provincia.strip():
        listadireccion.append(presupuesto.provincia)
    listadireccion.append(presupuesto.pais)
    segunda_linea_direccion = " ".join([token.strip() 
                                        for token in listadireccion 
                                        if token.strip() != ""])
    datos_cliente.append(segunda_linea_direccion)
    if presupuesto.telefono.strip() != "":
        datos_cliente.append("Tlf.: %s" % (presupuesto.telefono))
    if presupuesto.fax.strip() != "":
        datos_cliente.append("Fax.: %s" % (presupuesto.fax))
    fecha_entradilla = utils.str_fecha(presupuesto.fecha)
    try:
        dde = pclases.DatosDeLaEmpresa.select()[0]
        iva = dde.iva
    except IndexError:
        iva = 0.18
    totales = {"orden": ["Base imponible", 
                         "IVA %d%%" % (iva * 100), 
                         "TOTAL"], 
               "Base imponible":
                    utils.float2str(presupuesto.calcular_base_imponible()), 
               "IVA %d%%" % (iva * 100): 
                    utils.float2str(presupuesto.calcular_total_iva()), 
               "TOTAL": 
                    utils.float2str(presupuesto.calcular_importe_total())
               }
    if presupuesto.descuento:
        fila_descuento = "Descuento %s %%" % (
            utils.float2str(presupuesto.descuento*100, autodec = True))
        totales['orden'].insert(0, fila_descuento) 
        totales[fila_descuento] = utils.float2str(
            presupuesto.calcular_subtotal(incluir_descuento = False) 
            * presupuesto.descuento * -1)
        fila_subtotal = "Subtotal"
        totales['orden'].insert(0, fila_subtotal) 
        totales[fila_subtotal] = utils.float2str(
            presupuesto.calcular_subtotal(incluir_descuento = False))
    total_irpf = presupuesto.calcular_total_irpf()
    if total_irpf != 0:
        try:
            dde = pclases.DatosDeLaEmpresa.select()[0]
            irpf = dde.irpf
        except IndexError:
            irpf = None
        texto_irpf = "IRPF"
        if irpf:
            texto_irpf += " (%d%%)" % (irpf*100)
        totales[texto_irpf] = utils.float2str(total_irpf)
        totales["orden"].insert(-2, texto_irpf)
    try:
        dde = pclases.DatosDeLaEmpresa.select()[0]
        logo = dde.get_ruta_completa_logo()
    except IndexError:
        logo = None
    if presupuesto.validez:
        validez = presupuesto.validez
    else:
        validez = None

    nomarchivo = os.path.join(gettempdir(), 
                              "presupuesto_%s.pdf" % give_me_the_name_baby())
    go("Presupuesto %s (%s)" % (presupuesto.cliente.nombre, 
                                utils.str_fecha(presupuesto.fecha)), 
       nomarchivo, 
       lineas_empresa, 
       datos_cliente, 
       lineas_contenido, 
       fecha_entradilla, 
       totales, 
       presupuesto.texto, 
       presupuesto.despedida, 
       ruta_logo = logo, 
       validez = validez, 
       numpresupuesto = presupuesto.numpresupuesto)
    return nomarchivo
Ejemplo n.º 3
0
def go_from_albaranSalida(albaranSalida, 
                          kilos = None, 
                          imprimir_recogida = True):
    """
    Construye el PDF a partir de un objeto albaranSalida y no de sus datos 
    sueltos.
    «kilos» es un texto que se imprimirá en el cuadro correspondiente. Si es 
    none intenta calcularlo.
    «imprimir_recogida» es un booleano. Si es False no genera la última página.
    """
    cliente = albaranSalida.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"])
    if kilos is None:
        try:
            kilos = utils.float2str(
                        sum([ldv.producto.calcular_kilos() * ldv.cantidad  
                             for ldv in albaranSalida.lineasDeVenta]))
        except (TypeError, ValueError):
            kilos = ""
    datos_albaran = {"fecha": utils.str_fecha(albaranSalida.fecha), 
                     "número": albaranSalida.numalbaran, 
                     "kilos": kilos, 
                     "bultos": utils.float2str(
                                sum([ldv.cantidad for ldv 
                                    in albaranSalida.lineasDeVenta]), 
                                autodec = True)}
    iva = cliente.iva
    lineas_contenido = [(ldv.producto.codigo, 
                         ldv.producto.descripcion, 
                         ldv.cantidad, 
                         #ldv.precio * (1.0 - ldv.descuento) * (1 + iva), 
                         # CWT: Ahora prefiere los precios sin IVA.
                         ldv.precio * (1.0 - ldv.descuento), 
                         ldv.pedidoVenta and ldv.pedidoVenta.numpedido or "")
                        for ldv in albaranSalida.lineasDeVenta]
    totales = [albaranSalida.calcular_total(iva_incluido = False), 
               iva,
               albaranSalida.calcular_total(iva_incluido = True)]
    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)
        titular = dde.nombreContacto
    except IndexError:
        datos_de_la_empresa = [None]
        titular = ""
    nomarchivo = os.path.join(gettempdir(), 
                              "albaranSalida_%s.pdf" % give_me_the_name_baby())
    return go("Albaran de salida - Carta de portes %s (%s)" % (
                albaranSalida.cliente.nombre, 
                utils.str_fecha(albaranSalida.fecha)), 
              nomarchivo, 
              datos_cliente, 
              datos_albaran, 
              lineas_contenido, 
              totales, 
              datos_de_la_empresa, 
              titular, 
              imprimir_recogida)
Ejemplo n.º 4
0
 def imprimir(self, boton):
     # OJO: Como no hay catálogo de pruebas en la base de datos, las 
     # unidades, métodos y descripciones de las pruebas sobre geotextiles 
     # están HARCODED aquí.
     # PLAN: Meter todo esto en el tablas.sql, como debe de ser.
     data_prueba = {
         "Resistencia longitudinal": 
             {"descripción": "Resistencia a la tracción DM", 
              "método": "EN ISO 10319", 
              "unidad": "kN/m"}, 
         "Resistencia transversal":  
             {"descripción": "Resistencia a la tracción DT", 
              "método": "EN ISO 10319", 
              "unidad": "kN/m"}, 
         "Alargamiento longitudinal":  
             {"descripción": "Alargamiento DM", 
              "método": "EN ISO 10319", 
              "unidad": "%"}, 
         "Alargamiento transversal":  
             {"descripción": "Alargamiento DT", 
              "método": "EN ISO 10319", 
              "unidad": "%"}, 
         "Perforación":  
             {"descripción": 
                 "Resistencia a la perforación dinámica (Caída de cono)", 
              "método": "EN ISO 13433", 
              "unidad": "mm"}, 
         "Resistencia a la compresión":  
             {"descripción": 
                 "Resistencia al punzonado estático (CBR a perforación)", 
              "método": "EN ISO 12236", 
              "unidad": "kN"}, 
         "Apertura de poros":  
             {"descripción": "Medida de apertura (Porometría 090)", 
              "método": "EN ISO 12956", 
              "unidad": "mm"}, 
         "Punzonado piramidal":  
             {"descripción": "Resistencia al punzonado piramidal", 
              "método": "NF G38-019", 
              "unidad": "kN"}, 
         "Permeabilidad":  
             {"descripción": "Permeabilidad perpendicular al agua", 
              "método": "EN ISO 11058", 
              "unidad": "l/m²/s"}, 
         "Gramaje":  
             {"descripción": "Gramaje", 
              "método": "EN ISO 9864", 
              "unidad": "g/m²"}, 
         "Espesor": 
             {"descripción": "Espesor bajo 2 kPa", 
              "método": "EN ISO 9863-1", 
              "unidad": "mm"}
         }
     if not self.objeto:
         return
     #tv = self.wids['tv_datos']
     #from treeview2pdf import treeview2pdf
     from informes import abrir_pdf
     #strfecha = "%s - %s" % (utils.str_fecha(mx.DateTime.localtime()), 
     #                        utils.str_hora(mx.DateTime.localtime()))
     #abrir_pdf(treeview2pdf(tv, 
     #    titulo = "Certificado de calidad de albarán %s" % (
     #        self.objeto.numalbaran),
     #    fecha = strfecha, 
     #    apaisado = False))
     path_informes = os.path.join("..", "informes")
     if path_informes not in sys.path:
         sys.path.append(path_informes)
     import informe_certificado_calidad
     from geninformes import give_me_the_name_baby
     from time import sleep
     dic_productos = {}
     model = self.wids['tv_datos'].get_model()
     for fila in model:
         producto = pclases.getObjetoPUID(fila[-1])
         dic_productos[producto] = {}
         for hijo in fila.iterchildren():
             caracteristica = hijo[0]
             valor = hijo[-2]
             dic_productos[producto][caracteristica] = {
                 "descripción": data_prueba[caracteristica]["descripción"], 
                 "método": data_prueba[caracteristica]["método"], 
                 "unidad": data_prueba[caracteristica]["unidad"], 
                 "valor": valor}
     for producto in dic_productos:
         dic_valores = dic_productos[producto]
         if producto.es_rollo():
             orden = ("Resistencia longitudinal", 
                      "Resistencia transversal", 
                      "Alargamiento longitudinal", 
                      "Alargamiento transversal", 
                      "Perforación", 
                      "Resistencia a la compresión", 
                      "Apertura de poros", 
                      "Permeabilidad", 
                      "Gramaje", 
                      "Espesor", 
                      "Punzonado piramidal")
         nomfich = informe_certificado_calidad.go(
             "certcalidad_%s.pdf" % give_me_the_name_baby(), 
             producto, 
             dic_valores, 
             pclases.DatosDeLaEmpresa.select()[0], 
             self.objeto, 
             orden = orden)
         sleep(1)
         abrir_pdf(nomfich)
Ejemplo n.º 5
0
def go_from_albaranSalida(albaranSalida):
    """
    Construye el PDF a partir de un objeto albaranSalida y no de sus datos 
    sueltos.
    """
    cliente = albaranSalida.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_albaran = {"fecha": utils.str_fecha(albaranSalida.fecha), 
                     "número": albaranSalida.numalbaran, 
                     "codcliente": albaranSalida.cliente 
                                    and `albaranSalida.cliente.id` 
                                    or ""}
    iva = cliente.iva
    lineas_contenido = [(ldv.producto.codigo, 
                         ldv.producto.descripcion, 
                         ldv.cantidad, 
                         ldv.precio * (1.0 - ldv.descuento) * (1 + iva), 
                         ldv.pedidoVenta and ldv.pedidoVenta.numpedido or "")
                        for ldv in albaranSalida.lineasDeVenta]
    totales = [albaranSalida.calcular_total(iva_incluido = False), 
               iva,
               albaranSalida.calcular_total(iva_incluido = True)]
    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:
        lineas_empresa = [None]
    nomarchivo = os.path.join(gettempdir(), 
                              "albaranSalida_%s.pdf" % give_me_the_name_baby())
    return go("Albaran de salida %s (%s)" % (
                albaranSalida.cliente.nombre, 
                utils.str_fecha(albaranSalida.fecha)), 
              nomarchivo, 
              datos_cliente, 
              datos_albaran, 
              lineas_contenido, 
              totales, 
              datos_de_la_empresa)
Ejemplo n.º 6
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:
        lineas_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)
Ejemplo n.º 7
0
def etiqueta_rollos_portrait(rollos, mostrar_marcado = True):
    """
    Construye una etiqueta 
    """
    # Voy a tratar de reescribir esto regla en mano a ver si consigo 
    # cuadrarlo bien en la etiquetadora GEMINI.
    height = 12.55 * cm
    width = 8.4 * cm

    # Escala
    ancho = 7.2
    alto = 11.3
    scale = height / alto 
    
    # Medidas en papel.
    brand = (0.4 * scale, (alto - 2.0) * scale)
    logo = (3.8 * scale, (alto - 2.8) * scale)
    marcado = ((7.2/2) * scale, (alto - 3.0) * scale)
    column1 = .35 * scale
    column2 = logo[0]
    lineas = map(lambda x: (alto - x) * scale, 
                 [3.4 + (i*.6) for i in range(13)])
    
    # Datos
    data = {'brand': "EkoTex", 
            "c100": "UK Distributor", 
            "c108": "Product Name", 
            "c109": "Roll Number", 
            "c110": "Product Dimensions", 
            "c111": "Polymer", 
            "c112": "Product Classification", 
            "c200": "Geosynthetics Limited", 
            "c201": "Fleming Road", 
            "c202": "Harrowbrook Ind Est", 
            "c203": "Hinckley", 
            "c204": "Leicestershire", 
            "c205": "LE10 3 DU", 
            "c206": "Tel 01455 617139", 
            "c207": "Fax 01455 617140", 
            "c211": "Polypropylene", 
            "c212": "GTX-N", 
            "marcado": "0799-CPD", # Hay que incluirle el logotipo CE delante.
            }
    data["logo"] = os.path.abspath(os.path.join(os.path.dirname(__file__), 
                                   "..", "imagenes", "logo_ekotex.png")) 
                                                # Ruta absoluta 
                                                # a la imagen del logotipo. 
    logo_marcado = os.path.abspath(os.path.join(os.path.dirname(__file__), 
                                   "..", "imagenes", "CE.png"))

    # Creo la hoja
    nomarchivo = os.path.join(gettempdir(),
        "etiqEkotex_%s.pdf" % give_me_the_name_baby())
    c = canvas.Canvas(nomarchivo, pagesize = (width, height))

    for rollo in rollos:
        try:
            data["c208"] = rollo['objeto'].productoVenta.nombre
            data["c209"] = rollo['objeto'].numrollo
            cer = rollo['objeto'].productoVenta.camposEspecificosRollo
        except AttributeError:  # No se ha creado el objeto todavía. Es None.
            data["c208"] = rollo['productoVenta'].nombre
            data["c209"] = rollo['nrollo']
            cer = rollo['productoVenta'].camposEspecificosRollo
        data["c210"] = "%sm x %dm" % (float2str(cer.ancho, 
                                                autodec = True, 
                                                separador_decimales = "."),
                                      cer.metrosLineales) 
        rectangulo(c, (0.3 * cm, 0.3 * cm),
                      (width - 0.3 * cm, height - 0.3 * cm))
        c.setFont("Helvetica-Bold", 16)
        c.drawString(brand[0], brand[1], escribe(data['brand']))
        c.setFont("Helvetica-Bold", 10)
        c.drawString(column1, lineas[0], escribe(data['c100']))
        c.drawString(column1, lineas[8], escribe(data['c108']))
        c.drawString(column1, lineas[9], escribe(data['c109']))
        c.drawString(column1, lineas[10], escribe(data['c110']))
        c.drawString(column1, lineas[11], escribe(data['c111']))
        c.drawString(column1, lineas[12], escribe(data['c112']))
        c.drawString(column2, lineas[0], escribe(data['c200']))
        c.drawString(column2, lineas[1], escribe(data['c201']))
        c.drawString(column2, lineas[2], escribe(data['c202']))
        c.drawString(column2, lineas[3], escribe(data['c203']))
        c.drawString(column2, lineas[4], escribe(data['c204']))
        c.drawString(column2, lineas[5], escribe(data['c205']))
        c.drawString(column2, lineas[6], escribe(data['c206']))
        c.drawString(column2, lineas[7], escribe(data['c207']))
        c.drawString(column2, lineas[8], escribe(data['c208']))
        c.drawString(column2, lineas[9], escribe(data['c209']))
        c.drawString(column2, lineas[10], escribe(data['c210']))
        c.drawString(column2, lineas[11], escribe(data['c211']))
        c.drawString(column2, lineas[12], escribe(data['c212']))
        c.drawImage(data['logo'], logo[0], logo[1], 
                    2.5 * cm, 2.5 * cm)
        if mostrar_marcado and not rollo['defectuoso']:
            c.drawImage(logo_marcado, 
                        marcado[0] 
                            - ((0.30*cm
                                + c.stringWidth(data['marcado']) ) / 2),
                        marcado[1],
                        width = 0.35 * cm,
                        height = 6)
            c.setFont("Helvetica-Bold", 8)
            c.drawCentredString(marcado[0] + ((0.35*cm) / 2), 
                                marcado[1], 
                                escribe(data["marcado"]))

        #c.setPageRotation(-90)
        #c.rotate(-90)
        c.showPage()
    c.save()
    return nomarchivo