From 7f6d06267a58682f43557c7bcfc857a92b1c6ff0 Mon Sep 17 00:00:00 2001 From: "Kunal Chavda (OpenERP)" Date: Wed, 2 Nov 2011 17:38:37 +0530 Subject: [PATCH] [IMP]Improved code for only getting view's value not from databse. bzr revid: kch@tinyerp.com-20111102120837-lbqu36nmf2e9anyr --- addons/web/static/src/js/view_editor.js | 113 ++++++++++++------------ 1 file changed, 58 insertions(+), 55 deletions(-) diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js index bf87e473934..039ac0fac3e 100644 --- a/addons/web/static/src/js/view_editor.js +++ b/addons/web/static/src/js/view_editor.js @@ -464,7 +464,6 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ }, on_edit_node:function(properties,fld_name,id_tr){ var self = this; - var result; this.edit_node_dialog = new openerp.web.Dialog(this,{ modal: true, title: 'Properties', @@ -483,49 +482,53 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ var widget = ['readonly','required','nolabel','completion','widget','groups','position','icon','align','special','type','target']; var arch_val = self.get_view_object(id_tr,one_object,[]); self.edit_node_dialog.$element.append('
'); - - var groups_values = self.on_groups(); - dataset = new openerp.web.DataSetSearch(this,'ir.model', null, null); - dataset.read_slice([],{domain : [['model','=',self.model]]},function (result) { - db = new openerp.web.DataSetSearch(self,'ir.model.fields', null, null); - db.read_slice([],{domain : [['model_id','=',result[0].id],['name','=',fld_name]]},function (res) { - _.each(properties,function(record){ - var id = record; - var rs = res.length ? res[0][record] : null; - if (_.include(widget,record)){ - var type_widget = new (self.property.get_any(['undefined' , record, arch_val[0]['att_list'][0]])) (self.edit_node_dialog, arch_val); - self.edit_node_dialog.$element.find('table[id=rec_table]').append(''+record+':'+type_widget.render()+''); - (record=='groups')?type_widget.set_value(id,groups_values):type_widget.set_value(id,rs); + _.each(properties,function(record){ + var id = record; + self.ready = $.when(self.on_groups(id)).then(function () { + if (_.include(widget,id)){ + var type_widget = new (self.property.get_any(['undefined' , id, arch_val[0]['att_list'][0]])) (self.edit_node_dialog, arch_val); + self.edit_node_dialog.$element.find('table[id=rec_table]').append(''+id+':'+type_widget.render()+''); + (id=='groups')?type_widget.set_value(id,self.groups):type_widget.set_value(id); }else{ var type_widget = new openerp.web.ViewEditor.FieldChar (self.edit_node_dialog,arch_val); - self.edit_node_dialog.$element.find('table[id=rec_table]').append(''+record+':'+type_widget.render()+''); - type_widget.set_value(id,rs); + self.edit_node_dialog.$element.find('table[id=rec_table]').append(''+id+':'+type_widget.render()+''); + type_widget.set_value(id); } }); }); - }); }, //for getting groups - on_groups: function(){ - var self = this; - var group_ids = []; - var group_names = {}; - var groups = []; - var resgrp_database = new openerp.web.DataSetSearch(self,'res.groups', null, null); - resgrp_database.read_slice([],{}, function (res_grp) { - _.each(res_grp,function(res){ - var key = res.id; - group_names[key]=res.name; - group_ids.push(res.id); - }); - var irmodel_database = new openerp.web.DataSetSearch(self,'ir.model.data', null, null); - irmodel_database.read_slice([],{domain:[['res_id', 'in', group_ids],['model','=','res.groups']]},function(model_grp){ - _.each(model_grp,function(res_group){ - groups.push([res_group.name,group_names[res_group.res_id]]); - }); - }); - }); - return groups; + on_groups: function(id){ + var self = this, + def = $.Deferred(); + if (id !='groups') { + self.groups = false; + return false; + } + var group_ids = [], + group_names = {}, + groups = []; + var res_groups = new openerp.web.DataSetSearch(this,'res.groups', null, null), + model_data = new openerp.web.DataSetSearch(self,'ir.model.data', null, null); + res_groups + .read_slice([],{}) + .done(function(res_grp) { + _.each(res_grp,function(res){ + var key = res.id; + group_names[key]=res.name; + group_ids.push(res.id); + }); + model_data + .read_slice([],{domain:[['res_id', 'in', group_ids],['model','=','res.groups']]}) + .done(function(model_grp) { + _.each(model_grp,function(res_group){ + groups.push([res_group.name,group_names[res_group.res_id]]); + }); + self.groups = groups; + def.resolve(); + }); + }) + return def.promise(); }, on_update_node: function(){ //todo @@ -547,11 +550,11 @@ openerp.web.ViewEditor.FieldBoolean = openerp.web.ViewEditor.Field.extend({ this._super(view, node); this.template = "view_boolean"; }, - set_value: function(id,value) { + set_value: function(id) { var view_val = _.detect(this.node[0]['att_list'],function(res) { return _.include(res,id); }); - view_val ? this.$element.find("tr[id="+id+"] input").attr('checked', view_val[1]): this.$element.find("tr[id="+id+"] input").attr('checked', value); + view_val ? this.$element.find("tr[id="+id+"] input").attr('checked', view_val[1]): this.$element.find("tr[id="+id+"] input").attr('checked', false); } }); openerp.web.ViewEditor.FieldChar = openerp.web.ViewEditor.Field.extend({ @@ -559,11 +562,11 @@ openerp.web.ViewEditor.FieldChar = openerp.web.ViewEditor.Field.extend({ this._super(view, node); this.template = "view_char"; }, - set_value: function(id,value) { + set_value: function(id) { var view_val = _.detect(this.node[0]['att_list'],function(res) { return _.include(res,id); }); - view_val ? this.$element.find("tr[id="+id+"] input").val(view_val[1]): this.$element.find("tr[id="+id+"] input").val(value); + view_val ? this.$element.find("tr[id="+id+"] input").val(view_val[1]): this.$element.find("tr[id="+id+"] input").val(); } }); openerp.web.ViewEditor.FieldSelect = openerp.web.ViewEditor.Field.extend({ @@ -591,8 +594,8 @@ openerp.web.ViewEditor.WidgetProperty = openerp.web.ViewEditor.FieldSelect.exten this._super(view, node); this.registry = openerp.web.form.widgets; }, - set_value: function(id,value) { - value = _.keys(this.registry.map); + set_value: function(id) { + var value = _.keys(this.registry.map); value.push(''); value.sort(); this._super.apply(this,[id, value]); @@ -602,8 +605,8 @@ openerp.web.ViewEditor.IconProperty = openerp.web.ViewEditor.FieldSelect.extend( init: function(view, node) { this._super(view, node); }, - set_value: function(id,value) { - value = icons; + set_value: function(id) { + var value = icons; this._super.apply(this,[id, value]); } }); @@ -611,8 +614,8 @@ openerp.web.ViewEditor.ButtonTargetProperty = openerp.web.ViewEditor.FieldSelect init: function(view, node) { this._super(view, node); }, - set_value: function(id,value) { - value = [['',''],['new','New Window']]; + set_value: function(id) { + var value = [['',''],['new','New Window']]; this._super.apply(this,[id, value]); } }); @@ -620,8 +623,8 @@ openerp.web.ViewEditor.ButtonTypeProperty = openerp.web.ViewEditor.FieldSelect.e init: function(view, node) { this._super(view, node); }, - set_value: function(id,value) { - value = [['',''],['action', 'Action'], ['object', 'Object'], ['workflow', 'Workflow'], ['server_action', 'Server Action']]; + set_value: function(id) { + var value = [['',''],['action', 'Action'], ['object', 'Object'], ['workflow', 'Workflow'], ['server_action', 'Server Action']]; this._super.apply(this,[id, value]); } }); @@ -629,8 +632,8 @@ openerp.web.ViewEditor.AlignProperty = openerp.web.ViewEditor.FieldSelect.extend init: function(view, node) { this._super(view, node); }, - set_value: function(id,value) { - value = [['',''],['0.0','Left'], ['0.5','Center'], ['1.0','Right']]; + set_value: function(id) { + var value = [['',''],['0.0','Left'], ['0.5','Center'], ['1.0','Right']]; this._super.apply(this,[id, value]); } }); @@ -638,8 +641,8 @@ openerp.web.ViewEditor.ButtonSpecialProperty = openerp.web.ViewEditor.FieldSelec init: function(view, node) { this._super(view, node); }, - set_value: function(id,value) { - value = [['',''],['save','Save Button'], ['cancel','Cancel Button'], ['open','Open Button']]; + set_value: function(id) { + var value = [['',''],['save','Save Button'], ['cancel','Cancel Button'], ['open','Open Button']]; this._super.apply(this,[id, value]); } }); @@ -647,8 +650,8 @@ openerp.web.ViewEditor.PositionProperty = openerp.web.ViewEditor.FieldSelect.ext init: function(view, node) { this._super(view, node); }, - set_value: function(id,value) { - value = [['',''],['after', 'After'],['before', 'Before'],['inside', 'Inside'],['replace', 'Replace']]; + set_value: function(id) { + var value = [['',''],['after', 'After'],['before', 'Before'],['inside', 'Inside'],['replace', 'Replace']]; this._super.apply(this,[id, value]); } });