← Back to team overview

openerp-dev-web team mailing list archive

lp:~openerp-dev/openobject-client-web/inline-list-prompt-action into lp:openobject-client-web

 

vda(Open ERP) has proposed merging lp:~openerp-dev/openobject-client-web/inline-list-prompt-action into lp:openobject-client-web.

Requested reviews:
  OpenERP SA's Web Client R&D (openerp-dev-web)


Inline ListView Prompt action same as form view.
-- 
https://code.launchpad.net/~openerp-dev/openobject-client-web/inline-list-prompt-action/+merge/39436
Your team OpenERP R&D Team is subscribed to branch lp:~openerp-dev/openobject-client-web/inline-list-prompt-action.
=== modified file 'addons/openerp/static/javascript/form.js'
--- addons/openerp/static/javascript/form.js	2010-10-27 09:36:11 +0000
+++ addons/openerp/static/javascript/form.js	2010-10-27 11:26:02 +0000
@@ -1186,14 +1186,38 @@
 }
 
 
-function validateForm(){
-    jQuery('#view_form table tr td:first').find('input:not([type=hidden]), select').change(function(){
-        jQuery('#view_form').data('is_form_changed', true);
-    });
+function validateForm(_list_view){
+    var $form = jQuery('#view_form');
+    if (_list_view != null) {
+        var $list = jQuery('[id="' + _list_view + '"]').removeAttr('current_id');
+        
+        if($form.data('is_list_changed')) {
+            $form.removeData('is_list_changed');
+        }
+        
+        jQuery('table.grid[id="'+_list_view+'_grid'+'"] tr.grid-row[record] td.grid-cell:not(.selector)').find('input, select').change(function(){
+            $form.data('is_list_changed', _list_view);
+            $list.attr('current_id',parseInt(jQuery(this).closest('tr.grid-row').attr('record'), 10) || -1);
+        });
+    }
+    else {
+        jQuery('#view_form table tr td:first').find('input:not([type=hidden]), select').change(function(){
+            $form.data('is_form_changed', true);
+        });
+    }
 }
 
 function validate_action() {
     var $form = jQuery('#view_form');
+    if($form.data('is_list_changed') && confirm('The record has been modified \n Do you want to save it ?')){
+        var _list = $form.data('is_list_changed');
+        var current_id = jQuery('[id="' + _list + '"]').attr('current_id');
+        var record_id = jQuery('[id="' + _list + '"]').attr('_record_id');
+        if(current_id != null) {
+            new ListView(_list).save(current_id, record_id);
+        }
+    }
+    
     if ($form.data('is_form_changed') && confirm('The record has been modified \n Do you want to save it ?')) {
         if (!validate_required($form.get(0))) {
             return;
@@ -1210,6 +1234,7 @@
             }
         });
     }
+    
     if (arguments.length) {
         var params = arguments[0];
         var action = arguments[1];

=== modified file 'addons/openerp/static/javascript/listgrid.js'
--- addons/openerp/static/javascript/listgrid.js	2010-10-27 07:13:40 +0000
+++ addons/openerp/static/javascript/listgrid.js	2010-10-27 11:26:02 +0000
@@ -544,44 +544,49 @@
         args['_terp_source'] = this.name;
 
         var self = this;
-        var req = openobject.http.postJSON('/openerp/listgrid/save', args);
-
         var $current_record = jQuery('table[id="'+this.name+'_grid'+'"]').find('tr.grid-row[record="'+id+'"]');
-        req.addCallback(function(obj) {
-            if (obj.error) {
-                error_display(obj.error);
-
-                var $focus_field;
-                for (var k in data) {
-                    var $req_field = $current_record.find('td [id="'+'_terp_listfields/'+k+'"].requiredfield');
-
-                    if(!$req_field.length)
-                        continue;
-                    if($req_field.attr('kind') == 'many2one') {
-                        $req_field = $current_record.find('td [id="'+'_terp_listfields/'+k+'_text'+'"]');
-                    }
-
-                    var req_value = $req_field.val();
-                    if(req_value == '') {
-                        $req_field.addClass('errorfield');
-                        if(!$focus_field) {
-                            $focus_field = $req_field;
-                        }
-                    } else if($req_field.hasClass('errorfield')) {
-                        $req_field.removeClass('errorfield');
-                    }
-                }
-                if($focus_field) {
-                    $focus_field.focus();
-                }
-            } else {
-                openobject.dom.get(prefix + '_terp_id').value = obj.id;
-                openobject.dom.get(prefix + '_terp_ids').value = obj.ids;
-
-                if(prev_id != undefined) {
-                    self.reload(prev_id , prefix ? 1 : 0);
+        jQuery.ajax({
+            url: '/openerp/listgrid/save',
+            data: args,
+            dataType: 'json',
+            type: 'POST',
+            async: false,
+            error: function(obj) {
+                alert('error'+obj)
+            },
+            success: function(obj) {
+                if(obj.error) {
+                    error_display(obj.error);
+                    var $focus_field;
+                    for (var k in data) {
+                        var $req_field = $current_record.find('td [id="'+'_terp_listfields/'+k+'"].requiredfield');
+                        if(!$req_field.length)
+                            continue;
+                        if($req_field.attr('kind') == 'many2one') {
+                            $req_field = $current_record.find('td [id="'+'_terp_listfields/'+k+'_text'+'"]');
+                        }
+                        var req_value = $req_field.val();
+                        if(req_value == '') {
+                            $req_field.addClass('errorfield');
+                            if(!$focus_field) {
+                                $focus_field = $req_field;
+                            }
+                        } else if($req_field.hasClass('errorfield')) {
+                            $req_field.removeClass('errorfield');
+                        }
+                    }
+                    if($focus_field) {
+                        $focus_field.focus();
+                    }
+                    return;
                 } else {
-                    self.reload(id > 0 ? null : -1, prefix ? 1 : 0);
+                    jQuery('[id="'+prefix+'_terp_id'+'"]').val(obj.id);
+                    jQuery('[id="'+prefix+'_terp_ids'+'"]').val(obj.ids);
+                    if(prev_id != undefined) {
+                        self.reload(prev_id , prefix ? 1 : 0);
+                    } else {
+                        self.reload(id > 0 ? null : -1, prefix ? 1 : 0);
+                    }
                 }
             }
         });
@@ -841,36 +846,25 @@
     }
 });
 
-function validateList(_list) {
-    var $list = jQuery('[id="' + _list + '"]').removeAttr('current_id');
-    var $check = jQuery('table.grid[id="'+_list+'_grid'+'"] tr.grid-row[record] td.grid-cell:not(.selector)').find('input, select');
-    $check.change(function() {
-        $list.attr(
-            'current_id',
-            parseInt(jQuery(this).closest('tr.grid-row').attr('record'), 10) || -1);
-    });
-}
-
-function listgridValidation(_list, o2m, record_id) {
-    o2m = parseInt(o2m, 0);
-    var current_id = jQuery('[id="' + _list + '"]').attr('current_id');
-    // not(null | undefined)
-    if(current_id != null) {
-        if(confirm('The record has been modified \n Do you want to save it ?')) {
-            new ListView(_list).save(current_id, record_id);
-        }
-    } else{
-        if(o2m) {
-            var detail = jQuery('table.one2many[id$="' + _list + '"]').attr('detail');
-            if(record_id == undefined || record_id == -1) {
-                new One2Many(_list, detail).create();
-            } else {
-                new ListView(_list).edit(record_id);
-            }
-        } else if(record_id == -1) {
-            new ListView(_list).create();
+function listgridValidation(_list) {
+    var $list = jQuery('[id="' + _list + '"]');
+    var o2m = parseInt($list.attr('_o2m'), 0);
+    var current_id = $list.attr('current_id');
+    var record_id = $list.attr('_record_id');
+    if (current_id != null) {
+        return;
+    }
+    
+    if (o2m) {
+        var detail = jQuery('table.one2many[id$="' + _list + '"]').attr('detail');
+        if (record_id == undefined || record_id == -1) {
+            new One2Many(_list, detail).create();
         } else {
             new ListView(_list).edit(record_id);
         }
+    } else if(record_id == -1) {
+        new ListView(_list).create();
+    } else {
+        new ListView(_list).edit(record_id);
     }
 }

=== modified file 'addons/openerp/widgets/templates/listgrid.mako'
--- addons/openerp/widgets/templates/listgrid.mako	2010-10-25 12:46:53 +0000
+++ addons/openerp/widgets/templates/listgrid.mako	2010-10-27 11:26:02 +0000
@@ -133,17 +133,22 @@
                                                     ${_('Add')}
                                             </button>
                                         % elif o2m:
-                                            <button title="${_('Create new record.')}" id="${name}_btn_"
-                                                onclick="listgridValidation('${name}', '${o2m or 0}', -1); return false;">
-                                                    ${_('New')}
-                                            </button>
+                                            <button title="${_('Create new record.')}" id="${name}_btn_">${_('New')}</button>
+                                            <script type="text/javascript">
+                                                jQuery('[id=${name}_btn_]').click(function(){
+                                                    jQuery('[id=${name}]').attr({'_o2m': '${o2m or 0}', '_record_id': -1});
+                                                    validate_action('${name}', listgridValidation);
+                                                    return false;
+                                                });
+                                            </script>
                                         % else:
                                             % if not dashboard:
                                                 <button id="${name}_new" title="${_('Create new record.')}">${_('New')}</button>
                                                 % if editors:
                                                     <script type="text/javascript">
                                                         jQuery('[id=${name}_new]').click(function() {
-                                                            listgridValidation('${name}', '${o2m or 0}', -1)
+                                                            jQuery('[id=${name}]').attr({'_o2m': '${o2m or 0}', '_record_id': -1});
+                                                            validate_action('${name}', listgridValidation);
                                                             return false;
                                                         });
                                                     </script>
@@ -160,7 +165,7 @@
                                         % if not m2m and not dashboard and editors:
                                             <script type="text/javascript">
                                                 jQuery(document).ready(function() {
-                                                    validateList('${name}')
+                                                    validateForm('${name}', '${o2m or 0}')
                                                 });
                                             </script>
                                         % endif
@@ -328,7 +333,8 @@
                                jQuery(row).click(function(event) {
                                    if (!jQuery(event.target).is(':input, img, option, td.m2o_coplition')) {
                                        var record_id = parseInt(jQuery(row).attr('record'), 10) || -1;
-                                       listgridValidation('${name}','${o2m or 0}', record_id);
+                                       jQuery('[id=${name}]').attr({'_o2m': '${o2m or 0}', '_record_id': record_id});
+                                       validate_action('${name}', listgridValidation);
                                    }
                                });
                            });


Follow ups