diff --git a/web_duplicate_visibility/README.rst b/web_duplicate_visibility/README.rst new file mode 100644 index 00000000..5fc4ce93 --- /dev/null +++ b/web_duplicate_visibility/README.rst @@ -0,0 +1,83 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +======================== +Web duplicate visibility +======================== + +This module allows to manage the visibility of duplicate button from the form +view declaration. + +Usage +===== + +While the default behavior of odoo is to display the duplicate button when user +is allowed to create a new object. You are now able to remove duplicate button +explicitly even if you are able to create new object:: + + + view name + my.model + + +
+ ... +
+
+
+ +or by extending an existing view:: + + + + 0 + + + + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/repo/github-com-oca-web-162 + +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 +`_. + +Credits +======= + +Images +------ + +* Odoo Community Association: `Icon `_. + +Contributors +------------ + +* Pierre Verkest +* Christophe Combelles +* Simon André + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. + +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. + +To contribute to this module, please visit https://odoo-community.org. diff --git a/web_duplicate_visibility/__init__.py b/web_duplicate_visibility/__init__.py new file mode 100644 index 00000000..40a96afc --- /dev/null +++ b/web_duplicate_visibility/__init__.py @@ -0,0 +1 @@ +# -*- coding: utf-8 -*- diff --git a/web_duplicate_visibility/__openerp__.py b/web_duplicate_visibility/__openerp__.py new file mode 100644 index 00000000..7399f90c --- /dev/null +++ b/web_duplicate_visibility/__openerp__.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# © 2016 Pierre Verkest +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +{ + "name": "web duplicate visibility", + "summary": "Manage the duplicate button visibiliy", + "version": "9.0.1.0.0", + "category": "web", + "website": "https://odoo-community.org/", + "author": "Pierre Verkest ," + " Odoo Community Association (OCA)", + "license": "AGPL-3", + "application": False, + "installable": True, + "depends": [ + "base", + "web", + ], + "data": [ + "views/assets.xml", + ], + "demo": [ + "demo/res_users_view.xml", + ], +} diff --git a/web_duplicate_visibility/demo/res_users_view.xml b/web_duplicate_visibility/demo/res_users_view.xml new file mode 100644 index 00000000..efa3d2fc --- /dev/null +++ b/web_duplicate_visibility/demo/res_users_view.xml @@ -0,0 +1,12 @@ + + + + + res.users + + + 0 + + + + \ No newline at end of file diff --git a/web_duplicate_visibility/static/src/js/duplicate_visibility.js b/web_duplicate_visibility/static/src/js/duplicate_visibility.js new file mode 100644 index 00000000..dce68485 --- /dev/null +++ b/web_duplicate_visibility/static/src/js/duplicate_visibility.js @@ -0,0 +1,35 @@ +odoo.define('web.DuplicateVisibility',function (require) { + "use strict"; + + var core = require('web.core'); + var Sidebar = require('web.Sidebar'); + var FormView = require('web.FormView'); + + var _t = core._t; + + var DuplicateVisibility = FormView.include({ + /** + * Instantiate and render the sidebar if a sidebar is requested + * Sets this.sidebar + * @param {jQuery} [$node] a jQuery node where the sidebar should be inserted + * $node may be undefined, in which case the FormView inserts the sidebar in a + * div of its template + **/ + render_sidebar: function($node) { + var res = this._super.apply(this, arguments); + if (this.sidebar) { + if(!this.is_action_enabled('duplicate') && + this.sidebar.items.hasOwnProperty('other')){ + this.sidebar.items.other = this.sidebar.items.other.filter( + function(item){ + return item.label !== _t("Duplicate"); + } + ); + this.sidebar.redraw(); + } + } + return res; + }, + }); + +}); diff --git a/web_duplicate_visibility/static/test/duplicate_visibility.js b/web_duplicate_visibility/static/test/duplicate_visibility.js new file mode 100644 index 00000000..7addfc45 --- /dev/null +++ b/web_duplicate_visibility/static/test/duplicate_visibility.js @@ -0,0 +1,82 @@ +"use strict"; +odoo.define_section('web_duplicate_visibility', + ['web.data', 'web.FormView'], + function(test, mock){ + + function assertDuplicate(data, FormView, form_tag, visible){ + mock.add('test.model:read', function () { + return [{ id: 1, a: 'foo', b: 'bar', c: 'baz' }]; + }); + + mock.add('test.model:fields_view_get', function () { + return { + type: 'form', + fields: { + a: {type: 'char', string: "A"}, + b: {type: 'char', string: "B"}, + c: {type: 'char', string: "C"} + }, + arch: form_tag + + ' ' + + ' ' + + ' ' + + '', + }; + }); + + var ds = new data.DataSetStatic(null, 'test.model', null, [1]); + ds.index = 0; + var $fix = $( "#qunit-fixture"); + var form = new FormView( + {}, + ds, + false, + { + sidebar: true, + } + ); + form.appendTo($fix); + form.do_show(); + form.render_sidebar(); + + var $fix = $( "#qunit-fixture"); + var actions = $fix.find('.oe_sidebar a[data-section="other"]').filter( + function(i, obj){ + return obj.text.trim() == "Duplicate"; + } + ); + strictEqual( + actions.length, visible, "duplicate state is not as expected" + ); + }; + + test('Duplicate button visible when nothing set', + function(assert, data, FormView){ + assertDuplicate(data, FormView, '
', 1); + }); + + test('Duplicate button visible when create="1"', + function(assert, data, FormView){ + assertDuplicate(data, FormView, '', 1); + }); + + test('Duplicate button visible when duplicate="1"', + function(assert, data, FormView){ + assertDuplicate(data, FormView, '', 1); + }); + + test('Duplicate button not displayed when create="0"', + function(assert, data, FormView){ + assertDuplicate(data, FormView, '', 0); + }); + + test('Duplicate button not displayed when create="1" duplicate="0"', + function(assert, data, FormView){ + assertDuplicate(data, FormView, '', 0); + }); + + test('Duplicate button not displayed when duplicate="0"', + function(assert, data, FormView){ + assertDuplicate(data, FormView, '', 0); + }); +}); diff --git a/web_duplicate_visibility/views/assets.xml b/web_duplicate_visibility/views/assets.xml new file mode 100644 index 00000000..1142de3e --- /dev/null +++ b/web_duplicate_visibility/views/assets.xml @@ -0,0 +1,24 @@ + + + + + +