From b23804cbd082372c96e378eef4a1e271757cc9fc Mon Sep 17 00:00:00 2001 From: Dennis Sluijk Date: Fri, 19 Apr 2019 13:41:27 +0200 Subject: [PATCH] [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 00000000..a3e5c704 --- /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 00000000..e69de29b diff --git a/web_tree_duplicate/__manifest__.py b/web_tree_duplicate/__manifest__.py new file mode 100644 index 00000000..6a326567 --- /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 00000000..2dc56661 --- /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 00000000..d10c3133 --- /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 00000000..47b6403d --- /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 00000000..cb705a9d --- /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 00000000..da78115c --- /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 00000000..0e08e9a3 --- /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 00000000..289c2334 --- /dev/null +++ b/web_tree_duplicate/templates/assets.xml @@ -0,0 +1,11 @@ + + + + + +