-
-
Notifications
You must be signed in to change notification settings - Fork 881
[19.0][MIG] report_py3o: Migration to 19.0 #1132
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
154 commits
Select commit
Hold shift + click to select a range
294478c
Move to report_py3o after import from HG
lmignon b043e1e
Add setup
lmignon 2f3159c
[FIX] View inheritance may not use attribute 'string' as a selector.
lmignon f4864be
[IMP] New API + Short Hearder
lmignon a7e7a9a
Remove unicode string
lmignon d8f69c9
[IMP] Add the possiblity to get the template from an absolute path on…
lmignon fae5a21
[IMP] Allow user to use local fusion
lmignon 97b8e82
Add a simple way to extend the parser context
lmignon 59d118c
Remove ACL on removed model
lmignon fe28869
Improve filetype selection name
lmignon fffbd5f
Fix native flag
lmignon 9ab0561
fixed missing comma in model definition
faide b6f0fff
Add simple tests and fix call to fusion server
lmignon 3468cd3
Fix skip fusion on server when the fusion is local
lmignon b46a010
Improve tests
lmignon bfade37
Replace openerp element by odoo
lmignon 76ccf67
Small usability improvements
alexis-via 1c11ab9
Take into accounts most remarks of @lasley
alexis-via cde3c95
Replace plain SQL by orm
lmignon 129f890
rename module ir_report to ir_actions_report_xml
lmignon 17ef918
Add more tests and fixes issues found by tests
lmignon 1cfe989
[FIX] Check constrains only if report_type == 'py3o'
lmignon 8f92a83
report_py3o: full installation procedure in README
alexis-via ba5e434
Port report_py3o to Odoo v10
alexis-via 74dbdcc
Update version numbers
alexis-via 203c64c
PEP8 fix
alexis-via 91169fd
Update README
alexis-via 12dd14c
FIX double dot in filename
alexis-via 29d2786
Add access to report_xml object in report
alexis-via 6759df4
FIX Adapt test suite to my recent commit to avoid double dot on filen…
alexis-via b8652b8
[IMP] Escape 'False' when rendering value
lmignon 871e99b
[IMP] Replace old style parser by TransientModel
lmignon 6b7b6f1
[FIX] imports
99dd28f
[IMP] Minimizes memory consumption
lmignon e665e23
* travis.yml
d22a3da
Update and improve README instructions to setup py3o
alexis-via f49ed4b
[IMP] Allow to override/extend the way we get the fallback template
lmignon 22475d7
[FIX] report_py3o: fix exception when report must be saved as attache…
lmignon baa3695
OCA Transbot updated translations from Transifex
oca-transbot acc3a69
[FIX] delete PDF invoice attachment on invoice back to draft (native …
alexis-via e857d9f
[IMP] report_py3o: update authors and contributors
lmignon 1d77313
OCA Transbot updated translations from Transifex
oca-transbot 2e34d07
[IMP] report_py3o: prevent injections when retrieving the template fr…
lmignon 062be8f
OCA Transbot updated translations from Transifex
oca-transbot 2ece958
report_py3o: bump version following last merge
sbidoul 52d8d1e
Fix py3o freeze when using server fusion
1bfe910
Pass option for escaping False values to server
3be6267
Add option py3o_multi_in_one for Py3o reports
alexis-via 142e640
OCA Transbot updated translations from Transifex
oca-transbot 50cc529
[FIX] report_py3o: must return the path to the report
lmignon 44f1930
[IMP] report_py3o: Take into account print_report_name
lmignon c285f9e
OCA Transbot updated translations from Transifex
oca-transbot 9e28e77
[IMP] report_py3o: Allows to interpret \n and \t in texts, cleans htm…
omar7r 74aecfc
[FIX] Deletes an unnecessary function call
omar7r 3699a27
[FIX] report_py3o: Removes api.one
omar7r 040b6f4
[FIX] report_py3o: Import new dependencies in try...except
omar7r 811c3f5
[UPD] report_py3o: Bump version
omar7r 4a20522
OCA Transbot updated translations from Transifex
oca-transbot 8b067cf
[RFR] split off the fusion server to its own module
hbrunn 04964f9
Improve README.rst for report_py3o* modules
alexis-via ec304a2
[ADD] migration script to install report_py3o_fusion_server on upgrades
hbrunn 250a066
OCA Transbot updated translations from Transifex
oca-transbot 5a23498
[FIX] fallback to libreoffice conversion when no server is configured
hbrunn a6c4d59
[FIX] report_py3o: Bump version number
pedrobaeza a057873
[FIX]report_py3o: Escape correctly html characters.
jesusVMayor 26c0224
[IMP] check for template data, not for the id
hbrunn 329806a
[FIX] If this is not a py3o report, do nothing at all. In some cases …
SimoRubi eed8950
report_py3o: mention formatLang in README
sbidoul 8216b54
report_py3o_fusion_server: Add support for PDF Export options of libr…
alexis-via 5cfcb4c
[UPD] Update report_py3o.pot
oca-travis 8875a26
Translated using Weblate (Français)
kryskool e8492d2
[MIG] report_py3o, report_py3o_fusion_server: Migration to 12.0
lmignon 23f1010
[IMP] report_py2o: cleanup js
lmignon 68d415a
[12.0][MIG] improvement py3o_report_extender
3341e3f
Update i18n
sbejaoui b9d0981
[FIX] report_py3o: Use the right naming convention for the render method
lmignon 384a11d
[IMP] report_py3o: remove obsolete methods
lmignon 59e2bb0
[IMP] report_py3o: Document new methods available into the parser con…
lmignon 6da97ef
[FIX] report_py3o: Add missing method _merge_pdf.
lmignon 7ff6b45
[IMP][FIX] py3o_report, py3o_report_fusion_server: Compute the availa…
lmignon dc9cd87
[FIX] report_py3o: Add missing 'user' and 'lang' into the parser context
lmignon 253f406
[IMP] py3o_report: Allow to specify the lang when calling o_format_lang
lmignon c0d88fa
[FIX] report_py3o: Access to ir.config_parameter with sudo
lmignon 18d5f3b
[UPD] Update report_py3o.pot
oca-travis 4af484d
Update translation files
oca-transbot 7063ed3
[UPD] Update report_py3o.pot
oca-travis 52f69e7
Update translation files
oca-transbot d2147d7
Update README for report_py3o and report_py3o_fusion_server (#306)
alexis-via a01afc0
[FIX] report_py3o readme structure
sbidoul 81f3ecc
[UPD] README.rst
OCA-git-bot 16995f1
[IMP] report_py3o, report_py3o_fusion_server: black, isort
lmignon 27d185f
[MIG] report_py3o, report_py3o_fusion_server: Migration to 13.0
lmignon 112cadc
Make sure value is always set for computed fields
dupski deca675
[12.0][FIX] - report_py3o: run libreoffice in an isolated user instal…
sbejaoui fb7e068
[FIX] report_py3o: prettier xml after merge with master
lmignon 7bd5f4f
[FIX] make prettier happy
sbidoul 84eb07e
[UPD] Update report_py3o.pot
oca-travis e15ec71
[UPD] README.rst
OCA-git-bot cd374a8
Update translation files
oca-transbot 4d254ef
Update translation files
oca-transbot d166107
[14.0][MIG] report_py3o: Migration to 14.0
elmeriniemela ef42679
Update report_py3o/models/ir_actions_report.py
elmeriniemela cfd247f
[MIG] Use safe_eval wrapped time module. Fix deprecation warnings.
elmeriniemela 3ff6fc1
[IMP] Add ability to include properly formatted datetime field in a r…
elmeriniemela 5df6b61
[IMP] Workaround for genshi DeprecationWarning that makes runbot buil…
elmeriniemela 3cc8bc7
[IMP] Cleanup unnecessary imports
elmeriniemela ba49b98
[IMP] Remove except of IOError as its an alias to OSError in python3
elmeriniemela 309248d
run pre-commit
leemannd 56b87b9
[UPD] Update report_py3o.pot
oca-travis b4b6646
[UPD] README.rst
OCA-git-bot f018c52
[MIG] report_py3o: Migration to 15.0
phuctranfxvn 786ec32
[MIG] report_py3o to v16
alexis-via 6de7fba
[UPD] Update report_py3o.pot
df8a305
[UPD] README.rst
OCA-git-bot 660515d
[UPD] README.rst
OCA-git-bot ebf085a
Update translation files
weblate c47bfac
Translated using Weblate (Spanish)
Ivorra78 6d1c284
Translated using Weblate (Spanish (Argentina))
ibuioli 9297fcc
Translated using Weblate (Italian)
mymage 4178554
Update translation files
weblate 888b84c
Replaced `mktemp` with `mkstemp`
nydelzaf deb0679
Reformatted using pre-commit
nydelzaf b90545d
[BOT] post-merge updates
OCA-git-bot d2b5d0b
Translated using Weblate (Italian)
mymage 802aaf6
[IMP] remove python libs included in odoo from requirements
CRogos 2bc8469
[BOT] post-merge updates
OCA-git-bot 12e9dff
Translated using Weblate (Swedish)
jakobkrabbe 0e131fa
[FIX] _py3o_parser_context: fix call to format_date in old_format_lang
jdoutreloux 597f381
[BOT] post-merge updates
OCA-git-bot ff42dad
[IMP] report_py3o: use the standard file name behavior when zipping r…
ThomasBinsfeld 2bd62f0
[BOT] post-merge updates
OCA-git-bot 7a0fa51
[IMP] report_py3o: pre-commit auto fixes
bug2point0 69c9fbf
[17.0] [MIG] report_py3o
bug2point0 3b816b5
[IMP] replace deprecated pkg_resources with importlib.resources
bug2point0 241ba68
[18.0][MIG] report_py3o
sbejaoui dd6b8c5
[UPD] Update report_py3o.pot
ec2349c
[BOT] post-merge updates
OCA-git-bot 8dc7881
Translated using Weblate (Italian)
mymage 657209c
Translated using Weblate (French)
glitchov 584d547
[FIX] *: align inherited method signature with odoo update
niyasraphy ec96707
[BOT] post-merge updates
OCA-git-bot 534712b
Translated using Weblate (Turkish)
tsezgin 5b909b9
Translated using Weblate (Turkish)
tsezgin 42f8aae
[FIX]report_py3o:_format_lang function
bjouini-acsone 2911eae
Translated using Weblate (Catalan)
RicardCForgeFlow 29333b1
[UPD] Update report_py3o.pot
8dd7685
Update translation files
weblate 00fb3ab
Translated using Weblate (Italian)
mymage b96cf0f
Translated using Weblate (Slovenian)
sysadminmatmoz 254c42f
Translated using Weblate (Slovenian)
sysadminmatmoz 2ad5e46
[BOT] post-merge updates
OCA-git-bot 0a57387
[IMP] report_py3o: pre-commit auto fixes
kopeyev c4731ee
[MIG] report_py3o: Migration to 19.0
kopeyev ee09afa
[IMP] report_py3o: add test for portal user report access with sudo
kopeyev File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,236 @@ | ||
| .. image:: https://odoo-community.org/readme-banner-image | ||
| :target: https://odoo-community.org/get-involved?utm_source=readme | ||
| :alt: Odoo Community Association | ||
|
|
||
| ================== | ||
| Py3o Report Engine | ||
| ================== | ||
|
|
||
| .. | ||
| !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| !! This file is generated by oca-gen-addon-readme !! | ||
| !! changes will be overwritten. !! | ||
| !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
| !! source digest: sha256:5247a746d03835a38b3c79cc709156047927649c6f612f0ff0312619cfb57c48 | ||
| !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
|
|
||
| .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png | ||
| :target: https://odoo-community.org/page/development-status | ||
| :alt: Beta | ||
| .. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png | ||
| :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html | ||
| :alt: License: AGPL-3 | ||
| .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Freporting--engine-lightgray.png?logo=github | ||
| :target: https://github.com/OCA/reporting-engine/tree/19.0/report_py3o | ||
| :alt: OCA/reporting-engine | ||
| .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png | ||
| :target: https://translation.odoo-community.org/projects/reporting-engine-19-0/reporting-engine-19-0-report_py3o | ||
| :alt: Translate me on Weblate | ||
| .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png | ||
| :target: https://runboat.odoo-community.org/builds?repo=OCA/reporting-engine&target_branch=19.0 | ||
| :alt: Try me on Runboat | ||
|
|
||
| |badge1| |badge2| |badge3| |badge4| |badge5| | ||
|
|
||
| The py3o reporting engine is a reporting engine for Odoo based on | ||
| [Libreoffice](http://www.libreoffice.org/): | ||
|
|
||
| - the report is created with Libreoffice (ODT or ODS), | ||
| - the report is stored on the server in OpenDocument format (.odt or | ||
| .ods file) | ||
| - the report is sent to the user in OpenDocument format or in any output | ||
| format supported by Libreoffice (PDF, HTML, DOC, DOCX, Docbook, XLS, | ||
| etc.) | ||
|
|
||
| The key advantages of a Libreoffice based reporting engine are: | ||
|
|
||
| - no need to be a developer to create or modify a report: the report is | ||
| created and modified with Libreoffice. So this reporting engine has a | ||
| full WYSIWYG report development tool! | ||
| - For a PDF report in A4/Letter format, it's easier to develop it with a | ||
| tool such as Libreoffice that is designed to create A4/Letter | ||
| documents than to develop it in HTML/CSS, also some print | ||
| peculiarities (backgrounds, margin boxes) are not very well supported | ||
| by the HTML/CSS based solutions. | ||
| - If you want your users to be able to modify the document after its | ||
| generation by Odoo, just configure the document with ODT output (or | ||
| DOC or DOCX) and the user will be able to modify the document with | ||
| Libreoffice (or Word) after its generation by Odoo. | ||
| - Easy development of spreadsheet reports in ODS format (XLS output | ||
| possible). | ||
|
|
||
| This module *report_py3o* is the base module for the Py3o reporting | ||
| engine. If used alone, it will spawn a libreoffice process for each ODT | ||
| to PDF (or ODT to DOCX, ..) document conversion. This is slow and can | ||
| become a problem if you have a lot of reports to convert from ODT to | ||
| another format. In this case, you should consider the additionnal module | ||
| *report_py3o_fusion_server* which is designed to work with a libreoffice | ||
| daemon. With *report_py3o_fusion_server*, the technical environnement is | ||
| more complex to setup because you have to install additionnal software | ||
| components and run 2 daemons, but you have much better performances and | ||
| you can configure the libreoffice PDF export options in Odoo (allows to | ||
| generate PDF forms, PDF/A documents, password-protected PDFs, | ||
| watermarked PDFs, etc.). | ||
|
|
||
| This reporting engine is an alternative to | ||
| [Aeroo](https://github.com/aeroo-community/aeroo_reports): these two | ||
| reporting engines have similar features but their implementation is | ||
| entirely different. You cannot use aeroo templates as drop in | ||
| replacement though, you'll have to change a few details. | ||
|
|
||
| **Table of contents** | ||
|
|
||
| .. contents:: | ||
| :local: | ||
|
|
||
| Installation | ||
| ============ | ||
|
|
||
| Install the required python libs: | ||
|
|
||
| :literal:`` pip install py3o.template pip install py3o.formats`\ \` | ||
|
|
||
| To allow the conversion of ODT or ODS reports to other formats (PDF, | ||
| DOC, DOCX, etc.), install libreoffice: | ||
|
|
||
| :literal:`` apt-get --no-install-recommends install libreoffice`\ \` | ||
|
|
||
| Configuration | ||
| ============= | ||
|
|
||
| For example, to replace the native invoice report by a custom py3o | ||
| report, add the following XML file in your custom module: | ||
|
|
||
| :literal:`` <?xml version="1.0" encoding="utf-8"?> <odoo> <record id="account.account_invoices" model="ir.actions.report"> <field name="report_type">py3o</field> <field name="py3o_filetype">odt</field> <field name="module">my_custom_module_base</field> <field name="py3o_template_fallback">report/account_invoice.odt</field> </record> </odoo>`\ \` | ||
|
|
||
| where *my_custom_module_base* is the name of the custom Odoo module. In | ||
| this example, the invoice ODT file is located in | ||
| *my_custom_module_base/report/account_invoice.odt*. | ||
|
|
||
| It's also possible to reference a template located in a trusted path of | ||
| your Odoo server. In this case you must let the *module* entry empty and | ||
| specify the path to the template as *py3o_template_fallback*. | ||
|
|
||
| :literal:`` <?xml version="1.0" encoding="utf-8"?> <odoo> <record id="account.account_invoices" model="ir.actions.report"> <field name="report_type">py3o</field> <field name="py3o_filetype">odt</field> <field name="py3o_template_fallback">/odoo/templates/py3o/report/account_invoice.odt</field> </record> </odoo>`\ \` | ||
|
|
||
| Moreover, you must also modify the Odoo server configuration file to | ||
| declare the allowed root directory for your py3o templates. Only | ||
| templates located into this directory can be loaded by py3o report. | ||
|
|
||
| :literal:`` [options] ... [report_py3o] root_tmpl_path=/odoo/templates/py3o`\ \` | ||
|
|
||
| If you want an invoice in PDF format instead of ODT format, the XML file | ||
| should look like: | ||
|
|
||
| :literal:`` <?xml version="1.0" encoding="utf-8"?> <odoo> <record id="account.account_invoices" model="ir.actions.report"> <field name="report_type">py3o</field> <field name="py3o_filetype">pdf</field> <field name="module">my_custom_module_base</field> <field name="py3o_template_fallback">report/account_invoice.odt</field> </record> </odoo>`\ \` | ||
|
|
||
| If you want to add a new py3o PDF report (and not replace a native | ||
| report), the XML file should look like this: | ||
|
|
||
| :literal:`` <?xml version="1.0" encoding="utf-8"?> <odoo> <record id="partner_summary_report" model="ir.actions.report"> <field name="name">Partner Summary</field> <field name="model">res.partner</field> <field name="report_name">res.partner.summary</field> <field name="report_type">py3o</field> <field name="py3o_filetype">pdf</field> <field name="module">my_custom_module_base</field> <field name="py3o_template_fallback">report/partner_summary.odt</field> <!-- Add entry in "Print" drop-down list --> <field name="binding_type">report</field> <field name="binding_model_id" ref="base.model_res_partner"/> </record> </odoo>`\ \` | ||
|
|
||
| ## Configuration parameters | ||
|
|
||
| py3o.conversion_command The command to be used to run the conversion, | ||
| libreoffice by default. If you change this, whatever you set here must | ||
| accept the parameters --headless --convert-to $ext $file and put the | ||
| resulting file into $file's directory with extension $ext. The command | ||
| will be started in $file's directory. | ||
|
|
||
| Usage | ||
| ===== | ||
|
|
||
| The templating language is [extensively | ||
| documented](http://py3otemplate.readthedocs.io/en/latest/templating.html), | ||
| the records are exposed in libreoffice as objects, on which you can also | ||
| call functions. | ||
|
|
||
| ## Available functions and objects | ||
|
|
||
| user Browse record of current user | ||
|
|
||
| lang The user's company's language as string (ISO code) | ||
|
|
||
| b64decode base64.b64decode | ||
|
|
||
| format_multiline_value(string) Generate the ODF equivalent of <br/> and | ||
| for multiline fields (ODF is XML internally, so those would be skipped | ||
| otherwise) | ||
|
|
||
| html_sanitize(string) Sanitize HTML string | ||
|
|
||
| time Python's time module | ||
|
|
||
| display_address(partner) Return a formatted string of the partner's | ||
| address | ||
|
|
||
| o_format_lang(value, lang_code=False, digits=None, grouping=True, | ||
| monetary=False, dp=False, currency_obj=False, no_break_space=True) | ||
| Return a formatted numeric or monetary value according to the context | ||
| language and timezone | ||
|
|
||
| o_format_date(value, lang_code=False, date_format=False) Return a | ||
| formatted date or time value according to the context language and | ||
| timezone | ||
|
|
||
| ## Sample report templates | ||
|
|
||
| Sample py3o report templates for the main Odoo native reports (invoice, | ||
| sale order, purchase order, picking, etc.) are available on the Github | ||
| project | ||
| [odoo-py3o-report-templates](https://github.com/akretion/odoo-py3o-report-templates). | ||
|
|
||
| Known issues / Roadmap | ||
| ====================== | ||
|
|
||
| - generate barcode ? | ||
| - add more detailed example in demo file to showcase features | ||
| - add migration guide aeroo -> py3o | ||
|
|
||
| Bug Tracker | ||
| =========== | ||
|
|
||
| Bugs are tracked on `GitHub Issues <https://github.com/OCA/reporting-engine/issues>`_. | ||
| In case of trouble, please check there if your issue has already been reported. | ||
| If you spotted it first, help us to smash it by providing a detailed and welcomed | ||
| `feedback <https://github.com/OCA/reporting-engine/issues/new?body=module:%20report_py3o%0Aversion:%2019.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_. | ||
|
|
||
| Do not contact contributors directly about support or help with technical issues. | ||
|
|
||
| Credits | ||
| ======= | ||
|
|
||
| Authors | ||
| ------- | ||
|
|
||
| * XCG Consulting | ||
| * ACSONE SA/NV | ||
|
|
||
| Contributors | ||
| ------------ | ||
|
|
||
| - Florent Aide ([XCG Consulting](http://odoo.consulting/)) | ||
| - Laurent Mignon <<laurent.mignon@acsone.eu>>, | ||
| - Alexis de Lattre <<alexis.delattre@akretion.com>>, | ||
| - Guewen Baconnier <<guewen.baconnier@camptocamp.com>> | ||
| - Omar Casti??eira <<omar@comunitea.com>> | ||
| - Holger Brunn <<hbrunn@therp.nl>> | ||
| - Phuc Tran Thanh <<phuc@trobz.com>> | ||
| - Souheil Bejaoui <<souheil.bejaoui@acsone.eu>>, | ||
|
|
||
| Maintainers | ||
| ----------- | ||
|
|
||
| This module is maintained by the OCA. | ||
|
|
||
| .. image:: https://odoo-community.org/logo.png | ||
| :alt: Odoo Community Association | ||
| :target: https://odoo-community.org | ||
|
|
||
| OCA, or the Odoo Community Association, is a nonprofit organization whose | ||
| mission is to support the collaborative development of Odoo features and | ||
| promote its widespread use. | ||
|
|
||
| This module is part of the `OCA/reporting-engine <https://github.com/OCA/reporting-engine/tree/19.0/report_py3o>`_ project on GitHub. | ||
|
|
||
| You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,3 @@ | ||
| from . import models | ||
| from . import controllers | ||
| from . import wizard |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,29 @@ | ||
| # Copyright 2013 XCG Consulting (http://odoo.consulting) | ||
| # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). | ||
| { | ||
| "name": "Py3o Report Engine", | ||
| "summary": "Reporting engine based on Libreoffice (ODT -> ODT, " | ||
| "ODT -> PDF, ODT -> DOC, ODT -> DOCX, ODS -> ODS, etc.)", | ||
| "version": "19.0.1.0.0", | ||
| "category": "Reporting", | ||
| "license": "AGPL-3", | ||
| "author": "XCG Consulting, ACSONE SA/NV, Odoo Community Association (OCA)", | ||
| "website": "https://github.com/OCA/reporting-engine", | ||
| "depends": ["web"], | ||
| "external_dependencies": { | ||
| "python": ["py3o.template", "py3o.formats"], | ||
| "deb": ["libreoffice"], | ||
| }, | ||
| "assets": { | ||
| "web.assets_backend": [ | ||
| "report_py3o/static/src/js/py3oactionservice.esm.js", | ||
| ], | ||
| }, | ||
| "data": [ | ||
| "security/ir.model.access.csv", | ||
| "views/py3o_template.xml", | ||
| "views/ir_actions_report.xml", | ||
| "demo/report_py3o.xml", | ||
| ], | ||
| "installable": True, | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| from . import main |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,96 @@ | ||
| # Copyright 2017 ACSONE SA/NV | ||
| # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) | ||
| import json | ||
| import mimetypes | ||
| from urllib.parse import parse_qs | ||
|
|
||
| from werkzeug import exceptions | ||
| from werkzeug.datastructures import MultiDict | ||
|
|
||
| from odoo.http import content_disposition, request, route, serialize_exception | ||
| from odoo.tools import html_escape | ||
|
|
||
| from odoo.addons.web.controllers.report import ReportController as ReportControllerBase | ||
|
|
||
|
|
||
| class ReportController(ReportControllerBase): | ||
| @route() | ||
| def report_routes(self, reportname, docids=None, converter=None, **data): | ||
| if converter != "py3o": | ||
| return super().report_routes( | ||
| reportname=reportname, docids=docids, converter=converter, **data | ||
| ) | ||
| context = dict(request.env.context) | ||
|
|
||
| if docids: | ||
| docids = [int(i) for i in docids.split(",")] | ||
| if data.get("options"): | ||
| data.update(json.loads(data.pop("options"))) | ||
| if data.get("context"): | ||
| # Ignore 'lang' here, because the context in data is the | ||
| # one from the webclient *but* if the user explicitely wants to | ||
| # change the lang, this mechanism overwrites it. | ||
| data["context"] = json.loads(data["context"]) | ||
| if data["context"].get("lang"): | ||
| del data["context"]["lang"] | ||
| context.update(data["context"]) | ||
|
|
||
| ir_action = request.env["ir.actions.report"].sudo() | ||
| action_py3o_report = ir_action.get_from_report_name( | ||
| reportname, "py3o" | ||
| ).with_context(**context) | ||
| if not action_py3o_report: | ||
| raise exceptions.HTTPException( | ||
| description=f"Py3o action report not found for report_name {reportname}" | ||
| ) | ||
| res, filetype = ir_action._render(reportname, docids, data) | ||
| filename = action_py3o_report.gen_report_download_filename(docids, data) | ||
| if not filename.endswith(filetype): | ||
| filename = f"{filename}.{filetype}" | ||
| content_type = mimetypes.guess_type("x." + filetype)[0] | ||
| http_headers = [ | ||
| ("Content-Type", content_type), | ||
| ("Content-Length", len(res)), | ||
| ("Content-Disposition", content_disposition(filename)), | ||
| ] | ||
| return request.make_response(res, headers=http_headers) | ||
|
|
||
| @route() | ||
| def report_download(self, data, context=None, token=None, readonly=True): | ||
| """This function is used by 'qwebactionmanager.js' in order to trigger | ||
| the download of a py3o/controller report. | ||
|
|
||
| :param data: a javascript array JSON.stringified containg report | ||
| internal url ([0]) and type [1] | ||
| :returns: Response with a filetoken cookie and an attachment header | ||
| """ | ||
| requestcontent = json.loads(data) | ||
| url, report_type = requestcontent[0], requestcontent[1] | ||
| if "py3o" not in report_type: | ||
| return super().report_download( | ||
| data, context, token=token, readonly=readonly | ||
| ) | ||
| try: | ||
| reportname = url.split("/report/py3o/")[1].split("?")[0] | ||
| docids = None | ||
| if "/" in reportname: | ||
| reportname, docids = reportname.split("/") | ||
|
|
||
| if docids: | ||
| # Generic report: | ||
| response = self.report_routes( | ||
| reportname, docids=docids, converter="py3o" | ||
| ) | ||
| else: | ||
| # Particular report: | ||
| # decoding the args represented in JSON | ||
| data = list(MultiDict(parse_qs(url.split("?")[1])).items()) | ||
| response = self.report_routes( | ||
| reportname, converter="py3o", **dict(data) | ||
| ) | ||
| response.set_cookie("fileToken", context) | ||
| return response | ||
| except Exception as e: | ||
| se = serialize_exception(e) | ||
| error = {"code": 200, "message": "Odoo Server Error", "data": se} | ||
| return request.make_response(html_escape(json.dumps(error))) | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,20 @@ | ||
| <?xml version="1.0" encoding="utf-8" ?> | ||
| <!-- Copyright 2016 ACSONE SA/NV | ||
| License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). --> | ||
| <odoo> | ||
| <record id="res_users_report_py3o" model="ir.actions.report"> | ||
| <field name="name">Py3o Demo Report</field> | ||
| <field name="type">ir.actions.report</field> | ||
| <field name="model">res.users</field> | ||
| <field name="report_name">py3o_user_info</field> | ||
| <field name="report_type">py3o</field> | ||
| <field name="py3o_filetype">odt</field> | ||
| <field name="module">report_py3o</field> | ||
| <field name="py3o_template_fallback">demo/res_user.odt</field> | ||
| <field | ||
| name="print_report_name" | ||
| >object.name.replace(' ', '_') + '-demo.odt'</field> | ||
| <field name="binding_model_id" ref="base.model_res_users" /> | ||
| <field name="binding_type">report</field> | ||
| </record> | ||
| </odoo> |
Binary file not shown.
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.