[IMP] show Fields.Changed Mechanism.

bzr revid: vda@tinyerp.com-20110929110145-z5fgyg84acx3nuyl
This commit is contained in:
Vaibhav (OpenERP)
2011-09-29 16:31:45 +05:30
parent f516936e1c
commit 69238240cd
3 changed files with 207 additions and 121 deletions
@@ -55,4 +55,8 @@ a.cta-a strong {
padding:5px 10px;
min-height:56px;
font-size: 120%;
}
td.process_fields,button.toggle_fields span:last-child {
display: none;
}
+170 -118
View File
@@ -7,141 +7,156 @@ openerp.web_process = function (openerp) {
var self = this;
this.process_check();
this.process_help = this.action ? this.action.help : 'Help: Not Defined';
this.process_model = this.model;
},
process_check: function() {
var self = this,
grandparent = this.widget_parent && this.widget_parent.widget_parent,
view = this.views[this.views_src[0].view_type],
$process_view = this.$element.find('.oe-process-view');
this.process_model = this.model;
if (!(grandparent instanceof openerp.web.WebClient) ||
!(view.view_type === this.views_src[0].view_type
&& view.view_id === this.views_src[0].view_id)) {
$process_view.hide();
return;
}
$process_view.click(function() {
$.when(self.load_process()).then(self.get_process_id());
self.initialize_process_view();
});
},
process_subflow : function() {
initialize_process_view: function() {
var self = this;
new openerp.web.DataSetSearch(this,
"ir.actions.act_window",this.session.context,[])
.read_slice(['help'],
{ domain:
[
['res_model','=',this.process_action_model],
['name','ilike', this.process_action_name]
]
},
function(res) {
if (res.length) {
self.process_help = res[0]['help'] || 'Help: Not Defined';
var is_ready = $.Deferred();
$.when(this.fields_get(), this.help(), this.get_process_object()).pipe(function(fields, help, process) {
self.process_fields = fields;
self.process_help = help;
if(process && process.length) {
if(process.length > 1) {
self.process_selection = process;
} else {
self.process_id = process[0][0];
}
$.when(self.load_process()).then(self.render_process_view());
}
return $.Deferred().resolve();
}).done(function() {
self.render_process_view();
}).done(function() {
if(self.process_id) {
self.graph_get().done(function(res) {
self.draw_process_graph(res);
});
}
});
},
load_process: function() {
graph_get: function() {
var self = this;
var def = $.Deferred();
this.process_id = parseInt(this.process_id, 10);
this.process_dataset
.call("graph_get",[this.process_id, this.model, false, [80,80,150,100]])
.done(function(res) {
self.process_dataset
.call("search_by_model",[self.model,self.session.context])
.done(
function(r) {
res['related'] = r;
def.resolve(res);
});
});
return def.promise();
},
fields_get : function() {
var self = this,
def = $.Deferred(),
dataset = new openerp.web.DataSetStatic(this, this.model, this.session.context);
dataset
.call('fields_get',[])
.done(function(fields) {
def.resolve(fields);
}).fail(def.reject);
return def.promise();
},
help : function() {
var self = this,
def = $.Deferred();
if(!this.subflow_model) {
def.resolve(this.action ? this.action.help : 'Help: Not Defined');
} else {
var dataset = new openerp.web.DataSetSearch(this, "ir.actions.act_window", this.session.context, []);
dataset
.read_slice(['help'],
{
domain: [
['res_model', '=', this.subflow_model],
['name', 'ilike', this.subflow_name]
]
}
).done(function(res) {
def.resolve(res && res.records.length ? res.records[0].help : 'Help: Not Defined');
});
}
return def.promise();
},
get_process_object : function() {
var self = this,
def = $.Deferred();
if(this.process_id)
return def.resolve().promise();
this.process_dataset = new openerp.web.DataSetStatic(this, "process.process", this.session.context);
this.process_dataset
.call("search_by_model", [self.process_model,self.session.context])
.done(function(res) {
if (!res.length) {
self.process_model = false;
self.get_process_object().done(def.resolve);
}
else {
def.resolve(res);
}
})
.fail(def.reject);
return def.promise();
},
render_process_view : function() {
this.$element.html(QWeb.render("ProcessView", this));
var self = this;
this.$element.find('#edit_process').click(function() {
self.edit_process_view();
});
var $parent = this.widget_parent.$element;
$parent.find('#change_process').click(function() {
self.process_selection = false;
self.process_id = $parent.find('#select_process').val();
self.initialize_process_view();
});
this.$element.find(".toggle_fields").click(function() {
$(this).children().toggle();
self.$element.find('.process_fields').toggle();
})
},
edit_process_view: function() {
var self = this;
var action_manager = new openerp.web.ActionManager(this);
var dialog = new openerp.web.Dialog(this, {
width: 800,
height: 600,
buttons : {
Cancel : function() {
$(this).dialog('destroy');
},
Save : function() {
var form_view = action_manager.inner_viewmanager.views.form.controller;
form_view.do_save(function() {
self.process_renderer([[self.process_id]]);
});
$(this).dialog('destroy');
}
}
}).start().open();
draw_process_graph : function(res) {
var self = this,
process_graph = new Graph();
action_manager.appendTo(dialog.$element);
action_manager.do_action({
res_model : 'process.process',
res_id: self.process_id,
views : [[false, 'form']],
type : 'ir.actions.act_window',
auto_search : false,
flags : {
search_view: false,
sidebar : false,
views_switcher : false,
action_buttons : false,
pager: false
}
});
},
get_process_id: function() {
var self = this;
this.process_dataset = new openerp.web.DataSetStatic(this, "process.process", this.session.context);
this.process_dataset.call("search_by_model",
[self.process_model,self.session.context],
function(res) {self.process_renderer(res)});
},
process_renderer: function(res) {
var self = this;
if(!res.length) {
this.process_model = false;
this.get_process_id();
} else {
if(res.length > 1) {
this.selection = res;
$.when(this.load_process()).then(function() {
var $parent = self.widget_parent.$element;
$parent.find('#change_process').click(function() {
self.selection = false;
self.process_id = $parent.find('#select_process').val();
$.when(self.load_process()).then(self.render_process_view());
});
});
} else {
this.process_id = res[0][0];
$.when(this.load_process()).then(this.render_process_view());
}
}
},
render_process_view: function() {
var self = this;
this.process_id = parseInt(this.process_id, 10);
this.process_dataset.call("graph_get",
[self.process_id, self.model, false, [80,80,150,100]],
function(res) {
res['title'] = res.resource ? res.resource : res.name;
self.process_dataset.call("search_by_model",
[self.model,self.session.context],
function(r) {
res['related'] = r;
});
self.draw_process_graph(res);
}
);
},
draw_process_graph: function(res) {
var self = this;
var process_graph = new Graph();
var process_renderer = function(r, n) {
var process_node,
process_node_text,
@@ -154,7 +169,6 @@ openerp.web_process = function (openerp) {
var bg = "node",
clip_rect = "".concat(n.node.x,",",n.node.y,",150,100");
// text_position_x = n.node.x + (n.node.y/2)
//Image part
bg = n.node.kind == "subflow" ? "node-subflow" : "node";
@@ -163,7 +177,7 @@ openerp.web_process = function (openerp) {
r['image'](img_src, n.node.x, n.node.y,150, 100)
.attr({"clip-rect": clip_rect})
.mousedown(function(){
.mousedown(function() {
return false;
});
@@ -176,9 +190,9 @@ openerp.web_process = function (openerp) {
if(n.node.subflow) {
process_node_text.click(function() {
self.process_id = n.node.subflow[0];
self.process_action_model = n.node.model;
self.process_action_name = n.node.name;
self.process_subflow();
self.subflow_model = n.node.model;
self.subflow_name = n.node.name;
self.initialize_process_view();
});
}
@@ -187,7 +201,7 @@ openerp.web_process = function (openerp) {
if(n.node.notes.length > 25) {
var new_notes= temp_str = '';
var from = to = 0;
while (1){
while (1) {
from = 25;
temp_str = n.node.notes.substr(to ,25);
if (temp_str.lastIndexOf(" ") < 25 && temp_str.length >= 25) {
@@ -214,12 +228,12 @@ openerp.web_process = function (openerp) {
}
process_set = r.set().push(process_node);
process_set.mousedown(function() {
process_set.mousedown(function() {
return false;
});
return process_set;
};
_.each(res['nodes'],function(node, node_id) {
node['res_model'] = self.model,
node['res_id'] = false,
@@ -238,7 +252,7 @@ openerp.web_process = function (openerp) {
var layouter = new Graph.Layout.Ordered(process_graph);
var render_process_graph = new Graph.Renderer.Raphael('process_canvas', process_graph, $('#process_canvas').width(), $('#process_canvas').height());
},
jump_to_view: function(model, id) {
var self = this;
var dataset = new openerp.web.DataSetStatic(this, 'ir.values', this.session.context);
@@ -256,7 +270,45 @@ openerp.web_process = function (openerp) {
action_manager.do_action(result.result);
});
});
}
},
edit_process_view: function() {
var self = this;
var action_manager = new openerp.web.ActionManager(this);
var dialog = new openerp.web.Dialog(this, {
width: 800,
height: 600,
buttons : {
Cancel : function() {
$(this).dialog('destroy');
},
Save : function() {
var form_view = action_manager.inner_viewmanager.views.form.controller;
form_view.do_save(function() {
self.initialize_process_view();
});
$(this).dialog('destroy');
}
}
}).start().open();
action_manager.appendTo(dialog.$element);
action_manager.do_action({
res_model : 'process.process',
res_id: self.process_id,
views : [[false, 'form']],
type : 'ir.actions.act_window',
auto_search : false,
flags : {
search_view: false,
sidebar : false,
views_switcher : false,
action_buttons : false,
pager: false
}
});
},
});
};
@@ -44,14 +44,14 @@
<p><t t-esc="process_help"/></p>
</td>
</tr>
<tr t-if="selection">
<tr t-if="process_selection">
<td>
<fieldset>
<legend>
Select Process
</legend>
<select id="select_process">
<t t-foreach="selection" t-as="prc">
<t t-foreach="process_selection" t-as="prc">
<option t-att-value="prc[0]">
<t t-esc="prc[1]"/>
</option>
@@ -69,7 +69,37 @@
<tr t-if="process_id">
<td>
<button id="edit_process">Edit Process</button>
<button class="toggle_fields">
<span>Show Fields</span>
<span>Hide Fields</span>
</button>
</td>
</tr>
<tr t-if="process_id">
<td class="process_fields">
<table cellspacing="0" cellpadding="0" width="100%">
<t t-foreach="process_fields" t-as="field">
<tr>
<td>
<t t-esc="field"/>
</td>
<td>
<table cellspacing="0" cellpadding="0" width="100%">
<t t-foreach="process_fields[field]" t-as="fld">
<tr>
<td>
<t t-esc="fld"/>:
</td>
<td>
<t t-esc="process_fields[field][fld]"/>
</td>
</tr>
</t>
</table>
</td>
</tr>
</t>
</table>
</td>
</tr>
</table>