parent
077a1808a2
commit
f1ff947a69
@ -0,0 +1,3 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
from . import models
|
||||
@ -0,0 +1,29 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
{
|
||||
'name': 'Pdf report options',
|
||||
'summary': """shows a modal window with options for printing, downloading or opening pdf reports""",
|
||||
'description': """
|
||||
Choose one of the following options when printing a pdf report:
|
||||
- print. print the pdf report directly with the browser
|
||||
- download. download the pdf report on your computer
|
||||
- open. open the pdf report in a new tab
|
||||
You can also set a default options for each report
|
||||
""",
|
||||
'author': 'Luis Rodrigo Mejia Mateus',
|
||||
'category': 'Productivity',
|
||||
'images': ['images/main_1.png', 'images/main_screenshot.png'],
|
||||
'depends': ['web'],
|
||||
'data': [
|
||||
'views/ir_actions_report.xml',
|
||||
],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'license': 'LGPL-3',
|
||||
'assets': {
|
||||
'web.assets_backend': [
|
||||
'report_pdf_options/static/src/js/PdfOptionsModal.js',
|
||||
'report_pdf_options/static/src/js/qwebactionmanager.js',
|
||||
'report_pdf_options/static/src/**/*.xml'
|
||||
]
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,87 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * report_pdf_options
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 14.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-09-18 04:38+0000\n"
|
||||
"PO-Revision-Date: 2021-09-17 23:44-0500\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: \n"
|
||||
"Language: es_PE\n"
|
||||
"X-Generator: Poedit 3.0\n"
|
||||
|
||||
#. module: report_pdf_options
|
||||
#. openerp-web
|
||||
#: code:addons/report_pdf_options/static/src/js/qwebactionmanager.js:0
|
||||
#, python-format
|
||||
msgid "Close"
|
||||
msgstr "Cerrar"
|
||||
|
||||
#. module: report_pdf_options
|
||||
#: model:ir.model.fields,field_description:report_pdf_options.field_ir_actions_report__default_print_option
|
||||
msgid "Default printing option"
|
||||
msgstr "Opción de impresión por defecto"
|
||||
|
||||
#. module: report_pdf_options
|
||||
#. openerp-web
|
||||
#: code:addons/report_pdf_options/static/src/xml/report_pdf_options.xml:0
|
||||
#: model:ir.model.fields.selection,name:report_pdf_options.selection__ir_actions_report__default_print_option__download
|
||||
#, python-format
|
||||
msgid "Download"
|
||||
msgstr "Descargar"
|
||||
|
||||
#. module: report_pdf_options
|
||||
#. openerp-web
|
||||
#: code:addons/report_pdf_options/static/src/xml/report_pdf_options.xml:0
|
||||
#: model:ir.model.fields.selection,name:report_pdf_options.selection__ir_actions_report__default_print_option__open
|
||||
#, python-format
|
||||
msgid "Open"
|
||||
msgstr "Abrir"
|
||||
|
||||
#. module: report_pdf_options
|
||||
#. openerp-web
|
||||
#: code:addons/report_pdf_options/static/src/xml/report_pdf_options.xml:0
|
||||
#: model:ir.model.fields.selection,name:report_pdf_options.selection__ir_actions_report__default_print_option__print
|
||||
#, python-format
|
||||
msgid "Print"
|
||||
msgstr "Imprimir"
|
||||
|
||||
#. module: report_pdf_options
|
||||
#. openerp-web
|
||||
#: code:addons/report_pdf_options/static/src/js/qwebactionmanager.js:0
|
||||
#, python-format
|
||||
msgid "Report"
|
||||
msgstr "Reporte"
|
||||
|
||||
#. module: report_pdf_options
|
||||
#: model:ir.model,name:report_pdf_options.model_ir_actions_report
|
||||
msgid "Report Action"
|
||||
msgstr "Acción de informe"
|
||||
|
||||
#. module: report_pdf_options
|
||||
#. openerp-web
|
||||
#: code:addons/report_pdf_options/static/src/js/qwebactionmanager.js:0
|
||||
#, python-format
|
||||
msgid "What do you want to do?"
|
||||
msgstr "Que acción quiere ejecutar?"
|
||||
|
||||
#. module: report_pdf_options
|
||||
#. openerp-web
|
||||
#: code:addons/report_pdf_options/static/src/xml/report_pdf_options.xml:0
|
||||
#, python-format
|
||||
msgid "report"
|
||||
msgstr "reporte"
|
||||
|
||||
#. module: report_pdf_options
|
||||
#. openerp-web
|
||||
#: code:addons/report_pdf_options/static/src/xml/report_pdf_options.xml:0
|
||||
#, python-format
|
||||
msgid "set a default option for this"
|
||||
msgstr "Establecer una opción por defecto para este"
|
||||
|
After Width: | Height: | Size: 205 KiB |
|
After Width: | Height: | Size: 194 KiB |
@ -0,0 +1 @@
|
||||
from . import ir_actions
|
||||
@ -0,0 +1,24 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class IrActionsReportXml(models.Model):
|
||||
_inherit = 'ir.actions.report'
|
||||
|
||||
default_print_option = fields.Selection(selection=[
|
||||
('print', 'Print'),
|
||||
('download', 'Download'),
|
||||
('open', 'Open')
|
||||
], string='Default printing option')
|
||||
|
||||
def _get_readable_fields(self):
|
||||
data = super()._get_readable_fields()
|
||||
data.add('default_print_option')
|
||||
return data
|
||||
|
||||
def report_action(self, docids, data=None, config=True):
|
||||
data = super(IrActionsReportXml, self).report_action(docids, data, config)
|
||||
data['id'] = self.id
|
||||
data['default_print_option'] = self.default_print_option
|
||||
return data
|
||||
|
After Width: | Height: | Size: 1.4 MiB |
@ -0,0 +1,41 @@
|
||||
<section class="oe_container">
|
||||
<div class="oe_row oe_spaced">
|
||||
<div class="oe_span12">
|
||||
<h2 class="oe_slogan">Report Print Options</h2>
|
||||
<h3 class="oe_slogan">Report direct print, download or open in new tab</h3>
|
||||
</div>
|
||||
<div class="oe_span12">
|
||||
<div class="oe_demo oe_pictue oe_screenshot">
|
||||
<img src="printoptions.gif">
|
||||
</div>
|
||||
<div class="oe_demo oe_pictue oe_screenshot">
|
||||
<img src="printoptions2.gif">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="oe_container oe_dark">
|
||||
<div class="oe_row oe_spaced">
|
||||
<div class="oe_span12">
|
||||
<h2 class="oe_slogan">Report Print Configuration</h2>
|
||||
<h3 class="oe_slogan">Set an option to perform by default</h3>
|
||||
</div>
|
||||
<div class="oe_span12">
|
||||
<div class="oe_demo oe_pictue oe_screenshot">
|
||||
<img src="setupoptions.gif">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="oe_container">
|
||||
<div class="oe_row oe_spaced">
|
||||
<div class="oe_span12">
|
||||
<h2 class="oe_slogan">The default option is executed</h2>
|
||||
</div>
|
||||
<div class="oe_span12">
|
||||
<div class="oe_demo oe_pictue oe_screenshot">
|
||||
<img src="defaultoption.gif">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
After Width: | Height: | Size: 1.8 MiB |
|
After Width: | Height: | Size: 2.0 MiB |
|
After Width: | Height: | Size: 246 KiB |
@ -0,0 +1,17 @@
|
||||
/** @odoo-module */
|
||||
|
||||
import { _t } from "@web/core/l10n/translation";
|
||||
import { Dialog } from "@web/core/dialog/dialog";
|
||||
import { Component } from "@odoo/owl";
|
||||
|
||||
export class PdfOptionsModal extends Component {
|
||||
setup() {
|
||||
this.title = _t("What do you want to do?");
|
||||
}
|
||||
executePdfAction(option) {
|
||||
this.props.onSelectOption(option);
|
||||
}
|
||||
}
|
||||
|
||||
PdfOptionsModal.template = "report_pdf_options.ButtonOptions";
|
||||
PdfOptionsModal.components = { Dialog };
|
||||
@ -0,0 +1,133 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import { _t } from "@web/core/l10n/translation";
|
||||
import { registry } from "@web/core/registry";
|
||||
import { PdfOptionsModal } from "./PdfOptionsModal";
|
||||
|
||||
function getWKHTMLTOPDF_MESSAGES(status) {
|
||||
const link = '<br><br><a href="http://wkhtmltopdf.org/" target="_blank">wkhtmltopdf.org</a>'; // FIXME missing markup
|
||||
const _status = {
|
||||
broken:
|
||||
_t(
|
||||
"Your installation of Wkhtmltopdf seems to be broken. The report will be shown in html."
|
||||
) + link,
|
||||
install:
|
||||
_t("Unable to find Wkhtmltopdf on this system. The report will be shown in html.") +
|
||||
link,
|
||||
upgrade:
|
||||
_t(
|
||||
"You should upgrade your version of Wkhtmltopdf to at least 0.12.0 in order to get a correct display of headers and footers as well as support for table-breaking between pages."
|
||||
) + link,
|
||||
workers: _t(
|
||||
"You need to start Odoo with at least two workers to print a pdf version of the reports."
|
||||
),
|
||||
};
|
||||
return _status[status];
|
||||
}
|
||||
|
||||
let iframeForReport;
|
||||
|
||||
function printPdf(url, callback) {
|
||||
let iframe = iframeForReport;
|
||||
if (!iframe) {
|
||||
iframe = iframeForReport = document.createElement('iframe');
|
||||
iframe.className = 'pdfIframe'
|
||||
document.body.appendChild(iframe);
|
||||
iframe.style.display = 'none';
|
||||
iframe.onload = function () {
|
||||
setTimeout(function () {
|
||||
iframe.focus();
|
||||
iframe.contentWindow.print();
|
||||
URL.revokeObjectURL(url)
|
||||
callback();
|
||||
}, 1);
|
||||
};
|
||||
}
|
||||
iframe.src = url;
|
||||
}
|
||||
|
||||
function getReportUrl(action, type) {
|
||||
let url = `/report/${type}/${action.report_name}`;
|
||||
const actionContext = action.context || {};
|
||||
if (action.data && JSON.stringify(action.data) !== "{}") {
|
||||
// build a query string with `action.data` (it's the place where reports
|
||||
// using a wizard to customize the output traditionally put their options)
|
||||
const options = encodeURIComponent(JSON.stringify(action.data));
|
||||
const context = encodeURIComponent(JSON.stringify(actionContext));
|
||||
url += `?options=${options}&context=${context}`;
|
||||
} else {
|
||||
if (actionContext.active_ids) {
|
||||
url += `/${actionContext.active_ids.join(",")}`;
|
||||
}
|
||||
if (type === "html") {
|
||||
const context = encodeURIComponent(JSON.stringify(env.services.user.context));
|
||||
url += `?context=${context}`;
|
||||
}
|
||||
}
|
||||
return url;
|
||||
}
|
||||
|
||||
let wkhtmltopdfStateProm;
|
||||
|
||||
registry
|
||||
.category("ir.actions.report handlers")
|
||||
.add("pdf_report_options_handler", async function (action, options, env) {
|
||||
let { default_print_option, report_type } = action;
|
||||
if (report_type !== "qweb-pdf" || default_print_option === "download")
|
||||
return false;
|
||||
if (!default_print_option) {
|
||||
let removeDialog;
|
||||
default_print_option = await new Promise(resolve => {
|
||||
removeDialog = env.services.dialog.add(
|
||||
PdfOptionsModal,
|
||||
{
|
||||
onSelectOption: (option) => {
|
||||
return resolve(option);
|
||||
}
|
||||
},
|
||||
{
|
||||
onClose: () => {
|
||||
resolve("close");
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
removeDialog();
|
||||
if (default_print_option === "close")
|
||||
return true;
|
||||
if (default_print_option === "download")
|
||||
return false;
|
||||
}
|
||||
|
||||
// check the state of wkhtmltopdf before proceeding
|
||||
if (!wkhtmltopdfStateProm) {
|
||||
wkhtmltopdfStateProm = await env.services.rpc("/report/check_wkhtmltopdf");
|
||||
}
|
||||
const state = wkhtmltopdfStateProm;
|
||||
// display a notification according to wkhtmltopdf's state
|
||||
const message = getWKHTMLTOPDF_MESSAGES(state)
|
||||
if (message) {
|
||||
env.services.notification.add(message, {
|
||||
sticky: true,
|
||||
title: _t("Report"),
|
||||
});
|
||||
}
|
||||
if (["upgrade", "ok"].includes(state)) {
|
||||
// trigger the download of the PDF report
|
||||
//return _triggerDownload(action, options, "pdf");
|
||||
const url = getReportUrl(action, "pdf");
|
||||
if (default_print_option === "print") {
|
||||
env.services.ui.block();
|
||||
printPdf(url, () => {
|
||||
env.services.ui.unblock();
|
||||
});
|
||||
}
|
||||
if (default_print_option === "open") {
|
||||
window.open(url);
|
||||
}
|
||||
return true;
|
||||
} else {
|
||||
// open the report in the client action if generating the PDF is not possible
|
||||
return _executeReportClientAction(action, options);
|
||||
}
|
||||
})
|
||||
@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<templates xml:space="preserve">
|
||||
<t t-name="report_pdf_options.ButtonOptions">
|
||||
<Dialog size="'sm'" title="title">
|
||||
<div style="text-align:center;">
|
||||
<div class="btn-group" role="group">
|
||||
<button class="btn btn-info" t-on-click="() => this.executePdfAction('print')">
|
||||
<i class="fa fa-print me-2"/>
|
||||
<span>Print</span>
|
||||
</button>
|
||||
<button class="btn btn-info" t-on-click="() => this.executePdfAction('download')">
|
||||
<i class="fa fa-download me-2"/>
|
||||
<span>Download</span>
|
||||
</button>
|
||||
<button class="btn btn-info" t-on-click="() => this.executePdfAction('open')">
|
||||
<i class="fa fa-file-text me-2"/>
|
||||
<span>Open</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</Dialog>
|
||||
</t>
|
||||
</templates>
|
||||
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
<record id="act_report_view_inherit" model="ir.ui.view">
|
||||
<field name="name">ir.actions.report.inherit</field>
|
||||
<field name="model">ir.actions.report</field>
|
||||
<field name="inherit_id" ref="base.act_report_xml_view"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//page[@name='advanced']" position="inside">
|
||||
<group>
|
||||
<field name="default_print_option" invisible="report_type != 'qweb-pdf'"/>
|
||||
</group>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
Loading…
Reference in new issue