From 132d1673b47cbb1ca73a8b2f9a609f0d35651f81 Mon Sep 17 00:00:00 2001 From: "Vaibhav (OpenERP)" Date: Fri, 19 Aug 2011 11:21:54 +0530 Subject: [PATCH 01/29] [ADD] Diagram view. bzr revid: vda@tinyerp.com-20110819055154-wvxjc0mzehq6ogbr --- addons/base/static/src/js/form.js | 1 + addons/base_diagram/__openerp__.py | 11 +- addons/base_diagram/controllers/main.py | 20 +- addons/base_diagram/static/src/js/diagram.js | 270 ++++++++++++------ .../static/src/xml/base_diagram.xml | 15 + 5 files changed, 222 insertions(+), 95 deletions(-) create mode 100644 addons/base_diagram/static/src/xml/base_diagram.xml diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js index c85d1fd4cb2..c64bf4ed8d6 100644 --- a/addons/base/static/src/js/form.js +++ b/addons/base/static/src/js/form.js @@ -578,6 +578,7 @@ openerp.base.form.Widget = openerp.base.Widget.extend({ this.$element = $('#' + this.element_id); }, stop: function() { + this.$element = $('#' + this.element_id); this.$element.remove(); }, process_modifiers: function() { diff --git a/addons/base_diagram/__openerp__.py b/addons/base_diagram/__openerp__.py index 92b768896f9..ba8f5ad0055 100644 --- a/addons/base_diagram/__openerp__.py +++ b/addons/base_diagram/__openerp__.py @@ -1,6 +1,13 @@ { "name" : "OpenERP Web base Diagram", "version" : "2.0", - "depends" : [], - 'active': False, + "depends" : ["base"], + "js": [ + 'static/lib/js/raphael-min.js', + 'static/lib/js/dracula_graffle.js', + 'static/lib/js/dracula_graph.js', + 'static/src/js/diagram.js' + ], + "css": [], + 'active': True, } diff --git a/addons/base_diagram/controllers/main.py b/addons/base_diagram/controllers/main.py index 2f76ead7117..15a5cdbadde 100644 --- a/addons/base_diagram/controllers/main.py +++ b/addons/base_diagram/controllers/main.py @@ -6,11 +6,16 @@ class DiagramView(View): @openerpweb.jsonrequest def load(self, req, model, view_id): - print req - print dir(req) fields_view = self.fields_view_get(req, model, view_id, 'diagram') return {'fields_view': fields_view} + @openerpweb.jsonrequest + def get_activity(self, req, id, name, kind, active_model, model): + + activity_id = req.session.model(model).search([('name','=',name),('kind','=',kind),('wkf_id','=',active_model)], 0, 0, 0, req.session.context) + ids = req.session.model(model).search([], 0, 0, 0, req.session.context) + return {'activity_id':activity_id, 'ids': ids} + @openerpweb.jsonrequest def get_diagram_info(self, req, **kw): id = kw['id'] @@ -19,7 +24,6 @@ class DiagramView(View): connector = kw['connector'] src_node = kw['src_node'] des_node = kw['des_node'] - visible_node_fields = kw.get('visible_node_fields',[]) invisible_node_fields = kw.get('invisible_node_fields',[]) node_fields_string = kw.get('node_fields_string',[]) @@ -44,13 +48,11 @@ class DiagramView(View): shapes[shape_colour] = shape_color_state ir_view = req.session.model('ir.ui.view') - graphs = ir_view.graph_get(id, model, node, connector, src_node, des_node, False, + graphs = ir_view.graph_get(int(id), model, node, connector, src_node, des_node, False, (140, 180), req.session.context) - nodes = graphs['nodes'] transitions = graphs['transitions'] isolate_nodes = {} - for node in graphs['blank_nodes']: isolate_nodes[node['id']] = node else: @@ -87,7 +89,6 @@ class DiagramView(View): fields = req.session.model('ir.model.fields') field_ids = fields.search([('model', '=', model), ('relation', '=', node)], 0, 0, 0, req.session.context) field_data = fields.read(field_ids, ['relation_field'], req.session.context) - node_act = req.session.model(node) search_acts = node_act.search([(field_data[0]['relation_field'], '=', id)], 0, 0, 0, req.session.context) data_acts = node_act.read(search_acts, invisible_node_fields + visible_node_fields, req.session.context) @@ -123,5 +124,6 @@ class DiagramView(View): out_transition_field_id = fields.search([('relation', '=', connector), ('relation_field', '=', src_node), ('model', '=', node)], 0, 0, 0, req.session.context) out_transition_field = fields.read(out_transition_field_id[0], ['name'], req.session.context)['name'] - - return dict(nodes=nodes, conn=connectors, in_transition_field=in_transition_field, out_transition_field=out_transition_field) + + id_model = req.session.model(model).read([id],['name'], req.session.context)[0]['name'] + return dict(nodes=nodes, conn=connectors, in_transition_field=in_transition_field, out_transition_field=out_transition_field, id_model = id_model) diff --git a/addons/base_diagram/static/src/js/diagram.js b/addons/base_diagram/static/src/js/diagram.js index b992b5cbf42..1c8e343155c 100644 --- a/addons/base_diagram/static/src/js/diagram.js +++ b/addons/base_diagram/static/src/js/diagram.js @@ -2,25 +2,25 @@ * OpenERP base library *---------------------------------------------------------*/ -openerp.base.diagram = function (openerp) { - -openerp.base.views.add('diagram', 'openerp.base.DiagramView'); -openerp.base.DiagramView = openerp.base.Widget.extend({ - init: function(view_manager, session, element_id, dataset, view_id){ - this._super(session, element_id); - this.view_manager = view_manager; +openerp.base_diagram = function (openerp) { +QWeb.add_template('/base_diagram/static/src/xml/base_diagram.xml'); +openerp.base.views.add('diagram', 'openerp.base_diagram.DiagramView'); +openerp.base_diagram.DiagramView = openerp.base.View.extend({ +// init: function(view_manager, session, element_id, dataset, view_id) { + init: function(parent, element_id, dataset, view_id, options) { + this._super(parent, element_id); + this.set_default_options(options); + this.view_manager = parent; this.dataset = dataset; - this.model = dataset.model; + this.model = this.dataset.model; this.view_id = view_id; this.name = ""; this.domain = this.dataset._domain ? this.dataset._domain: []; this.context = {}; this.ids = this.dataset.ids; - - console.log('data set>>',this.dataset) }, start: function() { - this.rpc("/base_diagram/diagram/load", {"model": this.model, "view_id": this.view_id}, this.on_loaded); + return this.rpc("/base_diagram/diagram/load", {"model": this.model, "view_id": this.view_id}, this.on_loaded); }, toTitleCase: function(str) { @@ -28,19 +28,18 @@ openerp.base.DiagramView = openerp.base.Widget.extend({ }, on_loaded: function(result) { - var self = this; if(this.ids && this.ids.length) { - this.id = this.ids[0]; + this.id = this.ids[self.dataset.index || 0]; } - this.fields_view = result.fields_view; + this.view_id = this.fields_view.view_id; this.name = this.fields_view.name; this.fields = this.fields_view.fields; - var children = this.fields_view.arch.children; + /* * For Nodes (Fields) */ @@ -95,81 +94,184 @@ openerp.base.DiagramView = openerp.base.Widget.extend({ } } } + this.$element.html(QWeb.render("DiagramView", {"fields_view": this.fields_view})); - if(this.id) { - this.rpc( - '/base_diagram/diagram/get_diagram_info', - { - 'id': this.id, - 'model': this.model, - 'bgcolor': this.bgcolor, - 'shape': this.shape, - 'node': this.node, - 'connector': this.connector, - 'src_node': this.src_node, - 'des_node': this.des_node, - 'visible_node_fields': this.visible_fields_nodes, - 'invisible_node_fields': this.invisible_fields_nodes, - 'node_fields_string': this.fields_nodes_string, - 'connector_fields': this.connector_fields, - 'connector_fields_string': this.fields_connector_string - }, - function(result) { - self.draw_diagram(result); - } - ) - } + this.$element.find('div.oe_diagram_pager button[data-pager-action]').click(function() { + var action = $(this).data('pager-action'); + self.on_pager_action(action); + }); + + if(this.id) { + self.get_diagram_info() + } }, - draw_diagram: function(result) { - console.log('this>>>',this) - var g = new Graph(); -// var raphel = new - this.in_transition_field = result['in_transition_field']; - this.out_transition_field = result['out_transition_field']; - var res_nodes = result['nodes']; - var res_connectors = result['conn']; - - var render = function(r, n) { - var set; - if (n.node.shape == 'ellipse') { - set = r.set().push( - r.ellipse(n.node.x - 30, n.node.y - 13, 40, 40).attr({ - "fill": n.node.color, - r: "12px", - "stroke-width": n.distance == 0 ? "3px" : "1px" - })).push(r.text(n.node.x - 30, n.node.y - 10, (n.label || n.id))); - } else { - set = r.set().push( - r.rect(n.node.x-30, n.node.y-13, 60, 44).attr({"fill": n.node.color, r : "12px", "stroke-width" : n.distance == 0 ? "3px" : "1px" })).push( - r.text(n.point[0], n.point[1] + 10, (n.label || n.id) + "\n(" + (n.distance == undefined ? "Infinity" : n.distance) + ")")); - - } - return set; - }; - - for(nd in res_nodes) { - var res_node = res_nodes[nd]; - g.addNode(res_node['name'], - { - node: res_node, - render: render - }); - } - - for(cr in res_connectors) { - var res_connector = res_connectors[cr]; - g.addEdge(res_connector['source'], res_connector['destination']); - } - - var layouter = new Graph.Layout.Spring(g); - layouter.layout(); - - var renderer = new Graph.Renderer.Raphael('dia-canvas', g, 800, 800); - renderer.draw(); + get_diagram_info: function() { + var self = this; + this.rpc( + '/base_diagram/diagram/get_diagram_info', + { + 'id': this.id, + 'model': this.model, + 'bgcolor': this.bgcolor, + 'shape': this.shape, + 'node': this.node, + 'connector': this.connector, + 'src_node': this.src_node, + 'des_node': this.des_node, + 'visible_node_fields': this.visible_fields_nodes, + 'invisible_node_fields': this.invisible_fields_nodes, + 'node_fields_string': this.fields_nodes_string, + 'connector_fields': this.connector_fields, + 'connector_fields_string': this.fields_connector_string + }, + function(result) { + self.draw_diagram(result); + } + ); }, + on_diagram_loaded: function(record) { + var self = this; + var id_record = record['id'] + if(id_record) { + self.get_diagram_info(); + } + }, + + draw_diagram: function(result) { + var dia = new Graph(); + + this.active_model = result['id_model']; + this.in_transition_field = result['in_transition_field']; + this.out_transition_field = result['out_transition_field']; + var res_nodes = result['nodes']; + var res_connectors = result['conn']; + + //Custom logic + var self = this; + var renderer= function(r, n) { + var node; + var set; + if (n.node.shape == 'ellipse') { + var node = r.ellipse(n.node.x - 30, n.node.y - 13, 40, 20).attr({ + "fill": n.node.color, + r: "12px", + "stroke-width": n.distance == 0 ? "3px" : "1px" + }); + + set = r.set().push(node).push(r.text(n.node.x - 30, n.node.y - 10, (n.label || n.id))); + } + else if(n.node.shape == 'rectangle') + { + var node = r.rect(n.node.x-30, n.node.y-13, 60, 44).attr({ + "fill": n.node.color, + r : "12px", + "stroke-width" : n.distance == 0 ? "3px" : "1px" + }); + set = r.set().push(node).push(r.text(n.node.x , n.node.y+5 , (n.label || n.id))); + } + else + { + var node = r.circle(n.node.x, n.node.y, 150).attr({ + "fill": n.node.color, + r : "30px", + "stroke-width" : n.distance == 0 ? "3px" : "1px" + }); + set = r.set().push(node).push(r.text(n.node.x , n.node.y , (n.label || n.id))); + } + jQuery(node.node).attr({ + 'id': n.node.id, + 'name': n.id, + 'kind': n.node.options['Kind'] || n.node.options['kind'] + }) + jQuery(node.node).dblclick(function() { + var $this = jQuery(this); + self.search_activity($this.attr('id'), $this.attr('name'), $this.attr('kind')) + }) + return set; + } + + + for(node in res_nodes) { + var res_node = res_nodes[node]; + dia.addNode(res_node['name'],{node: res_node,render: renderer}); + } + + for(cr in res_connectors) { + var res_connector = res_connectors[cr]; + dia.addEdge(res_connector['source'], res_connector['destination']); + } + + + var layouter = new Graph.Layout.Spring(dia); + layouter.layout(); + if ($('div#dia-canvas').children().length > 0) { + $('div#dia-canvas').children().remove(); + } + var renderer = new Graph.Renderer.Raphael('dia-canvas', dia, 600, 600); + renderer.draw(); + + }, + + search_activity: function(id, name, kind) { + var self = this; + this.rpc( + '/base_diagram/diagram/get_activity', + { + 'id': id, + 'name': name, + 'kind': kind, + 'active_model': this.active_model, + 'model': this.node + }, + function(result) { + self.popup_activity(result) + } + ) + }, + + popup_activity: function(result) { + + this.dataset.ids = result.ids; + this.dataset.model = this.node; + this.dataset.count = result.ids.length; + this.dataset.index = jQuery.inArray(parseInt(result.activity_id,10), result.ids) + + var element_id = _.uniqueId("act_window_dialog"); + var dialog = jQuery('
', + {'id': element_id + }).dialog({ + title: 'Workflow Activity', + modal: true, + buttons: { + Cancel: function() { + $(this).dialog("close"); + } + } + }); + + var activity_form = new openerp.base.FormView(this.view_manager, this.session, element_id, this.dataset, false); + activity_form.start(); + }, + + do_search: function(domains, contexts, groupbys) { + var self = this; + this.rpc('/base/session/eval_domain_and_context', { + domains: domains, + contexts: contexts, + group_by_seq: groupbys + }, function (results) { + // TODO: handle non-empty results.group_by with read_group + self.dataset.context = self.context = results.context; + self.dataset.domain = self.domain = results.domain; + self.dataset.read_slice(self.fields, 0, self.limit,function(events){ + self.schedule_events(events) + }); + }); + }, + do_show: function () { this.$element.show(); }, diff --git a/addons/base_diagram/static/src/xml/base_diagram.xml b/addons/base_diagram/static/src/xml/base_diagram.xml new file mode 100644 index 00000000000..56e516e9414 --- /dev/null +++ b/addons/base_diagram/static/src/xml/base_diagram.xml @@ -0,0 +1,15 @@ + \ No newline at end of file From 31d737df0e66d40ebe88a4759a1f92bf27343e99 Mon Sep 17 00:00:00 2001 From: "Vaibhav (OpenERP)" Date: Fri, 19 Aug 2011 13:36:05 +0530 Subject: [PATCH 02/29] [FIX] edit activity. bzr revid: vda@tinyerp.com-20110819080605-30gchbr3nhbm36wr --- addons/base_diagram/static/src/js/diagram.js | 59 +++++++++++++------- 1 file changed, 40 insertions(+), 19 deletions(-) diff --git a/addons/base_diagram/static/src/js/diagram.js b/addons/base_diagram/static/src/js/diagram.js index 1c8e343155c..69d24716f97 100644 --- a/addons/base_diagram/static/src/js/diagram.js +++ b/addons/base_diagram/static/src/js/diagram.js @@ -6,7 +6,6 @@ openerp.base_diagram = function (openerp) { QWeb.add_template('/base_diagram/static/src/xml/base_diagram.xml'); openerp.base.views.add('diagram', 'openerp.base_diagram.DiagramView'); openerp.base_diagram.DiagramView = openerp.base.View.extend({ -// init: function(view_manager, session, element_id, dataset, view_id) { init: function(parent, element_id, dataset, view_id, options) { this._super(parent, element_id); this.set_default_options(options); @@ -233,27 +232,15 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ }, popup_activity: function(result) { - this.dataset.ids = result.ids; this.dataset.model = this.node; this.dataset.count = result.ids.length; - this.dataset.index = jQuery.inArray(parseInt(result.activity_id,10), result.ids) - - var element_id = _.uniqueId("act_window_dialog"); - var dialog = jQuery('
', - {'id': element_id - }).dialog({ - title: 'Workflow Activity', - modal: true, - buttons: { - Cancel: function() { - $(this).dialog("close"); - } - } - }); - - var activity_form = new openerp.base.FormView(this.view_manager, this.session, element_id, this.dataset, false); - activity_form.start(); + this.dataset.index = jQuery.inArray(parseInt(result.activity_id,10), result.ids); + this.form_dialog = new openerp.base_diagram.DiagramFormDialog(this, {}, this.options.action_views_ids.form, this.dataset); + this.form_dialog.start(); + this.form_dialog.form.do_show(); + this.form_dialog.open(); + return false; }, do_search: function(domains, contexts, groupbys) { @@ -280,6 +267,40 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ this.$element.hide(); } }); + +openerp.base_diagram.DiagramFormDialog = openerp.base.Dialog.extend({ + init: function(view, options, view_id, dataset) { + this._super(view, options); + this.dataset = dataset; + this.view_id = view_id; + this.view = view; + }, + start: function() { + this._super(); + this.form = new openerp.base.FormView(this, this.element_id, this.dataset, this.view_id, { + sidebar: false, + pager: false + }); + this.form.start(); + this.form.on_created.add_last(this.on_form_dialog_saved); + this.form.on_saved.add_last(this.on_form_dialog_saved); + }, + on_form_dialog_saved: function() { + var id = this.dataset.ids[this.dataset.index]; +// if (this.view.creating_event_id) { +//// scheduler.changeEventId(this.view.creating_event_id, id); +// this.view.creating_event_id = null; +// } +// this.view.reload_event(id); + this.close(); + }, + on_close: function() { +// if (this.view.creating_event_id) { +//// scheduler.deleteEvent(this.view.creating_event_id); +// this.view.creating_event_id = null; +// } + } +}); }; // vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax: From 40f831a347654770e12ea83fa5c17f675822efe8 Mon Sep 17 00:00:00 2001 From: "Vaibhav (OpenERP)" Date: Fri, 19 Aug 2011 17:46:51 +0530 Subject: [PATCH 03/29] [FIX] update pager. bzr revid: vda@tinyerp.com-20110819121651-98fs6ktbbr1kjcbj --- addons/base_diagram/static/src/js/diagram.js | 31 ++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/addons/base_diagram/static/src/js/diagram.js b/addons/base_diagram/static/src/js/diagram.js index 69d24716f97..de6d0a6c567 100644 --- a/addons/base_diagram/static/src/js/diagram.js +++ b/addons/base_diagram/static/src/js/diagram.js @@ -27,6 +27,7 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ }, on_loaded: function(result) { + var self = this; if(this.ids && this.ids.length) { this.id = this.ids[self.dataset.index || 0]; @@ -101,6 +102,8 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ self.on_pager_action(action); }); + this.do_update_pager() + if(this.id) { self.get_diagram_info() } @@ -258,6 +261,34 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ }); }); }, + + on_pager_action: function(action) { + switch (action) { + case 'first': + this.dataset.index = 0; + break; + case 'previous': + this.dataset.previous(); + break; + case 'next': + this.dataset.next(); + break; + case 'last': + this.dataset.index = this.dataset.ids.length - 1; + break; + } + this.dataset.read_index(_.keys(this.fields_view.fields), this.on_diagram_loaded); + this.do_update_pager(); + }, + + do_update_pager: function(hide_index) { + var $pager = this.$element.find('div.oe_diagram_pager'); + var index = hide_index ? '-' : this.dataset.index + 1; + if(!this.dataset.count) + this.dataset.count = this.dataset.ids.length + $pager.find('span.oe_pager_index').html(index); + $pager.find('span.oe_pager_count').html(this.dataset.count); + }, do_show: function () { this.$element.show(); From 46c9d530edeaf1c2c69c09de805021930cbca3ad Mon Sep 17 00:00:00 2001 From: "Vaibhav (OpenERP)" Date: Tue, 23 Aug 2011 13:16:51 +0530 Subject: [PATCH 04/29] [FIX] edit Activity. bzr revid: vda@tinyerp.com-20110823074651-4qlx22ycfb7zjdux --- addons/base_diagram/static/src/js/diagram.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/addons/base_diagram/static/src/js/diagram.js b/addons/base_diagram/static/src/js/diagram.js index de6d0a6c567..16c800f81e2 100644 --- a/addons/base_diagram/static/src/js/diagram.js +++ b/addons/base_diagram/static/src/js/diagram.js @@ -235,11 +235,13 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ }, popup_activity: function(result) { - this.dataset.ids = result.ids; - this.dataset.model = this.node; - this.dataset.count = result.ids.length; - this.dataset.index = jQuery.inArray(parseInt(result.activity_id,10), result.ids); - this.form_dialog = new openerp.base_diagram.DiagramFormDialog(this, {}, this.options.action_views_ids.form, this.dataset); + + var ds = new openerp.base.DataSetSearch(this, this.node); + ds.ids = result.ids; + ds.model = this.node; + ds.count = result.ids.length; +// ds.index = jQuery.inArray(parseInt(result.activity_id,10), result.ids); + this.form_dialog = new openerp.base_diagram.DiagramFormDialog(this, {}, this.options.action_views_ids.form, ds); this.form_dialog.start(); this.form_dialog.form.do_show(); this.form_dialog.open(); From ea74fae312fac5cfdb597ce2582334dac9312a05 Mon Sep 17 00:00:00 2001 From: "Vaibhav (OpenERP)" Date: Tue, 23 Aug 2011 15:14:09 +0530 Subject: [PATCH 05/29] [FIX] Textnode clickable.Edit selected activity. bzr revid: vda@tinyerp.com-20110823094409-xjd3rqopfnl6uida --- addons/base_diagram/static/src/js/diagram.js | 84 +++++++++++++------- 1 file changed, 57 insertions(+), 27 deletions(-) diff --git a/addons/base_diagram/static/src/js/diagram.js b/addons/base_diagram/static/src/js/diagram.js index 16c800f81e2..8373ea5efd8 100644 --- a/addons/base_diagram/static/src/js/diagram.js +++ b/addons/base_diagram/static/src/js/diagram.js @@ -156,6 +156,8 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ var renderer= function(r, n) { var node; var set; + + // ellipse if (n.node.shape == 'ellipse') { var node = r.ellipse(n.node.x - 30, n.node.y - 13, 40, 20).attr({ "fill": n.node.color, @@ -164,18 +166,20 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ }); set = r.set().push(node).push(r.text(n.node.x - 30, n.node.y - 10, (n.label || n.id))); - } - else if(n.node.shape == 'rectangle') - { + } + + // rectangle + else if(n.node.shape == 'rectangle') { var node = r.rect(n.node.x-30, n.node.y-13, 60, 44).attr({ "fill": n.node.color, r : "12px", "stroke-width" : n.distance == 0 ? "3px" : "1px" }); set = r.set().push(node).push(r.text(n.node.x , n.node.y+5 , (n.label || n.id))); - } - else - { + } + + // circle + else { var node = r.circle(n.node.x, n.node.y, 150).attr({ "fill": n.node.color, r : "30px", @@ -183,16 +187,25 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ }); set = r.set().push(node).push(r.text(n.node.x , n.node.y , (n.label || n.id))); } - jQuery(node.node).attr({ - 'id': n.node.id, - 'name': n.id, - 'kind': n.node.options['Kind'] || n.node.options['kind'] - }) - jQuery(node.node).dblclick(function() { - var $this = jQuery(this); - self.search_activity($this.attr('id'), $this.attr('name'), $this.attr('kind')) - }) - return set; + + jQuery(node.node).attr({ + 'id': n.node.id, + 'name': n.id, + 'kind': n.node.options['Kind'] || n.node.options['kind'] + }).dblclick(function() { + var $this = jQuery(this); + self.search_activity($this.attr('id'), $this.attr('name'), $this.attr('kind')) + }); + + jQuery(node.next.node).attr({ + 'id': n.node.id, + 'name': n.id, + 'kind': n.node.options['Kind'] || n.node.options['kind'] + }).dblclick(function() { + var $this = jQuery(this); + self.search_activity($this.attr('id'), $this.attr('name'), $this.attr('kind')) + }); + return set; } @@ -235,17 +248,34 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ }, popup_activity: function(result) { - - var ds = new openerp.base.DataSetSearch(this, this.node); - ds.ids = result.ids; - ds.model = this.node; - ds.count = result.ids.length; -// ds.index = jQuery.inArray(parseInt(result.activity_id,10), result.ids); - this.form_dialog = new openerp.base_diagram.DiagramFormDialog(this, {}, this.options.action_views_ids.form, ds); - this.form_dialog.start(); - this.form_dialog.form.do_show(); - this.form_dialog.open(); - return false; + var action_manager = new openerp.base.ActionManager(this); + var dialog = new openerp.base.Dialog(this, { + title : 'Activity', + width: 800, + height: 600, + buttons : { + Cancel : function() { + $(this).dialog('destroy'); + }, + Save : function() { + $(this).dialog('destroy'); + } + } + }).start().open(); + action_manager.appendTo(dialog.$element); + action_manager.do_action({ + res_model : this.node, + res_id: result.activity_id[0], + views : [[false, 'form']], + type : 'ir.actions.act_window', + auto_search : false, + flags : { + search_view: false, + sidebar : false, + views_switcher : false, + action_buttons : false + } + }); }, do_search: function(domains, contexts, groupbys) { From 8082584adc4771e652cbe1aaf939a1f448bf4374 Mon Sep 17 00:00:00 2001 From: "Vaibhav (OpenERP)" Date: Tue, 23 Aug 2011 15:44:49 +0530 Subject: [PATCH 06/29] [FIX] Clean. bzr revid: vda@tinyerp.com-20110823101449-a7irqncaryk9jy6t --- addons/base_diagram/static/src/js/diagram.js | 34 -------------------- 1 file changed, 34 deletions(-) diff --git a/addons/base_diagram/static/src/js/diagram.js b/addons/base_diagram/static/src/js/diagram.js index 8373ea5efd8..121b8a703a6 100644 --- a/addons/base_diagram/static/src/js/diagram.js +++ b/addons/base_diagram/static/src/js/diagram.js @@ -330,40 +330,6 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ this.$element.hide(); } }); - -openerp.base_diagram.DiagramFormDialog = openerp.base.Dialog.extend({ - init: function(view, options, view_id, dataset) { - this._super(view, options); - this.dataset = dataset; - this.view_id = view_id; - this.view = view; - }, - start: function() { - this._super(); - this.form = new openerp.base.FormView(this, this.element_id, this.dataset, this.view_id, { - sidebar: false, - pager: false - }); - this.form.start(); - this.form.on_created.add_last(this.on_form_dialog_saved); - this.form.on_saved.add_last(this.on_form_dialog_saved); - }, - on_form_dialog_saved: function() { - var id = this.dataset.ids[this.dataset.index]; -// if (this.view.creating_event_id) { -//// scheduler.changeEventId(this.view.creating_event_id, id); -// this.view.creating_event_id = null; -// } -// this.view.reload_event(id); - this.close(); - }, - on_close: function() { -// if (this.view.creating_event_id) { -//// scheduler.deleteEvent(this.view.creating_event_id); -// this.view.creating_event_id = null; -// } - } -}); }; // vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax: From cf7e60579accf4ee9a387f86ca70101970c592eb Mon Sep 17 00:00:00 2001 From: "Vaibhav (OpenERP)" Date: Tue, 23 Aug 2011 16:29:29 +0530 Subject: [PATCH 07/29] [FIX] Fix graph canvas height width. bzr revid: vda@tinyerp.com-20110823105929-0y84fy2dhh06zcuw --- addons/base_diagram/static/src/js/diagram.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/base_diagram/static/src/js/diagram.js b/addons/base_diagram/static/src/js/diagram.js index 121b8a703a6..57ef5e31cea 100644 --- a/addons/base_diagram/static/src/js/diagram.js +++ b/addons/base_diagram/static/src/js/diagram.js @@ -225,7 +225,7 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ if ($('div#dia-canvas').children().length > 0) { $('div#dia-canvas').children().remove(); } - var renderer = new Graph.Renderer.Raphael('dia-canvas', dia, 600, 600); + var renderer = new Graph.Renderer.Raphael('dia-canvas', dia, $('div#dia-canvas').width(), $('div#dia-canvas').height()); renderer.draw(); }, From 40cda6042054f0a876630c5fb4ce0e4e0184d554 Mon Sep 17 00:00:00 2001 From: "Vaibhav (OpenERP)" Date: Wed, 24 Aug 2011 10:20:04 +0530 Subject: [PATCH 08/29] [ADD] pager style. bzr revid: vda@tinyerp.com-20110824045004-pz77r96v49zoxcjo --- addons/base_diagram/__openerp__.py | 4 ++- .../static/src/css/base_diagram.css | 14 ++++++++++ addons/base_diagram/static/src/js/diagram.js | 14 +++++++--- .../static/src/xml/base_diagram.xml | 27 +++++++++++-------- 4 files changed, 44 insertions(+), 15 deletions(-) create mode 100644 addons/base_diagram/static/src/css/base_diagram.css diff --git a/addons/base_diagram/__openerp__.py b/addons/base_diagram/__openerp__.py index ba8f5ad0055..0e449206228 100644 --- a/addons/base_diagram/__openerp__.py +++ b/addons/base_diagram/__openerp__.py @@ -8,6 +8,8 @@ 'static/lib/js/dracula_graph.js', 'static/src/js/diagram.js' ], - "css": [], + 'css' : [ + "static/src/css/base_diagram.css", + ], 'active': True, } diff --git a/addons/base_diagram/static/src/css/base_diagram.css b/addons/base_diagram/static/src/css/base_diagram.css new file mode 100644 index 00000000000..6610666d335 --- /dev/null +++ b/addons/base_diagram/static/src/css/base_diagram.css @@ -0,0 +1,14 @@ +.openerp .diagram { + border: 1px solid #999; + -moz-border-radius: 8px; + -webkit-border-radius: 8px; +} + +.openerp .oe_diagram_pager { + text-align: right; + white-space: nowrap; +} + +.openerp .oe_diagram_buttons { + float: left; +} diff --git a/addons/base_diagram/static/src/js/diagram.js b/addons/base_diagram/static/src/js/diagram.js index 57ef5e31cea..e2e9ce316d4 100644 --- a/addons/base_diagram/static/src/js/diagram.js +++ b/addons/base_diagram/static/src/js/diagram.js @@ -95,20 +95,27 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ } } - this.$element.html(QWeb.render("DiagramView", {"fields_view": this.fields_view})); + this.$element.html(QWeb.render("DiagramView", this)); this.$element.find('div.oe_diagram_pager button[data-pager-action]').click(function() { var action = $(this).data('pager-action'); self.on_pager_action(action); }); - this.do_update_pager() + this.do_update_pager(); + + this.$element.find('.oe_diagram_button_new').click(function(){self.add_node()}) if(this.id) { - self.get_diagram_info() + self.get_diagram_info(); } }, + add_node: function() { + var self = this; + console.log('self>>', self) + }, + get_diagram_info: function() { var self = this; this.rpc( @@ -248,6 +255,7 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ }, popup_activity: function(result) { + var self = this; var action_manager = new openerp.base.ActionManager(this); var dialog = new openerp.base.Dialog(this, { title : 'Activity', diff --git a/addons/base_diagram/static/src/xml/base_diagram.xml b/addons/base_diagram/static/src/xml/base_diagram.xml index 56e516e9414..247eba2c301 100644 --- a/addons/base_diagram/static/src/xml/base_diagram.xml +++ b/addons/base_diagram/static/src/xml/base_diagram.xml @@ -1,15 +1,20 @@ \ No newline at end of file From ceaaa43e28f8c6a882c73d72a8f86bceb3356e14 Mon Sep 17 00:00:00 2001 From: "Vaibhav (OpenERP)" Date: Wed, 24 Aug 2011 16:42:26 +0530 Subject: [PATCH 09/29] [FIX] add or edit node. bzr revid: vda@tinyerp.com-20110824111226-9nexueoxmddi7ren --- addons/base_diagram/static/src/js/diagram.js | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/addons/base_diagram/static/src/js/diagram.js b/addons/base_diagram/static/src/js/diagram.js index e2e9ce316d4..ad1c5fe1040 100644 --- a/addons/base_diagram/static/src/js/diagram.js +++ b/addons/base_diagram/static/src/js/diagram.js @@ -104,18 +104,13 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ this.do_update_pager(); - this.$element.find('.oe_diagram_button_new').click(function(){self.add_node()}) + this.$element.find('.oe_diagram_button_new').click(function(){self.add_edit_node()}) if(this.id) { self.get_diagram_info(); } }, - add_node: function() { - var self = this; - console.log('self>>', self) - }, - get_diagram_info: function() { var self = this; this.rpc( @@ -249,13 +244,16 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ 'model': this.node }, function(result) { - self.popup_activity(result) + self.add_edit_node(result) } ) }, - popup_activity: function(result) { + add_edit_node: function(result) { var self = this; + var id; + if(result) + id = result.activity_id[0]; var action_manager = new openerp.base.ActionManager(this); var dialog = new openerp.base.Dialog(this, { title : 'Activity', @@ -273,7 +271,7 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ action_manager.appendTo(dialog.$element); action_manager.do_action({ res_model : this.node, - res_id: result.activity_id[0], + res_id: id, views : [[false, 'form']], type : 'ir.actions.act_window', auto_search : false, From 2303330fc72b12f878d173366205bf33c7c8b924 Mon Sep 17 00:00:00 2001 From: "Vaibhav (OpenERP)" Date: Wed, 24 Aug 2011 17:42:17 +0530 Subject: [PATCH 10/29] [FIX] save activity and reload diagram. bzr revid: vda@tinyerp.com-20110824121217-0s5jb0duprmn7qr9 --- addons/base_diagram/static/src/js/diagram.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/addons/base_diagram/static/src/js/diagram.js b/addons/base_diagram/static/src/js/diagram.js index ad1c5fe1040..6eec210235c 100644 --- a/addons/base_diagram/static/src/js/diagram.js +++ b/addons/base_diagram/static/src/js/diagram.js @@ -264,6 +264,13 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ $(this).dialog('destroy'); }, Save : function() { + var form_dataset = action_manager.inner_viewmanager.dataset; + var form_view = action_manager.inner_viewmanager.views.form.controller; + + form_view.do_save(function() { + self.dataset.index = jQuery.inArray(parseInt(self.id,10), self.dataset.ids) + self.dataset.read_index(_.keys(self.fields_view.fields), self.on_diagram_loaded) + }); $(this).dialog('destroy'); } } From b9910e43259a4121a3efc42e127d575eb62b0d18 Mon Sep 17 00:00:00 2001 From: "Vaibhav (OpenERP)" Date: Thu, 25 Aug 2011 11:02:02 +0530 Subject: [PATCH 11/29] [FIX] Event for path Element. bzr revid: vda@tinyerp.com-20110825053202-t55humzbczq000tn --- .../static/src/css/base_diagram.css | 4 + addons/base_diagram/static/src/js/diagram.js | 121 ++++++++++-------- 2 files changed, 70 insertions(+), 55 deletions(-) diff --git a/addons/base_diagram/static/src/css/base_diagram.css b/addons/base_diagram/static/src/css/base_diagram.css index 6610666d335..19939b8c337 100644 --- a/addons/base_diagram/static/src/css/base_diagram.css +++ b/addons/base_diagram/static/src/css/base_diagram.css @@ -12,3 +12,7 @@ .openerp .oe_diagram_buttons { float: left; } + +.openerp .diagram path { + cursor: pointer; +} diff --git a/addons/base_diagram/static/src/js/diagram.js b/addons/base_diagram/static/src/js/diagram.js index 6eec210235c..60967cb0053 100644 --- a/addons/base_diagram/static/src/js/diagram.js +++ b/addons/base_diagram/static/src/js/diagram.js @@ -156,61 +156,62 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ //Custom logic var self = this; var renderer= function(r, n) { - var node; - var set; + var node; + var set; - // ellipse - if (n.node.shape == 'ellipse') { - var node = r.ellipse(n.node.x - 30, n.node.y - 13, 40, 20).attr({ - "fill": n.node.color, - r: "12px", - "stroke-width": n.distance == 0 ? "3px" : "1px" - }); - - set = r.set().push(node).push(r.text(n.node.x - 30, n.node.y - 10, (n.label || n.id))); + // ellipse + if (n.node.shape == 'ellipse') { + var node = r.ellipse(n.node.x - 30, n.node.y - 13, 40, 20).attr({ + "fill": n.node.color, + r: "12px", + "stroke-width": n.distance == 0 ? "3px" : "1px" + }); + + set = r.set().push(node).push(r.text(n.node.x - 30, n.node.y - 10, (n.label || n.id))); + } + + // rectangle + else if(n.node.shape == 'rectangle') { + var node = r.rect(n.node.x-30, n.node.y-13, 60, 44).attr({ + "fill": n.node.color, + r : "12px", + "stroke-width" : n.distance == 0 ? "3px" : "1px" + }); + set = r.set().push(node).push(r.text(n.node.x , n.node.y+5 , (n.label || n.id))); + } + + // circle + else { + var node = r.circle(n.node.x, n.node.y, 150).attr({ + "fill": n.node.color, + r : "30px", + "stroke-width" : n.distance == 0 ? "3px" : "1px" + }); + set = r.set().push(node).push(r.text(n.node.x , n.node.y , (n.label || n.id))); + } + + //Shape Node Event + jQuery(node.node).attr({ + 'id': n.node.id, + 'name': n.id, + 'kind': n.node.options['Kind'] || n.node.options['kind'] + }).dblclick(function() { + var $this = jQuery(this); + self.search_activity($this.attr('id'), $this.attr('name'), $this.attr('kind')) + }); + + //Text Node Event + jQuery(node.next.node).attr({ + 'id': n.node.id, + 'name': n.id, + 'kind': n.node.options['Kind'] || n.node.options['kind'] + }).dblclick(function() { + var $this = jQuery(this); + self.search_activity($this.attr('id'), $this.attr('name'), $this.attr('kind')) + }); + return set; } - // rectangle - else if(n.node.shape == 'rectangle') { - var node = r.rect(n.node.x-30, n.node.y-13, 60, 44).attr({ - "fill": n.node.color, - r : "12px", - "stroke-width" : n.distance == 0 ? "3px" : "1px" - }); - set = r.set().push(node).push(r.text(n.node.x , n.node.y+5 , (n.label || n.id))); - } - - // circle - else { - var node = r.circle(n.node.x, n.node.y, 150).attr({ - "fill": n.node.color, - r : "30px", - "stroke-width" : n.distance == 0 ? "3px" : "1px" - }); - set = r.set().push(node).push(r.text(n.node.x , n.node.y , (n.label || n.id))); - } - - jQuery(node.node).attr({ - 'id': n.node.id, - 'name': n.id, - 'kind': n.node.options['Kind'] || n.node.options['kind'] - }).dblclick(function() { - var $this = jQuery(this); - self.search_activity($this.attr('id'), $this.attr('name'), $this.attr('kind')) - }); - - jQuery(node.next.node).attr({ - 'id': n.node.id, - 'name': n.id, - 'kind': n.node.options['Kind'] || n.node.options['kind'] - }).dblclick(function() { - var $this = jQuery(this); - self.search_activity($this.attr('id'), $this.attr('name'), $this.attr('kind')) - }); - return set; - } - - for(node in res_nodes) { var res_node = res_nodes[node]; dia.addNode(res_node['name'],{node: res_node,render: renderer}); @@ -218,10 +219,9 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ for(cr in res_connectors) { var res_connector = res_connectors[cr]; - dia.addEdge(res_connector['source'], res_connector['destination']); + dia.addEdge(res_connector['source'], res_connector['destination'], {directed : true}); } - var layouter = new Graph.Layout.Spring(dia); layouter.layout(); if ($('div#dia-canvas').children().length > 0) { @@ -229,7 +229,18 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ } var renderer = new Graph.Renderer.Raphael('dia-canvas', dia, $('div#dia-canvas').width(), $('div#dia-canvas').height()); renderer.draw(); - + + //Path(Edges) + jQuery('path',renderer.r.canvas).each(function(index, path) { + + $(this).attr({ + 'd_id': res_connectors[index+1].d_id, + 'id': res_connectors[index+1].id, + 's_id': res_connectors[index+1].s_id, + }) + }); + jQuery('path',renderer.r.canvas).dblclick(function(){ + }); }, search_activity: function(id, name, kind) { From 6e3c8a495ccbaa3dd5dbd8cac0d0b9dd31cb4b13 Mon Sep 17 00:00:00 2001 From: "Vaibhav (OpenERP)" Date: Thu, 25 Aug 2011 11:38:30 +0530 Subject: [PATCH 12/29] [FIX] Add or Edit activity,transition. bzr revid: vda@tinyerp.com-20110825060830-dzqputzyw11tv2q2 --- addons/base_diagram/static/src/js/diagram.js | 39 +++++++------------- 1 file changed, 13 insertions(+), 26 deletions(-) diff --git a/addons/base_diagram/static/src/js/diagram.js b/addons/base_diagram/static/src/js/diagram.js index 60967cb0053..4e28acd25e9 100644 --- a/addons/base_diagram/static/src/js/diagram.js +++ b/addons/base_diagram/static/src/js/diagram.js @@ -197,7 +197,8 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ 'kind': n.node.options['Kind'] || n.node.options['kind'] }).dblclick(function() { var $this = jQuery(this); - self.search_activity($this.attr('id'), $this.attr('name'), $this.attr('kind')) + self.add_edit_node($this.attr('id'), self.node); +// self.search_activity($this.attr('id'), $this.attr('name'), $this.attr('kind')) }); //Text Node Event @@ -207,7 +208,8 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ 'kind': n.node.options['Kind'] || n.node.options['kind'] }).dblclick(function() { var $this = jQuery(this); - self.search_activity($this.attr('id'), $this.attr('name'), $this.attr('kind')) + self.add_edit_node($this.attr('id'), self.node); +// self.search_activity($this.attr('id'), $this.attr('name'), $this.attr('kind')) }); return set; } @@ -239,35 +241,20 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ 's_id': res_connectors[index+1].s_id, }) }); - jQuery('path',renderer.r.canvas).dblclick(function(){ + jQuery('path',renderer.r.canvas).dblclick(function() { + self.add_edit_node(this.id, self.connector) }); }, - search_activity: function(id, name, kind) { - var self = this; - this.rpc( - '/base_diagram/diagram/get_activity', - { - 'id': id, - 'name': name, - 'kind': kind, - 'active_model': this.active_model, - 'model': this.node - }, - function(result) { - self.add_edit_node(result) - } - ) - }, - - add_edit_node: function(result) { + add_edit_node: function(id, model) { var self = this; - var id; - if(result) - id = result.activity_id[0]; + + if(!model) + model = self.node; + if(id) + id = parseInt(id, 10); var action_manager = new openerp.base.ActionManager(this); var dialog = new openerp.base.Dialog(this, { - title : 'Activity', width: 800, height: 600, buttons : { @@ -288,7 +275,7 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ }).start().open(); action_manager.appendTo(dialog.$element); action_manager.do_action({ - res_model : this.node, + res_model : model, res_id: id, views : [[false, 'form']], type : 'ir.actions.act_window', From 21495b24a25ca64b2691b0a2979a716375eb053a Mon Sep 17 00:00:00 2001 From: "Vaibhav (OpenERP)" Date: Thu, 25 Aug 2011 15:36:09 +0530 Subject: [PATCH 13/29] [FIX] Typo conflicts. bzr revid: vda@tinyerp.com-20110825100609-aw3dg3b5cmyyd48d --- addons/base_diagram/controllers/main.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/base_diagram/controllers/main.py b/addons/base_diagram/controllers/main.py index 15a5cdbadde..ee9e69f834c 100644 --- a/addons/base_diagram/controllers/main.py +++ b/addons/base_diagram/controllers/main.py @@ -53,8 +53,8 @@ class DiagramView(View): nodes = graphs['nodes'] transitions = graphs['transitions'] isolate_nodes = {} - for node in graphs['blank_nodes']: - isolate_nodes[node['id']] = node + for blnk_node in graphs['blank_nodes']: + isolate_nodes[blnk_node['id']] = blnk_node else: y = map(lambda t: t['y'],filter(lambda x: x['y'] if x['x']==20 else None, nodes.values())) y_max = (y and max(y)) or 120 From d2c95ce868dd95af4da76110d9875ae63a4954eb Mon Sep 17 00:00:00 2001 From: "Vaibhav (OpenERP)" Date: Thu, 25 Aug 2011 18:01:03 +0530 Subject: [PATCH 14/29] [FIX] Set id in dataset. bzr revid: vda@tinyerp.com-20110825123103-zmqtfigcv8odhcn7 --- addons/base_diagram/static/src/js/diagram.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/addons/base_diagram/static/src/js/diagram.js b/addons/base_diagram/static/src/js/diagram.js index 4e28acd25e9..8d0530102dd 100644 --- a/addons/base_diagram/static/src/js/diagram.js +++ b/addons/base_diagram/static/src/js/diagram.js @@ -137,10 +137,10 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ }, on_diagram_loaded: function(record) { - var self = this; - var id_record = record['id'] + var id_record = record['id']; if(id_record) { - self.get_diagram_info(); + this.id = id_record; + this.get_diagram_info(); } }, From 523c55fe2b2904be2802b18bc49bdf8b9e3fa237 Mon Sep 17 00:00:00 2001 From: "Vaibhav (OpenERP)" Date: Fri, 26 Aug 2011 12:02:38 +0530 Subject: [PATCH 15/29] [FIX] Path(edge) id. bzr revid: vda@tinyerp.com-20110826063238-m4ffbih15iy6nybs --- addons/base_diagram/static/src/js/diagram.js | 25 +++++++++----------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/addons/base_diagram/static/src/js/diagram.js b/addons/base_diagram/static/src/js/diagram.js index 8d0530102dd..c5da54b49d2 100644 --- a/addons/base_diagram/static/src/js/diagram.js +++ b/addons/base_diagram/static/src/js/diagram.js @@ -198,7 +198,6 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ }).dblclick(function() { var $this = jQuery(this); self.add_edit_node($this.attr('id'), self.node); -// self.search_activity($this.attr('id'), $this.attr('name'), $this.attr('kind')) }); //Text Node Event @@ -209,7 +208,6 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ }).dblclick(function() { var $this = jQuery(this); self.add_edit_node($this.attr('id'), self.node); -// self.search_activity($this.attr('id'), $this.attr('name'), $this.attr('kind')) }); return set; } @@ -219,10 +217,13 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ dia.addNode(res_node['name'],{node: res_node,render: renderer}); } - for(cr in res_connectors) { - var res_connector = res_connectors[cr]; - dia.addEdge(res_connector['source'], res_connector['destination'], {directed : true}); - } + // Set Ides for Path(Edges) + var edge_ids = []; + + $.each(res_connectors, function(index, connector) { + edge_ids.push(index) + dia.addEdge(connector['source'], connector['destination'], {directed : true}); + }); var layouter = new Graph.Layout.Spring(dia); layouter.layout(); @@ -232,14 +233,10 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ var renderer = new Graph.Renderer.Raphael('dia-canvas', dia, $('div#dia-canvas').width(), $('div#dia-canvas').height()); renderer.draw(); - //Path(Edges) - jQuery('path',renderer.r.canvas).each(function(index, path) { - - $(this).attr({ - 'd_id': res_connectors[index+1].d_id, - 'id': res_connectors[index+1].id, - 's_id': res_connectors[index+1].s_id, - }) + //Path(Edges) + $.each(dia.edges, function(index, edge) { + if(edge.connection) + edge.connection.fg.node.id = edge_ids[index]; }); jQuery('path',renderer.r.canvas).dblclick(function() { self.add_edit_node(this.id, self.connector) From b6e81c22d785fc1d4666efdc3eff35fe8ec29504 Mon Sep 17 00:00:00 2001 From: "Vaibhav (OpenERP)" Date: Mon, 29 Aug 2011 16:14:10 +0530 Subject: [PATCH 16/29] [FIX] New Edge option.background grid. bzr revid: vda@tinyerp.com-20110829104410-n52wx91krno7gb63 --- .../base_diagram/static/src/css/base_diagram.css | 4 ++++ addons/base_diagram/static/src/img/grid.jpg | Bin 0 -> 4530 bytes addons/base_diagram/static/src/js/diagram.js | 8 +++++++- .../base_diagram/static/src/xml/base_diagram.xml | 6 ++++-- 4 files changed, 15 insertions(+), 3 deletions(-) create mode 100644 addons/base_diagram/static/src/img/grid.jpg diff --git a/addons/base_diagram/static/src/css/base_diagram.css b/addons/base_diagram/static/src/css/base_diagram.css index 19939b8c337..70b575e6e47 100644 --- a/addons/base_diagram/static/src/css/base_diagram.css +++ b/addons/base_diagram/static/src/css/base_diagram.css @@ -4,6 +4,10 @@ -webkit-border-radius: 8px; } +.openerp .show_grid { + background: url("/base_diagram/static/src/img/grid.jpg") repeat; +} + .openerp .oe_diagram_pager { text-align: right; white-space: nowrap; diff --git a/addons/base_diagram/static/src/img/grid.jpg b/addons/base_diagram/static/src/img/grid.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5254207b96407a79195cd541dfb145417e8bdb30 GIT binary patch literal 4530 zcmd^?dpMM7AIG1G2{~*-GY+AQk&Ht%MkQgDnar?xnHi_h%AwHYoWsj&lUEvtG7O2R zF?Q#`$Z0mmEhQ1kAeutikVBNAmdd=dZ@cY|>#g_NKfCsRuIKsZzV7?}{hr_R{rtX< zXi)S7SdYizumA`I0_?;WAbJYGFfoAv0PxK>01^NIS@A6%qDR1f04yafEiDBWKfqw{ zS{Vgd8S(f^US3WC@|ChO;H}9O`EYJ1McGW z97ABJSl!_$v3ffi(ZJik_g92(gtjZSJWOyx1Fb(y@{DOymW(O^R7NB7kIFvyPIf7Ncx@P3~k z_PB*+pk+aFNZw=D41Fwld+|RA1B%S?`8yBa_v+o?{hx%)pS#d{+`GkW04a&R?*`1oE&^-0=@ajQbMbuRqUAXzkwqVek z@~Gjuf~WKe*+)UwSQ4?>?j5h6?DuZgK-HU=xq=jor*EYsaJh&7(%+l_O@q zYs2js(Fti%KUJH1{Lt4j4u^tRaH8`}IHKz7(Cl9INT|z!km#IqB>utWUFf$^R~qCJ z5_!ccr`?Y#_zrYr0?DgWnYthZTj>lU!fDTg7R{j)O(rYQ#@Ss4a?~tyiLQqk@N%i@ zN;?Kjrjbb=urbd8%kk6~v-4R~^`pT;i|!&bKVYQq3(Li&;oj1;2&h#HD=^+lvut#0 zA3In0OMi{O2(Zw`iND!iLphIasI~CdHICgetdnuF>BIF?kwsU@GVu*BTr&_7{9B*z zG2Ilg>n5ff!s`!n-sgX$t)VkJmE5mczizbLt2z03*Y_$@>*Ai)Y7V<^w65o|2VzBl zW#a3SRa)bv|1{y-ZcPiAS&-}iXxo6r0Rm(3^f8OEk)X!F&&i#0s3H0a+|+0AXWYzV z-T3Cw#=t$Mfyv8BMc2p&cI9I4%~DkiVV1*wh5Ju1$L_mA^|!b%R?bf1(k60)t%-pTkY#rdj;B8#P++EcL51VT{)&AkBxvywRVfVeQFfl~1*) z^k*G?#r#<6_Wn?f%`!4}} z;>JT#(h7CS?9uWQFNTv-yUzG#=vRkk%)h0)Vyvo=okN-1n^U=s|Wzr!RXUqg(CgGgm zEGyQz?JfcLqB*mNjc8fB#E_$NZOZRKyBBn1=h576FVOj z!rG#rkB9)LC89(WY{4@}wr?j?Eu3Cj3dZ?qVhSHvj92fBk^NjhB-%3Tr`ZqOE6IS? z4ltbLj}>NbSC60MF9R~^_e%= z1aO#hM7NsbY3Q>gLA4%CJ)tiPX>ih9*?seF++=$FI>w|ENp9hLdqi#@Ag^jpFg+3a zJ2QJp!HpuI=%=@<%$IMLB>A0IXF9H`#;Fj$1!+(kIiE2=-(Xpr}v(gj{W>BM_9l8Hag@c`|I9IMts`Hs77Boyxe~}>qunRbALQSMQ_yR+GHUMf0^Z+L#5$jl8kKJE4kCu z6_yCt&Zk)^{jt2)gT^40HH8};%x^MqT~J`zCiykm?b0%(L6Oc>XV$j$m{h}^=u&H$ zsP;sn2)Gb@mSzBNr@mBewnvvbo+`)lkq^A

- + + +
@@ -15,6 +17,6 @@
-
+
\ No newline at end of file From b0426412e2b97774269e599b7763c36ffbf2de02 Mon Sep 17 00:00:00 2001 From: "Vaibhav (OpenERP)" Date: Mon, 29 Aug 2011 18:57:48 +0530 Subject: [PATCH 17/29] [FIX] readonly fields on edit activity/transition. bzr revid: vda@tinyerp.com-20110829132748-qr0ndd3udy6em092 --- addons/base_diagram/static/src/js/diagram.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/addons/base_diagram/static/src/js/diagram.js b/addons/base_diagram/static/src/js/diagram.js index 4f193015fae..4b2089a0cd4 100644 --- a/addons/base_diagram/static/src/js/diagram.js +++ b/addons/base_diagram/static/src/js/diagram.js @@ -244,6 +244,7 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ if(edge.connection) edge.connection.fg.node.id = edge_ids[index]; }); + jQuery('path',renderer.r.canvas).dblclick(function() { self.add_edit_node(this.id, self.connector) }); @@ -290,6 +291,24 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ action_buttons : false } }); + + if(id) { + var readonly_fields; + if(model == self.node) { + readonly_fields = ['wkf_id']; + } else { + readonly_fields = ['act_from', 'act_to']; + } + var form_controller = action_manager.inner_viewmanager.views.form.controller; + $.each(readonly_fields, function(index, fld) { + form_controller.on_record_loaded.add_first(function() { + form_controller.fields[fld].readonly = true; + form_controller.fields[fld].$input.attr('disabled', true); + form_controller.fields[fld].$drop_down.unbind(); + form_controller.fields[fld].$menu_btn.unbind(); + }); + }); + } }, do_search: function(domains, contexts, groupbys) { From c3ade091e5f9457b926b25367a71ec0d2d415a6e Mon Sep 17 00:00:00 2001 From: "Vaibhav (OpenERP)" Date: Tue, 30 Aug 2011 14:06:22 +0530 Subject: [PATCH 18/29] [FIX] set Workflow id for new record. bzr revid: vda@tinyerp.com-20110830083622-ssr41k0t31hkzd3z --- addons/base_diagram/static/src/js/diagram.js | 44 ++++++++++++-------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/addons/base_diagram/static/src/js/diagram.js b/addons/base_diagram/static/src/js/diagram.js index 4b2089a0cd4..cadf93a5f69 100644 --- a/addons/base_diagram/static/src/js/diagram.js +++ b/addons/base_diagram/static/src/js/diagram.js @@ -181,9 +181,9 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ var node = r.rect(n.node.x-30, n.node.y-13, 60, 44).attr({ "fill": n.node.color, r : "12px", - "stroke-width" : n.distance == 0 ? "3px" : "1px" + "stroke-width" : n.distance == 0 ? "3px" : "1px" }); - set = r.set().push(node).push(r.text(n.node.x , n.node.y+5 , (n.label || n.id))); + set = r.set().push(node).push(r.text(n.node.x , n.node.y+10 , (n.label || n.id))); } // circle @@ -288,24 +288,34 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ search_view: false, sidebar : false, views_switcher : false, - action_buttons : false + action_buttons : false, + pager: false } }); - if(id) { - var readonly_fields; - if(model == self.node) { - readonly_fields = ['wkf_id']; - } else { - readonly_fields = ['act_from', 'act_to']; - } - var form_controller = action_manager.inner_viewmanager.views.form.controller; - $.each(readonly_fields, function(index, fld) { - form_controller.on_record_loaded.add_first(function() { - form_controller.fields[fld].readonly = true; - form_controller.fields[fld].$input.attr('disabled', true); - form_controller.fields[fld].$drop_down.unbind(); - form_controller.fields[fld].$menu_btn.unbind(); + var form_controller = action_manager.inner_viewmanager.views.form.controller; + + var form_fields; + + if(model == self.node) { + form_fields = ['wkf_id']; + } else { + form_fields = ['act_from', 'act_to']; + } + + $.each(form_fields, function(index, fld) { + form_controller.on_record_loaded.add_first(function() { + form_controller.fields[fld].modifiers.readonly = true; + form_controller.fields[fld].$input.attr('disabled', true); + form_controller.fields[fld].$drop_down.unbind(); + form_controller.fields[fld].$menu_btn.unbind(); + }); + }); + + if(!id && (model == self.node)) { + $.each(form_fields, function(index, fld) { + form_controller.on_record_loaded.add_last(function() { + form_controller.fields[fld].set_value([self.id,self.active_model]) }); }); } From f0237f2a706b33f72dab4fb2bf4440ef2ae103ab Mon Sep 17 00:00:00 2001 From: "Vaibhav (OpenERP)" Date: Wed, 31 Aug 2011 10:56:10 +0530 Subject: [PATCH 19/29] [FIX] can select activity on transition. bzr revid: vda@tinyerp.com-20110831052610-tt3csjbwx8ct3sww --- addons/base_diagram/static/src/js/diagram.js | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/addons/base_diagram/static/src/js/diagram.js b/addons/base_diagram/static/src/js/diagram.js index cadf93a5f69..9bd9d7d36b5 100644 --- a/addons/base_diagram/static/src/js/diagram.js +++ b/addons/base_diagram/static/src/js/diagram.js @@ -303,15 +303,16 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ form_fields = ['act_from', 'act_to']; } - $.each(form_fields, function(index, fld) { - form_controller.on_record_loaded.add_first(function() { - form_controller.fields[fld].modifiers.readonly = true; - form_controller.fields[fld].$input.attr('disabled', true); - form_controller.fields[fld].$drop_down.unbind(); - form_controller.fields[fld].$menu_btn.unbind(); + if(id) { + $.each(form_fields, function(index, fld) { + form_controller.on_record_loaded.add_first(function() { + form_controller.fields[fld].modifiers.readonly = true; + form_controller.fields[fld].$input.attr('disabled', true); + form_controller.fields[fld].$drop_down.unbind(); + form_controller.fields[fld].$menu_btn.unbind(); + }); }); - }); - + } if(!id && (model == self.node)) { $.each(form_fields, function(index, fld) { form_controller.on_record_loaded.add_last(function() { From c7024ab2106b52ad6e1a8b2325432a52fbbf05aa Mon Sep 17 00:00:00 2001 From: "Vaibhav (OpenERP)" Date: Wed, 31 Aug 2011 11:23:48 +0530 Subject: [PATCH 20/29] [FIX] assigned changed signal to new activity. bzr revid: vda@tinyerp.com-20110831055348-392m4d2tjbutfm9i --- addons/base_diagram/static/src/js/diagram.js | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/base_diagram/static/src/js/diagram.js b/addons/base_diagram/static/src/js/diagram.js index 9bd9d7d36b5..1362b19ee97 100644 --- a/addons/base_diagram/static/src/js/diagram.js +++ b/addons/base_diagram/static/src/js/diagram.js @@ -317,6 +317,7 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ $.each(form_fields, function(index, fld) { form_controller.on_record_loaded.add_last(function() { form_controller.fields[fld].set_value([self.id,self.active_model]) + form_controller.fields[fld].dirty = true; }); }); } From 0331df6c898e0fd529b94846a46b90a29c3828a1 Mon Sep 17 00:00:00 2001 From: "Vaibhav (OpenERP)" Date: Wed, 31 Aug 2011 12:09:01 +0530 Subject: [PATCH 21/29] [FIX] label on edge(path). bzr revid: vda@tinyerp.com-20110831063901-s0xx77t3f6nq1bai --- addons/base_diagram/controllers/main.py | 3 ++- addons/base_diagram/static/src/js/diagram.js | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/addons/base_diagram/controllers/main.py b/addons/base_diagram/controllers/main.py index ee9e69f834c..ee5145b6c11 100644 --- a/addons/base_diagram/controllers/main.py +++ b/addons/base_diagram/controllers/main.py @@ -80,7 +80,8 @@ class DiagramView(View): t.update({ 'source': tr[src_node][1], 'destination': tr[des_node][1], - 'options': {} + 'options': {}, + 'signal': tr['signal'] }) for i, fld in enumerate(connector_fields): diff --git a/addons/base_diagram/static/src/js/diagram.js b/addons/base_diagram/static/src/js/diagram.js index 1362b19ee97..4d0f3240309 100644 --- a/addons/base_diagram/static/src/js/diagram.js +++ b/addons/base_diagram/static/src/js/diagram.js @@ -228,7 +228,7 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ $.each(res_connectors, function(index, connector) { edge_ids.push(index) - dia.addEdge(connector['source'], connector['destination'], {directed : true}); + dia.addEdge(connector['source'], connector['destination'], {directed : true, label: connector['signal']}); }); var layouter = new Graph.Layout.Spring(dia); From eab787e37cedb0bf8ee1735508f2bc42b8544136 Mon Sep 17 00:00:00 2001 From: "Vaibhav (OpenERP)" Date: Wed, 31 Aug 2011 18:09:17 +0530 Subject: [PATCH 22/29] [FIX] Readonly wkf_id. bzr revid: vda@tinyerp.com-20110831123917-xnb88ywtrg1fgjlm --- addons/base_diagram/static/src/js/diagram.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/base_diagram/static/src/js/diagram.js b/addons/base_diagram/static/src/js/diagram.js index 4d0f3240309..c102d7e494d 100644 --- a/addons/base_diagram/static/src/js/diagram.js +++ b/addons/base_diagram/static/src/js/diagram.js @@ -303,7 +303,7 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ form_fields = ['act_from', 'act_to']; } - if(id) { + if(model == self.node || id) { $.each(form_fields, function(index, fld) { form_controller.on_record_loaded.add_first(function() { form_controller.fields[fld].modifiers.readonly = true; From 1b8a34233f4f4a9757ab8efdb3a5588a46de1def Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 1 Sep 2011 10:22:42 +0200 Subject: [PATCH 23/29] [IMP} fix a few missing semicolons and vars bzr revid: xmo@openerp.com-20110901082242-1k0ojovt4jyg2rq0 --- addons/base_diagram/controllers/main.py | 2 +- addons/base_diagram/static/src/js/diagram.js | 39 ++++++++++---------- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/addons/base_diagram/controllers/main.py b/addons/base_diagram/controllers/main.py index ee5145b6c11..b4ef9bb49c2 100644 --- a/addons/base_diagram/controllers/main.py +++ b/addons/base_diagram/controllers/main.py @@ -15,7 +15,7 @@ class DiagramView(View): activity_id = req.session.model(model).search([('name','=',name),('kind','=',kind),('wkf_id','=',active_model)], 0, 0, 0, req.session.context) ids = req.session.model(model).search([], 0, 0, 0, req.session.context) return {'activity_id':activity_id, 'ids': ids} - + @openerpweb.jsonrequest def get_diagram_info(self, req, **kw): id = kw['id'] diff --git a/addons/base_diagram/static/src/js/diagram.js b/addons/base_diagram/static/src/js/diagram.js index c102d7e494d..1ee3f7fc8f1 100644 --- a/addons/base_diagram/static/src/js/diagram.js +++ b/addons/base_diagram/static/src/js/diagram.js @@ -14,7 +14,7 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ this.model = this.dataset.model; this.view_id = view_id; this.name = ""; - this.domain = this.dataset._domain ? this.dataset._domain: []; + this.domain = this.dataset._domain || []; this.context = {}; this.ids = this.dataset.ids; }, @@ -51,7 +51,7 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ this.fields_nodes_string = []; /* - * For Arraows(Connector) + * For Arrows (Connector) */ this.connector = ''; this.src_node = ''; @@ -59,12 +59,12 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ this.connector_fields = []; this.fields_connector_string = []; - for(ch in children) { + for(var ch in children) { if(children[ch]['tag'] == 'node') { this.node = children[ch]['attrs']['object']; this.bgcolor = children[ch]['attrs']['bgcolor'] || ''; this.shape = children[ch]['attrs']['shape'] || ''; - for(node_chld in children[ch]['children']) { + for(var node_chld in children[ch]['children']) { if (children[ch]['children'][node_chld]['tag'] = 'field') { var ch_name = children[ch]['children'][node_chld]['attrs']['name']; @@ -84,7 +84,7 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ this.connector = children[ch]['attrs']['object']; this.src_node = children[ch]['attrs']['source']; this.des_node = children[ch]['attrs']['destination']; - for (arrow_chld in children[ch]['children']) { + for (var arrow_chld in children[ch]['children']) { if (children[ch]['children'][arrow_chld]['tag'] = 'field') { var arr_ch_name = children[ch]['children'][arrow_chld]['attrs']['name']; var ch_node_string = this.fields[arr_ch_name]['string'] || this.toTitleCase(arr_ch_name); @@ -105,8 +105,8 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ this.do_update_pager(); // New Node,Edge - this.$element.find('#new_node.oe_diagram_button_new').click(function(){self.add_edit_node(null, self.node)}) - this.$element.find('#new_edge.oe_diagram_button_new').click(function(){self.add_edit_node(null, self.connector)}) + this.$element.find('#new_node.oe_diagram_button_new').click(function(){self.add_edit_node(null, self.node)}); + this.$element.find('#new_edge.oe_diagram_button_new').click(function(){self.add_edit_node(null, self.connector)}); this.$element.find('#toggle_grid').click(function() { self.$element.find('.diagram').toggleClass('show_grid') @@ -161,13 +161,13 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ //Custom logic var self = this; - var renderer= function(r, n) { + var renderer = function(r, n) { var node; var set; // ellipse if (n.node.shape == 'ellipse') { - var node = r.ellipse(n.node.x - 30, n.node.y - 13, 40, 20).attr({ + node = r.ellipse(n.node.x - 30, n.node.y - 13, 40, 20).attr({ "fill": n.node.color, r: "12px", "stroke-width": n.distance == 0 ? "3px" : "1px" @@ -178,7 +178,7 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ // rectangle else if(n.node.shape == 'rectangle') { - var node = r.rect(n.node.x-30, n.node.y-13, 60, 44).attr({ + node = r.rect(n.node.x-30, n.node.y-13, 60, 44).attr({ "fill": n.node.color, r : "12px", "stroke-width" : n.distance == 0 ? "3px" : "1px" @@ -188,7 +188,7 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ // circle else { - var node = r.circle(n.node.x, n.node.y, 150).attr({ + node = r.circle(n.node.x, n.node.y, 150).attr({ "fill": n.node.color, r : "30px", "stroke-width" : n.distance == 0 ? "3px" : "1px" @@ -216,9 +216,9 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ self.add_edit_node($this.attr('id'), self.node); }); return set; - } + }; - for(node in res_nodes) { + for(var node in res_nodes) { var res_node = res_nodes[node]; dia.addNode(res_node['name'],{node: res_node,render: renderer}); } @@ -227,7 +227,7 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ var edge_ids = []; $.each(res_connectors, function(index, connector) { - edge_ids.push(index) + edge_ids.push(index); dia.addEdge(connector['source'], connector['destination'], {directed : true, label: connector['signal']}); }); @@ -239,7 +239,7 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ var renderer = new Graph.Renderer.Raphael('dia-canvas', dia, $('div#dia-canvas').width(), $('div#dia-canvas').height()); renderer.draw(); - //Path(Edges) + //Path(Edges) $.each(dia.edges, function(index, edge) { if(edge.connection) edge.connection.fg.node.id = edge_ids[index]; @@ -270,7 +270,7 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ var form_view = action_manager.inner_viewmanager.views.form.controller; form_view.do_save(function() { - self.dataset.index = jQuery.inArray(parseInt(self.id,10), self.dataset.ids) + self.dataset.index = jQuery.inArray(parseInt(self.id,10), self.dataset.ids); self.dataset.read_index(_.keys(self.fields_view.fields), self.on_diagram_loaded) }); $(this).dialog('destroy'); @@ -316,7 +316,7 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ if(!id && (model == self.node)) { $.each(form_fields, function(index, fld) { form_controller.on_record_loaded.add_last(function() { - form_controller.fields[fld].set_value([self.id,self.active_model]) + form_controller.fields[fld].set_value([self.id,self.active_model]); form_controller.fields[fld].dirty = true; }); }); @@ -361,8 +361,9 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ do_update_pager: function(hide_index) { var $pager = this.$element.find('div.oe_diagram_pager'); var index = hide_index ? '-' : this.dataset.index + 1; - if(!this.dataset.count) - this.dataset.count = this.dataset.ids.length + if(!this.dataset.count) { + this.dataset.count = this.dataset.ids.length; + } $pager.find('span.oe_pager_index').html(index); $pager.find('span.oe_pager_count').html(this.dataset.count); }, From 7b47a7aaab1c2fb0e8f6fdba5676a0202d4ef297 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 1 Sep 2011 10:23:21 +0200 Subject: [PATCH 24/29] [IMP] cleanup whitespace bzr revid: xmo@openerp.com-20110901082321-k1zamoqhgl2irj94 --- addons/base_diagram/static/src/js/diagram.js | 502 +++++++++---------- 1 file changed, 251 insertions(+), 251 deletions(-) diff --git a/addons/base_diagram/static/src/js/diagram.js b/addons/base_diagram/static/src/js/diagram.js index 1ee3f7fc8f1..bc57bf24cac 100644 --- a/addons/base_diagram/static/src/js/diagram.js +++ b/addons/base_diagram/static/src/js/diagram.js @@ -6,119 +6,119 @@ openerp.base_diagram = function (openerp) { QWeb.add_template('/base_diagram/static/src/xml/base_diagram.xml'); openerp.base.views.add('diagram', 'openerp.base_diagram.DiagramView'); openerp.base_diagram.DiagramView = openerp.base.View.extend({ - init: function(parent, element_id, dataset, view_id, options) { - this._super(parent, element_id); - this.set_default_options(options); + init: function(parent, element_id, dataset, view_id, options) { + this._super(parent, element_id); + this.set_default_options(options); this.view_manager = parent; this.dataset = dataset; this.model = this.dataset.model; this.view_id = view_id; this.name = ""; - this.domain = this.dataset._domain || []; - this.context = {}; - this.ids = this.dataset.ids; - }, - start: function() { - return this.rpc("/base_diagram/diagram/load", {"model": this.model, "view_id": this.view_id}, this.on_loaded); - }, - - toTitleCase: function(str) { - return str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();}); - }, - - on_loaded: function(result) { - - var self = this; - if(this.ids && this.ids.length) { - this.id = this.ids[self.dataset.index || 0]; - } - this.fields_view = result.fields_view; - - this.view_id = this.fields_view.view_id; - this.name = this.fields_view.name; - - this.fields = this.fields_view.fields; - var children = this.fields_view.arch.children; - - /* - * For Nodes (Fields) - */ - this.node = ''; - this.bgcolor = ''; - this.shape = ''; - this.visible_fields_nodes = []; - this.invisible_fields_nodes = []; - this.fields_nodes_string = []; - - /* - * For Arrows (Connector) - */ - this.connector = ''; - this.src_node = ''; - this.des_node = ''; - this.connector_fields = []; - this.fields_connector_string = []; - - for(var ch in children) { - if(children[ch]['tag'] == 'node') { - this.node = children[ch]['attrs']['object']; - this.bgcolor = children[ch]['attrs']['bgcolor'] || ''; - this.shape = children[ch]['attrs']['shape'] || ''; - for(var node_chld in children[ch]['children']) { - if (children[ch]['children'][node_chld]['tag'] = 'field') { - var ch_name = children[ch]['children'][node_chld]['attrs']['name']; - - if (children[ch]['children'][node_chld]['attrs']['invisible']) { - if (children[ch]['children'][node_chld]['attrs']['invisible'] == 1 && children[ch]['children'][node_chld]['attrs']['invisible'] == '1') { - this.invisible_fields_nodes.push(ch_name) - } - } - else { - this.visible_fields_nodes.push(ch_name); - var ch_node_string = this.fields[ch_name]['string'] || this.toTitleCase(ch_name); - this.fields_nodes_string.push(ch_node_string) - } - } - } - } else if(children[ch]['tag'] == 'arrow') { - this.connector = children[ch]['attrs']['object']; - this.src_node = children[ch]['attrs']['source']; - this.des_node = children[ch]['attrs']['destination']; - for (var arrow_chld in children[ch]['children']) { - if (children[ch]['children'][arrow_chld]['tag'] = 'field') { - var arr_ch_name = children[ch]['children'][arrow_chld]['attrs']['name']; - var ch_node_string = this.fields[arr_ch_name]['string'] || this.toTitleCase(arr_ch_name); - this.fields_connector_string.push(ch_node_string); - this.connector_fields.push(arr_ch_name); - } - } - } - } - - this.$element.html(QWeb.render("DiagramView", this)); - - this.$element.find('div.oe_diagram_pager button[data-pager-action]').click(function() { + this.domain = this.dataset._domain || []; + this.context = {}; + this.ids = this.dataset.ids; + }, + start: function() { + return this.rpc("/base_diagram/diagram/load", {"model": this.model, "view_id": this.view_id}, this.on_loaded); + }, + + toTitleCase: function(str) { + return str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();}); + }, + + on_loaded: function(result) { + + var self = this; + if(this.ids && this.ids.length) { + this.id = this.ids[self.dataset.index || 0]; + } + this.fields_view = result.fields_view; + + this.view_id = this.fields_view.view_id; + this.name = this.fields_view.name; + + this.fields = this.fields_view.fields; + var children = this.fields_view.arch.children; + + /* + * For Nodes (Fields) + */ + this.node = ''; + this.bgcolor = ''; + this.shape = ''; + this.visible_fields_nodes = []; + this.invisible_fields_nodes = []; + this.fields_nodes_string = []; + + /* + * For Arrows (Connector) + */ + this.connector = ''; + this.src_node = ''; + this.des_node = ''; + this.connector_fields = []; + this.fields_connector_string = []; + + for(var ch in children) { + if(children[ch]['tag'] == 'node') { + this.node = children[ch]['attrs']['object']; + this.bgcolor = children[ch]['attrs']['bgcolor'] || ''; + this.shape = children[ch]['attrs']['shape'] || ''; + for(var node_chld in children[ch]['children']) { + if (children[ch]['children'][node_chld]['tag'] = 'field') { + var ch_name = children[ch]['children'][node_chld]['attrs']['name']; + + if (children[ch]['children'][node_chld]['attrs']['invisible']) { + if (children[ch]['children'][node_chld]['attrs']['invisible'] == 1 && children[ch]['children'][node_chld]['attrs']['invisible'] == '1') { + this.invisible_fields_nodes.push(ch_name) + } + } + else { + this.visible_fields_nodes.push(ch_name); + var ch_node_string = this.fields[ch_name]['string'] || this.toTitleCase(ch_name); + this.fields_nodes_string.push(ch_node_string) + } + } + } + } else if(children[ch]['tag'] == 'arrow') { + this.connector = children[ch]['attrs']['object']; + this.src_node = children[ch]['attrs']['source']; + this.des_node = children[ch]['attrs']['destination']; + for (var arrow_chld in children[ch]['children']) { + if (children[ch]['children'][arrow_chld]['tag'] = 'field') { + var arr_ch_name = children[ch]['children'][arrow_chld]['attrs']['name']; + var ch_node_string = this.fields[arr_ch_name]['string'] || this.toTitleCase(arr_ch_name); + this.fields_connector_string.push(ch_node_string); + this.connector_fields.push(arr_ch_name); + } + } + } + } + + this.$element.html(QWeb.render("DiagramView", this)); + + this.$element.find('div.oe_diagram_pager button[data-pager-action]').click(function() { var action = $(this).data('pager-action'); self.on_pager_action(action); }); - - this.do_update_pager(); - - // New Node,Edge - this.$element.find('#new_node.oe_diagram_button_new').click(function(){self.add_edit_node(null, self.node)}); - this.$element.find('#new_edge.oe_diagram_button_new').click(function(){self.add_edit_node(null, self.connector)}); - - this.$element.find('#toggle_grid').click(function() { - self.$element.find('.diagram').toggleClass('show_grid') - }); - + + this.do_update_pager(); + + // New Node,Edge + this.$element.find('#new_node.oe_diagram_button_new').click(function(){self.add_edit_node(null, self.node)}); + this.$element.find('#new_edge.oe_diagram_button_new').click(function(){self.add_edit_node(null, self.connector)}); + + this.$element.find('#toggle_grid').click(function() { + self.$element.find('.diagram').toggleClass('show_grid') + }); + if(this.id) { - self.get_diagram_info(); + self.get_diagram_info(); } - }, - - get_diagram_info: function() { - var self = this; + }, + + get_diagram_info: function() { + var self = this; this.rpc( '/base_diagram/diagram/get_diagram_info', { @@ -137,128 +137,128 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ 'connector_fields_string': this.fields_connector_string }, function(result) { - self.draw_diagram(result); + self.draw_diagram(result); } ); - }, - - on_diagram_loaded: function(record) { - var id_record = record['id']; - if(id_record) { - this.id = id_record; - this.get_diagram_info(); + }, + + on_diagram_loaded: function(record) { + var id_record = record['id']; + if(id_record) { + this.id = id_record; + this.get_diagram_info(); } }, - + draw_diagram: function(result) { var dia = new Graph(); - + this.active_model = result['id_model']; this.in_transition_field = result['in_transition_field']; this.out_transition_field = result['out_transition_field']; var res_nodes = result['nodes']; var res_connectors = result['conn']; - + //Custom logic var self = this; var renderer = function(r, n) { - var node; - var set; - - // ellipse - if (n.node.shape == 'ellipse') { - node = r.ellipse(n.node.x - 30, n.node.y - 13, 40, 20).attr({ - "fill": n.node.color, - r: "12px", - "stroke-width": n.distance == 0 ? "3px" : "1px" - }); - - set = r.set().push(node).push(r.text(n.node.x - 30, n.node.y - 10, (n.label || n.id))); - } - - // rectangle - else if(n.node.shape == 'rectangle') { - node = r.rect(n.node.x-30, n.node.y-13, 60, 44).attr({ - "fill": n.node.color, - r : "12px", - "stroke-width" : n.distance == 0 ? "3px" : "1px" - }); - set = r.set().push(node).push(r.text(n.node.x , n.node.y+10 , (n.label || n.id))); - } - - // circle - else { - node = r.circle(n.node.x, n.node.y, 150).attr({ - "fill": n.node.color, - r : "30px", - "stroke-width" : n.distance == 0 ? "3px" : "1px" - }); - set = r.set().push(node).push(r.text(n.node.x , n.node.y , (n.label || n.id))); - } - - //Shape Node Event - jQuery(node.node).attr({ - 'id': n.node.id, - 'name': n.id, - 'kind': n.node.options['Kind'] || n.node.options['kind'] - }).dblclick(function() { - var $this = jQuery(this); - self.add_edit_node($this.attr('id'), self.node); - }); - - //Text Node Event - jQuery(node.next.node).attr({ - 'id': n.node.id, - 'name': n.id, - 'kind': n.node.options['Kind'] || n.node.options['kind'] - }).dblclick(function() { - var $this = jQuery(this); - self.add_edit_node($this.attr('id'), self.node); - }); - return set; + var node; + var set; + + // ellipse + if (n.node.shape == 'ellipse') { + node = r.ellipse(n.node.x - 30, n.node.y - 13, 40, 20).attr({ + "fill": n.node.color, + r: "12px", + "stroke-width": n.distance == 0 ? "3px" : "1px" + }); + + set = r.set().push(node).push(r.text(n.node.x - 30, n.node.y - 10, (n.label || n.id))); + } + + // rectangle + else if(n.node.shape == 'rectangle') { + node = r.rect(n.node.x-30, n.node.y-13, 60, 44).attr({ + "fill": n.node.color, + r : "12px", + "stroke-width" : n.distance == 0 ? "3px" : "1px" + }); + set = r.set().push(node).push(r.text(n.node.x , n.node.y+10 , (n.label || n.id))); + } + + // circle + else { + node = r.circle(n.node.x, n.node.y, 150).attr({ + "fill": n.node.color, + r : "30px", + "stroke-width" : n.distance == 0 ? "3px" : "1px" + }); + set = r.set().push(node).push(r.text(n.node.x , n.node.y , (n.label || n.id))); + } + + //Shape Node Event + jQuery(node.node).attr({ + 'id': n.node.id, + 'name': n.id, + 'kind': n.node.options['Kind'] || n.node.options['kind'] + }).dblclick(function() { + var $this = jQuery(this); + self.add_edit_node($this.attr('id'), self.node); + }); + + //Text Node Event + jQuery(node.next.node).attr({ + 'id': n.node.id, + 'name': n.id, + 'kind': n.node.options['Kind'] || n.node.options['kind'] + }).dblclick(function() { + var $this = jQuery(this); + self.add_edit_node($this.attr('id'), self.node); + }); + return set; }; - + for(var node in res_nodes) { var res_node = res_nodes[node]; dia.addNode(res_node['name'],{node: res_node,render: renderer}); } - + // Set Ides for Path(Edges) var edge_ids = []; - + $.each(res_connectors, function(index, connector) { - edge_ids.push(index); - dia.addEdge(connector['source'], connector['destination'], {directed : true, label: connector['signal']}); + edge_ids.push(index); + dia.addEdge(connector['source'], connector['destination'], {directed : true, label: connector['signal']}); }); - + var layouter = new Graph.Layout.Spring(dia); layouter.layout(); if ($('div#dia-canvas').children().length > 0) { - $('div#dia-canvas').children().remove(); + $('div#dia-canvas').children().remove(); } var renderer = new Graph.Renderer.Raphael('dia-canvas', dia, $('div#dia-canvas').width(), $('div#dia-canvas').height()); renderer.draw(); - + //Path(Edges) $.each(dia.edges, function(index, edge) { - if(edge.connection) - edge.connection.fg.node.id = edge_ids[index]; + if(edge.connection) + edge.connection.fg.node.id = edge_ids[index]; }); - + jQuery('path',renderer.r.canvas).dblclick(function() { - self.add_edit_node(this.id, self.connector) + self.add_edit_node(this.id, self.connector) }); }, - + add_edit_node: function(id, model) { - var self = this; - - if(!model) - model = self.node; - if(id) - id = parseInt(id, 10); - var action_manager = new openerp.base.ActionManager(this); - var dialog = new openerp.base.Dialog(this, { + var self = this; + + if(!model) + model = self.node; + if(id) + id = parseInt(id, 10); + var action_manager = new openerp.base.ActionManager(this); + var dialog = new openerp.base.Dialog(this, { width: 800, height: 600, buttons : { @@ -266,63 +266,63 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ $(this).dialog('destroy'); }, Save : function() { - var form_dataset = action_manager.inner_viewmanager.dataset; - var form_view = action_manager.inner_viewmanager.views.form.controller; - - form_view.do_save(function() { - self.dataset.index = jQuery.inArray(parseInt(self.id,10), self.dataset.ids); - self.dataset.read_index(_.keys(self.fields_view.fields), self.on_diagram_loaded) - }); + var form_dataset = action_manager.inner_viewmanager.dataset; + var form_view = action_manager.inner_viewmanager.views.form.controller; + + form_view.do_save(function() { + self.dataset.index = jQuery.inArray(parseInt(self.id,10), self.dataset.ids); + self.dataset.read_index(_.keys(self.fields_view.fields), self.on_diagram_loaded) + }); $(this).dialog('destroy'); } } }).start().open(); - action_manager.appendTo(dialog.$element); - action_manager.do_action({ + action_manager.appendTo(dialog.$element); + action_manager.do_action({ res_model : model, res_id: id, views : [[false, 'form']], type : 'ir.actions.act_window', auto_search : false, flags : { - search_view: false, + search_view: false, sidebar : false, views_switcher : false, action_buttons : false, pager: false } }); - - var form_controller = action_manager.inner_viewmanager.views.form.controller; - - var form_fields; - - if(model == self.node) { - form_fields = ['wkf_id']; - } else { - form_fields = ['act_from', 'act_to']; - } - - if(model == self.node || id) { - $.each(form_fields, function(index, fld) { - form_controller.on_record_loaded.add_first(function() { - form_controller.fields[fld].modifiers.readonly = true; - form_controller.fields[fld].$input.attr('disabled', true); - form_controller.fields[fld].$drop_down.unbind(); - form_controller.fields[fld].$menu_btn.unbind(); - }); - }); - } - if(!id && (model == self.node)) { - $.each(form_fields, function(index, fld) { - form_controller.on_record_loaded.add_last(function() { - form_controller.fields[fld].set_value([self.id,self.active_model]); - form_controller.fields[fld].dirty = true; - }); - }); - } + + var form_controller = action_manager.inner_viewmanager.views.form.controller; + + var form_fields; + + if(model == self.node) { + form_fields = ['wkf_id']; + } else { + form_fields = ['act_from', 'act_to']; + } + + if(model == self.node || id) { + $.each(form_fields, function(index, fld) { + form_controller.on_record_loaded.add_first(function() { + form_controller.fields[fld].modifiers.readonly = true; + form_controller.fields[fld].$input.attr('disabled', true); + form_controller.fields[fld].$drop_down.unbind(); + form_controller.fields[fld].$menu_btn.unbind(); + }); + }); + } + if(!id && (model == self.node)) { + $.each(form_fields, function(index, fld) { + form_controller.on_record_loaded.add_last(function() { + form_controller.fields[fld].set_value([self.id,self.active_model]); + form_controller.fields[fld].dirty = true; + }); + }); + } }, - + do_search: function(domains, contexts, groupbys) { var self = this; this.rpc('/base/session/eval_domain_and_context', { @@ -338,40 +338,40 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ }); }); }, - + on_pager_action: function(action) { - switch (action) { - case 'first': - this.dataset.index = 0; - break; - case 'previous': - this.dataset.previous(); - break; - case 'next': - this.dataset.next(); - break; - case 'last': - this.dataset.index = this.dataset.ids.length - 1; - break; - } - this.dataset.read_index(_.keys(this.fields_view.fields), this.on_diagram_loaded); - this.do_update_pager(); + switch (action) { + case 'first': + this.dataset.index = 0; + break; + case 'previous': + this.dataset.previous(); + break; + case 'next': + this.dataset.next(); + break; + case 'last': + this.dataset.index = this.dataset.ids.length - 1; + break; + } + this.dataset.read_index(_.keys(this.fields_view.fields), this.on_diagram_loaded); + this.do_update_pager(); }, - + do_update_pager: function(hide_index) { var $pager = this.$element.find('div.oe_diagram_pager'); var index = hide_index ? '-' : this.dataset.index + 1; if(!this.dataset.count) { - this.dataset.count = this.dataset.ids.length; + this.dataset.count = this.dataset.ids.length; } $pager.find('span.oe_pager_index').html(index); $pager.find('span.oe_pager_count').html(this.dataset.count); }, - - do_show: function () { + + do_show: function () { this.$element.show(); }, - + do_hide: function () { this.$element.hide(); } From 49fbb546695a6e3635446a4bc495af9600fdbde4 Mon Sep 17 00:00:00 2001 From: "Vaibhav (OpenERP)" Date: Fri, 2 Sep 2011 15:06:11 +0530 Subject: [PATCH 25/29] [Fix] attached events on node dir.code improvement. bzr revid: vda@tinyerp.com-20110902093611-6cxqhgewtbox45qd --- addons/base_diagram/__openerp__.py | 1 + addons/base_diagram/controllers/main.py | 18 +- .../static/src/css/base_diagram.css | 4 - addons/base_diagram/static/src/js/diagram.js | 282 ++++++------------ 4 files changed, 102 insertions(+), 203 deletions(-) diff --git a/addons/base_diagram/__openerp__.py b/addons/base_diagram/__openerp__.py index 0e449206228..d976b0df7a8 100644 --- a/addons/base_diagram/__openerp__.py +++ b/addons/base_diagram/__openerp__.py @@ -6,6 +6,7 @@ 'static/lib/js/raphael-min.js', 'static/lib/js/dracula_graffle.js', 'static/lib/js/dracula_graph.js', + 'static/lib/js/dracula_algorithms.js', 'static/src/js/diagram.js' ], 'css' : [ diff --git a/addons/base_diagram/controllers/main.py b/addons/base_diagram/controllers/main.py index b4ef9bb49c2..f9175ea1b78 100644 --- a/addons/base_diagram/controllers/main.py +++ b/addons/base_diagram/controllers/main.py @@ -8,22 +8,10 @@ class DiagramView(View): def load(self, req, model, view_id): fields_view = self.fields_view_get(req, model, view_id, 'diagram') return {'fields_view': fields_view} - - @openerpweb.jsonrequest - def get_activity(self, req, id, name, kind, active_model, model): - - activity_id = req.session.model(model).search([('name','=',name),('kind','=',kind),('wkf_id','=',active_model)], 0, 0, 0, req.session.context) - ids = req.session.model(model).search([], 0, 0, 0, req.session.context) - return {'activity_id':activity_id, 'ids': ids} @openerpweb.jsonrequest - def get_diagram_info(self, req, **kw): - id = kw['id'] - model = kw['model'] - node = kw['node'] - connector = kw['connector'] - src_node = kw['src_node'] - des_node = kw['des_node'] + def get_diagram_info(self, req, id, model, node, connector, src_node, des_node, **kw): + visible_node_fields = kw.get('visible_node_fields',[]) invisible_node_fields = kw.get('invisible_node_fields',[]) node_fields_string = kw.get('node_fields_string',[]) @@ -127,4 +115,4 @@ class DiagramView(View): out_transition_field = fields.read(out_transition_field_id[0], ['name'], req.session.context)['name'] id_model = req.session.model(model).read([id],['name'], req.session.context)[0]['name'] - return dict(nodes=nodes, conn=connectors, in_transition_field=in_transition_field, out_transition_field=out_transition_field, id_model = id_model) + return dict(nodes=nodes, conn=connectors, id_model = id_model) diff --git a/addons/base_diagram/static/src/css/base_diagram.css b/addons/base_diagram/static/src/css/base_diagram.css index 70b575e6e47..348926d0ba9 100644 --- a/addons/base_diagram/static/src/css/base_diagram.css +++ b/addons/base_diagram/static/src/css/base_diagram.css @@ -16,7 +16,3 @@ .openerp .oe_diagram_buttons { float: left; } - -.openerp .diagram path { - cursor: pointer; -} diff --git a/addons/base_diagram/static/src/js/diagram.js b/addons/base_diagram/static/src/js/diagram.js index bc57bf24cac..22fcbd9269f 100644 --- a/addons/base_diagram/static/src/js/diagram.js +++ b/addons/base_diagram/static/src/js/diagram.js @@ -6,6 +6,7 @@ openerp.base_diagram = function (openerp) { QWeb.add_template('/base_diagram/static/src/xml/base_diagram.xml'); openerp.base.views.add('diagram', 'openerp.base_diagram.DiagramView'); openerp.base_diagram.DiagramView = openerp.base.View.extend({ + searchable: false, init: function(parent, element_id, dataset, view_id, options) { this._super(parent, element_id); this.set_default_options(options); @@ -13,7 +14,6 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ this.dataset = dataset; this.model = this.dataset.model; this.view_id = view_id; - this.name = ""; this.domain = this.dataset._domain || []; this.context = {}; this.ids = this.dataset.ids; @@ -21,7 +21,7 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ start: function() { return this.rpc("/base_diagram/diagram/load", {"model": this.model, "view_id": this.view_id}, this.on_loaded); }, - + toTitleCase: function(str) { return str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();}); }, @@ -32,69 +32,15 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ if(this.ids && this.ids.length) { this.id = this.ids[self.dataset.index || 0]; } - this.fields_view = result.fields_view; - - this.view_id = this.fields_view.view_id; - this.name = this.fields_view.name; - - this.fields = this.fields_view.fields; - var children = this.fields_view.arch.children; - - /* - * For Nodes (Fields) - */ - this.node = ''; - this.bgcolor = ''; - this.shape = ''; - this.visible_fields_nodes = []; - this.invisible_fields_nodes = []; - this.fields_nodes_string = []; - - /* - * For Arrows (Connector) - */ - this.connector = ''; - this.src_node = ''; - this.des_node = ''; - this.connector_fields = []; - this.fields_connector_string = []; - - for(var ch in children) { - if(children[ch]['tag'] == 'node') { - this.node = children[ch]['attrs']['object']; - this.bgcolor = children[ch]['attrs']['bgcolor'] || ''; - this.shape = children[ch]['attrs']['shape'] || ''; - for(var node_chld in children[ch]['children']) { - if (children[ch]['children'][node_chld]['tag'] = 'field') { - var ch_name = children[ch]['children'][node_chld]['attrs']['name']; - - if (children[ch]['children'][node_chld]['attrs']['invisible']) { - if (children[ch]['children'][node_chld]['attrs']['invisible'] == 1 && children[ch]['children'][node_chld]['attrs']['invisible'] == '1') { - this.invisible_fields_nodes.push(ch_name) - } - } - else { - this.visible_fields_nodes.push(ch_name); - var ch_node_string = this.fields[ch_name]['string'] || this.toTitleCase(ch_name); - this.fields_nodes_string.push(ch_node_string) - } - } - } - } else if(children[ch]['tag'] == 'arrow') { - this.connector = children[ch]['attrs']['object']; - this.src_node = children[ch]['attrs']['source']; - this.des_node = children[ch]['attrs']['destination']; - for (var arrow_chld in children[ch]['children']) { - if (children[ch]['children'][arrow_chld]['tag'] = 'field') { - var arr_ch_name = children[ch]['children'][arrow_chld]['attrs']['name']; - var ch_node_string = this.fields[arr_ch_name]['string'] || this.toTitleCase(arr_ch_name); - this.fields_connector_string.push(ch_node_string); - this.connector_fields.push(arr_ch_name); - } - } - } - } - + + this.fields_view = result.fields_view, + this.view_id = this.fields_view.view_id, + this.fields = this.fields_view.fields, + this.nodes = this.fields_view.arch.children[0], + this.connectors = this.fields_view.arch.children[1], + this.node = this.nodes.attrs.object, + this.connector = this.connectors.attrs.object; + this.$element.html(QWeb.render("DiagramView", this)); this.$element.find('div.oe_diagram_pager button[data-pager-action]').click(function() { @@ -105,37 +51,53 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ this.do_update_pager(); // New Node,Edge - this.$element.find('#new_node.oe_diagram_button_new').click(function(){self.add_edit_node(null, self.node)}); - this.$element.find('#new_edge.oe_diagram_button_new').click(function(){self.add_edit_node(null, self.connector)}); + this.$element.find('#new_node.oe_diagram_button_new').click(function(){self.add_edit_node(null, self.node);}); + this.$element.find('#new_edge.oe_diagram_button_new').click(function(){self.add_edit_node(null, self.connector);}); this.$element.find('#toggle_grid').click(function() { - self.$element.find('.diagram').toggleClass('show_grid') + self.$element.find('.diagram').toggleClass('show_grid'); }); - + if(this.id) { self.get_diagram_info(); } + }, get_diagram_info: function() { var self = this; + var params = { + 'id': this.id, + 'model': this.model, + 'node': this.node, + 'connector': this.connector, + 'bgcolor': this.nodes.attrs.bgcolor, + 'shape': this.nodes.attrs.shape, + 'src_node': this.connectors.attrs.source, + 'des_node': this.connectors.attrs.destination, + 'visible_nodes': [], + 'invisible_nodes': [], + 'node_fields': [], + 'connectors': [], + 'connectors_fields': [] + }; + + _.each(this.nodes.children, function(child) { + if(child.attrs.invisible) + params['invisible_nodes'].push(child.attrs.name); + else { + params['visible_nodes'].push(child.attrs.name); + params['node_fields'].push(self.fields[child.attrs.name]['string']|| this.toTitleCase(child.attrs.name)); + } + }); + + _.each(this.connectors.children, function(conn) { + params['connectors_fields'].push(self.fields[conn.attrs.name]['string']|| this.toTitleCase(conn.attrs.name)); + params['connectors'].push(conn.attrs.name); + }); + this.rpc( - '/base_diagram/diagram/get_diagram_info', - { - 'id': this.id, - 'model': this.model, - 'bgcolor': this.bgcolor, - 'shape': this.shape, - 'node': this.node, - 'connector': this.connector, - 'src_node': this.src_node, - 'des_node': this.des_node, - 'visible_node_fields': this.visible_fields_nodes, - 'invisible_node_fields': this.invisible_fields_nodes, - 'node_fields_string': this.fields_nodes_string, - 'connector_fields': this.connector_fields, - 'connector_fields_string': this.fields_connector_string - }, + '/base_diagram/diagram/get_diagram_info',params, function(result) { self.draw_diagram(result); } @@ -151,11 +113,10 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ }, draw_diagram: function(result) { - var dia = new Graph(); + var diagram = new Graph(); this.active_model = result['id_model']; - this.in_transition_field = result['in_transition_field']; - this.out_transition_field = result['out_transition_field']; + var res_nodes = result['nodes']; var res_connectors = result['conn']; @@ -164,89 +125,60 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ var renderer = function(r, n) { var node; var set; - - // ellipse - if (n.node.shape == 'ellipse') { - node = r.ellipse(n.node.x - 30, n.node.y - 13, 40, 20).attr({ - "fill": n.node.color, - r: "12px", - "stroke-width": n.distance == 0 ? "3px" : "1px" - }); - - set = r.set().push(node).push(r.text(n.node.x - 30, n.node.y - 10, (n.label || n.id))); - } - - // rectangle - else if(n.node.shape == 'rectangle') { - node = r.rect(n.node.x-30, n.node.y-13, 60, 44).attr({ - "fill": n.node.color, - r : "12px", - "stroke-width" : n.distance == 0 ? "3px" : "1px" - }); - set = r.set().push(node).push(r.text(n.node.x , n.node.y+10 , (n.label || n.id))); - } - - // circle - else { - node = r.circle(n.node.x, n.node.y, 150).attr({ - "fill": n.node.color, - r : "30px", - "stroke-width" : n.distance == 0 ? "3px" : "1px" - }); - set = r.set().push(node).push(r.text(n.node.x , n.node.y , (n.label || n.id))); - } - - //Shape Node Event - jQuery(node.node).attr({ - 'id': n.node.id, - 'name': n.id, - 'kind': n.node.options['Kind'] || n.node.options['kind'] - }).dblclick(function() { - var $this = jQuery(this); - self.add_edit_node($this.attr('id'), self.node); - }); - - //Text Node Event - jQuery(node.next.node).attr({ - 'id': n.node.id, - 'name': n.id, - 'kind': n.node.options['Kind'] || n.node.options['kind'] - }).dblclick(function() { - var $this = jQuery(this); - self.add_edit_node($this.attr('id'), self.node); - }); - return set; + var shape = n.node.shape; + if(shape == 'rectangle') + shape = 'rect'; + node = r[shape](n.node.x, n.node.y).attr({ + "fill": n.node.color, + }).dblclick(function() { + self.add_edit_node(n.node.id, self.node); + }); + set = r.set() + .push(node) + .push( + r.text(n.node.x, n.node.y, (n.label || n.id)) + .attr({"cursor":"pointer"}) + .dblclick(function() { + self.add_edit_node(n.node.id, self.node); + }) + ); + node.attr({cursor: "pointer"}); + + if(shape == "ellipse") + node.attr({rx: "40", ry: "20"}); + else if(shape == 'rect') { + node.attr({width: "60", height: "44"}); + node.next.attr({"text-anchor": "middle", x: n.node.x + 20, y: n.node.y + 20}); + } + return set; }; - - for(var node in res_nodes) { - var res_node = res_nodes[node]; - dia.addNode(res_node['name'],{node: res_node,render: renderer}); - } - - // Set Ides for Path(Edges) - var edge_ids = []; - - $.each(res_connectors, function(index, connector) { - edge_ids.push(index); - dia.addEdge(connector['source'], connector['destination'], {directed : true, label: connector['signal']}); + + _.each(res_nodes, function(res_node) { + diagram.addNode(res_node['name'],{node: res_node,render: renderer}); }); - var layouter = new Graph.Layout.Spring(dia); - layouter.layout(); + // Id for Path(Edges) + var edge_ids = []; + + _.each(res_connectors, function(connector, index) { + edge_ids.push(index); + diagram.addEdge(connector['source'], connector['destination'], {directed : true, label: connector['signal']}); + }); + + if ($('div#dia-canvas').children().length > 0) { $('div#dia-canvas').children().remove(); } - var renderer = new Graph.Renderer.Raphael('dia-canvas', dia, $('div#dia-canvas').width(), $('div#dia-canvas').height()); - renderer.draw(); - - //Path(Edges) - $.each(dia.edges, function(index, edge) { - if(edge.connection) - edge.connection.fg.node.id = edge_ids[index]; - }); - - jQuery('path',renderer.r.canvas).dblclick(function() { - self.add_edit_node(this.id, self.connector) + + var layouter = new Graph.Layout.Ordered(diagram, topological_sort(diagram)); + var render_diagram = new Graph.Renderer.Raphael('dia-canvas', diagram, $('div#dia-canvas').width(), $('div#dia-canvas').height()); + + _.each(diagram.edges, function(edge, index) { + if(edge.connection) { + edge.connection.fg.attr({cursor: "pointer"}).dblclick(function() { + self.add_edit_node(edge_ids[index], self.connector); + }); + } }); }, @@ -266,12 +198,10 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ $(this).dialog('destroy'); }, Save : function() { - var form_dataset = action_manager.inner_viewmanager.dataset; var form_view = action_manager.inner_viewmanager.views.form.controller; form_view.do_save(function() { - self.dataset.index = jQuery.inArray(parseInt(self.id,10), self.dataset.ids); - self.dataset.read_index(_.keys(self.fields_view.fields), self.on_diagram_loaded) + self.dataset.read_index(_.keys(self.fields_view.fields), self.on_diagram_loaded); }); $(this).dialog('destroy'); } @@ -323,22 +253,6 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ } }, - do_search: function(domains, contexts, groupbys) { - var self = this; - this.rpc('/base/session/eval_domain_and_context', { - domains: domains, - contexts: contexts, - group_by_seq: groupbys - }, function (results) { - // TODO: handle non-empty results.group_by with read_group - self.dataset.context = self.context = results.context; - self.dataset.domain = self.domain = results.domain; - self.dataset.read_slice(self.fields, 0, self.limit,function(events){ - self.schedule_events(events) - }); - }); - }, - on_pager_action: function(action) { switch (action) { case 'first': From c75e5b94c77c564f941c2c00a9eb7957241d0865 Mon Sep 17 00:00:00 2001 From: "Vaibhav (OpenERP)" Date: Mon, 5 Sep 2011 12:49:16 +0530 Subject: [PATCH 26/29] [FIX] check node Invisible or visible. bzr revid: vda@tinyerp.com-20110905071916-dxowb0wjsc84j900 --- addons/base_diagram/static/src/js/diagram.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/base_diagram/static/src/js/diagram.js b/addons/base_diagram/static/src/js/diagram.js index 22fcbd9269f..f9c4a0b6fd9 100644 --- a/addons/base_diagram/static/src/js/diagram.js +++ b/addons/base_diagram/static/src/js/diagram.js @@ -83,7 +83,7 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ }; _.each(this.nodes.children, function(child) { - if(child.attrs.invisible) + if(child.attrs.invisible == '1') params['invisible_nodes'].push(child.attrs.name); else { params['visible_nodes'].push(child.attrs.name); @@ -170,7 +170,7 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ $('div#dia-canvas').children().remove(); } - var layouter = new Graph.Layout.Ordered(diagram, topological_sort(diagram)); + var layouter = new Graph.Layout.Ordered(diagram); var render_diagram = new Graph.Renderer.Raphael('dia-canvas', diagram, $('div#dia-canvas').width(), $('div#dia-canvas').height()); _.each(diagram.edges, function(edge, index) { From 86a1a3de4a98381230d973e59b46a1b6977728d4 Mon Sep 17 00:00:00 2001 From: "Vaibhav (OpenERP)" Date: Mon, 5 Sep 2011 13:34:34 +0530 Subject: [PATCH 27/29] [FIX] DragDrop functionality is turned on for an object during the MouseDown event. However, when you double click the MouseDown event is also fired and thus the app thinks you are dragging after the first click and the DoubleClick event won't get fired. bzr revid: vda@tinyerp.com-20110905080434-u8znc0wx7tasyct2 --- addons/base_diagram/static/lib/js/dracula_graph.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/addons/base_diagram/static/lib/js/dracula_graph.js b/addons/base_diagram/static/lib/js/dracula_graph.js index f7069c5d2e5..7cf8b9cab3b 100644 --- a/addons/base_diagram/static/lib/js/dracula_graph.js +++ b/addons/base_diagram/static/lib/js/dracula_graph.js @@ -160,11 +160,13 @@ Graph.Renderer.Raphael = function(element, graph, width, height) { */ this.isDrag = false; this.dragger = function (e) { - this.dx = e.clientX; - this.dy = e.clientY; - selfRef.isDrag = this; - this.set && this.set.animate({"fill-opacity": .1}, 200) && this.set.toFront(); - e.preventDefault && e.preventDefault(); + if(e.detail < 2) { + this.dx = e.clientX; + this.dy = e.clientY; + selfRef.isDrag = this; + this.set && this.set.animate({"fill-opacity": .1}, 200) && this.set.toFront(); + e.preventDefault && e.preventDefault(); + } }; var d = document.getElementById(element); From 5293c3b2e8ed228631ad0bac5310fdef0d87381b Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Tue, 6 Sep 2011 10:08:47 +0200 Subject: [PATCH 28/29] [FIX] some formatting bzr revid: xmo@openerp.com-20110906080847-514yysnz2kuwl4g0 --- addons/base_diagram/static/src/js/diagram.js | 38 ++++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/addons/base_diagram/static/src/js/diagram.js b/addons/base_diagram/static/src/js/diagram.js index f9c4a0b6fd9..e14af8c1597 100644 --- a/addons/base_diagram/static/src/js/diagram.js +++ b/addons/base_diagram/static/src/js/diagram.js @@ -67,20 +67,20 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ get_diagram_info: function() { var self = this; var params = { - 'id': this.id, - 'model': this.model, - 'node': this.node, - 'connector': this.connector, - 'bgcolor': this.nodes.attrs.bgcolor, - 'shape': this.nodes.attrs.shape, - 'src_node': this.connectors.attrs.source, - 'des_node': this.connectors.attrs.destination, - 'visible_nodes': [], - 'invisible_nodes': [], - 'node_fields': [], - 'connectors': [], - 'connectors_fields': [] - }; + 'id': this.id, + 'model': this.model, + 'node': this.node, + 'connector': this.connector, + 'bgcolor': this.nodes.attrs.bgcolor, + 'shape': this.nodes.attrs.shape, + 'src_node': this.connectors.attrs.source, + 'des_node': this.connectors.attrs.destination, + 'visible_nodes': [], + 'invisible_nodes': [], + 'node_fields': [], + 'connectors': [], + 'connectors_fields': [] + }; _.each(this.nodes.children, function(child) { if(child.attrs.invisible == '1') @@ -129,10 +129,10 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ if(shape == 'rectangle') shape = 'rect'; node = r[shape](n.node.x, n.node.y).attr({ - "fill": n.node.color, - }).dblclick(function() { - self.add_edit_node(n.node.id, self.node); - }); + "fill": n.node.color + }).dblclick(function() { + self.add_edit_node(n.node.id, self.node); + }); set = r.set() .push(node) .push( @@ -169,7 +169,7 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ if ($('div#dia-canvas').children().length > 0) { $('div#dia-canvas').children().remove(); } - + var layouter = new Graph.Layout.Ordered(diagram); var render_diagram = new Graph.Renderer.Raphael('dia-canvas', diagram, $('div#dia-canvas').width(), $('div#dia-canvas').height()); From f8c02ffb7f7d5086c89a37106884b33af5652f77 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Tue, 6 Sep 2011 10:09:30 +0200 Subject: [PATCH 29/29] [FIX] cleanup whitespace in diagram.js file bzr revid: xmo@openerp.com-20110906080930-0juky0v1b9pxe84f --- addons/base_diagram/static/src/js/diagram.js | 96 ++++++++++---------- 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/addons/base_diagram/static/src/js/diagram.js b/addons/base_diagram/static/src/js/diagram.js index e14af8c1597..89ea9f5f835 100644 --- a/addons/base_diagram/static/src/js/diagram.js +++ b/addons/base_diagram/static/src/js/diagram.js @@ -6,7 +6,7 @@ openerp.base_diagram = function (openerp) { QWeb.add_template('/base_diagram/static/src/xml/base_diagram.xml'); openerp.base.views.add('diagram', 'openerp.base_diagram.DiagramView'); openerp.base_diagram.DiagramView = openerp.base.View.extend({ - searchable: false, + searchable: false, init: function(parent, element_id, dataset, view_id, options) { this._super(parent, element_id); this.set_default_options(options); @@ -21,7 +21,7 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ start: function() { return this.rpc("/base_diagram/diagram/load", {"model": this.model, "view_id": this.view_id}, this.on_loaded); }, - + toTitleCase: function(str) { return str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();}); }, @@ -32,15 +32,15 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ if(this.ids && this.ids.length) { this.id = this.ids[self.dataset.index || 0]; } - + this.fields_view = result.fields_view, this.view_id = this.fields_view.view_id, this.fields = this.fields_view.fields, this.nodes = this.fields_view.arch.children[0], - this.connectors = this.fields_view.arch.children[1], + this.connectors = this.fields_view.arch.children[1], this.node = this.nodes.attrs.object, this.connector = this.connectors.attrs.object; - + this.$element.html(QWeb.render("DiagramView", this)); this.$element.find('div.oe_diagram_pager button[data-pager-action]').click(function() { @@ -57,11 +57,11 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ this.$element.find('#toggle_grid').click(function() { self.$element.find('.diagram').toggleClass('show_grid'); }); - + if(this.id) { self.get_diagram_info(); } - + }, get_diagram_info: function() { @@ -81,21 +81,21 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ 'connectors': [], 'connectors_fields': [] }; - + _.each(this.nodes.children, function(child) { - if(child.attrs.invisible == '1') - params['invisible_nodes'].push(child.attrs.name); - else { - params['visible_nodes'].push(child.attrs.name); - params['node_fields'].push(self.fields[child.attrs.name]['string']|| this.toTitleCase(child.attrs.name)); - } + if(child.attrs.invisible == '1') + params['invisible_nodes'].push(child.attrs.name); + else { + params['visible_nodes'].push(child.attrs.name); + params['node_fields'].push(self.fields[child.attrs.name]['string']|| this.toTitleCase(child.attrs.name)); + } }); - + _.each(this.connectors.children, function(conn) { - params['connectors_fields'].push(self.fields[conn.attrs.name]['string']|| this.toTitleCase(conn.attrs.name)); - params['connectors'].push(conn.attrs.name); + params['connectors_fields'].push(self.fields[conn.attrs.name]['string']|| this.toTitleCase(conn.attrs.name)); + params['connectors'].push(conn.attrs.name); }); - + this.rpc( '/base_diagram/diagram/get_diagram_info',params, function(result) { @@ -116,7 +116,7 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ var diagram = new Graph(); this.active_model = result['id_model']; - + var res_nodes = result['nodes']; var res_connectors = result['conn']; @@ -127,34 +127,34 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ var set; var shape = n.node.shape; if(shape == 'rectangle') - shape = 'rect'; + shape = 'rect'; node = r[shape](n.node.x, n.node.y).attr({ "fill": n.node.color }).dblclick(function() { self.add_edit_node(n.node.id, self.node); }); set = r.set() - .push(node) - .push( - r.text(n.node.x, n.node.y, (n.label || n.id)) - .attr({"cursor":"pointer"}) - .dblclick(function() { - self.add_edit_node(n.node.id, self.node); - }) - ); + .push(node) + .push( + r.text(n.node.x, n.node.y, (n.label || n.id)) + .attr({"cursor":"pointer"}) + .dblclick(function() { + self.add_edit_node(n.node.id, self.node); + }) + ); node.attr({cursor: "pointer"}); - + if(shape == "ellipse") - node.attr({rx: "40", ry: "20"}); - else if(shape == 'rect') { - node.attr({width: "60", height: "44"}); - node.next.attr({"text-anchor": "middle", x: n.node.x + 20, y: n.node.y + 20}); - } - return set; + node.attr({rx: "40", ry: "20"}); + else if(shape == 'rect') { + node.attr({width: "60", height: "44"}); + node.next.attr({"text-anchor": "middle", x: n.node.x + 20, y: n.node.y + 20}); + } + return set; }; - + _.each(res_nodes, function(res_node) { - diagram.addNode(res_node['name'],{node: res_node,render: renderer}); + diagram.addNode(res_node['name'],{node: res_node,render: renderer}); }); // Id for Path(Edges) @@ -164,21 +164,21 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ edge_ids.push(index); diagram.addEdge(connector['source'], connector['destination'], {directed : true, label: connector['signal']}); }); - - + + if ($('div#dia-canvas').children().length > 0) { $('div#dia-canvas').children().remove(); } var layouter = new Graph.Layout.Ordered(diagram); var render_diagram = new Graph.Renderer.Raphael('dia-canvas', diagram, $('div#dia-canvas').width(), $('div#dia-canvas').height()); - + _.each(diagram.edges, function(edge, index) { - if(edge.connection) { - edge.connection.fg.attr({cursor: "pointer"}).dblclick(function() { - self.add_edit_node(edge_ids[index], self.connector); - }); - } + if(edge.connection) { + edge.connection.fg.attr({cursor: "pointer"}).dblclick(function() { + self.add_edit_node(edge_ids[index], self.connector); + }); + } }); }, @@ -234,12 +234,12 @@ openerp.base_diagram.DiagramView = openerp.base.View.extend({ } if(model == self.node || id) { - $.each(form_fields, function(index, fld) { + $.each(form_fields, function(index, fld) { form_controller.on_record_loaded.add_first(function() { form_controller.fields[fld].modifiers.readonly = true; form_controller.fields[fld].$input.attr('disabled', true); - form_controller.fields[fld].$drop_down.unbind(); - form_controller.fields[fld].$menu_btn.unbind(); + form_controller.fields[fld].$drop_down.unbind(); + form_controller.fields[fld].$menu_btn.unbind(); }); }); }