openerp-dev-web team mailing list archive
-
openerp-dev-web team
-
Mailing list archive
-
Message #00595
[Merge] lp:~openerp-dev/openobject-client-web/one2many-onchange into lp:openobject-client-web
sma (Open ERP) has proposed merging lp:~openerp-dev/openobject-client-web/one2many-onchange into lp:openobject-client-web.
Requested reviews:
OpenERP SA's Web Client R&D (openerp-dev-web)
Related bugs:
#671608 customer payment doesn't work in web version
https://bugs.launchpad.net/bugs/671608
Implement onchange for one2many widget.
For testing refer Bug #671608.
--
https://code.launchpad.net/~openerp-dev/openobject-client-web/one2many-onchange/+merge/41437
Your team OpenERP R&D Team is subscribed to branch lp:~openerp-dev/openobject-client-web/one2many-onchange.
=== modified file 'addons/openerp/controllers/listgrid.py'
--- addons/openerp/controllers/listgrid.py 2010-11-17 12:21:33 +0000
+++ addons/openerp/controllers/listgrid.py 2010-11-22 11:22:18 +0000
@@ -26,6 +26,8 @@
# You can see the MPL licence at: http://www.mozilla.org/MPL/MPL-1.1.html
#
###############################################################################
+import copy
+
import cherrypy
from openerp.controllers import SecuredController
from openerp.utils import rpc, TinyDict, TinyForm, TinyFormError, context_with_concurrency_info, cache
@@ -141,6 +143,39 @@
o2m_value.pop(int(index))
return dict(o2m_value=ustr(o2m_value))
+ @expose('json')
+ def get_o2m_defaults(self, o2m_values, model, o2m_model, name, view_type, view_id,
+ o2m_view_type, o2m_view_id, editable, limit, offset, o2m_context, o2m_domain):
+
+ view_id = view_id or False
+ o2m_view_id = eval(o2m_view_id) or False
+
+ context = dict((eval(o2m_context) or {}), **rpc.session.context)
+
+ import simplejson
+ o2m_values = simplejson.loads(o2m_values)
+
+ if o2m_values and isinstance(o2m_values, unicode):
+ o2m_values = eval(o2m_values)
+
+ for o2m in o2m_values:
+ o2m['id'] = 0
+
+ if o2m_view_id:
+ view = cache.fields_view_get(o2m_model, o2m_view_id, o2m_view_type, context)
+ else:
+ view = cache.fields_view_get(model, view_id, view_type, rpc.session.context)
+ view = view['fields'].get(name).get('views').get(o2m_view_type)
+
+ list_view = listgrid.List(name, model, view, ids=None, domain=o2m_domain, context=context, default_data=copy.deepcopy(o2m_values), limit=20, editable= editable,o2m=1)
+ view=ustr(list_view.render())
+ formated_o2m_values = []
+ for o2m in o2m_values:
+ o2m.pop('id', None)
+ formated_o2m_values.append((0, 0, o2m))
+
+ return dict(view=view, formated_o2m_values=ustr(formated_o2m_values))
+
@expose()
def multiple_groupby(self, model, name, grp_domain, group_by, view_id, view_type, parent_group, group_level, groups, no_leaf, **kw):
grp_domain = ast.literal_eval(grp_domain)
=== modified file 'addons/openerp/static/javascript/form.js'
--- addons/openerp/static/javascript/form.js 2010-11-18 15:08:20 +0000
+++ addons/openerp/static/javascript/form.js 2010-11-22 11:22:18 +0000
@@ -525,6 +525,59 @@
var kind = jQuery(fld).attr('kind');
+ if (!kind) {
+ var class = jQuery(fld).attr('class');
+ if (class=='gridview'){
+ if (getElement('_terp_default_o2m/'+k) && !value) {
+ if (getElement('_terp_default_o2m/'+k).value=='' && !value)
+ continue;
+ else if(getElement('_terp_default_o2m/'+k).value && !value) {
+ getElement('_terp_default_o2m/'+k).value = '';
+ new ListView(k).reload();
+ }
+ }
+ else if (value) {
+ var parentmodel = openobject.dom.get('_terp_model').value;
+ var o2m_model = openobject.dom.get(prefix + k + '/_terp_model').value;
+ var view_type = openobject.dom.get('_terp_view_type').value;
+ var view_id = openobject.dom.get('_terp_view_id').value;
+ var o2m_view_type = openobject.dom.get(prefix + k + '/_terp_view_type').value;
+ var o2m_view_id = openobject.dom.get(prefix + k + '/_terp_view_id').value;
+ var o2m_editable = openobject.dom.get(prefix + k + '/_terp_editable').value;
+ var o2m_limit = openobject.dom.get(prefix + k + '/_terp_limit').value;
+ var o2m_offset = openobject.dom.get(prefix + k + '/_terp_offset').value;
+ var o2m_context = openobject.dom.get(prefix + k + '/_terp_context').value;
+ var o2m_domain = openobject.dom.get(prefix + k + '/_terp_domain').value;
+ var request = openobject.http.postJSON('/openerp/listgrid/get_o2m_defaults', { 'o2m_values': serializeJSON(value),
+ 'model': parentmodel,
+ 'o2m_model': o2m_model,
+ 'name': k,
+ 'view_type': view_type,
+ 'view_id': view_id,
+ 'o2m_view_type':o2m_view_type,
+ 'o2m_view_id':o2m_view_id,
+ 'editable': o2m_editable,
+ 'limit': o2m_limit,
+ 'offset': o2m_offset,
+ 'o2m_context': o2m_context,
+ 'o2m_domain': o2m_domain
+ });
+ request.addCallback(function(obj){
+ jQuery(fld).closest('.list-a').replaceWith(obj.view);
+ if (openobject.dom.get('_terp_default_o2m/'+k)) {
+ openobject.dom.get('_terp_default_o2m/'+k).value = obj.formated_o2m_values;
+ }
+ else {
+ var input = INPUT({'type': 'hidden', 'value': obj.formated_o2m_values, 'id': '_terp_default_o2m/'+k, 'name': '_terp_default_o2m/'+k})
+ getFirstParentByTagAndClassName(k, 'td', 'o2m_cell').appendChild(input);
+ }
+ });
+ }
+ }
+ fld.__lock_onchange = true;
+ return;
+ }
+
switch (kind) {
case 'picture':
fld.src = value;
=== modified file 'addons/openerp/widgets/form/_form.py'
--- addons/openerp/widgets/form/_form.py 2010-11-17 11:02:00 +0000
+++ addons/openerp/widgets/form/_form.py 2010-11-22 11:22:18 +0000
@@ -438,7 +438,7 @@
# self.default = 0.0
def set_value(self, value):
- self.default = value
+ self.default = value or 0.0
register_widget(Float, ["float"])
@@ -502,8 +502,11 @@
self.options = proxy.name_get(ids, ctx)
except:
self.options = []
+
+ if self.options and self.options[0][0] == '' and isinstance(self.options[0][0], unicode):
+ self.validator = validators.Selection()
# determine the actual type
- if self.options and isinstance(self.options[0][0], basestring):
+ elif self.options and isinstance(self.options[0][0], basestring):
self.kind = 'char'
self.validator = validators.String()
else:
=== modified file 'addons/openerp/widgets/listgrid.py'
--- addons/openerp/widgets/listgrid.py 2010-11-17 11:02:00 +0000
+++ addons/openerp/widgets/listgrid.py 2010-11-22 11:22:18 +0000
@@ -153,7 +153,7 @@
proxy = rpc.RPCProxy(model)
- if not self.o2m and not self.m2m and not terp_params.get('_terp_search_text'):
+ if not kw.get('default_data') and not self.o2m and not self.m2m and not terp_params.get('_terp_search_text'):
if self.limit > 0:
if self.sort_key:
ids = proxy.search(search_param, self.offset, self.limit, self.sort_key + ' ' +self.sort_order, context)
Follow ups