Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
    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
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
            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):