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)
_______________________________________________ Mailing list: https://launchpad.net/~openerp-dev-gtk Post to : [email protected] Unsubscribe : https://launchpad.net/~openerp-dev-gtk More help : https://help.launchpad.net/ListHelp

