summaryrefslogtreecommitdiff
path: root/addons/website_project_issue
diff options
context:
space:
mode:
authorAntony Lesuisse <al@openerp.com>2015-08-14 13:19:31 +0200
committerAntony Lesuisse <al@openerp.com>2015-08-14 13:19:31 +0200
commit3286dc2ec74e5be3e87e39114fad90068d2cb8fa (patch)
tree48bda72c201e76db21a86f009b5a2e06af8b84e9 /addons/website_project_issue
parentf8357a1a605d1c74d09d7ea5d74ab53ce77aa085 (diff)
parent60514d0d0d7254c17ecebad99423f26fd4138d8e (diff)
[MERGE] project_issue: website portal
- Remove portal_project move rules to project - Add issues in the /my/home frontend portal - Remove website_project, task access is backend only
Diffstat (limited to 'addons/website_project_issue')
-rw-r--r--addons/website_project_issue/__init__.py2
-rw-r--r--addons/website_project_issue/__openerp__.py8
-rw-r--r--addons/website_project_issue/controllers/__init__.py4
-rw-r--r--addons/website_project_issue/controllers/main.py29
-rw-r--r--addons/website_project_issue/portal_project_issue_view.xml29
-rw-r--r--addons/website_project_issue/security/ir.model.access.csv1
-rw-r--r--addons/website_project_issue/security/portal_security.xml17
-rw-r--r--addons/website_project_issue/static/src/css/portal_project_issue.css30
-rw-r--r--addons/website_project_issue/tests/test_access_rights.py48
-rw-r--r--addons/website_project_issue/views/portal_project_issue.xml10
-rw-r--r--addons/website_project_issue/views/project_issue_templates.xml97
-rw-r--r--addons/website_project_issue/website_project_issue_view.xml9
12 files changed, 144 insertions, 140 deletions
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/<int:issue_id>'], 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 @@
-<?xml version="1.0" encoding="utf-8"?>
-<openerp>
- <data>
-
- <record id="open_view_issue" model="ir.actions.act_window">
- <field name="name">Issues</field>
- <field name="res_model">project.issue</field>
- <field name="view_type">form</field>
- <field name="view_mode">tree,form</field>
- <field name="view_id" ref="project_issue.project_issue_tree_view"/>
- <field name="domain" eval=""/>
- <field name="context">{"search_default_user_id":'', "search_default_draft":'', "search_default_todo":'', "portal":'True'}</field>
- <field name="search_view_id" ref="project_issue.view_project_issue_filter"/>
- <field name="target">current</field>
- <field name="help" type="html">
- <p class="oe_view_nocontent_create">
- Click to create an issue.
- </p><p>
- You can track your issues from this menu and the action we
- will take.
- </p>
- </field>
- </record>
-
- <menuitem name="Issues" id="portal_services_issues" parent="portal.portal_projects"
- action="open_view_issue" sequence="10"/>
-
- </data>
-</openerp>
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 @@
<data noupdate="1">
<record id="portal_issue_rule" model="ir.rule">
- <field name="name">Project/Issue: portal users: public or (portal and colleagues following) or (followers and following)</field>
+ <field name="name">Project/Issue: portal users: (portal and colleagues following) or (followers and following)</field>
<field name="model_id" ref="project_issue.model_project_issue"/>
- <field name="domain_force">['|', '|',
- ('project_id.privacy_visibility', 'in', ['public']),
+ <field name="domain_force">['|',
'&amp;',
('project_id.privacy_visibility', '=', 'portal'),
('message_follower_ids', 'child_of', [user.partner_id.commercial_partner_id.id]),
@@ -18,21 +17,13 @@
</record>
<record model="ir.rule" id="project_issue.issue_user_rule">
- <field name="name">Project/Issue: employees: public, portal, employee or (followers and following)</field>
+ <field name="name">Project/Issue: employees: portal, employee or (followers and following)</field>
<field name="domain_force">['|',
- ('project_id.privacy_visibility', 'in', ['public', 'portal', 'employees']),
+ ('project_id.privacy_visibility', 'in', ['portal', 'employees']),
'&amp;',
('project_id.privacy_visibility', '=', 'followers'),
('message_follower_ids', 'in', [user.partner_id.id]),
]</field>
</record>
-
- <record model="ir.rule" id="issue_public_rule">
- <field name="name">Project/Issue: public users: public only</field>
- <field name="model_id" ref="project_issue.model_project_issue"/>
- <field name="domain_force">[('project_id.privacy_visibility', '=', 'public')]</field>
- <field name="groups" eval="[(4, ref('base.group_public'))]"/>
- </record>
-
</data>
</openerp>
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 @@
-<?xml version="1.0" encoding="utf-8"?>
-<openerp>
- <data>
- <template id="assets_backend" name="portal_project_issue assets" inherit_id="web.assets_backend">
- <xpath expr="." position="inside">
- <link rel="stylesheet" href="/website_project_issue/static/src/css/portal_project_issue.css"/>
- </xpath>
- </template>
- </data>
-</openerp>
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 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+ <template id="portal_project_issue" name="Portal Project Issues" inherit_id="website_portal.account">
+ <xpath expr="//div[contains(@class,'o_my_documents')]/*[last()]" position="after">
+ <h3 class="page-header">Your Issues</h3>
+ <t t-if="not issues">
+ <p>There are currently no issues for your account.</p>
+ </t>
+ <t t-if="issues">
+ <table class="table table-hover status_table">
+ <thead>
+ <tr class="active">
+ <th>Issue</th>
+ <th>Description</th><th/>
+ <th>Status</th>
+ </tr>
+ </thead>
+ <t t-foreach="issues" t-as="issue">
+ <tr t-att-class="'hidden to_hide' if issue_index &gt; 4 else ''">
+ <td><a t-attf-href="/my/issues/#{issue.id}">Issue <t t-esc="issue.id"/></a></td>
+ <td><span t-field="issue.name"/></td><td/>
+ <td><span t-field="issue.stage_id.name"/></td>
+ </tr>
+ </t>
+ <tr t-att-class="'hidden' if len(issues) &lt; 6 else ''">
+ <td colspan="4">
+ <a href="" class="o_my_show_more btn btn-xs btn-default"><span>Show more</span><span class="hidden">Show less</span></a>
+ </td>
+ </tr>
+ </table>
+ </t>
+ </xpath>
+ </template>
+
+ <template id="issues_followup" name="Project Issues">
+ <t t-call="website.layout">
+ <div id="wrap">
+ <div class="container">
+ <div class="oe_structure">
+ <div class="row">
+ <div class="col-sm-4">
+ <ol class="breadcrumb mt8">
+ <li><a href="/my/home">My Account</a></li>
+ <li>Issue <span t-field="issue.id"/></li>
+ </ol>
+ </div>
+ </div>
+ </div>
+ <div class="container">
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <div class="row">
+ <div class="col-md-12">
+ <h4>
+ Issue <span t-field="issue.id"/> - <span t-field="issue.name"/>
+ <span t-field="issue.stage_id.name" class="pull-right label label-info" title="Current stage of this issue"/>
+ </h4>
+ </div>
+ </div>
+ </div>
+ <div class="panel-body">
+ <div class="mb8">
+ <strong>Date:</strong> <span t-field="issue.create_date" t-field-options='{"widget": "date"}'/>
+ </div>
+ <div class='row'>
+ <div class="col-md-6" t-if="issue.user_id">
+ <strong>Assigned to</strong>
+ <div>
+ <address t-field="issue.user_id" t-field-options='{"widget": "contact", "fields": ["name", "email", "phone"], "no_marker": true}'/>
+ </div>
+ </div>
+ <div class="col-md-6">
+ <strong>Reported by</strong>
+ <div t-if="issue.partner_id">
+ <address t-field="issue.partner_id" t-field-options='{"widget": "contact", "fields": ["name", "email"], "no_marker": true}'/>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="row mt32">
+ <div class="col-md-12">
+ <h4><strong>Message and communication history</strong></h4>
+ </div>
+ <div class="col-md-10 col-md-offset-1 mt16">
+ <t t-call="website_mail.message_thread">
+ <t t-set="object" t-value="issue"/>
+ <t t-set="chatter_mode" t-value="'json'"/>
+ </t>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </t>
+ </template>
+</odoo>
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 @@
-<?xml version="1.0" encoding="utf-8"?>
-<odoo>
- <template id="website_project_issue.link_issues" name="Issues Link from User Account" inherit_id="website.layout" groups="base.group_portal">
- <xpath expr="//li[@id='o_logout']" position="before">
- <li><a href="/web#action=website_project_issue.open_view_issue" role="menuitem">Issues</a></li>
- </xpath>
- </template>
-</odoo>
- \ No newline at end of file