diff options
| author | Vaibhav (OpenERP) <vda@tinyerp.com> | 2011-09-19 14:48:30 +0530 |
|---|---|---|
| committer | Vaibhav (OpenERP) <vda@tinyerp.com> | 2011-09-19 14:48:30 +0530 |
| commit | a9efd2fdd05ff8c4930507f79865a1178fc91665 (patch) | |
| tree | 105869835ec11819158456bbd14235c7f9ad9823 /addons/web_process/static/src/js | |
| parent | bc35b1250e0f8483f0301e2e121f82c3ef45f685 (diff) | |
| parent | b1d49ca31fd14366452565b5a098619a7cde87ea (diff) | |
[IMP] Process view. Merge openerp-web.
bzr revid: vda@tinyerp.com-20110919091830-uyafy0o2cg7w8v12
Diffstat (limited to 'addons/web_process/static/src/js')
| -rw-r--r-- | addons/web_process/static/src/js/process.js | 205 |
1 files changed, 190 insertions, 15 deletions
diff --git a/addons/web_process/static/src/js/process.js b/addons/web_process/static/src/js/process.js index f872fc05a61..40f4663c08a 100644 --- a/addons/web_process/static/src/js/process.js +++ b/addons/web_process/static/src/js/process.js @@ -2,21 +2,196 @@ openerp.web_process = function (openerp) { var QWeb = openerp.web.qweb; QWeb.add_template('/web_process/static/src/xml/web_process.xml'); -openerp.web.SearchView = openerp.web.SearchView.extend({ - init: function(parent, element_id, dataset, view_id, defaults) { - this._super(parent, element_id, dataset, view_id, defaults); - }, - on_loaded: function(data) { - var self = this; - this._super(data); - this.$element.find("#ProcessView").click(function() { - self.on_click(); - }); - }, - on_click: function() { - this.widget_parent.$element.replaceWith(QWeb.render("ProcessView")); - }, -}); + openerp.web.ViewManagerAction.include({ + on_mode_switch: function (view_type) { + var self = this; + this.process_model = this.model; + return $.when( + this._super(view_type), + this.process_check(this.views[view_type])).then(function () { + }); + }, + process_check: function(view) { + var self = this; + var grandparent = this.widget_parent && this.widget_parent.widget_parent; + // display shortcuts if on the first view for the action + var $process_toggle = this.$element.find('.oe-process-toggle'); + if (!(grandparent instanceof openerp.web.WebClient) || + !(view.view_type === this.views_src[0].view_type + && view.view_id === this.views_src[0].view_id)) { + $process_toggle.hide(); + return; + } + $process_toggle.show(); + $process_toggle + .unbind("click") + .click(function(){ + $.when(self.load_process()).then(self.get_process_id()); + }); + }, + + load_process: function() { +// this.widget_parent.$element.html(QWeb.render("ProcessView",this)); + this.$element.html(QWeb.render("ProcessView",this)); + }, + + get_process_id: function() { + var self = this; + this.process_dataset = new openerp.web.DataSetStatic(this, "process.process", this.session.context); + this.process_dataset + .call( + "search_by_model", + [self.process_model,self.session.context], + function(res) { + self.renderer(res); + } + ); + }, + + renderer: function(res) { + var self = this; + if(!res.length) { + this.process_model = false; + this.get_process_id(); + } else { + + if(res.length > 1) { + this.selection = res; + $.when(this.load_process()).then(function() { + self.widget_parent.$element.find('#change_process').click(function(){ + + self.p_id = self.widget_parent.$element.find('#select_process').val(); + $.when(self.load_process()).then(self.render_process_view()); + + }); + }); + } + else { + this.p_id = res[0][0]; + $.when(this.load_process()).then(this.render_process_view()); + } + } + }, + + render_process_view: function() { + var self = this; + this.p_id = parseInt(this.p_id, 10); + this.process_dataset + .call( + "graph_get", + [self.p_id, self.model, false, [80,80,150,100]], + function(res) { + res['title'] = res.resource ? res.resource : res.name; + self.process_dataset.call("search_by_model",[self.model,self.session.context],function(r){ + res['related'] = r; + }); + self.draw_process_graph(res); + } + ); + }, + + draw_process_graph: function(res) { + var process_graph = new Graph(); + + var process_renderer = function(r, n) { + var process_node, + process_node_text, + process_node_desc, + process_set; + + var node_button, + node_menu, + img_src; + + var bg = "node"; + var clip_rect = "".concat(n.node.x,",",n.node.y,",150,100"); + var text_position_x = n.node.kind == "subflow" ? n.node.x+88 : n.node.x+75; + + //Image part + bg = n.node.kind == "subflow" ? "node-subflow" : "node"; + bg = n.node.gray ? bg + "-gray" : bg; + img_src = '/web_process/static/src/img/'+ bg + '.png'; + + r['image'](img_src, n.node.x, n.node.y,150, 100).attr({"clip-rect": clip_rect}); + + //Node + process_node = r['rect'](n.node.x, n.node.y, 150, 100); + + // Node text + process_node_text = r.text(text_position_x, n.node.y+10, (n.node.name)) + .attr({"fill": "#fff", "font-weight": "bold"}); + + if(n.node.subflow) { + process_node_text.click(function() { + self.p_id = n.node.id; + $.when(self.load_process()).then(self.render_process_view()); + }); + } + + //Node Description + process_node_desc = r.text(n.node.x+75, n.node.y+50, (n.node.notes)); + + + r['image']('/web/static/src/img/icons/gtk-info.png', n.node.x+20, n.node.y+70, 16, 16) + .attr({"cursor": "pointer", "title": "Help"}) + .click(function(){ + window.open(n.node.url || "http://doc.openerp.com/v6.0/index.php?model=" + n.node.model); + }); + + if(n.node.menu) { + r['image']('/web/static/src/img/icons/gtk-jump-to.png', n.node.x+115, n.node.y+70, 16, 16) + .attr({"cursor": "pointer", "title": n.node.menu.name}) + .click(function() { + self.jump_to_view(n.node.res_model, n.node.menu.id) + }); + } + + process_set = r.set() + .push(process_node) + .push(process_node_text) + .push(process_node_desc); + process_node.mousedown(function(){ + return false; + }) + return process_set; + }; + + _.each(res['nodes'],function(node, node_id) { + node['res_model'] = self.model, + node['res_id'] = false, + node['id'] = node_id; + process_graph.addNode(node['name'], {node: node,render: process_renderer}); + }); + + _.each(res['transitions'], function(transitions) { + + var src = res['nodes'][transitions['source']]; + var dst = res['nodes'][transitions['target']]; + // make active + transitions['active'] = src.active && !dst.gray; + process_graph.addEdge(src['name'], dst['name'], {directed : true, label: transitions['name']}) + }); + var layouter = new Graph.Layout.Ordered(process_graph); + var render_process_graph = new Graph.Renderer.Raphael('process_canvas', process_graph, $('#process_canvas').width(), $('#process_canvas').height()); + }, + + jump_to_view: function(model, id) { + var self = this; + var dataset = new openerp.web.DataSetStatic(this, 'ir.values', this.session.context); + dataset + .call('get', + ['action', 'tree_but_open',[['ir.ui.menu', id]], dataset.context], + function(res) { + var action = res[0][res[0].length - 1]; + var action_manager = new openerp.web.ActionManager(self); + action_manager.appendTo(self.widget_parent.$element); + action_manager.do_action(action); + } + ); + } + + }); }; + // vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax: |
