Browse Source

Merge pull request #1269 from Tecnativa/12.0-mig-web_export_view

12.0 mig web_export_view
pull/1270/merge
Pedro M. Baeza 5 years ago
committed by GitHub
parent
commit
22504003fd
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 122
      web_export_view/README.rst
  2. 1
      web_export_view/__init__.py
  3. 30
      web_export_view/__manifest__.py
  4. 1
      web_export_view/controllers/__init__.py
  5. 34
      web_export_view/controllers/controllers.py
  6. 41
      web_export_view/i18n/da.po
  7. 45
      web_export_view/i18n/de.po
  8. 45
      web_export_view/i18n/es.po
  9. 46
      web_export_view/i18n/hr.po
  10. 46
      web_export_view/i18n/nl_NL.po
  11. 47
      web_export_view/i18n/pt_BR.po
  12. 41
      web_export_view/i18n/web_export_view.pot
  13. 46
      web_export_view/i18n/zh_CN.po
  14. 2
      web_export_view/readme/CONFIGURATION.rst
  15. 2
      web_export_view/readme/CONFIGURE.rst
  16. 13
      web_export_view/readme/CONTRIBUTORS.rst
  17. 11
      web_export_view/readme/DESCRIPTION.rst
  18. 9
      web_export_view/readme/ROADMAP.rst
  19. 3
      web_export_view/readme/USAGE.rst
  20. 9
      web_export_view/security/groups.xml
  21. BIN
      web_export_view/static/description/icon.png
  22. 653
      web_export_view/static/description/index.html
  23. 133
      web_export_view/static/src/js/web_export_view.js
  24. 11
      web_export_view/static/src/xml/web_export_view_template.xml
  25. 9
      web_export_view/views/web_export_view_view.xml

122
web_export_view/README.rst

@ -0,0 +1,122 @@
=======================
Web Export Current View
=======================
.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |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/licence-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%2Fweb-lightgray.png?logo=github
:target: https://github.com/OCA/web/tree/12.0/web_export_view
:alt: OCA/web
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/web-12-0/web-12-0-web_export_view
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
:target: https://runbot.odoo-community.org/runbot/162/12.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
One of the best Odoo's features is exporting custom data to CSV/XLS. You can
do it by clicking on the export link in the sidebar. The export action allows
us to configure what to be exported by selecting fields, etc, and allows you
to save your export as a template so that you can export it once again without
having to configure it again.
That feature is as great and advanced as limited for an everyday experience.
A lot of customers want simply to export the tree view they are looking to.
If you miss this feature as us, probably you'll find an answer into our
web_export_view module.
**Table of contents**
.. contents::
:local:
Configuration
=============
If we wanted to disallow users to use the features provided by this module, we
can add them to the group *Disallow Export View Data to Excel*.
Usage
=====
After you installed it, you'll find an additional link 'Export current view'
right on the sidebar. By clicking on it you'll get a XLS file contains
the same data of the tree view you are looking at, headers included.
Known issues / Roadmap
======================
Pedro M. Baeza (pedro.baeza@tecnativa.com):
When you have groups, they are not exported to Excel. It would be desirable to have this option.
One of the problems with this module is that you can't export data from a view with mode="tree".
Changing the approach to have the button always visible (we should relocate it also to another place,
as the current location is not visible for these views), and digging correctly in the DOM elements
for this view (very similar to the normal tree view one) will do the trick. This will also help users
to locate the feature, as it's hidden now by default and users don't think about selecting records.
The behavior will be: nothing selected > you export all (including groups).
Something or all selected: export the selection.
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/web/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
`feedback <https://github.com/OCA/web/issues/new?body=module:%20web_export_view%0Aversion:%2012.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
~~~~~~~
* Henry Zhou
* Agile Business Group
Contributors
~~~~~~~~~~~~
* Henry Zhou (MAXodoo) <zhouhenry@live.com>
* Rodney <https://github.com/rv-clearcorp>
* Simone Orsi <simahawk@gmail.com>
* Lorenzo Battistini <lorenzo.battistini@agilebg.com>
* Stefan Rijnhart <stefan@therp.nl>
* Leonardo Pistone <leonardo.pistone@camptocamp.com>
* Jose Maria Bernet <josemaria.bernet@guadaltech.es>
* Alexandre Díaz <dev@redneboa.es>
* Valtteri Lattu <valtteri.lattu@tawasta.fi>
* `Tecnativa <https://www.tecnativa.com>`_:
* David Vidal
* Ernesto Tejeda
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/web <https://github.com/OCA/web/tree/12.0/web_export_view>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

1
web_export_view/__init__.py

@ -0,0 +1 @@
from . import controllers

30
web_export_view/__manifest__.py

@ -0,0 +1,30 @@
# Copyright 2012 Agile Business Group
# Copyright 2012 Domsense srl (<http://www.domsense.com>)
# Copyright 2012 Therp BV
# Copyright 2016 Henry Zhou (http://www.maxodoo.com)
# Copyright 2016 Rodney (http://clearcorp.cr/)
# Copyright 2019 Tecnativa
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
{
'name': 'Web Export Current View',
'version': '12.0.1.0.0',
'category': 'Web',
'author': 'Henry Zhou, Agile Business Group, \
Odoo Community Association (OCA)',
'website': 'https://github.com/OCA/web',
'license': 'AGPL-3',
'depends': [
'web',
],
"data": [
'security/groups.xml',
'views/web_export_view_view.xml',
],
'qweb': [
"static/src/xml/web_export_view_template.xml",
],
'installable': True,
'auto_install': False,
}

1
web_export_view/controllers/__init__.py

@ -0,0 +1 @@
from . import controllers

34
web_export_view/controllers/controllers.py

@ -0,0 +1,34 @@
# Copyright 2016 Henry Zhou (http://www.maxodoo.com)
# Copyright 2016 Rodney (http://clearcorp.cr/)
# Copyright 2012 Agile Business Group
# Copyright 2012 Therp BV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
import json
import odoo.http as http
from odoo.http import request
from odoo.addons.web.controllers.main import ExcelExport
class ExcelExportView(ExcelExport):
def __getattribute__(self, name):
if name == 'fmt':
raise AttributeError()
return super(ExcelExportView, self).__getattribute__(name)
@http.route('/web/export/xls_view', type='http', auth='user')
def export_xls_view(self, data, token):
data = json.loads(data)
model = data.get('model', [])
columns_headers = data.get('headers', [])
rows = data.get('rows', [])
return request.make_response(
self.from_data(columns_headers, rows),
headers=[
('Content-Disposition', 'attachment; filename="%s"'
% self.filename(model)),
('Content-Type', self.content_type)
],
cookies={'fileToken': token}
)

41
web_export_view/i18n/da.po

@ -0,0 +1,41 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * web_export_view
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: da\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
#. module: web_export_view
#: model:res.groups,name:web_export_view.group_disallow_export_view_data_excel
msgid "Disallow Export View Data to Excel"
msgstr ""
#. module: web_export_view
#. openerp-web
#: code:addons/web_export_view/static/src/xml/web_export_view_template.xml:6
#, python-format
msgid "Export xls"
msgstr ""
#. module: web_export_view
#. openerp-web
#: code:addons/web_export_view/static/src/js/web_export_view.js:90
#, python-format
msgid "False"
msgstr ""
#. module: web_export_view
#. openerp-web
#: code:addons/web_export_view/static/src/js/web_export_view.js:90
#, python-format
msgid "True"
msgstr ""

45
web_export_view/i18n/de.po

@ -0,0 +1,45 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * web_export_view
#
# Translators:
# Niki Waibel <niki.waibel@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-04-28 18:03+0000\n"
"PO-Revision-Date: 2017-04-28 18:03+0000\n"
"Last-Translator: Niki Waibel <niki.waibel@gmail.com>, 2017\n"
"Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: web_export_view
#: model:res.groups,name:web_export_view.group_disallow_export_view_data_excel
msgid "Disallow Export View Data to Excel"
msgstr ""
#. module: web_export_view
#. openerp-web
#: code:addons/web_export_view/static/src/xml/web_export_view_template.xml:6
#, python-format
msgid "Export xls"
msgstr "Exportiere xls"
#. module: web_export_view
#. openerp-web
#: code:addons/web_export_view/static/src/js/web_export_view.js:90
#, python-format
msgid "False"
msgstr "Falsch"
#. module: web_export_view
#. openerp-web
#: code:addons/web_export_view/static/src/js/web_export_view.js:90
#, python-format
msgid "True"
msgstr "Richtig"

45
web_export_view/i18n/es.po

@ -0,0 +1,45 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * web_export_view
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2016
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-04-28 18:03+0000\n"
"PO-Revision-Date: 2017-04-28 18:03+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2016\n"
"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: web_export_view
#: model:res.groups,name:web_export_view.group_disallow_export_view_data_excel
msgid "Disallow Export View Data to Excel"
msgstr ""
#. module: web_export_view
#. openerp-web
#: code:addons/web_export_view/static/src/xml/web_export_view_template.xml:6
#, python-format
msgid "Export xls"
msgstr "Exportar XLS"
#. module: web_export_view
#. openerp-web
#: code:addons/web_export_view/static/src/js/web_export_view.js:90
#, python-format
msgid "False"
msgstr "Falso"
#. module: web_export_view
#. openerp-web
#: code:addons/web_export_view/static/src/js/web_export_view.js:90
#, python-format
msgid "True"
msgstr "Verdadero"

46
web_export_view/i18n/hr.po

@ -0,0 +1,46 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * web_export_view
#
# Translators:
# Bole <bole@dajmi5.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-04-28 18:03+0000\n"
"PO-Revision-Date: 2017-04-28 18:03+0000\n"
"Last-Translator: Bole <bole@dajmi5.com>, 2017\n"
"Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n"
"Language: hr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
#. module: web_export_view
#: model:res.groups,name:web_export_view.group_disallow_export_view_data_excel
msgid "Disallow Export View Data to Excel"
msgstr ""
#. module: web_export_view
#. openerp-web
#: code:addons/web_export_view/static/src/xml/web_export_view_template.xml:6
#, python-format
msgid "Export xls"
msgstr "Izvoz u XLS"
#. module: web_export_view
#. openerp-web
#: code:addons/web_export_view/static/src/js/web_export_view.js:90
#, python-format
msgid "False"
msgstr "NE"
#. module: web_export_view
#. openerp-web
#: code:addons/web_export_view/static/src/js/web_export_view.js:90
#, python-format
msgid "True"
msgstr "DA"

46
web_export_view/i18n/nl_NL.po

@ -0,0 +1,46 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * web_export_view
#
# Translators:
# Peter Hageman <hageman.p@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-07-01 03:34+0000\n"
"PO-Revision-Date: 2017-07-01 03:34+0000\n"
"Last-Translator: Peter Hageman <hageman.p@gmail.com>, 2017\n"
"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/"
"teams/23907/nl_NL/)\n"
"Language: nl_NL\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: web_export_view
#: model:res.groups,name:web_export_view.group_disallow_export_view_data_excel
msgid "Disallow Export View Data to Excel"
msgstr ""
#. module: web_export_view
#. openerp-web
#: code:addons/web_export_view/static/src/xml/web_export_view_template.xml:6
#, python-format
msgid "Export xls"
msgstr "Exporteer xls"
#. module: web_export_view
#. openerp-web
#: code:addons/web_export_view/static/src/js/web_export_view.js:90
#, python-format
msgid "False"
msgstr "Fout"
#. module: web_export_view
#. openerp-web
#: code:addons/web_export_view/static/src/js/web_export_view.js:90
#, python-format
msgid "True"
msgstr "Waar"

47
web_export_view/i18n/pt_BR.po

@ -0,0 +1,47 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * web_export_view
#
# Translators:
# Rodrigo de Almeida Sottomaior Macedo <rmsolucoeseminformatic4@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-06-22 08:26+0000\n"
"PO-Revision-Date: 2017-06-22 08:26+0000\n"
"Last-Translator: Rodrigo de Almeida Sottomaior Macedo "
"<rmsolucoeseminformatic4@gmail.com>, 2017\n"
"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/"
"teams/23907/pt_BR/)\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. module: web_export_view
#: model:res.groups,name:web_export_view.group_disallow_export_view_data_excel
msgid "Disallow Export View Data to Excel"
msgstr ""
#. module: web_export_view
#. openerp-web
#: code:addons/web_export_view/static/src/xml/web_export_view_template.xml:6
#, python-format
msgid "Export xls"
msgstr "Exportar xls"
#. module: web_export_view
#. openerp-web
#: code:addons/web_export_view/static/src/js/web_export_view.js:90
#, python-format
msgid "False"
msgstr "Falso"
#. module: web_export_view
#. openerp-web
#: code:addons/web_export_view/static/src/js/web_export_view.js:90
#, python-format
msgid "True"
msgstr "Verdadeiro"

41
web_export_view/i18n/web_export_view.pot

@ -0,0 +1,41 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * web_export_view
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: web_export_view
#: model:res.groups,name:web_export_view.group_disallow_export_view_data_excel
msgid "Disallow Export View Data to Excel"
msgstr ""
#. module: web_export_view
#. openerp-web
#: code:addons/web_export_view/static/src/xml/web_export_view_template.xml:6
#, python-format
msgid "Export xls"
msgstr ""
#. module: web_export_view
#. openerp-web
#: code:addons/web_export_view/static/src/js/web_export_view.js:90
#, python-format
msgid "False"
msgstr ""
#. module: web_export_view
#. openerp-web
#: code:addons/web_export_view/static/src/js/web_export_view.js:90
#, python-format
msgid "True"
msgstr ""

46
web_export_view/i18n/zh_CN.po

@ -0,0 +1,46 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * web_export_view
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2016
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-04-28 18:03+0000\n"
"PO-Revision-Date: 2017-04-28 18:03+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2016\n"
"Language-Team: Chinese (China) (https://www.transifex.com/oca/teams/23907/"
"zh_CN/)\n"
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=1; plural=0;\n"
#. module: web_export_view
#: model:res.groups,name:web_export_view.group_disallow_export_view_data_excel
msgid "Disallow Export View Data to Excel"
msgstr ""
#. module: web_export_view
#. openerp-web
#: code:addons/web_export_view/static/src/xml/web_export_view_template.xml:6
#, python-format
msgid "Export xls"
msgstr "导出 xls"
#. module: web_export_view
#. openerp-web
#: code:addons/web_export_view/static/src/js/web_export_view.js:90
#, python-format
msgid "False"
msgstr "否"
#. module: web_export_view
#. openerp-web
#: code:addons/web_export_view/static/src/js/web_export_view.js:90
#, python-format
msgid "True"
msgstr "是"

2
web_export_view/readme/CONFIGURATION.rst

@ -0,0 +1,2 @@
If we wanted to disallow users to use the features provided by this module, we
can add them to the group *Disallow Export View Data to Excel*.

2
web_export_view/readme/CONFIGURE.rst

@ -0,0 +1,2 @@
If we wanted to disallow users to use the features provided by this module, we
can add them to the group *Disallow Export View Data to Excel*.

13
web_export_view/readme/CONTRIBUTORS.rst

@ -0,0 +1,13 @@
* Henry Zhou (MAXodoo) <zhouhenry@live.com>
* Rodney <https://github.com/rv-clearcorp>
* Simone Orsi <simahawk@gmail.com>
* Lorenzo Battistini <lorenzo.battistini@agilebg.com>
* Stefan Rijnhart <stefan@therp.nl>
* Leonardo Pistone <leonardo.pistone@camptocamp.com>
* Jose Maria Bernet <josemaria.bernet@guadaltech.es>
* Alexandre Díaz <dev@redneboa.es>
* Valtteri Lattu <valtteri.lattu@tawasta.fi>
* `Tecnativa <https://www.tecnativa.com>`_:
* David Vidal
* Ernesto Tejeda

11
web_export_view/readme/DESCRIPTION.rst

@ -0,0 +1,11 @@
One of the best Odoo's features is exporting custom data to CSV/XLS. You can
do it by clicking on the export link in the sidebar. The export action allows
us to configure what to be exported by selecting fields, etc, and allows you
to save your export as a template so that you can export it once again without
having to configure it again.
That feature is as great and advanced as limited for an everyday experience.
A lot of customers want simply to export the tree view they are looking to.
If you miss this feature as us, probably you'll find an answer into our
web_export_view module.

9
web_export_view/readme/ROADMAP.rst

@ -0,0 +1,9 @@
Pedro M. Baeza (pedro.baeza@tecnativa.com):
When you have groups, they are not exported to Excel. It would be desirable to have this option.
One of the problems with this module is that you can't export data from a view with mode="tree".
Changing the approach to have the button always visible (we should relocate it also to another place,
as the current location is not visible for these views), and digging correctly in the DOM elements
for this view (very similar to the normal tree view one) will do the trick. This will also help users
to locate the feature, as it's hidden now by default and users don't think about selecting records.
The behavior will be: nothing selected > you export all (including groups).
Something or all selected: export the selection.

3
web_export_view/readme/USAGE.rst

@ -0,0 +1,3 @@
After you installed it, you'll find an additional link 'Export current view'
right on the sidebar. By clicking on it you'll get a XLS file contains
the same data of the tree view you are looking at, headers included.

9
web_export_view/security/groups.xml

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="group_disallow_export_view_data_excel" model="res.groups">
<field name="name">Disallow Export View Data to Excel</field>
<field name="category_id" ref="base.module_category_hidden"/>
</record>
</odoo>

BIN
web_export_view/static/description/icon.png

After

Width: 128  |  Height: 126  |  Size: 3.5 KiB

653
web_export_view/static/description/index.html

@ -0,0 +1,653 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta name="generator"
content="Docutils 0.14: http://docutils.sourceforge.net/"/>
<title>Web Export Current View</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0
}
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important
}
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important
}
.last, .with-subtitle {
margin-bottom: 0 ! important
}
.hidden {
display: none
}
.subscript {
vertical-align: sub;
font-size: smaller
}
.superscript {
vertical-align: super;
font-size: smaller
}
a.toc-backref {
text-decoration: none;
color: black
}
blockquote.epigraph {
margin: 2em 5em;
}
dl.docutils dd {
margin-bottom: 0.5em
}
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em
}
div.abstract p.topic-title {
font-weight: bold;
text-align: center
}
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em;
border: medium outset;
padding: 1em
}
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold;
font-family: sans-serif
}
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red;
font-weight: bold;
font-family: sans-serif
}
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em;
text-align: center;
font-style: italic
}
div.dedication p.topic-title {
font-weight: bold;
font-style: normal
}
div.figure {
margin-left: 2em;
margin-right: 2em
}
div.footer, div.header {
clear: both;
font-size: smaller
}
div.line-block {
display: block;
margin-top: 1em;
margin-bottom: 1em
}
div.line-block div.line-block {
margin-top: 0;
margin-bottom: 0;
margin-left: 1.5em
}
div.sidebar {
margin: 0 0 0.5em 1em;
border: medium outset;
padding: 1em;
background-color: #ffffee;
width: 40%;
float: right;
clear: right
}
div.sidebar p.rubric {
font-family: sans-serif;
font-size: medium
}
div.system-messages {
margin: 5em
}
div.system-messages h1 {
color: red
}
div.system-message {
border: medium outset;
padding: 1em
}
div.system-message p.system-message-title {
color: red;
font-weight: bold
}
div.topic {
margin: 2em
}
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em
}
h1.title {
text-align: center
}
h2.subtitle {
text-align: center
}
hr.docutils {
width: 75%
}
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left;
float: left;
margin-right: 1em
}
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right;
float: right;
margin-left: 1em
}
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left
}
.align-center {
clear: both;
text-align: center
}
.align-right {
text-align: right
}
/* reset inner alignment in figures */
div.align-right {
text-align: inherit
}
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top
}
.align-middle {
vertical-align: middle
}
.align-bottom {
vertical-align: bottom
}
ol.simple, ul.simple {
margin-bottom: 1em
}
ol.arabic {
list-style: decimal
}
ol.loweralpha {
list-style: lower-alpha
}
ol.upperalpha {
list-style: upper-alpha
}
ol.lowerroman {
list-style: lower-roman
}
ol.upperroman {
list-style: upper-roman
}
p.attribution {
text-align: right;
margin-left: 50%
}
p.caption {
font-style: italic
}
p.credits {
font-style: italic;
font-size: smaller
}
p.label {
white-space: nowrap
}
p.rubric {
font-weight: bold;
font-size: larger;
color: maroon;
text-align: center
}
p.sidebar-title {
font-family: sans-serif;
font-weight: bold;
font-size: larger
}
p.sidebar-subtitle {
font-family: sans-serif;
font-weight: bold
}
p.topic-title {
font-weight: bold
}
pre.address {
margin-bottom: 0;
margin-top: 0;
font: inherit
}
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em;
margin-right: 2em
}
pre.code .ln {
color: grey;
}
/* line numbers */
pre.code, code {
background-color: #eeeeee
}
pre.code .comment, code .comment {
color: #5C6576
}
pre.code .keyword, code .keyword {
color: #3B0D06;
font-weight: bold
}
pre.code .literal.string, code .literal.string {
color: #0C5404
}
pre.code .name.builtin, code .name.builtin {
color: #352B84
}
pre.code .deleted, code .deleted {
background-color: #DEB0A1
}
pre.code .inserted, code .inserted {
background-color: #A3D289
}
span.classifier {
font-family: sans-serif;
font-style: oblique
}
span.classifier-delimiter {
font-family: sans-serif;
font-weight: bold
}
span.interpreted {
font-family: sans-serif
}
span.option {
white-space: nowrap
}
span.pre {
white-space: pre
}
span.problematic {
color: red
}
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80%
}
table.citation {
border-left: solid 1px gray;
margin-left: 1px
}
table.docinfo {
margin: 2em 4em
}
table.docutils {
margin-top: 0.5em;
margin-bottom: 0.5em
}
table.footnote {
border-left: solid 1px black;
margin-left: 1px
}
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em;
padding-right: 0.5em;
vertical-align: top
}
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold;
text-align: left;
white-space: nowrap;
padding-left: 0
}
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100%
}
ul.auto-toc {
list-style-type: none
}
</style>
</head>
<body>
<div class="document" id="web-export-current-view">
<h1 class="title">Web Export Current View</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external"
href="https://odoo-community.org/page/development-status"><img
alt="Beta"
src="https://img.shields.io/badge/maturity-Beta-yellow.png"/></a>
<a class="reference external"
href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img
alt="License: AGPL-3"
src="https://img.shields.io/badge/licence-AGPL--3-blue.png"/></a>
<a class="reference external"
href="https://github.com/OCA/web/tree/12.0/web_export_view"><img
alt="OCA/web"
src="https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github"/></a>
<a class="reference external"
href="https://translation.odoo-community.org/projects/web-12-0/web-12-0-web_export_view"><img
alt="Translate me on Weblate"
src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png"/></a>
<a class="reference external"
href="https://runbot.odoo-community.org/runbot/162/12.0"><img
alt="Try me on Runbot"
src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png"/></a>
</p>
<p>One of the best Odoo’s features is exporting custom data to CSV/XLS. You
can
do it by clicking on the export link in the sidebar. The export action
allows
us to configure what to be exported by selecting fields, etc, and
allows you
to save your export as a template so that you can export it once again
without
having to configure it again.</p>
<p>That feature is as great and advanced as limited for an everyday
experience.
A lot of customers want simply to export the tree view they are looking
to.</p>
<p>If you miss this feature as us, probably you’ll find an answer into our
web_export_view module.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#configuration" id="id1">Configuration</a>
</li>
<li><a class="reference internal" href="#usage" id="id2">Usage</a>
</li>
<li><a class="reference internal" href="#known-issues-roadmap"
id="id3">Known issues / Roadmap</a></li>
<li><a class="reference internal" href="#bug-tracker" id="id4">Bug
Tracker</a></li>
<li><a class="reference internal" href="#credits"
id="id5">Credits</a>
<ul>
<li><a class="reference internal" href="#authors" id="id6">Authors</a>
</li>
<li><a class="reference internal" href="#contributors"
id="id7">Contributors</a></li>
<li><a class="reference internal" href="#maintainers"
id="id8">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="configuration">
<h1><a class="toc-backref" href="#id1">Configuration</a></h1>
<p>If we wanted to disallow users to use the features provided by this
module, we
can add them to the group <em>Disallow Export View Data to
Excel</em>.</p>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#id2">Usage</a></h1>
<p>After you installed it, you’ll find an additional link ‘Export
current view’
right on the sidebar. By clicking on it you’ll get a XLS file
contains
the same data of the tree view you are looking at, headers
included.</p>
</div>
<div class="section" id="known-issues-roadmap">
<h1><a class="toc-backref" href="#id3">Known issues / Roadmap</a></h1>
<p>Pedro M. Baeza (<a class="reference external"
href="mailto:pedro.baeza&#64;tecnativa.com">pedro.baeza&#64;tecnativa.com</a>):
When you have groups, they are not exported to Excel. It would be
desirable to have this option.
One of the problems with this module is that you can’t export data
from a view with mode=”tree”.
Changing the approach to have the button always visible (we should
relocate it also to another place,
as the current location is not visible for these views), and
digging correctly in the DOM elements
for this view (very similar to the normal tree view one) will do
the trick. This will also help users
to locate the feature, as it’s hidden now by default and users
don’t think about selecting records.
The behavior will be: nothing selected &gt; you export all
(including groups).
Something or all selected: export the selection.</p>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#id4">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external"
href="https://github.com/OCA/web/issues">GitHub
Issues</a>.
In case of trouble, please check there if your issue has already
been reported.
If you spotted it first, help us smashing it by providing a
detailed and welcomed
<a class="reference external"
href="https://github.com/OCA/web/issues/new?body=module:%20web_export_view%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.
</p>
<p>Do not contact contributors directly about support or help with
technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#id5">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#id6">Authors</a></h2>
<ul class="simple">
<li>Henry Zhou</li>
<li>Agile Business Group</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#id7">Contributors</a></h2>
<ul class="simple">
<li>Henry Zhou (MAXodoo) &lt;<a class="reference external"
href="mailto:zhouhenry&#64;live.com">zhouhenry&#64;live.com</a>&gt;
</li>
<li>Rodney &lt;<a class="reference external"
href="https://github.com/rv-clearcorp">https://github.com/rv-clearcorp</a>&gt;
</li>
<li>Simone Orsi &lt;<a class="reference external"
href="mailto:simahawk&#64;gmail.com">simahawk&#64;gmail.com</a>&gt;
</li>
<li>Lorenzo Battistini &lt;<a class="reference external"
href="mailto:lorenzo.battistini&#64;agilebg.com">lorenzo.battistini&#64;agilebg.com</a>&gt;
</li>
<li>Stefan Rijnhart &lt;<a class="reference external"
href="mailto:stefan&#64;therp.nl">stefan&#64;therp.nl</a>&gt;
</li>
<li>Leonardo Pistone &lt;<a class="reference external"
href="mailto:leonardo.pistone&#64;camptocamp.com">leonardo.pistone&#64;camptocamp.com</a>&gt;
</li>
<li>Jose Maria Bernet &lt;<a class="reference external"
href="mailto:josemaria.bernet&#64;guadaltech.es">josemaria.bernet&#64;guadaltech.es</a>&gt;
</li>
<li>Alexandre Díaz &lt;<a class="reference external"
href="mailto:dev&#64;redneboa.es">dev&#64;redneboa.es</a>&gt;
</li>
<li>Valtteri Lattu &lt;<a class="reference external"
href="mailto:valtteri.lattu&#64;tawasta.fi">valtteri.lattu&#64;tawasta.fi</a>&gt;
</li>
<li><a class="reference external"
href="https://www.tecnativa.com">Tecnativa</a>:
<ul>
<li>David Vidal</li>
<li>Ernesto Tejeda</li>
</ul>
</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#id8">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference"
href="https://odoo-community.org"><img
alt="Odoo Community Association"
src="https://odoo-community.org/logo.png"/></a>
<p>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.</p>
<p>This module is part of the <a class="reference external"
href="https://github.com/OCA/web/tree/12.0/web_export_view">OCA/web</a>
project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a
class="reference external"
href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.
</p>
</div>
</div>
</div>
</body>
</html>

133
web_export_view/static/src/js/web_export_view.js

@ -0,0 +1,133 @@
odoo.define('web_export_view', function (require) {
"use strict";
var core = require('web.core');
var Sidebar = require('web.Sidebar');
var session = require('web.session');
var crash_manager = require('web.crash_manager');
var QWeb = core.qweb;
var _t = core._t;
Sidebar.include({
_redraw: function () {
var self = this;
this._super.apply(this, arguments);
if (self.getParent().renderer.viewType === 'list') {
session.user_has_group(
'web_export_view.group_disallow_export_view_data_excel')
.then(function (has_group) {
var export_btn = self.$el.find('.export_treeview_xls');
if (!has_group && !export_btn.length) {
self.$el.find('.o_dropdown')
.parent().append(QWeb.render(
'WebExportTreeViewXls', {widget: self}));
self.$el.find('.export_treeview_xls').on('click',
self.on_sidebar_export_treeview_xls);
}
});
}
},
on_sidebar_export_treeview_xls: function () {
// Select the first list of the current (form) view
// or assume the main view is a list view and use that
var view = this.getParent(),
children = view.getChildren();
var c = crash_manager;
if (children) {
children.every(function (child) {
if (child.field && child.field.type === 'one2many') {
view = child.viewmanager.views.list.controller;
return false;
}
if (child.field && child.field.type === 'many2many') {
view = child.list_view;
return false;
}
return true;
});
}
var export_columns_keys = [];
var export_columns_names = [];
var column_index = 0;
var column_header_selector = '';
$.each(view.renderer.columns, function () {
if (this.tag === 'field' &&
(this.attrs.widget === undefined ||
this.attrs.widget !== 'handle')) {
export_columns_keys.push(column_index);
column_header_selector = '.o_list_view > thead > tr> ' +
'th:not([class*="o_list_record_selector"]):eq(' +
column_index + ')';
export_columns_names.push(
view.$el.find(column_header_selector)[0].textContent);
}
++column_index;
});
var export_rows = [];
$.blockUI();
if (children) {
// Find only rows with data
view.$el.find('.o_list_view > tbody > tr.o_data_row:' +
'has(.o_list_record_selector input:checkbox:checked)')
.each(function () {
var $row = $(this);
var export_row = [];
$.each(export_columns_keys, function () {
var $cell = $row.find(
'td.o_data_cell:eq('+this+')');
var $cellcheckbox = $cell.find(
'.o_checkbox input:checkbox');
if ($cellcheckbox.length) {
export_row.push(
$cellcheckbox.is(":checked")
? _t("True") : _t("False")
);
} else {
var text = $cell.text().trim();
var is_number =
$cell.hasClass('o_list_number') &&
!$cell.hasClass('o_float_time_cell');
if (is_number) {
var db_params = _t.database.parameters;
export_row.push(parseFloat(
text
// Remove thousands separator
.split(db_params.thousands_sep)
.join("")
// Always use a `.` as decimal
// separator
.replace(db_params.decimal_point,
".")
// Remove non-numeric characters
.replace(/[^\d.-]/g, "")
));
} else {
export_row.push(text);
}
}
});
export_rows.push(export_row);
});
}
session.get_file({
url: '/web/export/xls_view',
data: {
data: JSON.stringify({
model: view.modelName,
headers: export_columns_names,
rows: export_rows,
}),
},
complete: $.unblockUI,
error: c.rpc_error.bind(c),
});
},
});
});

11
web_export_view/static/src/xml/web_export_view_template.xml

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<templates id="template" xml:space="preserve">
<t t-name="WebExportTreeViewXls">
<div class="o_cp_sidebar btn-group btn-group-sm">
<button class="btn btn-default export_treeview_xls" type="button" title="Export xls">
<i t-translation="off" class="fa fa-file-excel-o"></i>
</button>
</div>
</t>
</templates>

9
web_export_view/views/web_export_view_view.xml

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="assets_backend" name="web_export_view assets" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<script type="text/javascript" src="/web_export_view/static/src/js/web_export_view.js"></script>
</xpath>
</template>
</odoo>
Loading…
Cancel
Save