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
1=== modified file 'bin/widget/view/form_gtk/one2many_list.py'
2--- bin/widget/view/form_gtk/one2many_list.py 2011-12-12 07:10:21 +0000
3+++ bin/widget/view/form_gtk/one2many_list.py 2012-09-10 10:01:19 +0000
4@@ -301,11 +301,36 @@
5 if self._readonly:
6 value = not self._readonly
7 self.eb_del.set_sensitive(value)
8-
9+
10+ ## This method is specially developed to store old values of
11+ ## the modified records.
12+ def _get_old_values(self, model_value={}):
13+ group_model ={}
14+ for key, val in model_value.iteritems():
15+ if isinstance(val, ModelRecordGroup):
16+ group_model[key] = val.models[:]
17+ del model_value[key]
18+ return model_value,group_model
19+
20+ ## This method is specially developed to restored old values
21+ def _restore_values(self, edited_model, model_value, group_model, modified):
22+ if modified:
23+ edited_model.set(model_value, modified=True)
24+ for f_name, models in group_model.items():
25+ edited_model.value[f_name].clear()
26+ for model in models:
27+ # add model in ModelRecordGroup
28+ edited_model.value[f_name].model_add(model)
29+ return True
30+
31 def _sig_new(self, *args):
32 _, event = args
33 ctx = dict(self._view.model.expr_eval(self.screen.default_get), **self.context)
34 ctx.update(self._view.model.expr_eval('dict(%s)' % self.attrs.get('context', '{}')))
35+ if self.screen.current_model:
36+ child_modified = self.screen.current_model.modified
37+ edited_model = self.screen.current_model
38+
39 if event.type in (gtk.gdk.BUTTON_PRESS, gtk.gdk.KEY_PRESS):
40 if (self.screen.current_view.view_type=='form') or self.screen.editable_get():
41 self.screen.new(context=ctx)
42@@ -319,50 +344,38 @@
43 while ok:
44 ok, value, res = dia.run()
45 if ok or res == gtk.RESPONSE_APPLY:
46+ old_rec_modified = edited_model.is_modified()
47+ model_value, group_model = self._get_old_values(edited_model.value.copy())
48 self.screen.models.model_add(value)
49 value.signal('record-changed', value.parent)
50+ self._restore_values(edited_model, model_value, group_model, old_rec_modified)
51 self.screen.display()
52 dia.new()
53 self.set_disable(True)
54 self.pager.reset_pager()
55 dia.destroy()
56-
57+
58 def _sig_edit(self, *args):
59 ctx = dict(self._view.model.expr_eval(self.screen.default_get), **self.context)
60 ctx.update(self._view.model.expr_eval('dict(%s)' % self.attrs.get('context', '{}')))
61 if self.screen.current_model:
62 ok = True
63- parent_modified = self.screen.current_model.parent.modified
64- child_modifield = self.screen.current_model.modified
65+ child_modified = self.screen.current_model.modified
66 edited_model = self.screen.current_model
67- model_value = self.screen.current_model.value.copy()
68-
69- group_model ={}
70- for key, val in model_value.items():
71- if isinstance(val, ModelRecordGroup):
72- group_model[key] = val.models[:]
73- del model_value[key]
74-
75+ model_value, group_model = self._get_old_values(edited_model.value.copy())
76 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)
77 while ok:
78 ok, value, res = dia.run()
79- if not any([ok, value, res]) and dia.screen.is_modified():
80- if child_modifield:
81- edited_model.set(model_value, modified=True)
82- for f_name, models in group_model.items():
83- edited_model.value[f_name].clear()
84- for model in models:
85- # add model in ModelRecordGroup
86- edited_model.value[f_name].model_add(model)
87- else:
88- edited_model.cancel()
89- edited_model.modified = False
90- self.screen.current_model.parent.modified = parent_modified
91+ if not any([ok, value, res]) and dia.screen.is_modified():
92+ self._restore_values(edited_model, model_value, group_model, child_modified)
93 if res == gtk.RESPONSE_OK:
94 dia.new()
95 if value and value != edited_model:
96+ old_rec_modified = edited_model.is_modified()
97+ model_value, group_model = self._get_old_values(edited_model.value.copy())
98 self.screen.models.model_add(value)
99 value.signal('record-changed', value.parent)
100+ self._restore_values(edited_model, model_value, group_model, old_rec_modified)
101 self.screen.display()
102 self.pager.reset_pager()
103 dia.destroy()

Subscribers

People subscribed via source and target branches