Пример #1
0
def _write_invoice_on_disk(request, document, destdir, prefix, key):
    """
    Write an invoice on disk

    :param obj request: The current env request instance
    :param obj document: The document instance (invoice/cancelinvoice)
    :param str destdir: An existing dest directory
    :param str prefix: The prefix to add before dest file name
    :param str key: A key used to make the name unique
    """
    from autonomie.views.task.views import (
        html,
    )
    from autonomie.utils.pdf import buffer_pdf
    from pyramid_layout.config import create_layout_manager
    class A:
        def __init__(self, req):
            self.request = req

    logger = logging.getLogger(__name__)
    dest_file = u"%s_%s_%s.pdf" % (prefix, document.official_number, key)
    filepath = os.path.join(destdir, dest_file)
    logger.debug("Writing : %s" % filepath)
    request.context = document
    create_layout_manager(A(request))

    html_str = html(request, tasks=[document], bulk=True)
    with file(filepath, 'wb') as fbuf:
        fbuf.write(buffer_pdf(html_str).read())
Пример #2
0
def invoices_pdf_view(request):
    """
        Bulk pdf output : output a large amount of invoices/cancelinvoices

    """
    # We retrieve the form
    query_form = get_invoice_pdf_export_form(request)
    if 'submit' in request.params:
        try:
            appstruct = query_form.validate(request.params.items())
        except ValidationFailure as e:
            # Form validation failed, the error contains the form with the error
            # messages
            query_form = e
            appstruct = None

        if appstruct is not None:
            # The form has been validated, we can query for documents
            start_number = appstruct["start"]
            end_number = appstruct["end"]
            year = appstruct['year']

            documents = query_documents_for_export(start_number, end_number,
                                                   year)

            # We've got some documents to export
            if documents:
                # Getting the html output
                html_string = html(request, documents, bulk=True)

                filename = u"factures_{0}_{1}_{2}.pdf".format(
                    year,
                    start_number,
                    end_number,
                )

                try:
                    # Placing the pdf datas in the request
                    write_pdf(request, filename, html_string)
                    return request.response
                except BaseException as e:
                    import traceback
                    traceback.print_exc()
                    request.session.flash(u"Erreur à l'export des factures, \
    essayez de limiter le nombre de factures à exporter. Prévenez \
    votre administrateur si le problème persiste.",
                                          queue="error")
            else:
                # There were no documents to export, we send a message to the
                # end user
                request.session.flash(u"Aucune facture n'a pu être retrouvée",
                                      queue="error")
    gotolist_btn = ViewLink(u"Liste des factures",
                            "admin_invoices",
                            path="invoices")
    request.actionmenu.add(gotolist_btn)
    return dict(
        title=u"Export massif de factures au format PDF",
        form=query_form.render(),
    )
Пример #3
0
def _write_invoice_on_disk(request, document, destdir, prefix, key):
    """
    Write an invoice on disk

    :param obj request: The current env request instance
    :param obj document: The document instance (invoice/cancelinvoice)
    :param str destdir: An existing dest directory
    :param str prefix: The prefix to add before dest file name
    :param str key: A key used to make the name unique
    """
    from autonomie.views.task.views import (
        html, )
    from autonomie.utils.pdf import buffer_pdf
    from pyramid_layout.config import create_layout_manager

    class A:
        def __init__(self, req):
            self.request = req

    logger = logging.getLogger(__name__)
    dest_file = u"%s_%s_%s.pdf" % (prefix, document.official_number, key)
    filepath = os.path.join(destdir, dest_file)
    logger.debug("Writing : %s" % filepath)
    request.context = document
    create_layout_manager(A(request))

    html_str = html(request, tasks=[document], bulk=True)
    with file(filepath, 'wb') as fbuf:
        fbuf.write(buffer_pdf(html_str).read())
Пример #4
0
def invoices_pdf_view(request):
    """
        Bulk pdf output : output a large amount of invoices/cancelinvoices

    """
    # We retrieve the form
    query_form = get_invoice_pdf_export_form(request)
    if 'submit' in request.params:
        try:
            appstruct = query_form.validate(request.params.items())
        except ValidationFailure as e:
            # Form validation failed, the error contains the form with the error
            # messages
            query_form = e
            appstruct = None

        if appstruct is not None:
            # The form has been validated, we can query for documents
            start_number = appstruct["start"]
            end_number = appstruct["end"]
            year = appstruct['year']

            documents = query_documents_for_export(
                start_number,
                end_number,
                year
            )

            # We've got some documents to export
            if documents:
                # Getting the html output
                html_string = html(request, documents, bulk=True)

                filename = u"factures_{0}_{1}_{2}.pdf".format(
                    year,
                    start_number,
                    end_number,
                )

                try:
                    # Placing the pdf datas in the request
                    write_pdf(request, filename, html_string)
                    return request.response
                except BaseException as e:
                    import traceback
                    traceback.print_exc()
                    request.session.flash(u"Erreur à l'export des factures, \
    essayez de limiter le nombre de factures à exporter. Prévenez \
    votre administrateur si le problème persiste.", queue="error")
            else:
                # There were no documents to export, we send a message to the
                # end user
                request.session.flash(
                    u"Aucune facture n'a pu être retrouvée",
                    queue="error"
                )
    gotolist_btn = ViewLink(
        u"Liste des factures",
        "admin_invoices",
        path="invoices"
    )
    request.actionmenu.add(gotolist_btn)
    return dict(
        title=u"Export massif de factures au format PDF",
        form=query_form.render(),
    )