From 56c5d0afeb5f0a4ad7e918193ff1f542ec4f32ad Mon Sep 17 00:00:00 2001 From: Dharmraj Jhala Date: Fri, 7 Aug 2015 09:14:59 +0200 Subject: [PATCH] [IMP] website_project_issue: frontend view for issues under My Account page of website, and removed link to the backend and its related files [ADD] website_project_issue_sheet: link module between website_project_issue and project_issue_sheet Frontend integration of issues: - issues details - chatter integration - timesheets --- addons/website_project_issue/__init__.py | 2 + addons/website_project_issue/__openerp__.py | 8 +- .../controllers/__init__.py | 4 + .../website_project_issue/controllers/main.py | 29 ++++++ .../portal_project_issue_view.xml | 29 ------ .../security/ir.model.access.csv | 1 - .../security/portal_security.xml | 17 +--- .../static/src/css/portal_project_issue.css | 30 ------ .../tests/test_access_rights.py | 48 +-------- .../views/portal_project_issue.xml | 10 -- .../views/project_issue_templates.xml | 97 +++++++++++++++++++ .../website_project_issue_view.xml | 9 -- .../website_project_issue_sheet/__init__.py | 0 .../__openerp__.py | 24 +++++ .../security/ir.model.access.csv | 2 + .../security/portal_security.xml | 19 ++++ .../views/project_issue_templates.xml | 26 +++++ 17 files changed, 215 insertions(+), 140 deletions(-) create mode 100644 addons/website_project_issue/controllers/__init__.py create mode 100644 addons/website_project_issue/controllers/main.py delete mode 100644 addons/website_project_issue/portal_project_issue_view.xml delete mode 100644 addons/website_project_issue/static/src/css/portal_project_issue.css delete mode 100644 addons/website_project_issue/views/portal_project_issue.xml create mode 100644 addons/website_project_issue/views/project_issue_templates.xml delete mode 100644 addons/website_project_issue/website_project_issue_view.xml create mode 100644 addons/website_project_issue_sheet/__init__.py create mode 100644 addons/website_project_issue_sheet/__openerp__.py create mode 100644 addons/website_project_issue_sheet/security/ir.model.access.csv create mode 100644 addons/website_project_issue_sheet/security/portal_security.xml create mode 100644 addons/website_project_issue_sheet/views/project_issue_templates.xml diff --git a/addons/website_project_issue/__init__.py b/addons/website_project_issue/__init__.py index 67dee8c60db..bf7fb7b45c1 100644 --- a/addons/website_project_issue/__init__.py +++ b/addons/website_project_issue/__init__.py @@ -1,2 +1,4 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. + +import controllers diff --git a/addons/website_project_issue/__openerp__.py b/addons/website_project_issue/__openerp__.py index fb519ace6da..2396217c6e5 100644 --- a/addons/website_project_issue/__openerp__.py +++ b/addons/website_project_issue/__openerp__.py @@ -8,17 +8,15 @@ 'category': 'Tools', 'complexity': 'easy', 'description': """ -This module adds issue menu and features to your portal if project_issue and portal are installed. +This module adds project issues inside your account's page on website if project_issue and website_portal are installed. ================================================================================================== """, 'author': 'OpenERP SA', - 'depends': ['project_issue','portal', 'website'], + 'depends': ['project_issue', 'website_portal'], 'data': [ 'security/portal_security.xml', 'security/ir.model.access.csv', - 'portal_project_issue_view.xml', - 'website_project_issue_view.xml', - 'views/portal_project_issue.xml', + 'views/project_issue_templates.xml', ], 'installable': True, 'auto_install': True, diff --git a/addons/website_project_issue/controllers/__init__.py b/addons/website_project_issue/controllers/__init__.py new file mode 100644 index 00000000000..f48716d3a69 --- /dev/null +++ b/addons/website_project_issue/controllers/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +import main diff --git a/addons/website_project_issue/controllers/main.py b/addons/website_project_issue/controllers/main.py new file mode 100644 index 00000000000..da0496baf91 --- /dev/null +++ b/addons/website_project_issue/controllers/main.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. +from openerp import http +from openerp.addons.website_portal.controllers.main import website_account +from openerp.http import request + + +class WebsiteAccount(website_account): + @http.route(['/my', '/my/home'], type='http', auth="user", website=True) + def account(self): + response = super(WebsiteAccount, self).account() + user = request.env.user + # portal projects where you or someone from your company are a follower + project_issues = request.env['project.issue'].search([ + '&', + ('project_id.privacy_visibility', '=', 'portal'), + '|', + ('message_follower_ids', 'child_of', [user.partner_id.commercial_partner_id.id]), + ('message_follower_ids', 'child_of', [user.partner_id.id]) + ]) + response.qcontext.update({'issues': project_issues}) + return response + + +class WebsiteProjectIssue(http.Controller): + @http.route(['/my/issues/'], type='http', auth="user", website=True) + def issues_followup(self, issue_id=None): + issue = request.env['project.issue'].browse(issue_id) + return request.website.render("website_project_issue.issues_followup", {'issue': issue}) diff --git a/addons/website_project_issue/portal_project_issue_view.xml b/addons/website_project_issue/portal_project_issue_view.xml deleted file mode 100644 index b461c09c070..00000000000 --- a/addons/website_project_issue/portal_project_issue_view.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - Issues - project.issue - form - tree,form - - - {"search_default_user_id":'', "search_default_draft":'', "search_default_todo":'', "portal":'True'} - - current - -

- Click to create an issue. -

- You can track your issues from this menu and the action we - will take. -

-
-
- - - -
-
diff --git a/addons/website_project_issue/security/ir.model.access.csv b/addons/website_project_issue/security/ir.model.access.csv index 60d7d34e348..e55c4c4a1cf 100644 --- a/addons/website_project_issue/security/ir.model.access.csv +++ b/addons/website_project_issue/security/ir.model.access.csv @@ -1,4 +1,3 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_issues,project_issue,project_issue.model_project_issue,base.group_portal,1,0,0,0 access_case_section,crm_team,sales_team.model_crm_team,base.group_portal,1,0,0,0 -access_issues_public,project_issue,project_issue.model_project_issue,base.group_public,1,0,0,0 \ No newline at end of file diff --git a/addons/website_project_issue/security/portal_security.xml b/addons/website_project_issue/security/portal_security.xml index c41b26afe71..d4ca27624f8 100644 --- a/addons/website_project_issue/security/portal_security.xml +++ b/addons/website_project_issue/security/portal_security.xml @@ -3,10 +3,9 @@ - Project/Issue: portal users: public or (portal and colleagues following) or (followers and following) + Project/Issue: portal users: (portal and colleagues following) or (followers and following) - ['|', '|', - ('project_id.privacy_visibility', 'in', ['public']), + ['|', '&', ('project_id.privacy_visibility', '=', 'portal'), ('message_follower_ids', 'child_of', [user.partner_id.commercial_partner_id.id]), @@ -18,21 +17,13 @@ - Project/Issue: employees: public, portal, employee or (followers and following) + Project/Issue: employees: portal, employee or (followers and following) ['|', - ('project_id.privacy_visibility', 'in', ['public', 'portal', 'employees']), + ('project_id.privacy_visibility', 'in', ['portal', 'employees']), '&', ('project_id.privacy_visibility', '=', 'followers'), ('message_follower_ids', 'in', [user.partner_id.id]), ] - - - Project/Issue: public users: public only - - [('project_id.privacy_visibility', '=', 'public')] - - - diff --git a/addons/website_project_issue/static/src/css/portal_project_issue.css b/addons/website_project_issue/static/src/css/portal_project_issue.css deleted file mode 100644 index 983b7d6804f..00000000000 --- a/addons/website_project_issue/static/src/css/portal_project_issue.css +++ /dev/null @@ -1,30 +0,0 @@ -.oe_portal_project_issue { - margin: 0 auto; -} - -.oe_portal_project_issue .oe_kanban_groups { - width: 100%; -} - -.oe_portal_project_issue .oe_fold_column.oe_kanban_record { - float: none; - display: block; - border-width: 1px; - border-radius: 4px; - border-style: solid; - border-bottom-color: #B9B9B9; - border-left-color: #D8D8D8; - border-right-color: #D8D8D8; - border-top-color: #D8D8D8; - margin-bottom: 5px; -} - -.oe_portal_project_issue .oe_fold_column.oe_kanban_record .oe_kanban_content { - padding: 5px; -} - -.oe_portal_project_issue .oe_fold_column.oe_kanban_record h1 { - margin: 0; - font-size: 1.1em; - font-weight: bold; -} diff --git a/addons/website_project_issue/tests/test_access_rights.py b/addons/website_project_issue/tests/test_access_rights.py index c0d7d6ba88b..afa986aa08d 100644 --- a/addons/website_project_issue/tests/test_access_rights.py +++ b/addons/website_project_issue/tests/test_access_rights.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -from openerp.addons.portal_project.tests.test_access_rights import TestPortalProjectBase +from openerp.addons.project.tests.test_access_rights import TestPortalProjectBase from openerp.exceptions import AccessError from openerp.tools import mute_logger @@ -33,52 +33,14 @@ class TestPortalIssue(TestPortalProjectBase): Issue = self.env['project.issue'] # ---------------------------------------- - # CASE1: public project - # ---------------------------------------- - - # Do: Alfred reads project -> ok (employee ok public) - # Test: all project issues visible - issues = Issue.sudo(self.user_projectuser.id).search([('project_id', '=', pigs_id)]) - test_issue_ids = set([self.issue_1.id, self.issue_2.id, self.issue_3.id, self.issue_4.id, self.issue_5.id, self.issue_6.id]) - self.assertEqual(set(issues.ids), test_issue_ids, - 'access rights: project user cannot see all issues of a public project') - # Test: all project issues readable - issues.read(['name']) - # Test: all project issues writable - issues.sudo(self.user_projectuser.id).write({'description': 'TestDescription'}) - - # Do: Bert reads project -> crash, no group - # Test: no project issue visible - self.assertRaises(AccessError, Issue.sudo(self.user_noone.id).search, [('project_id', '=', pigs_id)]) - # Test: no project issue readable - self.assertRaises(AccessError, issues.sudo(self.user_noone.id).read, ['name']) - # Test: no project issue writable - self.assertRaises(AccessError, issues.sudo(self.user_noone.id).write, {'description': 'TestDescription'}) - - # Do: Chell reads project -> ok (portal ok public) - # Test: all project issues visible - issues = Issue.sudo(self.user_portal.id).search([('project_id', '=', pigs_id)]) - self.assertEqual(set(issues.ids), test_issue_ids, - 'access rights: project user cannot see all issues of a public project') - # Test: all project issues readable - issues.sudo(self.user_portal.id).read(['name']) - # Test: no project issue writable - self.assertRaises(AccessError, issues.sudo(self.user_portal.id).write, {'description': 'TestDescription'}) - - # Do: Donovan reads project -> ok (public ok public) - # Test: all project issues visible - issues = Issue.sudo(self.user_public.id).search([('project_id', '=', pigs_id)]) - self.assertEqual(set(issues.ids), test_issue_ids, - 'access rights: project user cannot see all issues of a public project') - - # ---------------------------------------- - # CASE2: portal project + # CASE1: portal project # ---------------------------------------- self.project_pigs.write({'privacy_visibility': 'portal'}) # Do: Alfred reads project -> ok (employee ok public) # Test: all project issues visible issues = Issue.sudo(self.user_projectuser.id).search([('project_id', '=', pigs_id)]) + test_issue_ids = set([self.issue_1.id, self.issue_2.id, self.issue_3.id, self.issue_4.id, self.issue_5.id, self.issue_6.id]) self.assertEqual(set(issues.ids), test_issue_ids, 'access rights: project user cannot see all issues of a portal project') @@ -101,7 +63,7 @@ class TestPortalIssue(TestPortalProjectBase): self.issue_3.sudo(self.user_projectuser.id).message_unsubscribe_users(user_ids=[self.user_portal.id]) # ---------------------------------------- - # CASE3: employee project + # CASE2: employee project # ---------------------------------------- self.project_pigs.write({'privacy_visibility': 'employees'}) @@ -118,7 +80,7 @@ class TestPortalIssue(TestPortalProjectBase): self.assertFalse(issues.ids, 'access rights: portal user should not see issues of an employees project, even if assigned') # ---------------------------------------- - # CASE4: followers project + # CASE3: followers project # ---------------------------------------- self.project_pigs.write({'privacy_visibility': 'followers'}) diff --git a/addons/website_project_issue/views/portal_project_issue.xml b/addons/website_project_issue/views/portal_project_issue.xml deleted file mode 100644 index 3b470cc253b..00000000000 --- a/addons/website_project_issue/views/portal_project_issue.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/addons/website_project_issue/views/project_issue_templates.xml b/addons/website_project_issue/views/project_issue_templates.xml new file mode 100644 index 00000000000..67729ac99e3 --- /dev/null +++ b/addons/website_project_issue/views/project_issue_templates.xml @@ -0,0 +1,97 @@ + + + + + + diff --git a/addons/website_project_issue/website_project_issue_view.xml b/addons/website_project_issue/website_project_issue_view.xml deleted file mode 100644 index 278a6cbcad1..00000000000 --- a/addons/website_project_issue/website_project_issue_view.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - \ No newline at end of file diff --git a/addons/website_project_issue_sheet/__init__.py b/addons/website_project_issue_sheet/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/addons/website_project_issue_sheet/__openerp__.py b/addons/website_project_issue_sheet/__openerp__.py new file mode 100644 index 00000000000..83db1d332af --- /dev/null +++ b/addons/website_project_issue_sheet/__openerp__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + + +{ + 'name': 'Timesheet on Website Project Issue', + 'version': '0.1', + 'category': 'Tools', + 'complexity': 'easy', + 'description': """ +Add timesheet support on issue in the frontend. +================================================================================================== + """, + 'author': 'OpenERP SA', + 'depends': ['website_project_issue', 'project_issue_sheet'], + 'data': [ + 'views/project_issue_templates.xml', + 'security/ir.model.access.csv', + 'security/portal_security.xml', + ], + 'installable': True, + 'auto_install': True, + 'category': 'Hidden', +} diff --git a/addons/website_project_issue_sheet/security/ir.model.access.csv b/addons/website_project_issue_sheet/security/ir.model.access.csv new file mode 100644 index 00000000000..02ea69acb45 --- /dev/null +++ b/addons/website_project_issue_sheet/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_timesheets_portal,access_timesheets_portal,analytic.model_account_analytic_line,base.group_portal,1,0,0,0 diff --git a/addons/website_project_issue_sheet/security/portal_security.xml b/addons/website_project_issue_sheet/security/portal_security.xml new file mode 100644 index 00000000000..eb7c7f7a660 --- /dev/null +++ b/addons/website_project_issue_sheet/security/portal_security.xml @@ -0,0 +1,19 @@ + + + + + + Project/Issue Timesheets: frontend access + + ['|', + '&', + ('issue_id.project_id.privacy_visibility', '=', 'portal'), + ('issue_id.message_follower_ids', 'child_of', [user.partner_id.commercial_partner_id.id]), + '&', + ('issue_id.project_id.privacy_visibility', '=', 'followers'), + ('issue_id.message_follower_ids', 'in', [user.partner_id.id]), + ] + + + + diff --git a/addons/website_project_issue_sheet/views/project_issue_templates.xml b/addons/website_project_issue_sheet/views/project_issue_templates.xml new file mode 100644 index 00000000000..4c27cd4b171 --- /dev/null +++ b/addons/website_project_issue_sheet/views/project_issue_templates.xml @@ -0,0 +1,26 @@ + + + +