Browse Source
[ADD] web_readonly_bypass: allow to save an onchange modifications on readonly fields
pull/162/head
[ADD] web_readonly_bypass: allow to save an onchange modifications on readonly fields
pull/162/head
Jonathan Nemry
11 years ago
committed by
Stéphane Bidoul
4 changed files with 210 additions and 0 deletions
-
28web_readonly_bypass/__init__.py
-
61web_readonly_bypass/__openerp__.py
-
109web_readonly_bypass/static/src/js/readonly_bypass.js
-
12web_readonly_bypass/views/readonly_bypass.xml
@ -0,0 +1,28 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Authors: Nemry Jonathan & Laetitia Gangloff |
|||
# Copyright (c) 2014 Acsone SA/NV (http://www.acsone.eu) |
|||
# All Rights Reserved |
|||
# |
|||
# WARNING: This program as such is intended to be used by professional |
|||
# programmers who take the whole responsibility of assessing all potential |
|||
# consequences resulting from its eventual inadequacies and bugs. |
|||
# End users who are looking for a ready-to-use solution with commercial |
|||
# guarantees and support are strongly advised to contact a Free Software |
|||
# Service Company. |
|||
# |
|||
# This program is free software: you can redistribute it and/or modify |
|||
# it under the terms of the GNU Affero General Public License as |
|||
# published by the Free Software Foundation, either version 3 of the |
|||
# License, or (at your option) any later version. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU Affero General Public License for more details. |
|||
# |
|||
# You should have received a copy of the GNU Affero General Public License |
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
@ -0,0 +1,61 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Authors: Nemry Jonathan & Laetitia Gangloff |
|||
# Copyright (c) 2014 Acsone SA/NV (http://www.acsone.eu) |
|||
# All Rights Reserved |
|||
# |
|||
# WARNING: This program as such is intended to be used by professional |
|||
# programmers who take the whole responsibility of assessing all potential |
|||
# consequences resulting from its eventual inadequacies and bugs. |
|||
# End users who are looking for a ready-to-use solution with commercial |
|||
# guarantees and support are strongly advised to contact a Free Software |
|||
# Service Company. |
|||
# |
|||
# This program is free software: you can redistribute it and/or modify |
|||
# it under the terms of the GNU Affero General Public License as |
|||
# published by the Free Software Foundation, either version 3 of the |
|||
# License, or (at your option) any later version. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU Affero General Public License for more details. |
|||
# |
|||
# You should have received a copy of the GNU Affero General Public License |
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
{ |
|||
'name': 'Read Only ByPass', |
|||
'version': '1.0', |
|||
"author": "ACSONE SA/NV", |
|||
"maintainer": "ACSONE SA/NV", |
|||
"website": "http://www.acsone.eu", |
|||
'category': 'Technical Settings', |
|||
'depends': [ |
|||
'base', |
|||
'web', |
|||
], |
|||
'description': """ |
|||
Read Only ByPass |
|||
================ |
|||
This Module provides a solution to the problem of the interaction between |
|||
'readonly' attribute and 'on_change' attribute when used together |
|||
|
|||
Behavior: add `readonly_fields` changed by `on_change` into the fields passing |
|||
into an update or create. If `filter_out_readonly` is into the context and set |
|||
True then apply native behavior. |
|||
""", |
|||
'images': [], |
|||
'data': [ |
|||
'views/readonly_bypass.xml', |
|||
], |
|||
'qweb': [ |
|||
], |
|||
'css': [], |
|||
'demo': [], |
|||
'test': [], |
|||
'installable': True, |
|||
'auto_install': False, |
|||
} |
@ -0,0 +1,109 @@ |
|||
/* |
|||
* Allow to bypass readonly fi the value is changed |
|||
*/ |
|||
|
|||
openerp.readonly_bypass = function(instance) { |
|||
|
|||
var QWeb = instance.web.qweb, _t = instance.web._t; |
|||
/** |
|||
* ignore readonly: place options['readonly_fields'] into the data |
|||
* if nothing is specified into the context |
|||
* |
|||
* create mode: remove read-only keys having a 'false' value |
|||
* |
|||
* @param boolean mode: True case of create, false case of write |
|||
* @param {Object} context->filter_out_readonly |
|||
* @param {Object} data field values to possibly be updated |
|||
* @param {Object} options Dictionary that can contain the following keys: |
|||
* - readonly_fields: Values from readonly fields to merge into the data object |
|||
*/ |
|||
function ignore_readonly(data, options, mode, context){ |
|||
if (options){ |
|||
if (!('filter_out_readonly' in context && context['filter_out_readonly'] == true |
|||
&& 'readonly_fields' in options && options['readonly_fields'])) { |
|||
if(mode){ |
|||
$.each( options.readonly_fields, function( key, value ) { |
|||
if(value==false){ |
|||
delete(options.readonly_fields[key]); |
|||
} |
|||
}); |
|||
} |
|||
data = $.extend(data,options['readonly_fields']) |
|||
} |
|||
} |
|||
}; |
|||
|
|||
instance.web.BufferedDataSet.include({ |
|||
|
|||
init : function() { |
|||
this._super.apply(this, arguments); |
|||
}, |
|||
/** |
|||
* Creates Overriding |
|||
* |
|||
* @param {Object} data field values to set on the new record |
|||
* @param {Object} options Dictionary that can contain the following keys: |
|||
* - readonly_fields: Values from readonly fields that were updated by |
|||
* on_changes. Only used by the BufferedDataSet to make the o2m work correctly. |
|||
* @returns super {$.Deferred} |
|||
*/ |
|||
create : function(data, options) { |
|||
var self = this; |
|||
ignore_readonly(data, options, true, self.context); |
|||
return self._super(data,options); |
|||
}, |
|||
/** |
|||
* Creates Overriding |
|||
* |
|||
* @param {Object} data field values to set on the new record |
|||
* @param {Object} options Dictionary that can contain the following keys: |
|||
* - readonly_fields: Values from readonly fields that were updated by |
|||
* on_changes. Only used by the BufferedDataSet to make the o2m work correctly. |
|||
* @returns super {$.Deferred} |
|||
*/ |
|||
write : function(id, data, options) { |
|||
var self = this; |
|||
ignore_readonly(data, options, false, self.context); |
|||
return self._super(id,data,options); |
|||
}, |
|||
|
|||
}); |
|||
|
|||
instance.web.DataSet.include({ |
|||
/* |
|||
BufferedDataSet: case of 'add an item' into a form view |
|||
*/ |
|||
init : function() { |
|||
this._super.apply(this, arguments); |
|||
}, |
|||
/** |
|||
* Creates Overriding |
|||
* |
|||
* @param {Object} data field values to set on the new record |
|||
* @param {Object} options Dictionary that can contain the following keys: |
|||
* - readonly_fields: Values from readonly fields that were updated by |
|||
* on_changes. Only used by the BufferedDataSet to make the o2m work correctly. |
|||
* @returns super {$.Deferred} |
|||
*/ |
|||
create : function(data, options) { |
|||
var self = this; |
|||
ignore_readonly(data, options, true, self.context); |
|||
return self._super(data,options); |
|||
}, |
|||
/** |
|||
* Creates Overriding |
|||
* |
|||
* @param {Object} data field values to set on the new record |
|||
* @param {Object} options Dictionary that can contain the following keys: |
|||
* - readonly_fields: Values from readonly fields that were updated by |
|||
* on_changes. Only used by the BufferedDataSet to make the o2m work correctly. |
|||
* @returns super {$.Deferred} |
|||
*/ |
|||
write : function(id, data, options) { |
|||
var self = this; |
|||
ignore_readonly(data, options, false, self.context); |
|||
return self._super(id,data,options); |
|||
}, |
|||
|
|||
}); |
|||
}; |
@ -0,0 +1,12 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<!-- vim:fdn=3: |
|||
--> |
|||
<openerp> |
|||
<data> |
|||
<template id="assets_backend" name="readonly_bypass" inherit_id="web.assets_backend"> |
|||
<xpath expr="." position="inside"> |
|||
<script type="text/javascript" src="/readonly_bypass/static/src/js/readonly_bypass.js"></script> |
|||
</xpath> |
|||
</template> |
|||
</data> |
|||
</openerp> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue