diff options
| author | Bhumi Thakkar (Open ERP) <bth@tinyerp.com> | 2011-06-07 12:40:34 +0530 |
|---|---|---|
| committer | Bhumi Thakkar (Open ERP) <bth@tinyerp.com> | 2011-06-07 12:40:34 +0530 |
| commit | c4fe70d92cebbfc7d31dc6cc769e3c9b5a8a39a8 (patch) | |
| tree | d6db3dc2edce353347dfce56c8f2f71a1c7ea1ac /addons/base | |
| parent | f75ac6d8f2d7964ef18a071b4caf4ed4a020a07c (diff) | |
[IMP] Loaded data and displayed in tree structure.
bzr revid: bth@tinyerp.com-20110607071034-lfr5nlt5aiduk6z6
Diffstat (limited to 'addons/base')
| -rw-r--r-- | addons/base/controllers/main.py | 17 | ||||
| -rw-r--r-- | addons/base/static/src/js/tree.js | 115 | ||||
| -rw-r--r-- | addons/base/static/src/xml/base.xml | 56 |
3 files changed, 170 insertions, 18 deletions
diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index 36ea829a2f9..0cd5db39b35 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -756,3 +756,20 @@ class Action(openerpweb.Controller): if action: value = clean_action(action[0], req.session) return {'result': value} +class TreeView(View): + _cp_path = "/base/treeview" + + @openerpweb.jsonrequest + def load(self, req, model, view_id, toolbar=False): + fields_view = self.fields_view_get(req, model, view_id, 'tree', toolbar=toolbar) + return {'field_parent': fields_view} + + def fields_view_get(self, request, model, view_id, view_type="tree", + transform=True, toolbar=False, submenu=False): + """ Sets @editable on the view's arch if it isn't already set and + ``set_editable`` is present in the request context + """ + view = super(TreeView, self).fields_view_get( + request, model, view_id, view_type, transform, toolbar, submenu) + + return view
\ No newline at end of file diff --git a/addons/base/static/src/js/tree.js b/addons/base/static/src/js/tree.js index e333c295473..5670a7e74d1 100644 --- a/addons/base/static/src/js/tree.js +++ b/addons/base/static/src/js/tree.js @@ -1,26 +1,105 @@ -/*--------------------------------------------------------- - * OpenERP base library - *---------------------------------------------------------*/ - openerp.base.tree = function(openerp) { - openerp.base.views.add('tree', 'openerp.base.TreeView'); -openerp.base.TreeView = openerp.base.Controller.extend({ -/** - * Genuine tree view (the one displayed as a tree, not the list) - */ +openerp.base.TreeView = openerp.base.View.extend({ + init: function(view_manager, session, element_id, dataset, view_id, options) { + this._super(session, element_id); + this.view_manager = view_manager || new openerp.base.NullViewManager(); + this.dataset = dataset; + this.model = dataset.model; + this.view_id = view_id; + + this.columns = []; + + this.options = _.extend({}, this.defaults, options || {}); + this.flags = this.view_manager.action.flags; + }, start: function () { this._super(); - this.$element.append('Tree view'); + return this.rpc("/base/treeview/load", { + model: this.model, + view_id: this.view_id, + toolbar: this.view_manager ? !!this.view_manager.sidebar : false + }, this.on_loaded); }, - do_show: function () { - this.$element.show(); + on_loaded: function (data) { + var self = this; + this.dataset.read_slice([], 0, false, function (response) { + self.$element.html(QWeb.render('TreeView', {'field_data':response})); + id=self.dataset.ids[0]; + self.dataset.domain=[['parent_id','=',parseInt(id,10)]]; + self.dataset.read_slice([], 0, false, function (response) { + $('#parent_id').change(self.getch(($('#parent_id').attr('value')),0)); + self.$element.append(QWeb.render('TreeView_Secondry', {'child_data':response})); + $('#child_id').find('div').click(function(){ + self.getch(this.id,1) + }); + }); + }); }, - do_hide: function () { - this.$element.hide(); + getch: function(id,flag) { + + var self=this; + if(flag==0){ + $('#parent_id').change(function(){ + self.on_change($('#parent_id').attr('value'),0); + }); + } + else if(flag==1){ + self.on_change(id,1); + }else{ + self.on_change(id,2); + } + }, + on_change:function(parentid,flag){ + var self=this; + if(parentid>0){ + this.dataset.domain=[['parent_id','=',parseInt(parentid,10)]]; + this.dataset.read_slice([],0,false, function (response) { + if(flag==0){ + $('#child_id').remove(); + self.$element.append(QWeb.render('TreeView_Secondry', {'child_data':response})); + }else if(flag==1){ + jQuery('#'+parentid).append(QWeb.render('TreeView_Children', {'childdata':response})) + $('#'+parentid).find('#subchild').find('#subchild').remove(); + $('#'+parentid).find('#subchild').slice(1,3).remove(); + }else if(flag==2){ + $("#subchild #"+parentid).find('#subchild').remove(); + $("#subchild #"+parentid).find('#childsubchild').remove(); + $("#subchild #"+parentid).append(QWeb.render('TreeView_SubChildren', {'subchilddata':response})) + } + $('#child_id').find('div').click(function(){ + self.getch(this.id,1) + }); + $('#child_id div #subchild').find('div').click(function(){ + self.getch(this.id,2) + }); + }); + } + }, + reload_view: function (grouped) { + var self = this; + this.dataset.offset = 0; + this.dataset.limit = false; + return this.rpc('/base/treeview/load', { + model: this.model, + view_id: this.view_id, + toolbar: !!this.flags.sidebar + }, function (field_view_get) { + self.on_loaded(field_view_get, grouped); + }); + }, + do_search: function (domains, contexts, groupbys) { + var self = this; + return this.rpc('/base/session/eval_domain_and_context', { + domains: domains, + contexts: contexts, + group_by_seq: groupbys + }, function (results) { + self.dataset.context = results.context; + self.dataset.domain = results.domain; + self.reload_view(!!results.group_by).then( + $.proxy(self, 'reload_content')); + }); } }); - -}; - -// vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax: +}
\ No newline at end of file diff --git a/addons/base/static/src/xml/base.xml b/addons/base/static/src/xml/base.xml index cd939571e94..1d46df2eda5 100644 --- a/addons/base/static/src/xml/base.xml +++ b/addons/base/static/src/xml/base.xml @@ -229,7 +229,63 @@ </table> </t> <table t-name="TreeView"> + <tr> + <select name="parent" id="parent_id" style="width: 30%"> + <t t-foreach="field_data" t-as="field" > + <option t-att-value="field.id"> + <t t-esc="field.name"/> + </option> + </t> + </select> + </tr> </table> +<t t-name="TreeView_Secondry"> + <div id="child_id"> + <t t-foreach="child_data" t-as="field" > + <div t-att-id="field.id"> + <t t-if="(field.child_id).length>=1"> + <img src="/base/static/src/img/iconset-d-drop.gif" width="16" height="16" border="0"/> + </t> + <t t-esc="field.name"/> + </div> + </t> + </div> + <!-- <ul id="child_id"> + <t t-foreach="child_data" t-as="field" > + <li t-att-id="field.id" > + <t t-esc="field.name"/> + + + </li> + </t> + </ul> --> + +</t> +<t t-name="TreeView_Children"> + <div id="subchild" > + <t t-foreach="childdata" t-as="child" > + <div t-att-id="child.id" > + <t t-if="(child.child_id).length>=1"> + <img src="/base/static/src/img/iconset-d-drop.gif" width="16" height="16" border="0"/> + </t> + <t t-esc="child.name"/> + </div> + </t> + </div> +</t> +<t t-name="TreeView_SubChildren"> + <div id="childsubchild"> + <t t-foreach="subchilddata" t-as="subchild" > + <div t-att-id="subchild.id" > + <t t-if="(subchild.child_id).length>=1"> + <img src="/base/static/src/img/iconset-d-drop.gif" width="16" height="16" border="0"/> + </t> + + <t t-esc="subchild.name"/> + </div> + </t> + </div> +</t> <table t-name="ListView"> <t t-set="columns_count" t-value="visible_columns.length + (options.selectable ? 1 : 0) + (options.deletable ? 1 : 0)"/> <t t-set="actions_span" t-value="Math.floor((options.deletable or options.addable) ? columns_count/2 : 0)"/> |
