From e48452396ba009d5658c9714159727df6b370ef6 Mon Sep 17 00:00:00 2001 From: Dennis Sluijk Date: Fri, 19 Apr 2019 13:41:27 +0200 Subject: [PATCH 1/5] [12.0][ADD] web_tree_duplicate: Duplicate records from the tree view (#1247) * [ADD] web_tree_duplicate [ADD] Opt in attribute [FIX] Lint * [IMP] Show duplicated records --- web_tree_duplicate/README.rst | 116 ++++++++++++++++++ web_tree_duplicate/__init__.py | 0 web_tree_duplicate/__manifest__.py | 23 ++++ web_tree_duplicate/demo/res_users_view.xml | 15 +++ web_tree_duplicate/readme/CONFIGURE.rst | 20 +++ web_tree_duplicate/readme/CONTRIBUTORS.rst | 1 + web_tree_duplicate/readme/DESCRIPTION.rst | 1 + web_tree_duplicate/readme/USAGE.rst | 7 ++ .../description/screenshot-duplicate.png | Bin 0 -> 41539 bytes web_tree_duplicate/static/src/js/backend.js | 101 +++++++++++++++ web_tree_duplicate/templates/assets.xml | 11 ++ 11 files changed, 295 insertions(+) create mode 100644 web_tree_duplicate/README.rst create mode 100644 web_tree_duplicate/__init__.py create mode 100644 web_tree_duplicate/__manifest__.py create mode 100644 web_tree_duplicate/demo/res_users_view.xml create mode 100644 web_tree_duplicate/readme/CONFIGURE.rst create mode 100644 web_tree_duplicate/readme/CONTRIBUTORS.rst create mode 100644 web_tree_duplicate/readme/DESCRIPTION.rst create mode 100644 web_tree_duplicate/readme/USAGE.rst create mode 100644 web_tree_duplicate/static/description/screenshot-duplicate.png create mode 100644 web_tree_duplicate/static/src/js/backend.js create mode 100644 web_tree_duplicate/templates/assets.xml diff --git a/web_tree_duplicate/README.rst b/web_tree_duplicate/README.rst new file mode 100644 index 000000000..a3e5c704d --- /dev/null +++ b/web_tree_duplicate/README.rst @@ -0,0 +1,116 @@ +=========================== +Tree View Duplicate Records +=========================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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_tree_duplicate + :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_tree_duplicate + :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| + +With this module you can duplicate records directly from the tree view. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +The duplicate option is disabled by default. +To enable it you have to add attribute `duplicate` to the tree view. +Set `duplicate` to `true` to enable it or `false` to (explicitly) disable it. + +Example: + +.. code-block:: xml + + + + + res.users + + + + true + + + + + +Usage +===== + +To use this module, you need to: + +#. Go to any tree view; +#. select some records; +#. open the sidebar menu and click 'Duplicate'. + +.. image:: /web_tree_duplicate/static/description/screenshot-duplicate.png + +Bug Tracker +=========== + +Bugs are tracked on `GitHub 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 `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Onestein + +Contributors +~~~~~~~~~~~~ + +* Dennis Sluijk + +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. + +.. |maintainer-tarteo| image:: https://github.com/tarteo.png?size=40px + :target: https://github.com/tarteo + :alt: tarteo + +Current `maintainer `_: + +|maintainer-tarteo| + +This module is part of the `OCA/web `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/web_tree_duplicate/__init__.py b/web_tree_duplicate/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/web_tree_duplicate/__manifest__.py b/web_tree_duplicate/__manifest__.py new file mode 100644 index 000000000..6a326567e --- /dev/null +++ b/web_tree_duplicate/__manifest__.py @@ -0,0 +1,23 @@ +# Copyright 2019 Onestein +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + 'name': 'Tree View Duplicate Records', + 'summary': 'Duplicate records directly from the tree view.', + 'development_status': 'Beta', + 'category': 'Extra Tools', + 'version': '12.0.1.0.0', + 'author': 'Onestein, Odoo Community Association (OCA)', + 'license': 'AGPL-3', + 'website': 'https://github.com/OCA/web', + 'depends': [ + 'web' + ], + 'data': [ + 'templates/assets.xml' + ], + 'demo': [ + 'demo/res_users_view.xml' + ], + 'maintainers': ['tarteo'] +} diff --git a/web_tree_duplicate/demo/res_users_view.xml b/web_tree_duplicate/demo/res_users_view.xml new file mode 100644 index 000000000..2dc56661c --- /dev/null +++ b/web_tree_duplicate/demo/res_users_view.xml @@ -0,0 +1,15 @@ + + + + + + res.users + + + + true + + + + diff --git a/web_tree_duplicate/readme/CONFIGURE.rst b/web_tree_duplicate/readme/CONFIGURE.rst new file mode 100644 index 000000000..d10c31333 --- /dev/null +++ b/web_tree_duplicate/readme/CONFIGURE.rst @@ -0,0 +1,20 @@ +The duplicate option is disabled by default. +To enable it you have to add attribute `duplicate` to the tree view. +Set `duplicate` to `true` to enable it or `false` to (explicitly) disable it. + +Example: + +.. code-block:: xml + + + + + res.users + + + + true + + + + diff --git a/web_tree_duplicate/readme/CONTRIBUTORS.rst b/web_tree_duplicate/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..47b6403d0 --- /dev/null +++ b/web_tree_duplicate/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Dennis Sluijk diff --git a/web_tree_duplicate/readme/DESCRIPTION.rst b/web_tree_duplicate/readme/DESCRIPTION.rst new file mode 100644 index 000000000..cb705a9dc --- /dev/null +++ b/web_tree_duplicate/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +With this module you can duplicate records directly from the tree view. diff --git a/web_tree_duplicate/readme/USAGE.rst b/web_tree_duplicate/readme/USAGE.rst new file mode 100644 index 000000000..da78115c2 --- /dev/null +++ b/web_tree_duplicate/readme/USAGE.rst @@ -0,0 +1,7 @@ +To use this module, you need to: + +#. Go to any tree view; +#. select some records; +#. open the sidebar menu and click 'Duplicate'. + +.. image:: /web_tree_duplicate/static/description/screenshot-duplicate.png diff --git a/web_tree_duplicate/static/description/screenshot-duplicate.png b/web_tree_duplicate/static/description/screenshot-duplicate.png new file mode 100644 index 0000000000000000000000000000000000000000..28fb3ac408d94288134b1c8d13351bd398354a4f GIT binary patch literal 41539 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 literal 0 HcmV?d00001 diff --git a/web_tree_duplicate/static/src/js/backend.js b/web_tree_duplicate/static/src/js/backend.js new file mode 100644 index 000000000..0e08e9a33 --- /dev/null +++ b/web_tree_duplicate/static/src/js/backend.js @@ -0,0 +1,101 @@ +/* Copyright 2019 Onestein + * License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). */ + +odoo.define('web_tree_duplicate', function (require) { + "use strict"; + var core = require('web.core'); + var _t = core._t; + var ListController = require('web.ListController'); + var ListView = require('web.ListView'); + var search_inputs = require('web.search_inputs'); + + + ListView.include({ + + /** + * @override + */ + init: function () { + this._super.apply(this, arguments); + var sidebarDuplicate = false; + if ('duplicate' in this.arch.attrs) { + sidebarDuplicate = _.str.toBool(this.arch.attrs.duplicate); + } + this.controllerParams.sidebarDuplicate = sidebarDuplicate; + }, + }); + + ListController.include({ + + /** + * @override + */ + init: function (parent, model, renderer, params) { + this._super.apply(this, arguments); + this.sidebarDuplicate = params.sidebarDuplicate; + }, + + /** + * Add the Duplicate button to the sidebar. + * + * @override + */ + renderSidebar: function () { + var res = this._super.apply(this, arguments); + if (this.hasSidebar && this.sidebarDuplicate) { + this.sidebar._addItems('other', [{ + label: _t('Duplicate'), + callback: this._onDuplicateSelectedRecords.bind(this), + }]); + } + return res; + }, + + /** + * This function is triggered when the Duplicate button is clicked. + * + * @private + */ + _onDuplicateSelectedRecords: function () { + this._duplicateRecords(this.selectedRecords); + }, + + /** + * Duplicate records. + * + * @param {Array} ids Ids of records to duplicate + * @private + * @returns {jQuery.Deferred} + */ + _duplicateRecords: function (ids) { + var self = this; + var done = []; + _.each(ids, function (id) { + done.push(self.model.duplicateRecord(id)); + }); + return $.when.apply($, done).done(function () { + var dataPoints = arguments; + var ids = _.map(dataPoints, function (dataPoint) { + return self.model.localData[dataPoint].res_id; + }); + var filter = { + attrs: { + domain: JSON.stringify([['id', 'in', ids]]), + string: _t('Duplicated Records') + } + } + var filterWidget = new search_inputs.Filter(filter); + + var filterGroup = new search_inputs.FilterGroup( + [filterWidget], + self.searchView, + self.searchView.intervalMapping, + self.searchView.periodMapping + ); + + var facet = filterGroup.make_facet([filterGroup.make_value(filter)]); + self.searchView.query.add([facet]); + }); + }, + }); +}); diff --git a/web_tree_duplicate/templates/assets.xml b/web_tree_duplicate/templates/assets.xml new file mode 100644 index 000000000..289c2334f --- /dev/null +++ b/web_tree_duplicate/templates/assets.xml @@ -0,0 +1,11 @@ + + + + + + From 7db95292fc6fbc58c6519ce22c49a25b5c5ce72a Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 19 Apr 2019 11:41:35 +0000 Subject: [PATCH 2/5] [ADD] icon.png --- web_tree_duplicate/static/description/icon.png | Bin 0 -> 9455 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 web_tree_duplicate/static/description/icon.png diff --git a/web_tree_duplicate/static/description/icon.png b/web_tree_duplicate/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 From ba4e55ac762a1fabccef8a4d6825640a8fd8b60b Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 19 Apr 2019 11:41:35 +0000 Subject: [PATCH 3/5] [UPD] README.rst --- web_tree_duplicate/README.rst | 4 +- .../static/description/index.html | 454 ++++++++++++++++++ 2 files changed, 456 insertions(+), 2 deletions(-) create mode 100644 web_tree_duplicate/static/description/index.html diff --git a/web_tree_duplicate/README.rst b/web_tree_duplicate/README.rst index a3e5c704d..20bc5c31d 100644 --- a/web_tree_duplicate/README.rst +++ b/web_tree_duplicate/README.rst @@ -65,7 +65,7 @@ To use this module, you need to: #. select some records; #. open the sidebar menu and click 'Duplicate'. -.. image:: /web_tree_duplicate/static/description/screenshot-duplicate.png +.. image:: https://raw.githubusercontent.com/web_tree_duplicate/static/description/screenshot-duplicate.png Bug Tracker =========== @@ -107,7 +107,7 @@ promote its widespread use. :target: https://github.com/tarteo :alt: tarteo -Current `maintainer `_: +Current `maintainer `__: |maintainer-tarteo| diff --git a/web_tree_duplicate/static/description/index.html b/web_tree_duplicate/static/description/index.html new file mode 100644 index 000000000..4c9d2e283 --- /dev/null +++ b/web_tree_duplicate/static/description/index.html @@ -0,0 +1,454 @@ + + + + + + +Tree View Duplicate Records + + + +
+

Tree View Duplicate Records

+ + +

Beta License: AGPL-3 OCA/web Translate me on Weblate Try me on Runbot

+

With this module you can duplicate records directly from the tree view.

+

Table of contents

+ +
+

Configuration

+

The duplicate option is disabled by default. +To enable it you have to add attribute duplicate to the tree view. +Set duplicate to true to enable it or false to (explicitly) disable it.

+

Example:

+
+<?xml version="1.0" encoding="UTF-8" ?>
+<odoo>
+    <record id="view_users_tree" model="ir.ui.view">
+        <field name="model">res.users</field>
+        <field name="inherit_id" ref="base.view_users_tree"/>
+        <field name="arch" type="xml">
+            <xpath expr="//tree" position="attributes">
+                <attribute name="duplicate">true</attribute>
+            </xpath>
+        </field>
+    </record>
+</odoo>
+
+
+
+

Usage

+

To use this module, you need to:

+
    +
  1. Go to any tree view;
  2. +
  3. select some records;
  4. +
  5. open the sidebar menu and click ‘Duplicate’.
  6. +
+https://raw.githubusercontent.com/web_tree_duplicate/static/description/screenshot-duplicate.png +
+
+

Bug Tracker

+

Bugs are tracked on GitHub 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.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Onestein
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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.

+

Current maintainer:

+

tarteo

+

This module is part of the OCA/web project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + From c0c2cc6e0d50bc4b60fe4c9ddf05be8e73e257e2 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Fri, 19 Apr 2019 11:46:45 +0000 Subject: [PATCH 4/5] [UPD] Update translations --- web_tree_duplicate/i18n/ca.po | 31 +++++++++++++++++++ web_tree_duplicate/i18n/es.po | 31 +++++++++++++++++++ web_tree_duplicate/i18n/fr.po | 31 +++++++++++++++++++ web_tree_duplicate/i18n/pt.po | 31 +++++++++++++++++++ web_tree_duplicate/i18n/pt_BR.po | 31 +++++++++++++++++++ .../i18n/web_tree_duplicate.pot | 29 +++++++++++++++++ web_tree_duplicate/i18n/zh_CN.po | 31 +++++++++++++++++++ 7 files changed, 215 insertions(+) create mode 100644 web_tree_duplicate/i18n/ca.po create mode 100644 web_tree_duplicate/i18n/es.po create mode 100644 web_tree_duplicate/i18n/fr.po create mode 100644 web_tree_duplicate/i18n/pt.po create mode 100644 web_tree_duplicate/i18n/pt_BR.po create mode 100644 web_tree_duplicate/i18n/web_tree_duplicate.pot create mode 100644 web_tree_duplicate/i18n/zh_CN.po diff --git a/web_tree_duplicate/i18n/ca.po b/web_tree_duplicate/i18n/ca.po new file mode 100644 index 000000000..08a29df1e --- /dev/null +++ b/web_tree_duplicate/i18n/ca.po @@ -0,0 +1,31 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tree_duplicate +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-02-17 10:45+0000\n" +"Last-Translator: claudiagn \n" +"Language-Team: none\n" +"Language: ca\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" +"X-Generator: Weblate 4.3.2\n" + +#. module: web_tree_duplicate +#. openerp-web +#: code:addons/web_tree_duplicate/static/src/js/backend.js:47 +#, python-format +msgid "Duplicate" +msgstr "Duplicar" + +#. module: web_tree_duplicate +#. openerp-web +#: code:addons/web_tree_duplicate/static/src/js/backend.js:84 +#, python-format +msgid "Duplicated Records" +msgstr "Registres duplicats" diff --git a/web_tree_duplicate/i18n/es.po b/web_tree_duplicate/i18n/es.po new file mode 100644 index 000000000..c1fba31a1 --- /dev/null +++ b/web_tree_duplicate/i18n/es.po @@ -0,0 +1,31 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tree_duplicate +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-07-23 14:19+0000\n" +"Last-Translator: claudiagn \n" +"Language-Team: none\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" +"X-Generator: Weblate 3.10\n" + +#. module: web_tree_duplicate +#. openerp-web +#: code:addons/web_tree_duplicate/static/src/js/backend.js:47 +#, python-format +msgid "Duplicate" +msgstr "Duplicar" + +#. module: web_tree_duplicate +#. openerp-web +#: code:addons/web_tree_duplicate/static/src/js/backend.js:84 +#, python-format +msgid "Duplicated Records" +msgstr "Registros duplicados" diff --git a/web_tree_duplicate/i18n/fr.po b/web_tree_duplicate/i18n/fr.po new file mode 100644 index 000000000..7dcfaa3e8 --- /dev/null +++ b/web_tree_duplicate/i18n/fr.po @@ -0,0 +1,31 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tree_duplicate +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-02-01 12:44+0000\n" +"Last-Translator: Yann Papouin \n" +"Language-Team: none\n" +"Language: fr\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" +"X-Generator: Weblate 4.3.2\n" + +#. module: web_tree_duplicate +#. openerp-web +#: code:addons/web_tree_duplicate/static/src/js/backend.js:47 +#, python-format +msgid "Duplicate" +msgstr "Dupliquer" + +#. module: web_tree_duplicate +#. openerp-web +#: code:addons/web_tree_duplicate/static/src/js/backend.js:84 +#, python-format +msgid "Duplicated Records" +msgstr "Enregistrements dupliqués" diff --git a/web_tree_duplicate/i18n/pt.po b/web_tree_duplicate/i18n/pt.po new file mode 100644 index 000000000..6a72393d5 --- /dev/null +++ b/web_tree_duplicate/i18n/pt.po @@ -0,0 +1,31 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tree_duplicate +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-10-28 21:08+0000\n" +"Last-Translator: Pedro Castro Silva \n" +"Language-Team: none\n" +"Language: pt\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" +"X-Generator: Weblate 3.10\n" + +#. module: web_tree_duplicate +#. openerp-web +#: code:addons/web_tree_duplicate/static/src/js/backend.js:47 +#, python-format +msgid "Duplicate" +msgstr "Duplicar" + +#. module: web_tree_duplicate +#. openerp-web +#: code:addons/web_tree_duplicate/static/src/js/backend.js:84 +#, python-format +msgid "Duplicated Records" +msgstr "Registos Duplicados" diff --git a/web_tree_duplicate/i18n/pt_BR.po b/web_tree_duplicate/i18n/pt_BR.po new file mode 100644 index 000000000..d354f4579 --- /dev/null +++ b/web_tree_duplicate/i18n/pt_BR.po @@ -0,0 +1,31 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tree_duplicate +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-03-15 06:45+0000\n" +"Last-Translator: Marcel Savegnago \n" +"Language-Team: none\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" +"X-Generator: Weblate 4.3.2\n" + +#. module: web_tree_duplicate +#. openerp-web +#: code:addons/web_tree_duplicate/static/src/js/backend.js:47 +#, python-format +msgid "Duplicate" +msgstr "Duplicado" + +#. module: web_tree_duplicate +#. openerp-web +#: code:addons/web_tree_duplicate/static/src/js/backend.js:84 +#, python-format +msgid "Duplicated Records" +msgstr "Registros Duplicados" diff --git a/web_tree_duplicate/i18n/web_tree_duplicate.pot b/web_tree_duplicate/i18n/web_tree_duplicate.pot new file mode 100644 index 000000000..1434d3efa --- /dev/null +++ b/web_tree_duplicate/i18n/web_tree_duplicate.pot @@ -0,0 +1,29 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tree_duplicate +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.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_tree_duplicate +#. openerp-web +#: code:addons/web_tree_duplicate/static/src/js/backend.js:47 +#, python-format +msgid "Duplicate" +msgstr "" + +#. module: web_tree_duplicate +#. openerp-web +#: code:addons/web_tree_duplicate/static/src/js/backend.js:84 +#, python-format +msgid "Duplicated Records" +msgstr "" + diff --git a/web_tree_duplicate/i18n/zh_CN.po b/web_tree_duplicate/i18n/zh_CN.po new file mode 100644 index 000000000..c61592be6 --- /dev/null +++ b/web_tree_duplicate/i18n/zh_CN.po @@ -0,0 +1,31 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tree_duplicate +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2019-09-01 12:52+0000\n" +"Last-Translator: 黎伟杰 <674416404@qq.com>\n" +"Language-Team: none\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" +"X-Generator: Weblate 3.8\n" + +#. module: web_tree_duplicate +#. openerp-web +#: code:addons/web_tree_duplicate/static/src/js/backend.js:47 +#, python-format +msgid "Duplicate" +msgstr "复制" + +#. module: web_tree_duplicate +#. openerp-web +#: code:addons/web_tree_duplicate/static/src/js/backend.js:84 +#, python-format +msgid "Duplicated Records" +msgstr "复制记录" From b53521ca678767f26f1202cf7751728d2583dc9f Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Wed, 5 Jul 2023 11:55:32 +0200 Subject: [PATCH 5/5] [MIG] web_tree_duplicate to v16 --- .../odoo/addons/web_tree_duplicate | 1 + setup/web_tree_duplicate/setup.py | 6 ++ web_tree_duplicate/README.rst | 33 +++--- web_tree_duplicate/__manifest__.py | 33 +++--- web_tree_duplicate/demo/res_users_view.xml | 15 --- web_tree_duplicate/i18n/he_IL.po | 30 ++++++ .../i18n/web_tree_duplicate.pot | 17 +-- web_tree_duplicate/readme/CONFIGURE.rst | 8 +- web_tree_duplicate/readme/CONTRIBUTORS.rst | 1 + web_tree_duplicate/readme/USAGE.rst | 8 +- .../static/description/index.html | 44 ++++---- web_tree_duplicate/static/src/js/backend.js | 101 ------------------ .../static/src/web_tree_duplicate.esm.js | 40 +++++++ web_tree_duplicate/templates/assets.xml | 11 -- 14 files changed, 154 insertions(+), 194 deletions(-) create mode 120000 setup/web_tree_duplicate/odoo/addons/web_tree_duplicate create mode 100644 setup/web_tree_duplicate/setup.py delete mode 100644 web_tree_duplicate/demo/res_users_view.xml create mode 100644 web_tree_duplicate/i18n/he_IL.po delete mode 100644 web_tree_duplicate/static/src/js/backend.js create mode 100644 web_tree_duplicate/static/src/web_tree_duplicate.esm.js delete mode 100644 web_tree_duplicate/templates/assets.xml diff --git a/setup/web_tree_duplicate/odoo/addons/web_tree_duplicate b/setup/web_tree_duplicate/odoo/addons/web_tree_duplicate new file mode 120000 index 000000000..439c853d8 --- /dev/null +++ b/setup/web_tree_duplicate/odoo/addons/web_tree_duplicate @@ -0,0 +1 @@ +../../../../web_tree_duplicate \ No newline at end of file diff --git a/setup/web_tree_duplicate/setup.py b/setup/web_tree_duplicate/setup.py new file mode 100644 index 000000000..28c57bb64 --- /dev/null +++ b/setup/web_tree_duplicate/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/web_tree_duplicate/README.rst b/web_tree_duplicate/README.rst index 20bc5c31d..305a677d6 100644 --- a/web_tree_duplicate/README.rst +++ b/web_tree_duplicate/README.rst @@ -2,10 +2,13 @@ Tree View Duplicate Records =========================== -.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:f76ad85d67cf363cb525bf60998a317d0f9a114ebe4ecc6685dae79cc5b0465e + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status @@ -14,16 +17,16 @@ Tree View Duplicate Records :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_tree_duplicate + :target: https://github.com/OCA/web/tree/16.0/web_tree_duplicate :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_tree_duplicate + :target: https://translation.odoo-community.org/projects/web-16-0/web-16-0-web_tree_duplicate :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 +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/web&target_branch=16.0 + :alt: Try me on Runboat -|badge1| |badge2| |badge3| |badge4| |badge5| +|badge1| |badge2| |badge3| |badge4| |badge5| With this module you can duplicate records directly from the tree view. @@ -35,9 +38,9 @@ With this module you can duplicate records directly from the tree view. Configuration ============= -The duplicate option is disabled by default. -To enable it you have to add attribute `duplicate` to the tree view. -Set `duplicate` to `true` to enable it or `false` to (explicitly) disable it. +The duplicate option is enabled by default. +To disable it you have to add attribute `duplicate` to the tree view. +Set `duplicate` to `false` to enable it or `true` to (explicitly) disable it. Example: @@ -50,7 +53,7 @@ Example: - true + false @@ -72,8 +75,8 @@ Bug Tracker Bugs are tracked on `GitHub 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 `_. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -83,12 +86,14 @@ Credits Authors ~~~~~~~ +* Hunki Enterprises BV * Onestein Contributors ~~~~~~~~~~~~ * Dennis Sluijk +* Holger Brunn (https://hunki-enterprises.com) Maintainers ~~~~~~~~~~~ @@ -111,6 +116,6 @@ Current `maintainer `__: |maintainer-tarteo| -This module is part of the `OCA/web `_ project on GitHub. +This module is part of the `OCA/web `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/web_tree_duplicate/__manifest__.py b/web_tree_duplicate/__manifest__.py index 6a326567e..73a206255 100644 --- a/web_tree_duplicate/__manifest__.py +++ b/web_tree_duplicate/__manifest__.py @@ -2,22 +2,19 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { - 'name': 'Tree View Duplicate Records', - 'summary': 'Duplicate records directly from the tree view.', - 'development_status': 'Beta', - 'category': 'Extra Tools', - 'version': '12.0.1.0.0', - 'author': 'Onestein, Odoo Community Association (OCA)', - 'license': 'AGPL-3', - 'website': 'https://github.com/OCA/web', - 'depends': [ - 'web' - ], - 'data': [ - 'templates/assets.xml' - ], - 'demo': [ - 'demo/res_users_view.xml' - ], - 'maintainers': ['tarteo'] + "name": "Tree View Duplicate Records", + "summary": "Duplicate records directly from the tree view.", + "development_status": "Beta", + "category": "Extra Tools", + "version": "16.0.1.0.0", + "author": "Hunki Enterprises BV, Onestein, Odoo Community Association (OCA)", + "license": "AGPL-3", + "website": "https://github.com/OCA/web", + "depends": ["web"], + "maintainers": ["tarteo"], + "assets": { + "web.assets_backend": [ + "web_tree_duplicate/static/src/web_tree_duplicate.esm.js", + ], + }, } diff --git a/web_tree_duplicate/demo/res_users_view.xml b/web_tree_duplicate/demo/res_users_view.xml deleted file mode 100644 index 2dc56661c..000000000 --- a/web_tree_duplicate/demo/res_users_view.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - res.users - - - - true - - - - diff --git a/web_tree_duplicate/i18n/he_IL.po b/web_tree_duplicate/i18n/he_IL.po new file mode 100644 index 000000000..92ea362ad --- /dev/null +++ b/web_tree_duplicate/i18n/he_IL.po @@ -0,0 +1,30 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tree_duplicate +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-07-05 08:47+0000\n" +"PO-Revision-Date: 2023-07-05 08:47+0000\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_tree_duplicate +#. odoo-javascript +#: code:addons/web_tree_duplicate/static/src/web_tree_duplicate.esm.js:0 +#, python-format +msgid "Duplicate" +msgstr "שכפול" + +#. module: web_tree_duplicate +#. odoo-javascript +#: code:addons/web_tree_duplicate/static/src/web_tree_duplicate.esm.js:0 +#, python-format +msgid "Duplicated Records" +msgstr "רשומות משוכפלות" diff --git a/web_tree_duplicate/i18n/web_tree_duplicate.pot b/web_tree_duplicate/i18n/web_tree_duplicate.pot index 1434d3efa..8bb4bcf73 100644 --- a/web_tree_duplicate/i18n/web_tree_duplicate.pot +++ b/web_tree_duplicate/i18n/web_tree_duplicate.pot @@ -1,12 +1,14 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * web_tree_duplicate +# * web_tree_duplicate # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: <>\n" +"POT-Creation-Date: 2023-07-05 08:47+0000\n" +"PO-Revision-Date: 2023-07-05 08:47+0000\n" +"Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -14,16 +16,15 @@ msgstr "" "Plural-Forms: \n" #. module: web_tree_duplicate -#. openerp-web -#: code:addons/web_tree_duplicate/static/src/js/backend.js:47 +#. odoo-javascript +#: code:addons/web_tree_duplicate/static/src/web_tree_duplicate.esm.js:0 #, python-format msgid "Duplicate" msgstr "" #. module: web_tree_duplicate -#. openerp-web -#: code:addons/web_tree_duplicate/static/src/js/backend.js:84 +#. odoo-javascript +#: code:addons/web_tree_duplicate/static/src/web_tree_duplicate.esm.js:0 #, python-format msgid "Duplicated Records" msgstr "" - diff --git a/web_tree_duplicate/readme/CONFIGURE.rst b/web_tree_duplicate/readme/CONFIGURE.rst index d10c31333..6f16d63f0 100644 --- a/web_tree_duplicate/readme/CONFIGURE.rst +++ b/web_tree_duplicate/readme/CONFIGURE.rst @@ -1,6 +1,6 @@ -The duplicate option is disabled by default. -To enable it you have to add attribute `duplicate` to the tree view. -Set `duplicate` to `true` to enable it or `false` to (explicitly) disable it. +The duplicate option is enabled by default. +To disable it you have to add attribute `duplicate` to the tree view. +Set `duplicate` to `false` to enable it or `true` to (explicitly) disable it. Example: @@ -13,7 +13,7 @@ Example: - true + false diff --git a/web_tree_duplicate/readme/CONTRIBUTORS.rst b/web_tree_duplicate/readme/CONTRIBUTORS.rst index 47b6403d0..7c909ba59 100644 --- a/web_tree_duplicate/readme/CONTRIBUTORS.rst +++ b/web_tree_duplicate/readme/CONTRIBUTORS.rst @@ -1 +1,2 @@ * Dennis Sluijk +* Holger Brunn (https://hunki-enterprises.com) diff --git a/web_tree_duplicate/readme/USAGE.rst b/web_tree_duplicate/readme/USAGE.rst index da78115c2..efb9caf74 100644 --- a/web_tree_duplicate/readme/USAGE.rst +++ b/web_tree_duplicate/readme/USAGE.rst @@ -1,7 +1,9 @@ To use this module, you need to: -#. Go to any tree view; -#. select some records; -#. open the sidebar menu and click 'Duplicate'. +#. Go to any tree view +#. select some records +#. open the sidebar menu and click 'Duplicate' + +Note that even when selecting all records via the top checkbox on a list, this will only duplicate the currently visible items. If you really need to duplicate all records, you need to adjust the list view limit accordingly. .. image:: /web_tree_duplicate/static/description/screenshot-duplicate.png diff --git a/web_tree_duplicate/static/description/index.html b/web_tree_duplicate/static/description/index.html index 4c9d2e283..ef0445a4c 100644 --- a/web_tree_duplicate/static/description/index.html +++ b/web_tree_duplicate/static/description/index.html @@ -3,7 +3,7 @@ - + Tree View Duplicate Records