Xavier ALT (OpenERP) has proposed merging
lp:~openerp-dev/openobject-client-web/6.0-opw-575525-xal into
lp:openobject-client-web.
Requested reviews:
OpenERP Core Team (openerp)
For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-client-web/6.0-opw-575525-xal/+merge/114868
Hi,
This is a problem with keeping search view filters button state when switching
between views.
Steps:
- Go to customer
- Uncheck "Customer" filter, check "Supplier" filter
- Edit 1st entry
- Switch back to list view
Current: "Customer": checked, "Supplier": unchecked
Expect: should follow user manual changes, so: "Customer": unchecked,
"Supplier": checked.
Regards,
Xavier
--
https://code.launchpad.net/~openerp-dev/openobject-client-web/6.0-opw-575525-xal/+merge/114868
Your team OpenERP R&D Team is subscribed to branch
lp:~openerp-dev/openobject-client-web/6.0-opw-575525-xal.
=== modified file 'addons/openerp/controllers/search.py'
--- addons/openerp/controllers/search.py 2012-06-01 10:56:49 +0000
+++ addons/openerp/controllers/search.py 2012-07-13 13:47:29 +0000
@@ -266,6 +266,10 @@
if isinstance(group_by_ctx, str):
group_by_ctx = cleanup_group_by(group_by_ctx).split(',')
+ filter_status = all_domains.get('filter_status')
+ if isinstance(filter_status, str):
+ filter_status = ast.literal_eval(filter_status)
+
if domains:
domains = eval(domains)
@@ -412,6 +416,8 @@
group_by_ctx = [group_by_ctx]
if group_by_ctx:
search_data['group_by_ctx'] = group_by_ctx
+ if filter_status:
+ search_data['filter_status'] = filter_status
ncustom_domain = openobject.i18n.format.convert_date_format_in_domain(ncustom_domain, res, context)
return dict(domain=ustr(domain), context=ustr(ctx), search_data=ustr(search_data), filter_domain=ustr(ncustom_domain))
=== modified file 'addons/openerp/static/javascript/search.js'
--- addons/openerp/static/javascript/search.js 2012-06-21 07:42:11 +0000
+++ addons/openerp/static/javascript/search.js 2012-07-13 13:47:29 +0000
@@ -518,6 +518,10 @@
$source.attr('filter_context') != '{}') {
filter_context.push($source.attr('filter_context'));
}
+ if ($source.attr('filter_name') && $source.attr('filter_name') != '') {
+ $source.attr('filter_status', 1);
+ }
+
} else {
$source.closest('td').removeClass('grop_box_active');
$source.attr('checked', false);
@@ -534,6 +538,9 @@
filter_context.splice(filter_index, 1);
}
}
+ if ($source.attr('filter_name') && $source.attr('filter_name') != '') {
+ $source.attr('filter_status', 0);
+ }
}
jQuery(id).toggleClass('active inactive');
}
@@ -600,6 +607,17 @@
check_domain = checked_button.length > 0? checked_button.replace(/(],\[)/g, ', ') : '[]';
all_domains['check_domain'] = check_domain;
}
+
+ // compute filter_status based on current filter states
+ var fl_status = {};
+ jQuery('[filter_status]').each(function() {
+ var $this = jQuery(this);
+ if ($this.attr('filter_name')) {
+ fl_status[$this.attr('filter_name')] = parseInt($this.attr('filter_status'));
+ }
+ });
+ all_domains['filter_status'] = serializeJSON(fl_status);
+
all_domains = serializeJSON(all_domains);
return all_domains;
}
=== modified file 'addons/openerp/widgets/search.py'
--- addons/openerp/widgets/search.py 2011-02-22 14:26:34 +0000
+++ addons/openerp/widgets/search.py 2012-07-13 13:47:29 +0000
@@ -116,7 +116,7 @@
class Filter(TinyInputWidget):
template = "/openerp/widgets/templates/search/filter.mako"
- params = ['icon', 'filter_domain', 'help', 'filter_id', 'text_val', 'group_context', 'def_checked', 'filter_context']
+ params = ['icon', 'filter_name', 'filter_domain', 'help', 'filter_id', 'text_val', 'group_context', 'def_checked', 'filter_context', 'filter_status']
def __init__(self, **attrs):
super(Filter, self).__init__(**attrs)
@@ -127,6 +127,8 @@
self.filter_domain = attrs.get('domain', [])
self.help = attrs.get('help')
self.filter_id = 'filter_%s' % (random.randint(0,10000))
+ self.filter_name = attrs.get('name','')
+ self.filter_status = attrs.get('filter_status',{}).get(self.name)
filter_context = attrs.get('context')
screen_context = attrs.get('screen_context', {})
@@ -173,6 +175,12 @@
if not self.def_checked and attrs.get('group_by_ctx'):
if self.group_context in attrs['group_by_ctx']:
self.def_checked = True
+
+ if self.filter_status is not None:
+ # if filter_status is defined that means user have manually
+ # check/unchecked the filter, so we override default choice
+ # by user's choice.
+ self.def_checked = bool(self.filter_status)
class M2O_search(form.M2O):
template = "/openerp/widgets/templates/search/many2one.mako"
@@ -194,6 +202,7 @@
self.domain = copy.deepcopy(domain) or []
self.listof_domain = domain or []
self.filter_domain = filter_domain or []
+ self.filter_status = {}
self.custom_filter_domain = []
self.context = context or {}
self.search_view = search_view or "{}"
@@ -214,6 +223,9 @@
if not self.groupby and (values and values.get('group_by_ctx')):
self.groupby = values['group_by_ctx']
+ if not self.filter_status and (values and values.get('filter_status')):
+ self.filter_status = values['filter_status']
+
if isinstance (self.search_view, basestring):
self.search_view = eval(self.search_view)
@@ -329,6 +341,9 @@
elif self.groupby:
attrs['group_by_ctx'] = self.groupby
+ if values and values.get('filter_status'):
+ attrs['filter_status'] = values['filter_status']
+
v = Filter(**attrs)
if v.groupcontext and v.groupcontext not in self.groupby:
self.groupby.append(v.groupcontext)
=== modified file 'addons/openerp/widgets/templates/search/filter.mako'
--- addons/openerp/widgets/templates/search/filter.mako 2010-11-19 08:33:49 +0000
+++ addons/openerp/widgets/templates/search/filter.mako 2012-07-13 13:47:29 +0000
@@ -34,5 +34,7 @@
value="${filter_domain}"
group_by_ctx="${group_context}"
title="${help}" filter_context="${filter_context}"
+ filter_name="${filter_name}"
+ ${'filter_status=%d' % (filter_status) if filter_status is not None else '' }
${'checked' if def_checked else ''}/>
</div>
_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help : https://help.launchpad.net/ListHelp