mirror of https://github.com/OCA/web.git
parent
477b5db43e
commit
4fd6076bc0
|
@ -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::
|
||||
|
||||
<record id="view_form_id" model="ir.ui.view">
|
||||
<field name="name">view name</field>
|
||||
<field name="model">my.model</field>
|
||||
<field name="priority" eval="10"/>
|
||||
<field name="arch" type="xml">
|
||||
<form string="..." duplicate="0">
|
||||
...
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
or by extending an existing view::
|
||||
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//form" position="attributes">
|
||||
<attribute name="duplicate">0</attribute>
|
||||
</xpath>
|
||||
</field>
|
||||
|
||||
|
||||
.. 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
|
||||
<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_duplicate_visibility%0
|
||||
Aversion:%209.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20
|
||||
behavior**%0A%0A**Expected%20behavior**>`_.
|
||||
|
||||
Credits
|
||||
=======
|
||||
|
||||
Images
|
||||
------
|
||||
|
||||
* Odoo Community Association: `Icon <https://github.com/OCA/maintainer-tools/
|
||||
blob/master/template/module/static/description/icon.svg>`_.
|
||||
|
||||
Contributors
|
||||
------------
|
||||
|
||||
* Pierre Verkest <pverkest@anybox.fr>
|
||||
* Christophe Combelles <ccomb@anybox.fr>
|
||||
* Simon André <sandre@anybox.fr>
|
||||
|
||||
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.
|
|
@ -0,0 +1 @@
|
|||
# -*- coding: utf-8 -*-
|
|
@ -0,0 +1,25 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# © 2016 Pierre Verkest <pverkest@anybox.fr>
|
||||
# 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 <pverkest@anybox.fr>,"
|
||||
" Odoo Community Association (OCA)",
|
||||
"license": "AGPL-3",
|
||||
"application": False,
|
||||
"installable": True,
|
||||
"depends": [
|
||||
"base",
|
||||
"web",
|
||||
],
|
||||
"data": [
|
||||
"views/assets.xml",
|
||||
],
|
||||
"demo": [
|
||||
"demo/res_users_view.xml",
|
||||
],
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<odoo>
|
||||
<record id="view_users_form" model="ir.ui.view">
|
||||
<field name="inherit_id" ref="base.view_users_form"/>
|
||||
<field name="model">res.users</field>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//form" position="attributes">
|
||||
<attribute name="duplicate">0</attribute>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
|
@ -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;
|
||||
},
|
||||
});
|
||||
|
||||
});
|
|
@ -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 +
|
||||
' <field name="a"/>' +
|
||||
' <field name="b"/>' +
|
||||
' <field name="c"/>' +
|
||||
'</form>',
|
||||
};
|
||||
});
|
||||
|
||||
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, '<form>', 1);
|
||||
});
|
||||
|
||||
test('Duplicate button visible when create="1"',
|
||||
function(assert, data, FormView){
|
||||
assertDuplicate(data, FormView, '<form create="1">', 1);
|
||||
});
|
||||
|
||||
test('Duplicate button visible when duplicate="1"',
|
||||
function(assert, data, FormView){
|
||||
assertDuplicate(data, FormView, '<form duplicate="1">', 1);
|
||||
});
|
||||
|
||||
test('Duplicate button not displayed when create="0"',
|
||||
function(assert, data, FormView){
|
||||
assertDuplicate(data, FormView, '<form create="0">', 0);
|
||||
});
|
||||
|
||||
test('Duplicate button not displayed when create="1" duplicate="0"',
|
||||
function(assert, data, FormView){
|
||||
assertDuplicate(data, FormView, '<form create="1" duplicate="0">', 0);
|
||||
});
|
||||
|
||||
test('Duplicate button not displayed when duplicate="0"',
|
||||
function(assert, data, FormView){
|
||||
assertDuplicate(data, FormView, '<form duplicate="0">', 0);
|
||||
});
|
||||
});
|
|
@ -0,0 +1,24 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<odoo>
|
||||
<template id="assets_backend"
|
||||
name="web_duplicate_visibility backend assets"
|
||||
inherit_id="web.assets_backend">
|
||||
<xpath expr="."
|
||||
position="inside">
|
||||
<script type="text/javascript"
|
||||
src="/web_duplicate_visibility/static/src/js/duplicate_visibility.js">
|
||||
</script>
|
||||
</xpath>
|
||||
</template>
|
||||
|
||||
<template id="qunit_suite"
|
||||
name="web_duplicate_visibility qunit assets"
|
||||
inherit_id="web.qunit_suite">
|
||||
<xpath expr="//html/head"
|
||||
position="inside">
|
||||
<script type="text/javascript"
|
||||
src="/web_duplicate_visibility/static/test/duplicate_visibility.js">
|
||||
</script>
|
||||
</xpath>
|
||||
</template>
|
||||
</odoo>
|
Loading…
Reference in New Issue