Merge lp:~nch-openerp/openobject-client/6.1-opw-577958-nch into lp:openobject-client/6.1

Proposed by Naresh(OpenERP)
Status: Merged
Merged at revision: 2090
Proposed branch: lp:~nch-openerp/openobject-client/6.1-opw-577958-nch
Merge into: lp:openobject-client/6.1
Diff against target: 103 lines (+37/-24)
1 file modified
bin/widget/view/form_gtk/one2many_list.py (+37/-24)
To merge this branch: bzr merge lp:~nch-openerp/openobject-client/6.1-opw-577958-nch
Reviewer Review Type Date Requested Status
Chris Biersbach (OpenERP) Pending
Review via email: mp+122799@code.launchpad.net

Description of the change

Hello,

Steps to reproduce:

1: Edit any SO line
2: change some field values eg:qty
3: press save & close
4: click new to add a new SO line
5: click save & close and finally save the SO

Current: edited SO line changes are reverted.
Expected: should not revert :)

Same can be reproduced by modifying this steps :
3:click save & new
4:ignore

Thanks,
Naresh

To post a comment you must log in.
2089. By Naresh(OpenERP)

[IMP]:Improve the previous commit

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'bin/widget/view/form_gtk/one2many_list.py'
--- bin/widget/view/form_gtk/one2many_list.py 2011-12-12 07:10:21 +0000
+++ bin/widget/view/form_gtk/one2many_list.py 2012-09-10 10:01:19 +0000
@@ -301,11 +301,36 @@
301 if self._readonly:301 if self._readonly:
302 value = not self._readonly302 value = not self._readonly
303 self.eb_del.set_sensitive(value)303 self.eb_del.set_sensitive(value)
304304
305 ## This method is specially developed to store old values of
306 ## the modified records.
307 def _get_old_values(self, model_value={}):
308 group_model ={}
309 for key, val in model_value.iteritems():
310 if isinstance(val, ModelRecordGroup):
311 group_model[key] = val.models[:]
312 del model_value[key]
313 return model_value,group_model
314
315 ## This method is specially developed to restored old values
316 def _restore_values(self, edited_model, model_value, group_model, modified):
317 if modified:
318 edited_model.set(model_value, modified=True)
319 for f_name, models in group_model.items():
320 edited_model.value[f_name].clear()
321 for model in models:
322 # add model in ModelRecordGroup
323 edited_model.value[f_name].model_add(model)
324 return True
325
305 def _sig_new(self, *args):326 def _sig_new(self, *args):
306 _, event = args327 _, event = args
307 ctx = dict(self._view.model.expr_eval(self.screen.default_get), **self.context)328 ctx = dict(self._view.model.expr_eval(self.screen.default_get), **self.context)
308 ctx.update(self._view.model.expr_eval('dict(%s)' % self.attrs.get('context', '{}')))329 ctx.update(self._view.model.expr_eval('dict(%s)' % self.attrs.get('context', '{}')))
330 if self.screen.current_model:
331 child_modified = self.screen.current_model.modified
332 edited_model = self.screen.current_model
333
309 if event.type in (gtk.gdk.BUTTON_PRESS, gtk.gdk.KEY_PRESS):334 if event.type in (gtk.gdk.BUTTON_PRESS, gtk.gdk.KEY_PRESS):
310 if (self.screen.current_view.view_type=='form') or self.screen.editable_get():335 if (self.screen.current_view.view_type=='form') or self.screen.editable_get():
311 self.screen.new(context=ctx)336 self.screen.new(context=ctx)
@@ -319,50 +344,38 @@
319 while ok:344 while ok:
320 ok, value, res = dia.run()345 ok, value, res = dia.run()
321 if ok or res == gtk.RESPONSE_APPLY:346 if ok or res == gtk.RESPONSE_APPLY:
347 old_rec_modified = edited_model.is_modified()
348 model_value, group_model = self._get_old_values(edited_model.value.copy())
322 self.screen.models.model_add(value)349 self.screen.models.model_add(value)
323 value.signal('record-changed', value.parent)350 value.signal('record-changed', value.parent)
351 self._restore_values(edited_model, model_value, group_model, old_rec_modified)
324 self.screen.display()352 self.screen.display()
325 dia.new()353 dia.new()
326 self.set_disable(True)354 self.set_disable(True)
327 self.pager.reset_pager()355 self.pager.reset_pager()
328 dia.destroy()356 dia.destroy()
329357
330 def _sig_edit(self, *args):358 def _sig_edit(self, *args):
331 ctx = dict(self._view.model.expr_eval(self.screen.default_get), **self.context)359 ctx = dict(self._view.model.expr_eval(self.screen.default_get), **self.context)
332 ctx.update(self._view.model.expr_eval('dict(%s)' % self.attrs.get('context', '{}')))360 ctx.update(self._view.model.expr_eval('dict(%s)' % self.attrs.get('context', '{}')))
333 if self.screen.current_model:361 if self.screen.current_model:
334 ok = True362 ok = True
335 parent_modified = self.screen.current_model.parent.modified363 child_modified = self.screen.current_model.modified
336 child_modifield = self.screen.current_model.modified
337 edited_model = self.screen.current_model364 edited_model = self.screen.current_model
338 model_value = self.screen.current_model.value.copy()365 model_value, group_model = self._get_old_values(edited_model.value.copy())
339
340 group_model ={}
341 for key, val in model_value.items():
342 if isinstance(val, ModelRecordGroup):
343 group_model[key] = val.models[:]
344 del model_value[key]
345
346 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)366 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)
347 while ok:367 while ok:
348 ok, value, res = dia.run()368 ok, value, res = dia.run()
349 if not any([ok, value, res]) and dia.screen.is_modified(): 369 if not any([ok, value, res]) and dia.screen.is_modified():
350 if child_modifield:370 self._restore_values(edited_model, model_value, group_model, child_modified)
351 edited_model.set(model_value, modified=True)
352 for f_name, models in group_model.items():
353 edited_model.value[f_name].clear()
354 for model in models:
355 # add model in ModelRecordGroup
356 edited_model.value[f_name].model_add(model)
357 else:
358 edited_model.cancel()
359 edited_model.modified = False
360 self.screen.current_model.parent.modified = parent_modified
361 if res == gtk.RESPONSE_OK:371 if res == gtk.RESPONSE_OK:
362 dia.new()372 dia.new()
363 if value and value != edited_model:373 if value and value != edited_model:
374 old_rec_modified = edited_model.is_modified()
375 model_value, group_model = self._get_old_values(edited_model.value.copy())
364 self.screen.models.model_add(value)376 self.screen.models.model_add(value)
365 value.signal('record-changed', value.parent)377 value.signal('record-changed', value.parent)
378 self._restore_values(edited_model, model_value, group_model, old_rec_modified)
366 self.screen.display()379 self.screen.display()
367 self.pager.reset_pager()380 self.pager.reset_pager()
368 dia.destroy()381 dia.destroy()

Subscribers

People subscribed via source and target branches