diff options
| author | Vipul Bhatt <vbh@odoo.com> | 2016-06-21 16:10:00 +0530 |
|---|---|---|
| committer | Jérome Maes <jem@openerp.com> | 2016-11-09 09:36:01 +0100 |
| commit | 1cc8252a953ba6adeeb5dead2c82b336cd51c9db (patch) | |
| tree | 7e6bd025976839848f34072c00635ca84e65a50e /addons/website_project_issue/controllers | |
| parent | 78dfb019422ea734f2bd527a3503baffa8a35d44 (diff) | |
[IMP] website_*: generic filter and sort mecanism for portal documents
website portal now provide mecanism to sort and filter the
paginated document on the portal pages.
All portal module now use this mecanism, like they do for
'archive document' and 'pager'.
A generic template was added in website_portal. To use
it, renaming variables in method controller was required
to make it as generic as possible.
Some style cleaning was also done to make portal pages
consistent.
Diffstat (limited to 'addons/website_project_issue/controllers')
| -rw-r--r-- | addons/website_project_issue/controllers/main.py | 45 |
1 files changed, 26 insertions, 19 deletions
diff --git a/addons/website_project_issue/controllers/main.py b/addons/website_project_issue/controllers/main.py index 8d1976c29ec..de7006956b1 100644 --- a/addons/website_project_issue/controllers/main.py +++ b/addons/website_project_issue/controllers/main.py @@ -22,42 +22,49 @@ class WebsiteAccount(website_account): return values @http.route(['/my/issues', '/my/issues/page/<int:page>'], type='http', auth="user", website=True) - def my_issues(self, page=1, date_begin=None, date_end=None, project=None, sortby=None, **kw): + def my_issues(self, page=1, date_begin=None, date_end=None, sortby=None, filterby=None, **kw): values = self._prepare_portal_layout_values() + # portal users can't see the privacy_visibility, fetch the domain for them in sudo + portal_projects = request.env['project.project'].sudo().search([('privacy_visibility', '=', 'portal')]) + domain = [('project_id', 'in', portal_projects.ids)] - sortings = { + searchbar_sortings = { 'date': {'label': _('Newest'), 'order': 'create_date desc'}, 'name': {'label': _('Name'), 'order': 'name'}, 'stage': {'label': _('Stage'), 'order': 'stage_id'}, 'update': {'label': _('Last Stage Update'), 'order': 'date_last_stage_update desc'}, } - - projects = request.env['project.project'].search([('privacy_visibility','=','portal')]) - - project_filters = { + searchbar_filters = { 'all': {'label': _('All'), 'domain': []}, } - + # extends filterby criteria with project (criteria name is the project id) + projects = request.env['project.project'].search([('privacy_visibility', '=', 'portal')]) for proj in projects: - project_filters.update({ + searchbar_filters.update({ str(proj.id): {'label': proj.name, 'domain': [('project_id', '=', proj.id)]} }) - # portal users can't see the privacy_visibility, fetch the domain for them in sudo - portal_projects = request.env['project.project'].sudo().search([('privacy_visibility', '=', 'portal')]) - domain = [('project_id', 'in', portal_projects.ids)] - domain += project_filters.get(project, project_filters['all'])['domain'] - order = sortings.get(sortby, sortings['date'])['order'] + # 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' archive_groups = self._get_archive_groups('project.issue', domain) if date_begin and date_end: domain += [('create_date', '>', date_begin), ('create_date', '<=', date_end)] + + # issue count + issue_count = request.env['project.issue'].search_count(domain) # pager pager = request.website.pager( url="/my/issues", url_args={'date_begin': date_begin, 'date_end': date_end}, - total=values['issue_count'], + total=issue_count, page=page, step=self._items_per_page ) @@ -67,16 +74,16 @@ class WebsiteAccount(website_account): values.update({ 'date': date_begin, 'date_end': date_end, - 'project_filters': OrderedDict(sorted(project_filters.items())), 'projects': projects, - 'project': project, - 'sortings': sortings, - 'sortby': sortby, 'issues': project_issues, 'page_name': 'issue', 'archive_groups': archive_groups, 'default_url': '/my/issues', - 'pager': pager + 'pager': pager, + 'searchbar_sortings': searchbar_sortings, + 'sortby': sortby, + 'searchbar_filters': OrderedDict(sorted(searchbar_filters.items())), + 'filterby': filterby, }) return request.render("website_project_issue.my_issues", values) |
