Browse Source

[9.0]Add web_duplicate_visibility

[ADD] web_duplicate_visibility
pull/341/head
Pierre Verkest 9 years ago
committed by Holger Brunn
parent
commit
4fd6076bc0
  1. 83
      web_duplicate_visibility/README.rst
  2. 1
      web_duplicate_visibility/__init__.py
  3. 25
      web_duplicate_visibility/__openerp__.py
  4. 12
      web_duplicate_visibility/demo/res_users_view.xml
  5. 35
      web_duplicate_visibility/static/src/js/duplicate_visibility.js
  6. 82
      web_duplicate_visibility/static/test/duplicate_visibility.js
  7. 24
      web_duplicate_visibility/views/assets.xml

83
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::
<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.

1
web_duplicate_visibility/__init__.py

@ -0,0 +1 @@
# -*- coding: utf-8 -*-

25
web_duplicate_visibility/__openerp__.py

@ -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",
],
}

12
web_duplicate_visibility/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>

35
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;
},
});
});

82
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 +
' <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);
});
});

24
web_duplicate_visibility/views/assets.xml

@ -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…
Cancel
Save