def __call__(self, screen): fields = screen.view['fields'] screen.search_domain = convert_date_format_in_domain(screen.search_domain, fields, screen.context) if screen.group_by_ctx or screen.context.get('group_by') or screen.context.get('group_by_no_leaf'): widget = listgroup.ListGroup(screen.name or '_terp_list', model=screen.model, view=screen.view, ids=screen.ids, domain=screen.domain, context=screen.context, view_mode=screen.view_mode, editable=screen.editable, selectable=screen.selectable, offset=screen.offset, limit=screen.limit, count=screen.count, nolinks=screen.link, group_by_ctx=screen.group_by_ctx) else: widget = listgrid.List(screen.name or '_terp_list', model=screen.model, view=screen.view, ids=screen.ids, domain=screen.domain, context=screen.context, view_mode=screen.view_mode, editable=screen.editable, selectable=screen.selectable, offset=screen.offset, limit=screen.limit, count=screen.count, nolinks=screen.link, m2m=screen.m2m, o2m=screen.o2m, default_data=screen.default_value, force_readonly=screen.force_readonly) screen.ids = widget.ids screen.limit = widget.limit screen.count = widget.count return widget
def __call__(self, screen): fields = screen.view['fields'] screen.search_domain = convert_date_format_in_domain(screen.search_domain, fields, screen.context) if screen.group_by_ctx or screen.context.get('group_by') or screen.context.get('group_by_no_leaf'): widget = listgroup.ListGroup(screen.name or '_terp_list', model=screen.model, view=screen.view, ids=screen.ids, domain=screen.domain, context=screen.context, view_mode=screen.view_mode, editable=screen.editable, selectable=screen.selectable, offset=screen.offset, limit=screen.limit, count=screen.count, nolinks=screen.link, group_by_ctx=screen.group_by_ctx) else: widget = listgrid.List(screen.name or '_terp_list', model=screen.model, view=screen.view, ids=screen.ids, domain=screen.domain, context=screen.context, view_mode=screen.view_mode, editable=screen.editable, selectable=screen.selectable, offset=screen.offset, limit=screen.limit, count=screen.count, nolinks=screen.link, m2m=screen.m2m, o2m=screen.o2m, default_data=screen.default_value) screen.ids = widget.ids screen.limit = widget.limit screen.count = widget.count return widget
def __init__(self, source, model, domain=None, context=None, values={}, filter_domain=None, search_view=None, group_by_ctx=[], **kw): super(Search, self).__init__(model=model) self.domain = copy.deepcopy(domain) or [] self.listof_domain = domain or [] self.filter_domain = filter_domain or [] self.custom_filter_domain = [] self.context = context or {} self.search_view = search_view or "{}" self.model = model self.groupby = [] self.source = source if kw.get('clear'): self.source = None if group_by_ctx and isinstance(group_by_ctx, basestring): self.groupby += group_by_ctx.split(',') else: self.groupby = group_by_ctx if values == "undefined": values = {} ctx = dict(rpc.session.context, **self.context) if not self.groupby and (values and values.get('group_by_ctx')): self.groupby = values['group_by_ctx'] if isinstance (self.search_view, basestring): self.search_view = eval(self.search_view) if not self.search_view: view_id = kw.get('search_view_id')\ or ctx.get('search_view') self.search_view = cache.fields_view_get( self.model, view_id or False, 'search', ctx, True) fields = self.search_view['fields'] self.domain = convert_date_format_in_domain(domain, fields, self.context) self.listof_domain = self.domain try: dom = xml.dom.minidom.parseString(self.search_view['arch']) except: dom = xml.dom.minidom.parseString(self.search_view['arch'].encode('utf-8')) self.view_type = dom.firstChild.localName self.string = dom.documentElement.getAttribute('string') self.fields_type = {} all_fields = cache.fields_get(model, [], rpc.session.context) self.fields = dict(all_fields, **fields) self.fields_list = [ (field_name, ustr(field['string']), field['type']) for field_name, field in self.fields.iteritems() if field['type'] != 'binary' if field.get('selectable') ] if self.fields_list: self.fields_list.sort(lambda x, y: cmp(x[1], y[1])) self.frame = self.parse(model, dom, self.fields, values) if self.frame: self.frame = self.frame[0] my_acts = rpc.session.execute('object', 'execute', 'ir.filters', 'get_filters', model) sorted_filters = [] for act in my_acts: action = [act['domain'], act['name']] act_ctx = eval(act['context']) if act_ctx and act_ctx.get('group_by'): action.append(ustr(act_ctx['group_by'])) else: action.append("[]") action.append(act['id']) sorted_filters.append(action) sorted_filters.sort(lambda x, y: cmp(x[1], y[1])) self.filters_list = sorted_filters self.operators_map = [ ('ilike', _('contains')), ('not ilike', _('doesn\'t contain')), ('=', _('is equal to')), ('<>', _('is not equal to')), ('>', _('greater than')), ('<', _('less than')), ('in', _('in')), ('not in', _('not in'))] self.flt_domain = str(self.filter_domain).replace("(", "[").replace(')', ']') self.custom_filter_domain = self.filter_domain
def __init__(self, source, model, domain=None, context=None, values={}, filter_domain=None, search_view=None, group_by_ctx=[], **kw): super(Search, self).__init__(model=model) 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 "{}" self.model = model self.groupby = [] self.source = source if kw.get('clear'): self.source = None if group_by_ctx and isinstance(group_by_ctx, basestring): self.groupby += group_by_ctx.split(',') else: self.groupby = group_by_ctx if values == "undefined": values = {} ctx = dict(rpc.session.context, **self.context) 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) if not self.search_view: view_id = kw.get('search_view_id')\ or ctx.get('search_view') self.search_view = cache.fields_view_get(self.model, view_id or False, 'search', ctx, True) fields = self.search_view['fields'] self.domain = convert_date_format_in_domain(domain, fields, self.context) self.listof_domain = self.domain try: dom = xml.dom.minidom.parseString(self.search_view['arch']) except: dom = xml.dom.minidom.parseString( self.search_view['arch'].encode('utf-8')) self.view_type = dom.firstChild.localName self.string = dom.documentElement.getAttribute('string') self.fields_type = {} all_fields = cache.fields_get(model, [], rpc.session.context) self.fields = dict(all_fields, **fields) self.fields_list = [(field_name, ustr(field['string']), field['type']) for field_name, field in self.fields.iteritems() if field['type'] != 'binary' if field.get('selectable')] if self.fields_list: self.fields_list.sort(lambda x, y: cmp(x[1], y[1])) self.frame = self.parse(model, dom, self.fields, values) if self.frame: self.frame = self.frame[0] my_acts = rpc.session.execute('object', 'execute', 'ir.filters', 'get_filters', model) sorted_filters = [] for act in my_acts: action = [act['domain'], act['name']] act_ctx = eval(act['context']) if act_ctx and act_ctx.get('group_by'): action.append(ustr(act_ctx['group_by'])) else: action.append("[]") action.append(act['id']) sorted_filters.append(action) sorted_filters.sort(lambda x, y: cmp(x[1], y[1])) self.filters_list = sorted_filters self.operators_map = [('ilike', _('contains')), ('not ilike', _('doesn\'t contain')), ('=', _('is equal to')), ('<>', _('is not equal to')), ('>', _('greater than')), ('<', _('less than')), ('in', _('in')), ('not in', _('not in'))] self.flt_domain = str(self.filter_domain).replace("(", "[").replace( ')', ']') self.custom_filter_domain = self.filter_domain
def eval_domain_filter(self, **kw): all_domains = kw.get('all_domains') custom_domains = kw.get('custom_domain') all_domains = eval(all_domains) domains = all_domains.get('domains') selection_domain = all_domains.get('selection_domain') search_context = all_domains.get('search_context') group_by_ctx = kw.get('group_by_ctx', []) if isinstance(group_by_ctx, str): group_by_ctx = group_by_ctx.split(',') if domains: domains = eval(domains) c = search_context.get('context', {}) v = search_context.get('value') if v and '__' in v: value, operator = v.split('__') v = int(value) ctx = expr_eval(c, {'self':v}) context = rpc.get_session().context if ctx: ctx.update(context) domain = [] check_domain = all_domains.get('check_domain') if check_domain and isinstance(check_domain, basestring): domain = expr_eval(check_domain, context) or [] search_data = {} model = kw.get('model') proxy = rpc.RPCProxy(model) res = proxy.fields_get(False, context) all_error = [] fld = {} if domains: for field, value in domains.iteritems(): if '/' in field: fieldname, bound = field.split('/') else: fieldname = field bound = '' data = {} fld['type'] = res[fieldname].get('type') if fld['type'] == 'many2many': fld['type'] = 'char' fld['value'] = value data[field] = fld try: frm = TinyForm(**data).to_python() except TinyFormError, e: error_field = e.field error = ustr(e) all_error.append(dict(error=error, error_field=error_field)) continue if bound in ('from', 'to'): if bound == 'from': test = '>=' else: test = '<=' convert_format = convert_date_format_in_domain([(fieldname, test, value)], res, context) domain.append(convert_format[0]) search_data.setdefault(fieldname, {})[bound] = convert_format[0][2] elif isinstance(value, bool) and value: search_data[field] = 1 elif isinstance(value, int) and not isinstance(value, bool): domain.append((field, '=', value)) search_data[field] = value elif 'selection_' in value: try: val = int(value.split('selection_')[1]) except: val = value.split('selection_')[1] domain.append((field, '=', val)) search_data[field] = val elif fld['type'] == 'selection': domain.append((field, '=', value)) search_data[field] = value else: if not 'm2o_' in value: operator = 'ilike' if '__' in value: value, operator = value.split('__') value = int(value) domain.append((field, operator, value)) search_data[field] = value else: search_data[field] = value.split('m2o_')[1] if all_error: return dict(all_error=all_error)
for i in xrange(max(len(and_list) - 1, 0)): ncustom_domain.append("&") ncustom_domain += [tuple(x) for x in and_list] if selection_domain and selection_domain not in ['blk', 'sf', 'mf']: selection_domain = expr_eval(selection_domain) if selection_domain: domain.extend(selection_domain) if not domain: domain = '[]' if not isinstance(group_by_ctx, list): group_by_ctx = [group_by_ctx] if group_by_ctx: search_data['group_by_ctx'] = group_by_ctx ncustom_domain = 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)) @expose() def manage_filter(self, **kw): act={'name':'Manage Filters', 'res_model':'ir.filters', 'type':'ir.actions.act_window', 'view_type':'form', 'view_mode':'tree,form', 'domain':'[(\'model_id\',\'=\',\''+kw.get('model')+'\'),(\'user_id\',\'=\','+str(rpc.get_session().uid)+')]'} return actions.execute(act, context=rpc.get_session().context) @expose(template="/openerp/controllers/templates/save_filter.mako") def save_filter(self, **kw):