← Back to team overview

openerp-dev-web team mailing list archive

[Merge] lp:~openerp-dev/openobject-client-web/listgrid-validation into lp:openobject-client-web

 

vda(Open ERP) has proposed merging lp:~openerp-dev/openobject-client-web/listgrid-validation into lp:openobject-client-web.

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


implemented validation for inline editable list and o2m.
-- 
https://code.launchpad.net/~openerp-dev/openobject-client-web/listgrid-validation/+merge/34733
Your team OpenERP SA's Web Client R&D is requested to review the proposed merge of lp:~openerp-dev/openobject-client-web/listgrid-validation into lp:openobject-client-web.
=== modified file 'addons/openerp/static/javascript/listgrid.js'
--- addons/openerp/static/javascript/listgrid.js	2010-09-07 05:31:10 +0000
+++ addons/openerp/static/javascript/listgrid.js	2010-09-07 10:29:39 +0000
@@ -541,7 +541,7 @@
         this.reload(edit_inline, null, default_get_ctx);
     },
 
-    save: function(id) {
+    save: function(id, prev_id) {
 
         if (openobject.http.AJAX_COUNT > 0) {
             return callLater(1, bind(this.save, this), id);
@@ -574,7 +574,8 @@
         args['_terp_parent/model'] = openobject.dom.get(parent_field + '_terp_model').value;
         args['_terp_parent/context'] = openobject.dom.get(parent_field + '_terp_context').value;
         args['_terp_source'] = this.name;
-
+        
+        
         var self = this;
         var req = openobject.http.postJSON('/openerp/listgrid/save', args);
 
@@ -600,8 +601,14 @@
             } else {
                 openobject.dom.get(prefix + '_terp_id').value = obj.id;
                 openobject.dom.get(prefix + '_terp_ids').value = obj.ids;
-
-                self.reload(id > 0 ? null : -1, prefix ? 1 : 0);
+                
+                if(prev_id != 'undefined' || typeof prev_id !='undefined') {
+                    self.reload(prev_id , prefix ? 1 : 0);
+                }
+                else {
+                    self.reload(id > 0 ? null : -1, prefix ? 1 : 0);
+                }
+                    
             }
         });
     },
@@ -853,3 +860,69 @@
             _terp_view_mode : this.view_mode}),{width: 700, height: 500});
     }
 });
+
+var is_list_changed = false;
+var current_id = -1;
+
+var validList = function(_list) {
+    is_list_changed = false;
+    current_id = -1;
+    var $check = jQuery('table.grid[id="'+_list+'_grid'+'"] tr.grid-row td:not(.selector)').find('input, select');
+    $check.change(function() {
+        is_list_changed = true;
+        current_id = parseInt(jQuery(this).closest('tr').attr('record'), 10) || -1;
+    });
+}
+
+var listgridValidation = function(_list, o2m, record_id) {
+    var o2m = parseInt(o2m, 0)
+    if(is_list_changed) {
+        if(confirm('This record has been modified \n Do you really want to save it?')){
+            if(record_id == current_id) {
+                 new ListView(_list).save(record_id, current_id);
+            }
+            else {
+                if((record_id  > 0  && current_id > 0)) {
+                    new ListView(_list).save(current_id, record_id);
+                }
+                else {
+                    if((record_id < 0) && (current_id > 0)) {
+                        if (o2m) {
+                            new ListView(_list).save(current_id, record_id);
+                        }
+                        else {
+                            new ListView(_list).save(record_id, current_id);
+                        }
+                    }
+                    else if((record_id > 0) && (current_id < 0)) {
+                        new ListView(_list).save(current_id, record_id);
+                    }
+                }
+            }
+        }
+    }
+    else{
+        if(o2m) {
+            var detail = jQuery('table.one2many[id$="'+_list+'"]').attr('detail');
+            if(record_id == 'undefined' || typeof record_id == 'undefined') {
+                new One2Many(_list, detail).create();
+            }
+            if(record_id == current_id) {
+                if(record_id < 0) {
+                    new One2Many(_list, detail).create();
+                }
+            }
+            else if((record_id > 0) && (current_id < 0)) {
+                new ListView(_list).edit(record_id);
+            }
+        }
+        else {
+            if(record_id == current_id) {
+                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-09-06 11:36:18 +0000
+++ addons/openerp/widgets/templates/listgrid.mako	2010-09-07 10:29:39 +0000
@@ -122,7 +122,7 @@
                                             </button>
                                         % elif o2m:
                                             <button title="${_('Create new record.')}" id="${name}_btn_"
-                                                onclick="new One2Many('${name}', jQuery('table.one2many[id$=${name}]').attr('detail')).create(); return false;">
+                                                onclick="listgridValidation('${name}', '${o2m or 0}', -1); return false;">
                                                     ${_('new')}
                                             </button>
                                         % else:
@@ -130,24 +130,12 @@
                                                 <button id="${name}_new" title="${_('Create new record.')}">${_('new')}</button>
                                                 % if editors:
                                                     <script type="text/javascript">
-                                                        var is_list_changed = false;
-                                                        var current_id = -1;
-                                                        jQuery(document).ready(function() {
-                                                            var $check = jQuery("table.grid[id='${name}_grid'] tr.grid-row td:not(.selector)").find('input, select');
-                                                            $check.change(function() {
-                                                                is_list_changed = true;
-                                                                current_id = jQuery(this).closest('tr').attr('record') || -1;
-                                                            });
-                                                        });
+                                                        
                                                         jQuery('[id=${name}_new]').click(function() {
-                                                            if(is_list_changed) {
-                                                                if (confirm('This record has been modified \n Do you really want to save it?')) {
-                                                                    new ListView('${name}').save(current_id)
-                                                                }
-                                                            } else {
-                                                                new ListView('${name}').create();
-                                                            }
+                                                            console.log('in editors clicked')
+                                                            listgridValidation('${name}', '${o2m or 0}', -1)
                                                             return false;
+                                                            //new ListView('${name}').create();
                                                         });
                                                     </script>
                                                 % else:
@@ -160,6 +148,13 @@
                                                 % endif
                                             % endif
                                         % endif
+                                        % if not m2m and not dashboard and editors:
+                                            <script type="text/javascript">
+                                                jQuery(document).ready(function() {
+                                                    validList('${name}')
+                                                });
+                                            </script>
+                                        % endif
                                     </td>
                                 % endif
                                 <td class="pager-cell-button" style="display: none;">
@@ -326,26 +321,9 @@
                            jQuery('table[id=${name}_grid] tr.grid-row').each(function(index, row) {
                                jQuery(row).click(function(event) {
                                    if (!jQuery(event.target).is(':input, img, option, td.m2o_coplition')) {
-                                       var record_id = jQuery(row).attr('record');
-                                       if (record_id > 0) {
-                                           new ListView('${name}').edit(record_id);
-                                       }
-                                       else {
-                                           if ('${name}' == '_terp_list') {
-                                               if (is_list_changed) {
-                                                   if (confirm('This record has been modified \n Do you really want to save it?')) {
-                                                       new ListView('${name}').save(current_id)
-                                                   }
-                                               }
-                                               else{
-                                                   new ListView('${name}').create(); 
-                                               }
-                                               return false;
-                                           }
-                                           else {
-                                               new One2Many('${name}', jQuery('table.one2many[id$=${name}]').attr('detail')).create();
-                                           }
-                                       }
+                                       var record_id = parseInt(jQuery(row).attr('record'), 10) || -1;
+                                       console.log('oho clicked', record_id, typeof record_id)
+                                       listgridValidation('${name}','${o2m or 0}', record_id)
                                    }
                                });
                            });


Follow ups