1 openerp.web_process = function (openerp) {
2 var QWeb = openerp.web.qweb,
4 openerp.web.ViewManager.include({
9 this.process_help = this.action ? this.action.help : 'Help: Not Defined';
10 this.model = this.dataset.model;
11 if(this.action) this.process_model = this.action.res_model;
12 else this.process_model = this.model;
14 process_check: function() {
16 grandparent = this.widget_parent && this.widget_parent.widget_parent,
17 view = this.views[this.views_src[0].view_type],
18 $process_view = this.$element.find('.oe-process-view');
19 if (!(grandparent instanceof openerp.web.WebClient) ||
20 !(view.view_type === this.views_src[0].view_type
21 && view.view_id === this.views_src[0].view_id)) {
25 $process_view.click(function() {
26 self.initialize_process_view();
29 initialize_process_view: function() {
31 $.when(this.fields_get(), this.help(), this.get_process_object()).pipe(function(fields, help, process) {
32 self.process_fields = fields;
33 self.process_help = help;
34 if(process && process.length) {
35 if(process.length > 1) {
36 self.process_selection = process;
38 self.process_id = process[0][0],
39 self.process_title = process[0][1];
42 return $.Deferred().resolve();
44 var def = $.Deferred();
46 self.graph_get().done(function(res) {
47 self.process_notes = res.notes;
48 self.process_title = res.name;
49 self.process_subflows = _.filter(res.nodes, function(x) {
50 return x.subflow != false;
52 self.process_related = res.related;
57 }).done(function(res) {
58 $.when(self.render_process_view()).done(function() {
59 if(res) self.draw_process_graph(res);
63 graph_get: function() {
65 var def = $.Deferred();
66 this.process_id = parseInt(this.process_id, 10);
69 .call("graph_get",[this.process_id, this.model || this.dataset.model, false, [80,80,150,100]])
72 .call("search_by_model",[self.model || self.dataset.model,self.session.context])
81 fields_get : function() {
84 dataset = new openerp.web.DataSetStatic(this, this.model || this.dataset.model, this.session.context);
86 .call('fields_get',[])
87 .done(function(fields) {
95 if(!this.subflow_model) {
96 def.resolve(this.action ? (this.action.help!=false ? this.action.help : 'Help: Not Defined') : 'Help: Not Defined');
98 var dataset = new openerp.web.DataSetSearch(this, "ir.actions.act_window", this.session.context, []);
100 .read_slice(['help'],
103 ['res_model', '=', this.subflow_model],
104 ['name', 'ilike', this.subflow_name]
107 ).done(function(res) {
108 def.resolve(res.help || 'Help: Not Defined');
111 return def.promise();
113 get_process_object : function() {
117 return def.resolve().promise();
119 this.process_dataset = new openerp.web.DataSetStatic(this, "process.process", this.session.context);
121 .call("search_by_model", [self.process_model,self.session.context])
122 .done(function(res) {
124 self.process_model = false;
125 self.get_process_object().done(def.resolve);
132 return def.promise();
134 render_process_view : function() {
135 this.$element.html(QWeb.render("ProcessView", this));
137 this.$element.find('#edit_process').click(function() {
138 self.edit_process_view();
140 var $parent = this.widget_parent.$element;
141 $parent.find('#change_process').click(function() {
142 self.process_selection = false,
143 self.process_id = $parent.find('#select_process').val(),
144 self.process_title = $.trim($parent.find('#select_process option:selected').text());
145 self.initialize_process_view();
148 this.$element.find(".toggle_fields").click(function() {
149 $(this).children().toggle();
150 self.$element.find('.process_fields').toggle();
153 this.$element.find(".process_subflow").click(function() {
154 self.process_id = this.id;
155 self.initialize_process_view();
158 draw_process_graph : function(res) {
160 process_graph = new Graph();
161 var process_renderer = function(r, n) {
172 clip_rect = "".concat(n.node.x,",",n.node.y,",150,100");
175 bg = n.node.kind == "subflow" ? "node-subflow" : "node";
176 bg = n.node.gray ? bg + "-gray" : bg;
177 img_src = '/web_process/static/src/img/'+ bg + '.png';
179 r['image'](img_src, n.node.x, n.node.y,150, 100)
180 .attr({"clip-rect": clip_rect})
181 .mousedown(function() {
185 process_node = r['rect'](n.node.x, n.node.y, 150, 100).attr({stroke: "none"});
187 process_node_text = r.text(n.node.x, n.node.y, (n.node.name))
188 .attr({"fill": "#fff", "font-weight": "bold", "cursor": "pointer"});
189 process_node_text.translate((process_node.getBBox().width/ 2) + 5, 10)
191 process_node_text.click(function() {
192 self.process_id = n.node.subflow[0];
193 self.subflow_model = n.node.model;
194 self.subflow_name = n.node.name;
195 self.initialize_process_view();
199 new_notes = n.node.notes;
200 if(n.node.notes.length > 25) {
201 var new_notes= temp_str = '';
205 temp_str = n.node.notes.substr(to ,25);
206 if (temp_str.lastIndexOf(" ") < 25 && temp_str.length >= 25) {
207 from = temp_str.lastIndexOf(" ");
209 new_notes += "\n" + n.node.notes.substr(to , from);
210 if(new_notes.length > n.node.notes.length) break;
214 process_node_desc = r.text(n.node.x+85, n.node.y+50, (new_notes));
215 r['image']('/web/static/src/img/icons/gtk-info.png', n.node.x+20, n.node.y+70, 16, 16)
216 .attr({"cursor": "pointer", "title": "Help"})
218 window.open(n.node.url || "http://doc.openerp.com/v6.0/index.php?model=" + n.node.model);
222 r['image']('/web/static/src/img/icons/gtk-jump-to.png', n.node.x+115, n.node.y+70, 16, 16)
223 .attr({"cursor": "pointer", "title": n.node.menu.name})
225 self.jump_to_view(n.node.res_model, n.node.menu.id);
229 process_set = r.set().push(process_node);
230 process_set.mousedown(function() {
236 _.each(res['nodes'],function(node, node_id) {
237 node['res_model'] = self.model,
238 node['res_id'] = false,
239 node['id'] = node_id;
240 process_graph.addNode(node['name'], {node: node,render: process_renderer});
243 _.each(res['transitions'], function(transitions) {
244 var src = res['nodes'][transitions['source']];
245 var dst = res['nodes'][transitions['target']];
247 transitions['active'] = src.active && !dst.gray;
248 process_graph.addEdge(src['name'], dst['name'], {directed : true});
250 var width = $(document).width();
251 var height = $(document).height();
252 var layouter = new Graph.Layout.Ordered(process_graph);
253 var render_process_graph = new Graph.Renderer.Raphael('process_canvas', process_graph, width, height);
255 jump_to_view: function(model, id) {
257 var dataset = new openerp.web.DataSetStatic(this, 'ir.values', this.session.context);
259 ['action', 'tree_but_open',[['ir.ui.menu', id]], dataset.context],
261 self.$element.empty();
262 var action = res[0][res[0].length - 1];
263 self.rpc("/web/action/load", {
264 action_id: action.id,
265 context: dataset.context
266 }, function(result) {
267 var action_manager = new openerp.web.ActionManager(self);
268 action_manager.appendTo(self.widget_parent.$element);
269 action_manager.do_action(result.result);
273 edit_process_view: function() {
275 var action_manager = new openerp.web.ActionManager(this);
276 var dialog = new openerp.web.Dialog(this, {
280 {text: _t("Cancel"), click: function() { $(this).dialog('destroy'); }},
281 {text: _t("Save"), click: function() {
282 var form_view = action_manager.inner_viewmanager.views.form.controller;
284 form_view.do_save(function() {
285 self.initialize_process_view();
287 $(this).dialog('destroy');
292 action_manager.appendTo(dialog.$element);
293 action_manager.do_action({
294 res_model : 'process.process',
295 res_id: self.process_id,
296 views : [[false, 'form']],
297 type : 'ir.actions.act_window',
301 views_switcher : false,
302 action_buttons : false,
309 // vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax: