← Back to team overview

openerp-dev-web team mailing list archive

[Merge] lp:~openerp-dev/openobject-client/trunk-bug-750465-rga into lp:openobject-client

 

Ravi Gadhia (OpenERP) has proposed merging lp:~openerp-dev/openobject-client/trunk-bug-750465-rga into lp:openobject-client.

Requested reviews:
  Naresh(OpenERP) (nch-openerp)
Related bugs:
  Bug #750465 in OpenERP GTK Client: "cancel one2many edit dialog, asks user for saving"
  https://bugs.launchpad.net/openobject-client/+bug/750465

For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-client/trunk-bug-750465-rga/+merge/61950
-- 
https://code.launchpad.net/~openerp-dev/openobject-client/trunk-bug-750465-rga/+merge/61950
Your team OpenERP R&D Team is subscribed to branch lp:~openerp-dev/openobject-client/trunk-bug-750465-rga.
=== modified file 'bin/widget/view/form_gtk/one2many_list.py'
--- bin/widget/view/form_gtk/one2many_list.py	2011-04-20 09:31:42 +0000
+++ bin/widget/view/form_gtk/one2many_list.py	2011-05-23 10:32:03 +0000
@@ -30,6 +30,7 @@
 
 import interface
 from widget.screen import Screen
+from widget.model.group import ModelRecordGroup 
 from pager import pager
 import service
 import tools
@@ -325,10 +326,32 @@
         ctx.update(self._view.model.expr_eval('dict(%s)' % self.attrs.get('context', '{}')))
         if self.screen.current_model:
             ok = True
+            parent_modified = self.screen.current_model.parent.modified
+            child_modifield = self.screen.current_model.modified
             edited_model = self.screen.current_model
+            model_value = self.screen.current_model.value.copy()
+            
+            group_model ={}
+            for key, val in model_value.items():
+                if isinstance(val, ModelRecordGroup):
+                    group_model[key] = val.models[:]
+                    del model_value[key]
+                    
             dia = dialog(self.attrs['relation'], parent=self._view.model,  model=self.screen.current_model, attrs=self.attrs, window=self._window, readonly=self._readonly, context=ctx)
             while ok:
                 ok, value, res = dia.run()
+                if not any([ok, value, res]) and dia.screen.is_modified(): 
+                    if child_modifield:
+                        edited_model.set(model_value, modified=True)
+                        for f_name, models in group_model.items():
+                            edited_model.value[f_name].clear()
+                            for model in models:
+                                # add model in ModelRecordGroup
+                                edited_model.value[f_name].model_add(model)
+                    else:
+                        edited_model.cancel()
+                        edited_model.modified = False
+                        self.screen.current_model.parent.modified = parent_modified
                 if res == gtk.RESPONSE_OK:
                     dia.new()
                 if value and value != edited_model:
@@ -336,7 +359,6 @@
                     value.signal('record-changed', value.parent)
                     self.screen.display()
             self.pager.reset_pager()
-            edited_model.modified = True
             dia.destroy()
 
     def limit_changed(self,*args):