Пример #1
0
def crear_factura_base():
    from gluon.contrib.pyfpdf.template import Template

    mensaje = ""
    # Si no se creó la demo agregar a la base de datos
    template = db(db.pdftemplate.title == "Demo invoice pyfpdf").select().first()

    if not template:
        template = db.pdftemplate.insert(title="Demo invoice pyfpdf", format = "A4")
        mensaje += "Se creó el template por defecto. "
        
    else:
        mensaje += "El template ya existe en la base de datos. "

    # eliminar todos los elementos del template por defecto.
    db(db.pdfelement.pdftemplate == template.id).delete()

    f = Template()
    f.parse_csv(infile=os.path.join(request.env.web2py_path,'applications', request.application, 'private', 'invoice.csv'), delimiter=";", decimal_sep=",")
    nro = 0
    creados = 0
    for k, v in f.elements.items():
        nro += 1
        try:
            v['align']= {'I':'L','D':'R','C':'C','J':'J',"":""}.get(v['align'], 'L')
            v['pdftemplate'] = template.id
            db.pdfelement.insert(**v)
            creados += 1

        except (AttributeError, ValueError, KeyError, TypeError), e:
            mensaje += "Error en elemento nro: " + str(nro) + " - " + str(e) + ". "
def import_csv():
    from gluon.contrib.pyfpdf import Template
    
    f = Template()
    f.parse_csv(infile="/home/reingart/web2py/gluon/contrib/pyfpdf/invoice.csv", delimiter=";", decimal_sep=",")
    for v in f.fields.elements():
        v['align']=  {'I':'L','D':'R','C':'C','':''}.get(v['align'], 'L')
        v['pdf_template_id'] = 1
        db.pdf_element.insert(**v)
Пример #3
0
def import_csv():
    from gluon.contrib.pyfpdf import Template

    f = Template()
    f.parse_csv(infile="/home/reingart/web2py/gluon/contrib/pyfpdf/invoice.csv", delimiter=";", decimal_sep=",")
    for v in f.fields.elements():
        v["align"] = {"I": "L", "D": "R", "C": "C", "": ""}.get(v["align"], "L")
        v["pdf_template_id"] = 1
        db.pdf_element.insert(**v)
def import_csv():
    from gluon.contrib.pyfpdf import Template

    f = Template()
    f.parse_csv(
        infile="/home/reingart/web2py/gluon/contrib/pyfpdf/invoice.csv",
        delimiter=";",
        decimal_sep=",")
    for v in f.fields.elements():
        v['align'] = {
            'I': 'L',
            'D': 'R',
            'C': 'C',
            '': ''
        }.get(v['align'], 'L')
        v['pdf_template_id'] = 1
        db.pdf_element.insert(**v)
Пример #5
0
def crear_factura_base():
    from gluon.contrib.pyfpdf.template import Template

    mensaje = ""
    # Si no se creó la demo agregar a la base de datos
    template = db(
        db.pdftemplate.title == "Demo invoice pyfpdf").select().first()

    if not template:
        template = db.pdftemplate.insert(title="Demo invoice pyfpdf",
                                         format="A4")
        mensaje += "Se creó el template por defecto. "

    else:
        mensaje += "El template ya existe en la base de datos. "

    # eliminar todos los elementos del template por defecto.
    db(db.pdfelement.pdftemplate == template.id).delete()

    f = Template()
    f.parse_csv(infile=os.path.join(request.env.web2py_path, 'applications',
                                    request.application, 'private',
                                    'invoice.csv'),
                delimiter=";",
                decimal_sep=",")
    nro = 0
    creados = 0
    for k, v in f.elements.items():
        nro += 1
        try:
            v['align'] = {
                'I': 'L',
                'D': 'R',
                'C': 'C',
                'J': 'J',
                "": ""
            }.get(v['align'], 'L')
            v['pdftemplate'] = template.id
            db.pdfelement.insert(**v)
            creados += 1

        except (AttributeError, ValueError, KeyError, TypeError), e:
            mensaje += "Error en elemento nro: " + str(nro) + " - " + str(
                e) + ". "
Пример #6
0
def imprimir():
    import csv, time
    from gluon.contrib.pyfpdf import Template
    import os.path
    import sys
    es_para_guardar = False
    if request.args(0):
        doc_id = request.args(0)
    if request.args(1):
        es_para_guardar = True
    doc_record = db(db.fc_documento.id == request.args(0)).select()
    doc_det_rec = db(
        db.fc_documento_det.fc_documento_id == request.args(0)).select(
            orderby=db.fc_documento_det.id)
    emp_rec = db(db.cf_empresa.id == 1).select()
    #print emp_rec
    f = Template(format="A4",
                 title="Presupuesto",
                 author="w.a",
                 subject="w.a",
                 keywords="")
    if es_para_guardar:
        f.parse_csv(infile=request.folder + '/static/rpt/presupuesto_save.csv',
                    delimiter=";",
                    decimal_sep=",")
    else:
        f.parse_csv(infile=request.folder + '/static/rpt/presupuesto.csv',
                    delimiter=";",
                    decimal_sep=",")

#	 # calculate pages:
    lines = len(doc_det_rec)
    max_lines_per_page = 24
    pages = lines / (max_lines_per_page - 1)
    if lines % (max_lines_per_page - 1): pages = pages + 1
    #
    #    # fill placeholders for each page
    for page in range(1, pages + 1):
        f.add_page()
        f['page'] = 'Page %s of %s' % (page, pages)
        if pages > 1 and page < pages:
            s = 'Continues on page %s' % (page + 1)
        else:
            s = ''
# setting data from company
        for row in emp_rec:
            f["EMPRESA"] = row.razon_social
            f["Logo"] = os.path.join(request.env.web2py_path, "applications",
                                     "flota", "uploads", row.ruta_foto)
            f["membrete1"] = 'Rif.:' + row.rif + '  -   Nit.: ' + row.nit
            f["membrete2"] = 'Tel.:' + row.tlf + '  -   Fax.: ' + row.fax
            f["iva"] = 'Email.:' + row.email


#data from document
        for row in doc_record:
            f["numero"] = row.correlativo
            lafecha = row.fecha.strftime("%d/%m/%Y")
            f["Fecha.L"] = 'Fecha: ' + lafecha
            f["cliente.localidad.l"] = 'Contacto: '
            f["cliente.localidad"] = row.contacto
            lafecha2 = row.fecha_vencimiento.strftime("%d/%m/%Y")
            f["cuit"] = 'Fecha Vencimiento: ' + lafecha2
            f["vencimiento"] = ''
            f["vencimientol"] = ''
            f['PeriodoFacturadoL'] = ''
            f['Periodo.Hasta'] = ''
            f['Periodo.Desde'] = ''
            f['cae'] = ''
            #f['cae.l']=''
            f['cae.vencimiento'] = ''
            f['cae.vencimiento.l'] = ''
            f['codigobarras'] = str(row.id) + str(row.correlativo)
            f['codigobarraslegible'] = str(row.id) + str(row.correlativo)
            f['neto.L'] = 'Sub-Total'
            f['iva.L'] = 'I.V.A. 12%'
            notainf = row.nota_detalle
            #data from client
            f["cliente.iva.l"] = ''
            f["cliente.cuit.l"] = ''
            clt_rec = db(db.cf_proveedor.id == row.cf_proveedor_id).select()
            for row in clt_rec:
                f["cliente.nombre"] = row.razon_social
                f["cliente.domicilio"] = row.direccion
                f["cliente.telefono"] = row.tlf + '     Fax: ' + row.fax + '        Email: ' + row.email
        # print line item...
        li = 0
        k = 0
        total = float("0.00")
        for row in doc_det_rec:
            k = k + 1
            if k > page * (max_lines_per_page - 1):
                break
            if row.importe:
                total += float("%.6f" % row.total)
            if k > (page - 1) * (max_lines_per_page - 1):
                li += 1
                f['item.descripcion%02d' % li] = row.descripcion
                if row.importe is not None:
                    f['item.importe%02d' % li] = "%0.2f" % row.total
                if row.cantidad is not None:
                    f['item.cantidad%02d' % li] = "%0.2f" % row.cantidad

            # ojo para la nota del detalle
            # split detail into each line description
                k = k + 2
        if k > (page - 1) * (max_lines_per_page - 1):
            obs = "\n<U>Nota:</U>\n\n" + notainf
            for ds in f.split_multicell(obs, 'item.descripcion%02d' % k):
                for ml in ds.splitlines():
                    f['item.descripcion%02d' % k] = ml
                    k = k + 1

        if pages == page:
            f['neto'] = "%0.2f" % (total)
            #f['vat'] = "%0.2f" % (total*(1-1/float("1.12")))
            f['iva21'] = float("0.00")
            f['total_label'] = 'Total:'
        else:
            f['total_label'] = 'SubTotal:'
        f['total'] = "%0.2f" % total

    if es_para_guardar:
        f.render("./presupuesto_" + doc_id + ".pdf", dest='F')
        if sys.platform.startswith("linux"):
            #print os.getcwd()
            os.system("evince ./presupuesto_" + doc_id + ".pdf")
        else:
            os.system("./presupuesto_" + doc_id + ".pdf")
        redirect(
            URL(c='presupuesto',
                f='email/' + "presupuesto_" + doc_id + ".pdf"))
    else:
        f.render("./presupuesto_" + doc_id + ".pdf")
        if sys.platform.startswith("linux"):
            #print os.getcwd()
            os.system("evince ./presupuesto_" + doc_id + ".pdf")
        else:
            os.system("./presupuesto_" + doc_id + ".pdf")
        redirect(URL(c='presupuesto', f='index'))
Пример #7
0
    # generate sample invoice (according Argentina's regulations)
    the_details = db(db.movement.operation_id == operation_id).select()

    import random
    from decimal import Decimal

    # Instantiate the PyFPDF template
    f = Template(format="A4",
                 title=T("Operation number") + " %s" % operation_id,
                 author="GestionLibre",
                 subject=utftolatin(document.description),
                 keywords="Sales/Stock/Purchases document")

    # Complete the template object with .csv file element difinition
    f.parse_csv(infile=os.path.join(config.PDF_TEMPLATES_FOLDER,
                                    'invoice.csv'),
                delimiter=";",
                decimal_sep=",")

    detail = ""
    items = []
    i = 0

    # Here goes the actual document data

    for detail in the_details:
        concept = db(
            db.concept.concept_id == detail.concept_id).select().first()

        i += 1
        ds = utftolatin(concept.description)
        qty = "%.3f" % float(detail.quantity)
Пример #8
0
def porcobrar():
    import csv, time, math
    from gluon.contrib.pyfpdf import Template
    import os.path
    import sys
    if request.args(0):
        if request.args(0) == 'todos':
            sql = "SELECT cf_proveedor_id, cf_proveedor.razon_social,fc_documento.fecha, \
					fc_documento.correlativo,fc_documento.fecha_vencimiento,DATEDIFF(CURDATE(), 	\
					fc_documento.fecha_vencimiento) dias,\
					(select sum(total) from fc_documento_det where fc_documento_det.fc_documento_id=fc_documento.id) total,\
					(select sum(monto) from fc_cobro_det where fc_cobro_det.fc_documento_id=fc_documento.id) cobrado \
					FROM fc_documento \
				inner join cf_proveedor on fc_documento.cf_proveedor_id=cf_proveedor.id \
				where fc_documento.fc_tipo_doc_id=2\
				having total=cobrado \
				order by cf_proveedor_id;"

            sqlid = "SELECT cf_proveedor_id id, count(cf_proveedor_id) count, \
				(select sum(total) from fc_documento_det where fc_documento_det.fc_documento_id=fc_documento.id) total, \
				(select sum(monto) from fc_cobro_det where fc_cobro_det.fc_documento_id=fc_documento.id) cobrado \
				FROM fc_documento \
				inner join cf_proveedor on fc_documento.cf_proveedor_id=cf_proveedor.id \
				where fc_documento.fc_tipo_doc_id=2  \
				having total=cobrado \
				order by cf_proveedor_id;"

            rec = db.executesql(sql, as_dict=True)
            rec_id = db.executesql(sqlid, as_dict=True)
            #doc_record=db(db.fc_documento.id == request.args(0)).select()
            #doc_det_rec=db(db.fc_documento_det.fc_documento_id == request.args(0)).select(orderby=db.fc_documento_det.id)
    emp_rec = db(db.cf_empresa.id == 1).select()
    #print emp_rec
    f = Template(format="A4",
                 title="Cuentas por Cobrar",
                 author="w.a",
                 subject="w.a",
                 keywords="")
    f.parse_csv(infile=request.folder + '/static/rpt/porcobrar.csv',
                delimiter=";",
                decimal_sep=",")

    max_lines_per_page = 49.0
    lines = len(rec)
    ids = len(rec_id)
    if ids > lines:
        pages = ids
    else:
        pages = int(math.ceil(float(lines / (max_lines_per_page - 1))))
    page = 0
    #
    #    # fill placeholders for each page
    total = float("0.00")
    for row in range(len(rec_id)):  #primer proveedor para ruptura de control
        #nro paginas para este proveedore
        #print rec_id.index()
        subpages = int(
            math.ceil(float(rec_id[row]['count'] / (max_lines_per_page - 1))))
        for pg in range(subpages):
            f.add_page()
            page += 1
            f['page'] = 'Pagina %s de %s' % (page, pages)
            if pages > 1 and page < pages:
                s = 'Continua en la pagina %s' % (page + 1)
            else:
                s = ''
            # setting data from company
            rowemp = emp_rec[0]
            f["EMPRESA"] = rowemp.razon_social
            f["Logo"] = os.path.join(request.env.web2py_path, "applications",
                                     "flota", "uploads", rowemp.ruta_foto)
            f["membrete1"] = 'Rif.:' + rowemp.rif + '  -   Nit.: ' + rowemp.nit
            f["membrete2"] = 'Tel.:' + rowemp.tlf + '  -   Fax.: ' + rowemp.fax + 'Email.:' + rowemp.email
            #datos del proveedor
            f["proveedor.nombre"] = rowemp['razon_social']
            proveedor = rec_id[row]['id']
            # print line item...
            li = 0
            k = 0
            subtotal = float("0.00")
            for rowdet in rec:
                if rowdet['cf_proveedor_id'] == proveedor:
                    k = k + 1
                    if k > page * (max_lines_per_page - 1):
                        break
                    if k > (page - 1) * (max_lines_per_page - 1):
                        if rowdet['total'] == rowdet['cobrado']:
                            li += 1
                            f['factura%02d' % li] = rowdet['correlativo']
                            f['fecha%02d' % li] = rowdet['fecha']
                            f['vencimiento%02d' %
                              li] = rowdet['fecha_vencimiento']
                            f['dias%02d' % li] = rowdet['dias']
                            f['monto%02d' % li] = "%0.2f" % rowdet['total']
                            subtotal += rowdet['total']
                            total += subtotal
                else:
                    f['subtotal.monto'] = "%0.2f" % subtotal
                    break
            if subtotal > 0:
                f['subtotal.monto'] = "%0.2f" % subtotal
    f['total.monto'] = "%0.2f" % total

    f.render("./porcobrar.pdf")
    if sys.platform.startswith("linux"):
        #print os.getcwd()
        os.system("evince ./porcobrar.pdf")
    else:
        os.system("./porcobrar.pdf")
    redirect(URL(c='default', f='index'))