搜索过滤器在网站Odoo 12中不起作用

时间:2019-12-18 11:14:13

标签: templates controller odoo portal odoo-12

我正在尝试为网站(门户)用户添加诸如groupby,排序和搜索选项之类的过滤器,但是这些过滤器无法正常工作。这是我的控制器方法:

@http.route(['/my/tickets', '/my/tickets/page/<int:page>'], type='http', auth="user", website=True)
def portal_my_ticket(self, page=1, date_begin=None, date_end=None, sortby=None, filterby=None, search=None,
                     search_in='content', **kw):
    response = super(CustomerPortal, self)
    values = self._prepare_portal_layout_values()
    partner = request.env.user.partner_id
    support_obj = http.request.env['helpdesk.custom']
    domain = []
    # count for pager
    ticket_count = support_obj.sudo().search_count(domain)
    # pager
    pager = request.website.pager(
        url="/my/tickets",
        total=ticket_count,
        page=page,
        step=self._items_per_page
    )
    searchbar_sortings = {
        'date': {'label': _('Newest'), 'order': 'create_date desc'},
        'name': {'label': _('Title'), 'order': 'subject'},
        'stage': {'label': _('Stage'), 'order': 'stage_id'},
    }
    searchbar_filters = {
        'all': {'label': _('All'), 'domain': []},
    }

    searchbar_inputs = {
        'content': {'input': 'content', 'label': _('Search <span class="nolabel"> (in Content)</span>')},
        'message': {'input': 'message', 'label': _('Search in Messages')},
        'customer': {'input': 'customer', 'label': _('Search in Customer')},
        'stage': {'input': 'stage', 'label': _('Search in Stages')},
        'all': {'input': 'all', 'label': _('Search in All')},
    }
    # default sort by value
    if not sortby:
        sortby = 'date'
    order = searchbar_sortings[sortby]['order']
    # default filter by value
    if not filterby:
        filterby = 'all'
    domain += searchbar_filters[filterby]['domain']

    # archive groups - Default Group By 'create_date'
    if date_begin and date_end:
        domain += [('create_date', '>', date_begin), ('create_date', '<=', date_end)]

    # search
    if search and search_in:
        search_domain = []
        if search_in in ('content', 'all'):
            search_domain = OR([search_domain, ['|', ('name', 'ilike', search), ('description', 'ilike', search)]])
        if search_in in ('customer', 'all'):
            search_domain = OR([search_domain, [('partner_id', 'ilike', search)]])
        if search_in in ('message', 'all'):
            search_domain = OR([search_domain, [('message_ids.body', 'ilike', search)]])
        if search_in in ('stage', 'all'):
            search_domain = OR([search_domain, [('stage_id', 'ilike', search)]])
        domain += search_domain

    if request.session.uid and request.env['res.users'].browse(request.session.uid).user_has_groups(
            'base.group_portal'):
    # content according to pager and archive selected
        tickets = support_obj.sudo().search([('partner_id', '=', partner.id)])

    else:
        tickets = support_obj.sudo().search([])
        print("tickets",tickets)
    values.update({
        'tickets': tickets.sudo(),
        'page_name': 'ticket_page',
        'pager': pager,
        'default_url': '/my/tickets',
        'searchbar_sortings': searchbar_sortings,
        'searchbar_inputs': searchbar_inputs,
        'search_in': search_in,
        'sortby': sortby,
        'searchbar_filters': OrderedDict(sorted(searchbar_filters.items())),
        'filterby': filterby,

    })
    return request.render("website_helpdesk_support_ticket.display_tickets", values)

此方法使我可以进行排序,搜索等工作,但可能是代码中缺少的方法。这是以下问题的屏幕截图:

enter image description here

在屏幕截图中,我想按升序按阶段对记录进行排序,但默认情况下,创建日期按降序排列。

0 个答案:

没有答案