Merge lp:~jfb-tempo-consulting/unifield-web/US-1019-us15 into lp:unifield-web

Proposed by jftempo
Status: Merged
Merged at revision: 4977
Proposed branch: lp:~jfb-tempo-consulting/unifield-web/US-1019-us15
Merge into: lp:unifield-web
Diff against target: 209 lines (+57/-15)
3 files modified
addons/openerp/static/javascript/search.js (+17/-6)
addons/openerp/widgets/search.py (+39/-8)
addons/openerp/widgets/templates/search/filters_group.mako (+1/-1)
To merge this branch: bzr merge lp:~jfb-tempo-consulting/unifield-web/US-1019-us15
Reviewer Review Type Date Requested Status
UniField Dev Team Pending
Review via email: mp+374916@code.launchpad.net
To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'addons/openerp/static/javascript/search.js'
--- addons/openerp/static/javascript/search.js 2018-10-24 14:22:10 +0000
+++ addons/openerp/static/javascript/search.js 2019-10-30 13:23:30 +0000
@@ -440,7 +440,7 @@
440 var check_domain = '[]';440 var check_domain = '[]';
441 var domains = {};441 var domains = {};
442 var search_context = {};442 var search_context = {};
443 var all_boxes = [];443 var all_boxes = {};
444 var $filter_list = jQuery('#filter_list');444 var $filter_list = jQuery('#filter_list');
445 var domain = '[]';445 var domain = '[]';
446 if (jQuery('div.group-data').length) {446 if (jQuery('div.group-data').length) {
@@ -571,17 +571,28 @@
571571
572 forEach(selected_boxes, function(box){572 forEach(selected_boxes, function(box){
573 if (box.id && box.checked && box.value != '[]') {573 if (box.id && box.checked && box.value != '[]') {
574 all_boxes = all_boxes.concat(box.value);574
575 pdiv = box.closest('div[class^="filters-group"]');
576 if (!(pdiv.id in all_boxes)) {
577 all_boxes[pdiv.id] = []
578 }
579 all_boxes[pdiv.id].push(box.value.replace(/^\s*\[/, '').replace(/]\s*$/, ''));
575 }580 }
576 });581 });
577582
578 var checked_button = all_boxes.toString();583 var new_boxes = [];
584 for (var key in all_boxes) {
585 length = all_boxes[key].length
586 for (var i=1; i<length; i+=1) {
587 all_boxes[key].unshift("'|'");
588 }
589 new_boxes = new_boxes.concat(all_boxes[key]);
590 }
591 var checked_button = new_boxes.toString();
579592
580 if(checked_button.length) {593 if(checked_button.length) {
581 check_domain = checked_button.length > 0? checked_button.replace(/(],\[)/g, ', ') : '[]';594 all_domains['check_domain'] = checked_button.length > 0 ? '['+checked_button+']' : '[]';
582 all_domains['check_domain'] = check_domain;
583 }595 }
584
585 // compute filter_status based on current filter states596 // compute filter_status based on current filter states
586 var fl_status = {};597 var fl_status = {};
587 jQuery('[filter_status]').each(function() {598 jQuery('[filter_status]').each(function() {
588599
=== modified file 'addons/openerp/widgets/search.py'
--- addons/openerp/widgets/search.py 2018-11-12 17:08:16 +0000
+++ addons/openerp/widgets/search.py 2019-10-30 13:23:30 +0000
@@ -37,9 +37,10 @@
37from openobject.i18n.format import convert_date_format_in_domain37from openobject.i18n.format import convert_date_format_in_domain
3838
3939
40def get_search_default(attrs, screen_context=None, default_domain=[]):40def get_search_default(attrs, screen_context=None, default_domain=None, add_active=False):
41 screen_context = screen_context or {}41 screen_context = screen_context or {}
4242 if default_domain is None:
43 default_domain = []
43 if 'context' in attrs:44 if 'context' in attrs:
44 ctx = expr_eval(attrs.get('context', "{}"), {'self':attrs.get('name', False)})45 ctx = expr_eval(attrs.get('context', "{}"), {'self':attrs.get('name', False)})
45 group_by = ctx.get('group_by')46 group_by = ctx.get('group_by')
@@ -63,6 +64,8 @@
63 # resolution of those, so either we have a truthy value and we64 # resolution of those, so either we have a truthy value and we
64 # return it, or we don't and we don't do anything65 # return it, or we don't and we don't do anything
65 return search_default66 return search_default
67 elif add_active and attrs['name'] == 'active' and 'active' not in '%s'%default_domain:
68 return True
6669
67 return False70 return False
6871
@@ -129,13 +132,14 @@
129 self.filter_id = 'filter_%s' % (random.randint(0,10000))132 self.filter_id = 'filter_%s' % (random.randint(0,10000))
130 self.filter_name = attrs.get('name', attrs.get('string', '')).replace('/', '-')133 self.filter_name = attrs.get('name', attrs.get('string', '')).replace('/', '-')
131 self.filter_status = attrs.get('filter_status', {}).get(self.filter_name)134 self.filter_status = attrs.get('filter_status', {}).get(self.filter_name)
135 self.expand_grp_id = False
132 filter_context = attrs.get('context')136 filter_context = attrs.get('context')
133 screen_context = attrs.get('screen_context', {})137 screen_context = attrs.get('screen_context', {})
134138
135 self.def_checked = False139 self.def_checked = False
136 self.groupcontext = []140 self.groupcontext = []
137141
138 default_search = get_search_default(attrs, screen_context, default_domain)142 default_search = get_search_default(attrs, screen_context, default_domain, add_active=True)
139143
140 # context implemented only for group_by.144 # context implemented only for group_by.
141 self.group_context = None145 self.group_context = None
@@ -147,9 +151,10 @@
147 self.group_context = map(lambda x: 'group_' + x, self.group_context)151 self.group_context = map(lambda x: 'group_' + x, self.group_context)
148 else:152 else:
149 self.group_context = 'group_' + self.group_context153 self.group_context = 'group_' + self.group_context
150
151 if default_search:154 if default_search:
152 self.def_checked = True155 self.def_checked = True
156 if attrs.get('expand_grp_id'):
157 self.expand_grp_id = attrs['expand_grp_id']
153 self.global_domain += (expr_eval(self.filter_domain, {'context':screen_context}))158 self.global_domain += (expr_eval(self.filter_domain, {'context':screen_context}))
154 if self.group_context:159 if self.group_context:
155 self.groupcontext = self.group_context160 self.groupcontext = self.group_context
@@ -202,6 +207,7 @@
202207
203 self.domain = copy.deepcopy(domain) or []208 self.domain = copy.deepcopy(domain) or []
204 self.listof_domain = domain or []209 self.listof_domain = domain or []
210 self.listof_ored_domain = {}
205 self.filter_domain = filter_domain or []211 self.filter_domain = filter_domain or []
206 self.filter_status = {}212 self.filter_status = {}
207 self.custom_filter_domain = []213 self.custom_filter_domain = []
@@ -267,6 +273,11 @@
267 self.fields_list.sort(lambda x, y: cmp(x[1], y[1]))273 self.fields_list.sort(lambda x, y: cmp(x[1], y[1]))
268274
269 self.frame = self.parse(model, dom, self.fields, values)275 self.frame = self.parse(model, dom, self.fields, values)
276 for oreddom in self.listof_ored_domain:
277 for el in range(1, len(self.listof_ored_domain[oreddom])):
278 self.listof_ored_domain[oreddom].insert(0, '|')
279 for oredfilter in self.listof_ored_domain[oreddom]:
280 self.listof_domain += oredfilter
270 if self.frame:281 if self.frame:
271 self.frame = self.frame[0]282 self.frame = self.frame[0]
272283
@@ -296,7 +307,7 @@
296 self.flt_domain = str(self.filter_domain).replace("(", "[").replace(')', ']')307 self.flt_domain = str(self.filter_domain).replace("(", "[").replace(')', ']')
297 self.custom_filter_domain = self.filter_domain308 self.custom_filter_domain = self.filter_domain
298309
299 def parse(self, model=None, root=None, fields=None, values={}):310 def parse(self, model=None, root=None, fields=None, values={}, parent_group=False):
300311
301 views = []312 views = []
302 search_model = model313 search_model = model
@@ -317,19 +328,23 @@
317 if 'nolabel' in attrs:328 if 'nolabel' in attrs:
318 attrs['nolabel'] = False329 attrs['nolabel'] = False
319330
331 expand_grp_id = False
320 if node.localName in ('form', 'tree', 'search', 'group'):332 if node.localName in ('form', 'tree', 'search', 'group'):
321 if node.localName == 'group':333 if node.localName == 'group':
322 attrs['group_by_ctx'] = values.get('group_by_ctx')334 attrs['group_by_ctx'] = values.get('group_by_ctx')
323 attrs['expand'] = expr_eval(attrs.get('expand',False),{'context':self.context})335 attrs['expand'] = expr_eval(attrs.get('expand',False),{'context':self.context})
336 expand_grp_id = 'expand_grp_%s' % (random.randint(0,10000))
324 Element = Group337 Element = Group
325 else:338 else:
326 Element = Frame339 Element = Frame
327340
328 views.append(Element(children=341 views.append(Element(children=
329 self.parse(model=search_model, root=node,342 self.parse(model=search_model, root=node,
330 fields=fields, values=values),343 fields=fields, values=values, parent_group=expand_grp_id),
331 **attrs))344 **attrs))
332345
346 elif node.localName=='label':
347 views.append(Label(**attrs))
333 elif node.localName=='newline':348 elif node.localName=='newline':
334 views.append(NewLine(**attrs))349 views.append(NewLine(**attrs))
335350
@@ -346,12 +361,19 @@
346 if values and values.get('filter_status'):361 if values and values.get('filter_status'):
347 attrs['filter_status'] = values['filter_status']362 attrs['filter_status'] = values['filter_status']
348363
364 if parent_group:
365 attrs['expand_grp_id'] = parent_group
349 v = Filter(**attrs)366 v = Filter(**attrs)
350 if v.groupcontext and v.groupcontext not in self.groupby:367 if v.groupcontext and v.groupcontext not in self.groupby:
351 self.groupby.append(v.groupcontext)368 self.groupby.append(v.groupcontext)
352 self.listof_domain.extend(i for i in v.global_domain if not i in self.listof_domain)369 if v.global_domain and v.expand_grp_id:
370 self.listof_ored_domain.setdefault(v.expand_grp_id, []).append([i for i in v.global_domain])
371 else:
372 self.listof_domain.extend(i for i in v.global_domain if not i in self.listof_domain)
353 filters_run.append(v)373 filters_run.append(v)
354374
375 elif node.localName == 'separator':
376 parent_group = 'expand_grp_%s' % (random.randint(0,10000))
355 elif node.localName == 'field':377 elif node.localName == 'field':
356 val = attrs.get('select', False) or fields[str(attrs['name'])].get('select', False) or self.view_type == 'search'378 val = attrs.get('select', False) or fields[str(attrs['name'])].get('select', False) or self.view_type == 'search'
357 if val:379 if val:
@@ -494,6 +516,14 @@
494 attrs['is_search'] = True516 attrs['is_search'] = True
495 super(FiltersGroup, self).__init__(**attrs)517 super(FiltersGroup, self).__init__(**attrs)
496518
519class Label(form.Char):
520 template = "/openerp/widgets/templates/search/label.mako"
521 width = False
522 name = 'label'
523 def __init__(self, **attrs):
524 super(Label, self).__init__(**attrs)
525
526
497class Char(form.Char): pass527class Char(form.Char): pass
498class DateTime(form.DateTime): pass528class DateTime(form.DateTime): pass
499class Float(form.Float): pass529class Float(form.Float): pass
@@ -538,5 +568,6 @@
538 'many2one': M2O_search,568 'many2one': M2O_search,
539 'email' : Char,569 'email' : Char,
540 'url' : Char,570 'url' : Char,
541 'separator': Separator571 'separator': Separator,
572 'label': Label,
542}573}
543574
=== modified file 'addons/openerp/widgets/templates/search/filters_group.mako'
--- addons/openerp/widgets/templates/search/filters_group.mako 2010-10-15 11:10:50 +0000
+++ addons/openerp/widgets/templates/search/filters_group.mako 2019-10-30 13:23:30 +0000
@@ -1,3 +1,3 @@
1<div class="filters-group">1<div class="filters-group" id="grp-filter-${expand_grp_id}">
2 ${display_member(frame)}2 ${display_member(frame)}
3</div>3</div>
44
=== added file 'addons/openerp/widgets/templates/search/label.mako'

Subscribers

People subscribed via source and target branches