Merge lp:~unifield-team/unifield-web/us-1026 into lp:unifield-web

Proposed by Mallory MARCOT
Status: Rejected
Rejected by: jftempo
Proposed branch: lp:~unifield-team/unifield-web/us-1026
Merge into: lp:unifield-web
Diff against target: 340 lines (+137/-7)
9 files modified
addons/openerp/controllers/form.py (+1/-1)
addons/openerp/controllers/openo2m.py (+39/-3)
addons/openerp/controllers/templates/openo2m.mako (+12/-0)
addons/openerp/static/javascript/form.js (+42/-1)
addons/openerp/static/javascript/listgrid.js (+4/-0)
addons/openerp/static/javascript/o2m.js (+30/-0)
addons/openerp/widgets/pager.py (+2/-2)
addons/openerp/widgets/templates/pager.mako (+6/-0)
addons/openerp/widgets/templates/screen.mako (+1/-0)
To merge this branch: bzr merge lp:~unifield-team/unifield-web/us-1026
Reviewer Review Type Date Requested Status
UniField Dev Team Pending
Review via email: mp+320953@code.launchpad.net
To post a comment you must log in.

Unmerged revisions

4813. By Quentin THEURET @Amaris

US-1026 [IMP] Make pager works well even if the list is ordered

4812. By Quentin THEURET @Amaris

US-1026 [IMP] Display the good number of lines in pager and go the whole lines

4811. By Quentin THEURET @Amaris

US-1026 [FIX] Disallow change limit of pager in o2m edition

4810. By Quentin THEURET @Amaris

US-1026 [FIX] Don't display 'Save & Next' button if we are in a new record

4809. By Quentin THEURET @Amaris

US-1026 [FIX] Compute prefix

4808. By Quentin THEURET @Amaris

US-1026 [IMP] Add a pager on O2M form view

4807. By Quentin THEURET @Amaris

US-1026 [IMP] Add a button 'Save & Next' on the O2many form view

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'addons/openerp/controllers/form.py'
2--- addons/openerp/controllers/form.py 2017-02-06 11:21:15 +0000
3+++ addons/openerp/controllers/form.py 2017-03-24 16:09:47 +0000
4@@ -5,7 +5,7 @@
5 # $Id$
6 #
7 # Developed by OpenERP (http://openerp.com) and Axelor (http://axelor.com).
8-#
9+#ViewForm
10 # The OpenERP web client is distributed under the "OpenERP Public License".
11 # It's based on Mozilla Public License Version (MPL) 1.1 with following
12 # restrictions:
13
14=== modified file 'addons/openerp/controllers/openo2m.py'
15--- addons/openerp/controllers/openo2m.py 2017-01-02 14:59:00 +0000
16+++ addons/openerp/controllers/openo2m.py 2017-03-24 16:09:47 +0000
17@@ -37,6 +37,7 @@
18 def create_form(self, params, tg_errors=None):
19
20 params.id = params.o2m_id
21+ params.o2m_ids = params.o2m_ids
22 params.model = params.o2m_model
23 params.view_mode = ['form', 'tree']
24 params.view_type = 'form'
25@@ -85,6 +86,7 @@
26 tw.form.Hidden(name='_terp_parent_context', default=ustr(params.parent_context)),
27 tw.form.Hidden(name='_terp_o2m', default=params.o2m),
28 tw.form.Hidden(name='_terp_o2m_id', default=params.id or None),
29+ tw.form.Hidden(name='_terp_o2m_ids', default=params.o2m_ids or []),
30 tw.form.Hidden(name='_terp_o2m_model', default=params.o2m_model),
31 tw.form.Hidden(name='_terp_o2m_context', default=ustr(params.o2m_context or {})),
32 tw.form.Hidden(name=params.prefix + '/__id', default=params.id or None)] + hiddens
33@@ -96,13 +98,17 @@
34
35 @expose(template="/openerp/controllers/templates/openo2m.mako")
36 def create(self, params, tg_errors=None):
37-
38+ pager = {}
39 if tg_errors:
40 form = cherrypy.request.terp_form
41 else:
42 form = self.create_form(params, tg_errors)
43+ params.o2m_ids = self.get_o2m_ids(params.parent_model, params.parent_id, params.o2m, params.o2m_model, order=params.view_params[params.o2m]. sort_order)
44+ pager = tw.pager.Pager(id=params.o2m_id, ids=params.o2m_ids, offset=0,
45+ limit=-1, count=len(params.o2m_ids), view_type='form',
46+ pager_options=[])
47
48- return dict(form=form, params=params)
49+ return dict(form=form, params=params, pager=pager)
50
51 @expose()
52 @validate(form=get_validation_schema)
53@@ -139,8 +145,11 @@
54 if new_ids and params.source:
55 current.id = new_ids[-1]
56 params.o2m_id = current.id
57- elif not params.button:
58+ params.o2m_ids = all_ids
59+ elif not params.button and not params.next_id:
60 params.o2m_id = False
61+ elif params.next_id:
62+ params.o2m_id = params.next_id
63
64 # perform button action
65 if params.button:
66@@ -164,6 +173,11 @@
67 @expose()
68 def edit(self, **kw):
69 params, data = TinyDict.split(kw)
70+
71+ if params.next_id:
72+ params.o2m_id = params.next_id
73+ params.next_id = None
74+
75 return self.create(params)
76
77 @expose('json', methods=('POST',))
78@@ -179,4 +193,26 @@
79
80 return dict(error=error)
81
82+ def get_o2m_ids(self, parent_model, parent_id, fld_name, fld_model, domain=[], order=False):
83+ fld_ids = rpc.RPCProxy('ir.model.fields').search([
84+ ('model', '=', parent_model),
85+ ('name', '=', fld_name),
86+ ('ttype', '=', 'one2many'),
87+ ])
88+ if not fld_ids:
89+ return []
90+
91+ rel_fld = rpc.RPCProxy('ir.model.fields').read(fld_ids, ['relation_field'])[0]['relation_field']
92+
93+ domain.append((rel_fld, '=', int(parent_id)))
94+ if order:
95+ order = '%s,id' % order
96+
97+ return rpc.RPCProxy(fld_model).search(domain, order=order)
98+
99+ @expose('json', methods=('POST',))
100+ def get_ids(self, parent_model, parent_id, fld_name, fld_model, domain=[], order=False):
101+ return dict(o2m_ids=self.get_o2m_ids(parent_model, parent_id, fld_name, fld_model, domain=domain, order=order))
102+
103+
104 # vim: ts=4 sts=4 sw=4 si et
105
106=== modified file 'addons/openerp/controllers/templates/openo2m.mako'
107--- addons/openerp/controllers/templates/openo2m.mako 2017-01-02 14:59:00 +0000
108+++ addons/openerp/controllers/templates/openo2m.mako 2017-03-24 16:09:47 +0000
109@@ -8,6 +8,10 @@
110 function do_select(id, src) {
111 viewRecord(id, src);
112 }
113+
114+ jQuery(document).ready(function() {
115+ validateForm();
116+ });
117 </script>
118 </%def>
119
120@@ -33,6 +37,11 @@
121 <td class="save_close">
122 <button onclick="submit_form('save_and_close'); return false;" style="height: 20px;" class="button-a">${_("Save & Close")}</button>
123 </td>
124+ % if params.o2m_id in params.o2m_ids and params.o2m_id != params.o2m_ids[-1]:
125+ <td class="save_close">
126+ <button onclick="submit_form('save_and_next'); return false;" style="height: 20px;" class="button-a">${_("Save & Next")}</button>
127+ </td>
128+ % endif
129 % if not params.hide_new_button:
130 <td class="save_close">
131 <button onclick="submit_form('save'); return false;" style="height: 20px;" class="button-a">${_("Save & New")}</button>
132@@ -43,6 +52,9 @@
133 <button class="button-a" style="height: 20px;" onclick="jQuery.o2m('close'); return false;">${_("Cancel")}</button>
134 </td>
135 <td width="100%">
136+ % if pager:
137+ ${pager.display()}
138+ % endif
139 </td>
140 </tr>
141 </table>
142
143=== modified file 'addons/openerp/static/javascript/form.js'
144--- addons/openerp/static/javascript/form.js 2017-02-10 08:28:16 +0000
145+++ addons/openerp/static/javascript/form.js 2017-03-24 16:09:47 +0000
146@@ -318,6 +318,46 @@
147 action = 'save';
148 args['_terp_close'] = 1;
149 }
150+
151+ if (document.getElementById('_terp_o2m_id') && (action == 'save_and_next' || action == 'next' || action == 'last' || action == 'previous' || action == 'first')) {
152+ args['_terp_return_edit'] = 1;
153+
154+ var prefix = '';
155+ if (this.name.split('/').length > 0) {
156+ prefix = this.name.split('/')[0] + '/';
157+ } else if (this.name != '_terp_list') {
158+ prefix = this.name + '/';
159+ }
160+
161+ terp_id = document.getElementById(prefix + '_terp_id').value;
162+ terp_ids = document.getElementById('_terp_o2m_ids').value.replace("[", "").replace("]", "").replace(/\s+/g, '').split(",");
163+
164+ if (terp_ids.length != 0) {
165+ switch(action) {
166+ case 'save_and_next':
167+ case 'next':
168+ args['_terp_next_id'] = terp_ids[terp_ids.indexOf(terp_id) + 1];
169+ break;
170+ case 'last':
171+ args['_terp_next_id'] = terp_ids[terp_ids.length - 1];
172+ break;
173+ case 'previous':
174+ args['_terp_next_id'] = terp_ids[terp_ids.indexOf(terp_id) - 1];
175+ break;
176+ case 'first':
177+ args['_terp_next_id'] = terp_ids[0];
178+ break;
179+ }
180+ }
181+
182+ if (action == 'save_and_next') {
183+ action = 'save';
184+ } else {
185+ action = 'edit';
186+ validate_action();
187+ }
188+ }
189+
190 get_sidebar_status(args);
191 action = get_form_action(action, args);
192
193@@ -336,6 +376,7 @@
194 $form[0].setAttribute('action', action);
195 previous_target = $form.attr("target");
196 $form.attr("target", target);
197+
198 $form.submit();
199 $form.attr("target", previous_target);
200 }
201@@ -893,7 +934,7 @@
202 '_terp_prefix': prefix.join('/'),
203 '_terp_active_id': openobject.dom.get(prefix.concat('_terp_id').join('/')).value,
204 '_terp_active_ids': openobject.dom.get(prefix.concat('_terp_ids').join('/')).value,
205- '_terp_search_domain': '[]'
206+ '_terp_search_domain': '[]',
207 });
208 if (options.from_search_mode) {
209 params['_terp_search_mode'] = 'true';
210
211=== modified file 'addons/openerp/static/javascript/listgrid.js'
212--- addons/openerp/static/javascript/listgrid.js 2017-02-08 15:03:00 +0000
213+++ addons/openerp/static/javascript/listgrid.js 2017-03-24 16:09:47 +0000
214@@ -284,6 +284,8 @@
215
216 sort_by_order: function(column, field) {
217 var $img = jQuery(field).find('img');
218+ var terp_sort_order = openobject.dom.get(this.name + '/_terp_sort_order');
219+
220 if($img.length) {
221 if ($img.attr('id') == 'asc') this.sort_order = 'desc';
222 else this.sort_order = 'asc';
223@@ -291,6 +293,8 @@
224 else this.sort_order = 'asc';
225
226 this.sort_key = column;
227+ terp_sort_order.value = this.sort_key + ' ' + this.sort_order;
228+
229 if(this.ids.length) {
230 this.reload();
231 }
232
233=== modified file 'addons/openerp/static/javascript/o2m.js'
234--- addons/openerp/static/javascript/o2m.js 2017-01-02 14:59:00 +0000
235+++ addons/openerp/static/javascript/o2m.js 2017-03-24 16:09:47 +0000
236@@ -29,6 +29,7 @@
237
238 this.model = openobject.dom.get(name + '/_terp_model').value;
239 this.mode = openobject.dom.get(name + '/_terp_view_type').value;
240+ this.sort_order = openobject.dom.get(name + '/_terp_sort_order').value;
241
242 if (openobject.dom.get(name + '/_terp_default_get_ctx'))
243 this.default_get_ctx = openobject.dom.get(name + '/_terp_default_get_ctx').value;
244@@ -153,6 +154,21 @@
245 params['_terp_view_params/' + prefix + '/_terp_view_mode'] = openobject.dom.get(prefix + '/_terp_view_mode').value;
246 params['_terp_view_params/' + prefix + '/_terp_context'] = openobject.dom.get(prefix + '/_terp_context').value || {};
247 params['_terp_view_params/' + prefix + '/_terp_view_type'] = 'form';
248+ params['_terp_view_params/' + prefix + '/_terp_sort_order'] = this.sort_order;
249+
250+ var req = openobject.http.postJSON('/openerp/openo2m/get_ids', {
251+ 'parent_model': this.parent_model,
252+ 'parent_id': this.parent_id,
253+ 'fld_name': prefix,
254+ 'fld_model': openobject.dom.get(prefix + '/_terp_model').value,
255+ 'order': this.sort_order,
256+ });
257+
258+ req.addCallback(function(obj) {
259+ if (obj.o2m_ids) {
260+ params['_terp_view_params/' + prefix + '/_terp_ids'] = obj.o2m_ids;
261+ }
262+ });
263 }
264
265 jQuery.extend(params, {
266@@ -166,6 +182,20 @@
267
268 if(id != null) {
269 params['_terp_o2m_id'] = id;
270+ params['_terp_o2m_ids'] = openobject.dom.get(prefix + '/_terp_ids').value;
271+ var req = openobject.http.postJSON('/openerp/openo2m/get_ids', {
272+ 'parent_model': this.parent_model,
273+ 'parent_id': this.parent_id,
274+ 'fld_name': prefix,
275+ 'fld_model': openobject.dom.get(prefix + '/_terp_model').value,
276+ 'order': this.sort_order,
277+ });
278+
279+ req.addCallback(function(obj) {
280+ if (obj.o2m_ids) {
281+ params['_terp_o2m_ids'] = obj.o2m_ids;
282+ }
283+ });
284 }
285 if (id && id != 'False' && !this.default_get_ctx) {
286 jQuery.o2m(params);
287
288=== modified file 'addons/openerp/widgets/pager.py'
289--- addons/openerp/widgets/pager.py 2016-04-15 07:26:53 +0000
290+++ addons/openerp/widgets/pager.py 2017-03-24 16:09:47 +0000
291@@ -32,7 +32,7 @@
292 UNLIMITED = -1
293
294 def __init__(self, id=False, ids=[], offset=0, limit=50, count=0,
295- view_type='tree', approximation=False):
296+ view_type='tree', approximation=False, pager_options=[20, 50, 100, 500]):
297 super(Pager, self).__init__()
298
299 self.id = id
300@@ -43,7 +43,7 @@
301 self.limit = limit or 50
302 self.approximation = approximation
303 self.count = count or 0
304- self.pager_options = [20, 50, 100, 500]
305+ self.pager_options = pager_options
306
307 if self.limit != Pager.UNLIMITED and len(self.ids) > self.limit:
308 # if self.ids isn't clamped, it is entirely un-paginated.
309
310=== modified file 'addons/openerp/widgets/templates/pager.mako'
311--- addons/openerp/widgets/templates/pager.mako 2016-06-08 12:32:32 +0000
312+++ addons/openerp/widgets/templates/pager.mako 2017-03-24 16:09:47 +0000
313@@ -15,9 +15,15 @@
314 % if prev:
315 </a>
316 % endif
317+ % if pager_options:
318 <span class="pager_info" onclick="jQuery('[id=_${name+str(pager_id)}_link_span]').hide(); jQuery('[id=_${name+str(pager_id)}_limit_span]').show();">
319 ${page_info} ${_('of')} ${approximation and '~' or ''}${count}
320 </span>
321+ % else:
322+ <span class="pager_info" style="cursor: not-allowed">
323+ ${page_info} ${_('of')} ${approximation and '~' or ''}${count}
324+ </span>
325+ % endif
326 % if next:
327 <a href="#next" action="next" relation="${name}" onclick="validate_action(this, pager_action); return false;">
328 % endif
329
330=== modified file 'addons/openerp/widgets/templates/screen.mako'
331--- addons/openerp/widgets/templates/screen.mako 2016-09-08 12:22:46 +0000
332+++ addons/openerp/widgets/templates/screen.mako 2017-03-24 16:09:47 +0000
333@@ -18,6 +18,7 @@
334 <input type="hidden" id="${name}_terp_approximation" name="${name}_terp_approximation" value="${approximation}"/>
335 <input type="hidden" id="${name}_terp_group_by_ctx" name="${name}_terp_group_by_ctx" value="${group_by_ctx}"/>
336 <input type="hidden" id="${name}_terp_filters_context" name="${name}_terp_filters_context" value=""/>
337+<input type="hidden" id="${name}_terp_sort_order" name="${name}_terp_sort_order" value="" />
338 % if action_id:
339 <input type="hidden" id="${name}_terp_action_id" name="${name}_terp_action_id" value="${action_id}">
340 % endif

Subscribers

People subscribed via source and target branches

to all changes: