[IMP] show Fields.Changed Mechanism.
authorVaibhav (OpenERP) <vda@tinyerp.com>
Thu, 29 Sep 2011 11:01:45 +0000 (16:31 +0530)
committerVaibhav (OpenERP) <vda@tinyerp.com>
Thu, 29 Sep 2011 11:01:45 +0000 (16:31 +0530)
bzr revid: vda@tinyerp.com-20110929110145-z5fgyg84acx3nuyl

addons/web_process/static/src/css/process.css
addons/web_process/static/src/js/process.js
addons/web_process/static/src/xml/web_process.xml

index 6522932..364c378 100644 (file)
@@ -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;
 }
\ No newline at end of file
index 9fd6606..faff7d7 100644 (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());
-
-            });
-        },
-
-        load_process: function() {
-            var self = this;
-            this.$element.html(QWeb.render("ProcessView", this));
-            this.$element.find('#edit_process').click(function() {
-                self.edit_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);
+                    });
+                }
             });
+            
         },
         
-        edit_process_view: function() {
+        graph_get: 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();
+            var def = $.Deferred();
+            this.process_id = parseInt(this.process_id, 10);
             
-            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
-                }
+            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();
         },
-
-        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)});
+        
+        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();
         },
-        process_renderer: function(res) {
-            var self = this;
-            if(!res.length) {
-                this.process_model = false;
-                this.get_process_id();
+        
+        help : function() {
+            var self = this,
+                def = $.Deferred();
+            if(!this.subflow_model) {
+                def.resolve(this.action ? this.action.help : 'Help: Not Defined');
             } 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());
-                        });
+                 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');
                     });
-                } else {
-                    this.process_id = res[0][0];
-                    $.when(this.load_process()).then(this.render_process_view());
-                }
+                 
             }
+            return def.promise();
         },
-
-        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);
-                    }
-            );
+        
+        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();
         },
-        draw_process_graph: function(res) {
+        
+        render_process_view : function() {
+            this.$element.html(QWeb.render("ProcessView", this));
             var self = this;
-            var process_graph = new Graph();
-
+            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();
+                
+            })
+        },
+        
+        draw_process_graph : function(res) {
+            var self = this,
+                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
+                }
+            });
+        },
     });
 };
 
index 29ccc62..5ac2c58 100644 (file)
                     <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>
             <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>