summaryrefslogtreecommitdiff
path: root/addons/project_issue
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2014-09-05 15:28:22 +0200
committerChristophe Simonis <chs@odoo.com>2014-09-05 15:28:22 +0200
commit31bf30d2d0eb78baaa36360b99fe58bf7cd4c9e7 (patch)
treed7be61ecd6bb4c8b5552e39b03e2a64eebbbf323 /addons/project_issue
parentafba9e8817c458640ae446ac7aaaab79be4fe1e9 (diff)
parented1c173971968eaa96693cb4e1547efa6e6c34e0 (diff)
[MERGE] forward port of branch 8.0 up to ed1c173
Diffstat (limited to 'addons/project_issue')
-rw-r--r--addons/project_issue/__openerp__.py4
-rw-r--r--addons/project_issue/i18n/project_issue.pot856
-rw-r--r--addons/project_issue/project_issue.py155
-rw-r--r--addons/project_issue/project_issue_menu.xml9
-rw-r--r--addons/project_issue/project_issue_view.xml64
-rw-r--r--addons/project_issue/report/project_issue_report.py21
-rw-r--r--addons/project_issue/report/project_issue_report_view.xml39
7 files changed, 520 insertions, 628 deletions
diff --git a/addons/project_issue/__openerp__.py b/addons/project_issue/__openerp__.py
index 4f7045f6aca..c0f531bf4cf 100644
--- a/addons/project_issue/__openerp__.py
+++ b/addons/project_issue/__openerp__.py
@@ -21,7 +21,7 @@
##############################################################################
{
- 'name': 'Issue Tracker',
+ 'name': 'Issue Tracking',
'version': '1.0',
'category': 'Project Management',
'sequence': 9,
@@ -34,7 +34,7 @@ This application allows you to manage the issues you might face in a project lik
It allows the manager to quickly check the issues, assign them and decide on their status quickly as they evolve.
""",
'author': 'OpenERP SA',
- 'website': 'http://www.openerp.com',
+ 'website': 'https://www.odoo.com/page/project-management',
'images': ['images/issue_analysis.jpeg','images/project_issue.jpeg'],
'depends': [
'sales_team',
diff --git a/addons/project_issue/i18n/project_issue.pot b/addons/project_issue/i18n/project_issue.pot
index b11d1d8d378..f6c046f63a7 100644
--- a/addons/project_issue/i18n/project_issue.pot
+++ b/addons/project_issue/i18n/project_issue.pot
@@ -1,13 +1,13 @@
-# Translation of OpenERP Server.
+# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * project_issue
#
msgid ""
msgstr ""
-"Project-Id-Version: OpenERP Server 7.0alpha\n"
+"Project-Id-Version: Odoo Server 8.0rc1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-12-21 17:04+0000\n"
-"PO-Revision-Date: 2012-12-21 17:04+0000\n"
+"POT-Creation-Date: 2014-08-14 13:08+0000\n"
+"PO-Revision-Date: 2014-08-14 13:08+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@@ -16,72 +16,56 @@ msgstr ""
"Plural-Forms: \n"
#. module: project_issue
-#: model:project.category,name:project_issue.project_issue_category_03
-msgid "Deadly bug"
-msgstr ""
-
-#. module: project_issue
-#: help:project.config.settings,fetchmail_issue:0
-msgid "Allows you to configure your incoming mail server, and create issues from incoming emails."
-msgstr ""
-
-#. module: project_issue
-#: field:project.issue.report,delay_open:0
-msgid "Avg. Delay to Open"
-msgstr ""
-
-#. module: project_issue
-#: view:project.issue:0
-#: view:project.issue.report:0
-msgid "Group By..."
-msgstr ""
-
-#. module: project_issue
-#: field:project.issue,working_hours_open:0
-msgid "Working Hours to Open the Issue"
-msgstr ""
-
-#. module: project_issue
-#: model:mail.message.subtype,description:project_issue.mt_issue_started
-msgid "Issue started"
-msgstr ""
-
-#. module: project_issue
-#: field:project.issue,date_open:0
-msgid "Opened"
+#: field:project.issue.report,email:0
+msgid "# Emails"
msgstr ""
#. module: project_issue
-#: field:project.issue.report,opening_date:0
-msgid "Date of Opening"
+#: field:res.partner,issue_count:0
+msgid "# Issues"
msgstr ""
#. module: project_issue
-#: selection:project.issue.report,month:0
-msgid "March"
+#: field:project.issue.report,nbr:0
+msgid "# of Issues"
msgstr ""
#. module: project_issue
-#: field:project.issue,progress:0
-msgid "Progress (%)"
+#: code:addons/project_issue/project_issue.py:299
+#, python-format
+msgid "%s (copy)"
msgstr ""
#. module: project_issue
-#: view:project.issue:0
-#: field:project.issue,message_unread:0
-msgid "Unread Messages"
+#: model:ir.actions.act_window,help:project_issue.project_issue_version_action
+msgid "<p class=\"oe_view_nocontent_create\">\n"
+" Click to add a new version.\n"
+" </p><p>\n"
+" Define here the different versions of your products on which\n"
+" you can work on issues.\n"
+" </p>\n"
+" "
msgstr ""
#. module: project_issue
-#: field:project.issue,company_id:0
-#: view:project.issue.report:0
-#: field:project.issue.report,company_id:0
-msgid "Company"
+#: model:ir.actions.act_window,help:project_issue.act_project_project_2_project_issue_all
+#: model:ir.actions.act_window,help:project_issue.action_view_issues
+msgid "<p>\n"
+" The Odoo issues tacker allows you to efficiantly manage things\n"
+" like internal requests, software development bugs, customer\n"
+" complaints, project troubles, material breakdowns, etc.\n"
+" </p>\n"
+" "
msgstr ""
#. module: project_issue
-#: field:project.issue,email_cc:0
-msgid "Watchers Emails"
+#: model:ir.actions.act_window,help:project_issue.project_issue_categ_act0
+msgid "<p>\n"
+" The Odoo issues tacker allows you to efficiantly manage things\n"
+" like internal requests, software development bugs, customer\n"
+" complaints, project troubles, material breakdowns, etc.\n"
+" </p>\n"
+" "
msgstr ""
#. module: project_issue
@@ -93,487 +77,462 @@ msgid "A Issue's kanban state indicates special situations affecting it:\n"
msgstr ""
#. module: project_issue
-#: help:project.issue,message_unread:0
-msgid "If checked new messages require your attention."
+#: field:project.issue,active:0
+#: field:project.issue.version,active:0
+msgid "Active"
msgstr ""
#. module: project_issue
-#: help:account.analytic.account,use_issues:0
-msgid "Check this field if this project manages issues"
+#: view:project.issue:project_issue.project_issue_form_view
+msgid "Add an internal note..."
msgstr ""
#. module: project_issue
-#: field:project.issue,day_open:0
-msgid "Days to Open"
+#: help:project.config.settings,fetchmail_issue:0
+msgid "Allows you to configure your incoming mail server, and create issues from incoming emails."
msgstr ""
#. module: project_issue
-#: code:addons/project_issue/project_issue.py:465
-#, python-format
-msgid "You cannot escalate this issue.\n"
-"The relevant Project has not configured the Escalation Project!"
+#: model:ir.model,name:project_issue.model_account_analytic_account
+msgid "Analytic Account"
msgstr ""
#. module: project_issue
-#: constraint:project.project:0
-msgid "Error! You cannot assign escalation to the same project!"
+#: field:project.issue,date_open:0
+msgid "Assigned"
msgstr ""
#. module: project_issue
-#: selection:project.issue,priority:0
-#: selection:project.issue.report,priority:0
-msgid "Highest"
+#: field:project.issue,user_id:0
+#: view:project.issue.report:project_issue.view_project_issue_report_filter
+#: field:project.issue.report,user_id:0
+msgid "Assigned to"
msgstr ""
#. module: project_issue
-#: help:project.issue,inactivity_days:0
-msgid "Difference in days between last action and current date"
+#: field:project.issue.report,delay_close:0
+msgid "Avg. Delay to Close"
msgstr ""
#. module: project_issue
-#: view:project.issue.report:0
-#: field:project.issue.report,day:0
-msgid "Day"
+#: field:project.issue.report,delay_open:0
+msgid "Avg. Delay to Open"
msgstr ""
#. module: project_issue
-#: field:project.issue,days_since_creation:0
-msgid "Days since creation date"
+#: field:project.issue.report,working_hours_close:0
+msgid "Avg. Working Hours to Close"
msgstr ""
#. module: project_issue
-#: field:project.issue,task_id:0
-#: view:project.issue.report:0
-#: field:project.issue.report,task_id:0
-msgid "Task"
+#: field:project.issue.report,working_hours_open:0
+msgid "Avg. Working Hours to Open"
msgstr ""
#. module: project_issue
-#: model:mail.message.subtype,name:project_issue.mt_project_issue_stage
-msgid "Issue Stage Changed"
+#: selection:project.issue,kanban_state:0
+msgid "Blocked"
msgstr ""
#. module: project_issue
-#: field:project.issue,message_ids:0
-msgid "Messages"
+#: model:ir.filters,name:project_issue.filter_issue_report_responsible
+msgid "By Responsible"
msgstr ""
#. module: project_issue
-#: field:project.issue,inactivity_days:0
-msgid "Days since last action"
+#: view:project.issue:project_issue.project_issue_kanban_view
+msgid "Category:"
msgstr ""
#. module: project_issue
-#: model:ir.model,name:project_issue.model_project_project
-#: view:project.issue:0
-#: field:project.issue,project_id:0
-#: view:project.issue.report:0
-#: field:project.issue.report,project_id:0
-msgid "Project"
+#: field:project.issue,channel:0
+#: field:project.issue.report,channel:0
+msgid "Channel"
msgstr ""
#. module: project_issue
-#: model:ir.actions.act_window,help:project_issue.project_issue_categ_act0
-msgid "<p class=\"oe_view_nocontent_create\">\n"
-" Click to report a new issue.\n"
-" </p><p>\n"
-" The OpenERP issues tacker allows you to efficiantly manage things\n"
-" like internal requests, software development bugs, customer\n"
-" complaints, project troubles, material breakdowns, etc.\n"
-" </p>\n"
-" "
+#: help:account.analytic.account,use_issues:0
+msgid "Check this field if this project manages issues"
msgstr ""
#. module: project_issue
-#: selection:project.issue,state:0
-#: selection:project.issue.report,state:0
-msgid "Cancelled"
+#: field:project.issue,date_closed:0
+msgid "Closed"
msgstr ""
#. module: project_issue
-#: field:project.issue,description:0
-msgid "Private Note"
+#: field:project.issue,color:0
+msgid "Color Index"
msgstr ""
#. module: project_issue
-#: field:project.issue.report,date_closed:0
-msgid "Date of Closing"
+#: help:project.issue.report,channel:0
+msgid "Communication Channel."
msgstr ""
#. module: project_issue
-#: view:project.issue:0
-msgid "Issue Tracker Search"
+#: help:project.issue,channel:0
+msgid "Communication channel."
msgstr ""
#. module: project_issue
-#: field:project.issue,color:0
-msgid "Color Index"
+#: field:project.issue,company_id:0
+#: view:project.issue.report:project_issue.view_project_issue_report_filter
+#: field:project.issue.report,company_id:0
+msgid "Company"
msgstr ""
#. module: project_issue
-#: field:project.issue.report,working_hours_open:0
-msgid "Avg. Working Hours to Open"
+#: help:project.issue,progress:0
+msgid "Computed as: Time Spent / Total Time."
msgstr ""
#. module: project_issue
-#: model:ir.model,name:project_issue.model_account_analytic_account
-msgid "Analytic Account"
+#: view:project.config.settings:project_issue.view_config_settings
+msgid "Configure"
msgstr ""
#. module: project_issue
-#: help:project.issue,message_summary:0
-msgid "Holds the Chatter summary (number of messages, ...). This summary is directly in html format in order to be inserted in kanban views."
+#: view:project.issue:project_issue.view_project_issue_filter
+#: field:project.issue,partner_id:0
+#: view:project.issue.report:project_issue.view_project_issue_report_filter
+#: field:project.issue.report,partner_id:0
+msgid "Contact"
msgstr ""
#. module: project_issue
-#: help:project.project,project_escalation_id:0
-msgid "If any issue is escalated from the current Project, it will be listed under the project selected here."
+#: view:project.issue.report:project_issue.view_project_issue_report_filter
+#: field:project.issue.report,create_date:0
+msgid "Create Date"
msgstr ""
#. module: project_issue
-#: view:project.issue:0
-msgid "Extra Info"
+#: field:project.config.settings,fetchmail_issue:0
+msgid "Create issues from an incoming email account "
msgstr ""
#. module: project_issue
-#: model:ir.actions.act_window,help:project_issue.action_project_issue_report
-msgid "This report on the project issues allows you to analyse the quality of your support or after-sales services. You can track the issues per age. You can analyse the time required to open or close an issue, the number of email to exchange and the time spent on average by issues."
+#: field:project.issue,create_uid:0
+#: field:project.issue.version,create_uid:0
+msgid "Created by"
msgstr ""
#. module: project_issue
-#: view:project.issue:0
-msgid "Edit..."
+#: field:project.issue.version,create_date:0
+msgid "Created on"
msgstr ""
#. module: project_issue
-#: view:project.issue:0
-msgid "Responsible"
+#: field:project.issue,create_date:0
+msgid "Creation Date"
msgstr ""
#. module: project_issue
-#: view:project.issue:0
-msgid "Statistics"
+#: view:project.issue:project_issue.view_project_issue_filter
+msgid "Creation Month"
msgstr ""
#. module: project_issue
-#: field:project.issue,kanban_state:0
-msgid "Kanban State"
+#: code:addons/project_issue/project_issue.py:424
+#, python-format
+msgid "Customer"
msgstr ""
#. module: project_issue
-#: code:addons/project_issue/project_issue.py:360
+#: code:addons/project_issue/project_issue.py:426
#, python-format
-msgid "Project issue <b>converted</b> to task."
+msgid "Customer Email"
msgstr ""
#. module: project_issue
-#: view:project.issue:0
-#: field:project.issue,priority:0
-#: view:project.issue.report:0
-#: field:project.issue.report,priority:0
-msgid "Priority"
+#: field:project.issue,date:0
+msgid "Date"
msgstr ""
#. module: project_issue
-#: view:project.issue:0
-#: field:project.issue,version_id:0
-#: view:project.issue.report:0
-#: field:project.issue.report,version_id:0
-msgid "Version"
+#: field:project.issue.report,date_closed:0
+msgid "Date of Closing"
msgstr ""
#. module: project_issue
-#: field:project.issue,message_follower_ids:0
-msgid "Followers"
+#: field:project.issue.report,opening_date:0
+msgid "Date of Opening"
msgstr ""
#. module: project_issue
-#: view:project.issue:0
-#: selection:project.issue,state:0
-#: view:project.issue.report:0
-msgid "New"
+#: help:project.issue,message_last_post:0
+msgid "Date of the last message posted on the record."
msgstr ""
#. module: project_issue
-#: model:ir.actions.act_window,name:project_issue.project_issue_categ_action
-msgid "Issue Categories"
+#: field:project.issue,days_since_creation:0
+msgid "Days since creation date"
msgstr ""
#. module: project_issue
-#: field:project.issue,email_from:0
-msgid "Email"
+#: field:project.issue,inactivity_days:0
+msgid "Days since last action"
msgstr ""
#. module: project_issue
-#: field:project.issue,channel_id:0
-#: field:project.issue.report,channel_id:0
-msgid "Channel"
+#: field:project.issue,day_open:0
+msgid "Days to Assign"
msgstr ""
#. module: project_issue
-#: selection:project.issue,priority:0
-#: selection:project.issue.report,priority:0
-msgid "Lowest"
+#: field:project.issue,day_close:0
+msgid "Days to Close"
msgstr ""
#. module: project_issue
-#: code:addons/project_issue/project_issue.py:382
-#, python-format
-msgid "%s (copy)"
+#: field:project.issue,date_deadline:0
+msgid "Deadline"
msgstr ""
#. module: project_issue
-#: view:project.issue:0
-msgid "Unassigned Issues"
+#: model:project.category,name:project_issue.project_issue_category_03
+msgid "Deadly bug"
msgstr ""
#. module: project_issue
-#: field:project.issue,create_date:0
-#: view:project.issue.report:0
-#: field:project.issue.report,creation_date:0
-msgid "Creation Date"
+#: view:project.issue:project_issue.project_issue_kanban_view
+msgid "Delete"
msgstr ""
#. module: project_issue
-#: model:ir.actions.act_window,name:project_issue.project_issue_version_action
-#: model:ir.ui.menu,name:project_issue.menu_project_issue_version_act
-msgid "Versions"
+#: view:project.issue:project_issue.project_issue_form_view
+msgid "Description"
msgstr ""
#. module: project_issue
-#: view:project.issue:0
-msgid "To Do Issues"
+#: help:project.issue,days_since_creation:0
+msgid "Difference in days between creation date and current date"
msgstr ""
#. module: project_issue
-#: model:ir.model,name:project_issue.model_project_issue_version
-msgid "project.issue.version"
+#: help:project.issue,inactivity_days:0
+msgid "Difference in days between last action and current date"
msgstr ""
#. module: project_issue
-#: field:project.config.settings,fetchmail_issue:0
-msgid "Create issues from an incoming email account "
+#: field:project.issue,duration:0
+msgid "Duration"
msgstr ""
#. module: project_issue
-#: view:project.issue:0
-#: selection:project.issue,state:0
-#: view:project.issue.report:0
-msgid "Done"
+#: view:project.issue:project_issue.project_issue_kanban_view
+msgid "Edit..."
msgstr ""
#. module: project_issue
-#: selection:project.issue.report,month:0
-msgid "July"
+#: field:project.issue,email_from:0
+msgid "Email"
msgstr ""
#. module: project_issue
-#: model:ir.ui.menu,name:project_issue.menu_project_issue_category_act
-msgid "Categories"
+#: constraint:project.project:0
+msgid "Error! You cannot assign escalation to the same project!"
msgstr ""
#. module: project_issue
-#: view:project.issue:0
-#: field:project.issue,stage_id:0
-#: view:project.issue.report:0
-#: field:project.issue.report,stage_id:0
-msgid "Stage"
+#: view:project.issue:project_issue.project_issue_form_view
+msgid "Extra Info"
msgstr ""
#. module: project_issue
-#: model:ir.actions.act_window,name:project_issue.action_project_issue_report
-#: model:ir.ui.menu,name:project_issue.menu_project_issue_report_tree
-#: view:project.issue.report:0
-msgid "Issues Analysis"
+#: view:project.issue:project_issue.project_feature_tree_view
+msgid "Feature Tracker Tree"
msgstr ""
#. module: project_issue
-#: code:addons/project_issue/project_issue.py:485
-#, python-format
-msgid "No Subject"
+#: view:project.issue:project_issue.project_feature_tree_view
+msgid "Feature description"
msgstr ""
#. module: project_issue
-#: model:ir.actions.act_window,name:project_issue.action_view_my_project_issue_tree
-msgid "My Project Issues"
+#: field:project.issue,message_follower_ids:0
+msgid "Followers"
msgstr ""
#. module: project_issue
-#: view:project.issue:0
-#: field:project.issue,partner_id:0
-#: view:project.issue.report:0
-#: field:project.issue.report,partner_id:0
-msgid "Contact"
+#: view:project.issue:project_issue.view_project_issue_filter
+#: view:project.issue.report:project_issue.view_project_issue_report_filter
+msgid "Group By"
msgstr ""
#. module: project_issue
-#: view:project.issue:0
-msgid "Delete"
+#: selection:project.issue,priority:0
+#: selection:project.issue.report,priority:0
+msgid "High"
msgstr ""
#. module: project_issue
-#: code:addons/project_issue/project_issue.py:365
-#, python-format
-msgid "Tasks"
+#: help:project.issue,message_summary:0
+msgid "Holds the Chatter summary (number of messages, ...). This summary is directly in html format in order to be inserted in kanban views."
msgstr ""
#. module: project_issue
-#: field:project.issue.report,nbr:0
-msgid "# of Issues"
+#: field:project.issue,id:0
+#: field:project.issue.report,id:0
+#: field:project.issue.version,id:0
+msgid "ID"
msgstr ""
#. module: project_issue
-#: selection:project.issue.report,month:0
-msgid "September"
+#: help:project.project,project_escalation_id:0
+msgid "If any issue is escalated from the current Project, it will be listed under the project selected here."
msgstr ""
#. module: project_issue
-#: selection:project.issue.report,month:0
-msgid "December"
+#: help:project.issue,message_unread:0
+msgid "If checked new messages require your attention."
msgstr ""
#. module: project_issue
-#: field:project.issue,categ_ids:0
-msgid "Tags"
+#: field:project.issue,message_is_follower:0
+msgid "Is a Follower"
msgstr ""
#. module: project_issue
-#: view:project.issue:0
-msgid "Issue Tracker Tree"
+#: view:project.issue:project_issue.project_issue_form_view
+#: view:project.issue:project_issue.view_project_issue_filter
+#: field:project.issue,name:0
+msgid "Issue"
msgstr ""
#. module: project_issue
-#: model:project.category,name:project_issue.project_issue_category_01
-msgid "Little problem"
+#: model:mail.message.subtype,name:project_issue.mt_issue_assigned
+#: model:mail.message.subtype,name:project_issue.mt_project_issue_assigned
+msgid "Issue Assigned"
msgstr ""
#. module: project_issue
-#: view:project.project:0
-msgid "creates"
+#: model:mail.message.subtype,name:project_issue.mt_issue_blocked
+#: model:mail.message.subtype,name:project_issue.mt_project_issue_blocked
+msgid "Issue Blocked"
msgstr ""
#. module: project_issue
-#: model:crm.case.categ,name:project_issue.feature_request_categ
-msgid "Feature Requests"
+#: model:mail.message.subtype,name:project_issue.mt_issue_new
+#: model:mail.message.subtype,name:project_issue.mt_project_issue_new
+msgid "Issue Created"
msgstr ""
#. module: project_issue
-#: field:project.issue,write_date:0
-msgid "Update Date"
+#: model:mail.message.subtype,description:project_issue.mt_issue_ready
+#: model:mail.message.subtype,name:project_issue.mt_issue_ready
+msgid "Issue Ready for Next Stage"
msgstr ""
#. module: project_issue
-#: view:project.issue:0
-msgid "Project:"
+#: model:mail.message.subtype,name:project_issue.mt_project_issue_stage
+msgid "Issue Stage Changed"
msgstr ""
#. module: project_issue
-#: view:project.issue:0
-msgid "Open Features"
+#: view:project.issue:project_issue.view_project_issue_filter
+msgid "Issue Tracker Search"
msgstr ""
#. module: project_issue
-#: field:project.issue,date_action_next:0
-msgid "Next Action"
+#: view:project.issue:project_issue.project_issue_tree_view
+msgid "Issue Tracker Tree"
msgstr ""
#. module: project_issue
-#: view:project.issue:0
-#: selection:project.issue,kanban_state:0
-msgid "Blocked"
+#: view:project.issue.version:project_issue.project_issue_version_form_view
+#: view:project.issue.version:project_issue.project_issue_version_search_view
+msgid "Issue Version"
msgstr ""
#. module: project_issue
-#: field:project.issue,user_email:0
-msgid "User Email"
+#: model:mail.message.subtype,description:project_issue.mt_issue_assigned
+msgid "Issue assigned"
msgstr ""
#. module: project_issue
-#: view:project.issue.report:0
-msgid "#Number of Project Issues"
+#: model:mail.message.subtype,description:project_issue.mt_issue_blocked
+msgid "Issue blocked"
msgstr ""
#. module: project_issue
-#: help:project.issue,channel_id:0
-msgid "Communication channel."
+#: model:mail.message.subtype,description:project_issue.mt_issue_new
+msgid "Issue created"
msgstr ""
#. module: project_issue
-#: help:project.issue,email_cc:0
-msgid "These email addresses will be added to the CC field of all inbound and outbound emails for this record before being sent. Separate multiple email addresses with a comma"
+#: field:account.analytic.account,use_issues:0
+#: model:ir.actions.act_window,name:project_issue.act_project_project_2_project_issue_all
+#: model:ir.actions.act_window,name:project_issue.action_view_issues
+#: model:ir.actions.act_window,name:project_issue.project_issue_categ_act0
+#: model:ir.ui.menu,name:project_issue.menu_project_confi
+#: model:ir.ui.menu,name:project_issue.menu_project_issue_track
+#: view:project.issue:project_issue.project_issue_calendar_view
+#: view:project.project:project_issue.view_project_form_inherited
+#: view:project.project:project_issue.view_project_kanban_inherited
+#: field:project.project,issue_count:0
+#: view:res.partner:project_issue.res_partner_issues_button_view
+msgid "Issues"
msgstr ""
#. module: project_issue
-#: model:crm.case.categ,name:project_issue.bug_categ
-msgid "Maintenance"
+#: model:ir.actions.act_window,name:project_issue.action_project_issue_report
+#: model:ir.ui.menu,name:project_issue.menu_project_issue_report_tree
+msgid "Issues Analysis"
msgstr ""
#. module: project_issue
-#: selection:project.issue.report,state:0
-msgid "Draft"
+#: field:project.issue,kanban_state:0
+msgid "Kanban State"
msgstr ""
#. module: project_issue
-#: selection:project.issue,priority:0
-#: selection:project.issue.report,priority:0
-msgid "Low"
+#: field:project.issue,date_action_last:0
+msgid "Last Action"
msgstr ""
#. module: project_issue
-#: field:project.issue,date_closed:0
-#: selection:project.issue.report,state:0
-msgid "Closed"
+#: view:project.issue:project_issue.view_project_issue_filter
+msgid "Last Message"
msgstr ""
#. module: project_issue
-#: field:project.issue.report,delay_close:0
-msgid "Avg. Delay to Close"
+#: field:project.issue,message_last_post:0
+msgid "Last Message Date"
msgstr ""
#. module: project_issue
-#: selection:project.issue,state:0
-#: view:project.issue.report:0
-#: selection:project.issue.report,state:0
-msgid "Pending"
+#: field:project.issue,date_last_stage_update:0
+#: view:project.issue.report:project_issue.view_project_issue_report_filter
+#: field:project.issue.report,date_last_stage_update:0
+msgid "Last Stage Update"
msgstr ""
#. module: project_issue
-#: view:project.issue:0
-#: field:project.issue,state:0
-#: field:project.issue.report,state:0
-msgid "Status"
+#: field:project.issue,write_uid:0
+#: field:project.issue.version,write_uid:0
+msgid "Last Updated by"
msgstr ""
#. module: project_issue
-#: view:project.issue.report:0
-msgid "#Project Issues"
+#: field:project.issue.version,write_date:0
+msgid "Last Updated on"
msgstr ""
#. module: project_issue
-#: selection:project.issue.report,month:0
-msgid "August"
+#: model:project.category,name:project_issue.project_issue_category_01
+msgid "Little problem"
msgstr ""
#. module: project_issue
-#: selection:project.issue,kanban_state:0
#: selection:project.issue,priority:0
#: selection:project.issue.report,priority:0
-msgid "Normal"
-msgstr ""
-
-#. module: project_issue
-#: field:project.project,issue_count:0
-msgid "unknown"
-msgstr ""
-
-#. module: project_issue
-#: view:project.issue:0
-msgid "Category:"
+msgid "Low"
msgstr ""
#. module: project_issue
-#: selection:project.issue.report,month:0
-msgid "June"
+#: field:project.issue,message_ids:0
+msgid "Messages"
msgstr ""
#. module: project_issue
@@ -582,202 +541,122 @@ msgid "Messages and communication history"
msgstr ""
#. module: project_issue
-#: view:project.issue:0
-msgid "New Issues"
+#: view:project.issue:project_issue.view_project_issue_filter
+msgid "My Issues"
msgstr ""
#. module: project_issue
-#: field:project.issue,day_close:0
-msgid "Days to Close"
+#: view:project.issue.report:project_issue.view_project_issue_report_filter
+msgid "My Task"
msgstr ""
#. module: project_issue
-#: field:project.issue,message_is_follower:0
-msgid "Is a Follower"
-msgstr ""
-
-#. module: project_issue
-#: help:project.issue,state:0
-msgid "The status is set to 'Draft', when a case is created. If the case is in progress the status is set to 'Open'. When the case is over, the status is set to 'Done'. If the case needs to be reviewed then the status is set to 'Pending'."
+#: view:project.issue:project_issue.view_project_issue_filter
+#: view:project.issue.report:project_issue.view_project_issue_report_filter
+msgid "New"
msgstr ""
#. module: project_issue
-#: field:project.issue,active:0
-#: field:project.issue.version,active:0
-msgid "Active"
+#: view:project.issue:project_issue.view_project_issue_filter
+msgid "New Mail"
msgstr ""
#. module: project_issue
-#: selection:project.issue.report,month:0
-msgid "November"
+#: field:project.issue,date_action_next:0
+msgid "Next Action"
msgstr ""
#. module: project_issue
-#: code:addons/project_issue/project_issue.py:465
+#: code:addons/project_issue/project_issue.py:440
#, python-format
-msgid "Warning!"
-msgstr ""
-
-#. module: project_issue
-#: view:project.issue.report:0
-msgid "Search"
-msgstr ""
-
-#. module: project_issue
-#: selection:project.issue.report,month:0
-msgid "October"
-msgstr ""
-
-#. module: project_issue
-#: help:project.issue,days_since_creation:0
-msgid "Difference in days between creation date and current date"
-msgstr ""
-
-#. module: project_issue
-#: selection:project.issue.report,month:0
-msgid "January"
-msgstr ""
-
-#. module: project_issue
-#: view:project.issue:0
-msgid "Feature Tracker Tree"
-msgstr ""
-
-#. module: project_issue
-#: help:project.issue,email_from:0
-msgid "These people will receive email."
-msgstr ""
-
-#. module: project_issue
-#: field:project.issue,message_summary:0
-msgid "Summary"
-msgstr ""
-
-#. module: project_issue
-#: field:project.issue,date:0
-msgid "Date"
-msgstr ""
-
-#. module: project_issue
-#: field:project.issue,user_id:0
-#: view:project.issue.report:0
-#: field:project.issue.report,user_id:0
-msgid "Assigned to"
+msgid "No Subject"
msgstr ""
#. module: project_issue
-#: view:project.config.settings:0
-msgid "Configure"
+#: selection:project.issue,kanban_state:0
+#: selection:project.issue,priority:0
+#: selection:project.issue.report,priority:0
+msgid "Normal"
msgstr ""
#. module: project_issue
-#: model:mail.message.subtype,description:project_issue.mt_issue_closed
-msgid "Issue closed"
+#: help:project.issue.report,delay_close:0
+msgid "Number of Days to close the project issue"
msgstr ""
#. module: project_issue
-#: view:project.issue:0
-msgid "Current Features"
+#: help:project.issue.report,delay_open:0
+msgid "Number of Days to open the project issue."
msgstr ""
#. module: project_issue
-#: view:project.issue.version:0
-msgid "Issue Version"
+#: model:project.category,name:project_issue.project_issue_category_02
+msgid "PBCK"
msgstr ""
#. module: project_issue
-#: field:project.issue.version,name:0
-msgid "Version Number"
+#: model:ir.model,name:project_issue.model_res_partner
+msgid "Partner"
msgstr ""
#. module: project_issue
-#: view:project.issue:0
-msgid "Cancel"
+#: view:project.issue:project_issue.project_feature_tree_view
+#: view:project.issue:project_issue.project_issue_tree_view
+#: field:project.issue,priority:0
+#: view:project.issue.report:project_issue.view_project_issue_report_filter
+#: field:project.issue.report,priority:0
+msgid "Priority"
msgstr ""
#. module: project_issue
-#: selection:project.issue.report,state:0
-msgid "Open"
+#: field:project.issue,description:0
+msgid "Private Note"
msgstr ""
#. module: project_issue
-#: field:account.analytic.account,use_issues:0
-#: model:ir.actions.act_window,name:project_issue.act_project_project_2_project_issue_all
-#: model:ir.actions.act_window,name:project_issue.project_issue_categ_act0
-#: model:ir.ui.menu,name:project_issue.menu_project_confi
-#: model:ir.ui.menu,name:project_issue.menu_project_issue_track
-#: view:project.issue:0
-#: view:project.project:0
-msgid "Issues"
+#: field:project.issue,progress:0
+msgid "Progress (%)"
msgstr ""
#. module: project_issue
-#: view:project.issue:0
-#: selection:project.issue,state:0
-msgid "In Progress"
+#: model:ir.model,name:project_issue.model_project_project
+#: view:project.issue:project_issue.view_project_issue_filter
+#: field:project.issue,project_id:0
+#: view:project.issue.report:project_issue.view_project_issue_report_filter
+#: field:project.issue.report,project_id:0
+msgid "Project"
msgstr ""
#. module: project_issue
-#: view:project.issue:0
-#: view:project.issue.report:0
-msgid "To Do"
+#: field:project.project,project_escalation_id:0
+msgid "Project Escalation"
msgstr ""
#. module: project_issue
#: model:ir.model,name:project_issue.model_project_issue
-#: view:project.issue.report:0
+#: view:project.issue.report:project_issue.view_project_issue_report_graph
msgid "Project Issue"
msgstr ""
#. module: project_issue
-#: view:project.issue:0
-msgid "Creation Month"
-msgstr ""
-
-#. module: project_issue
-#: help:project.issue,progress:0
-msgid "Computed as: Time Spent / Total Time."
+#: view:project.issue:project_issue.project_issue_kanban_view
+msgid "Project:"
msgstr ""
#. module: project_issue
-#: view:project.issue:0
#: selection:project.issue,kanban_state:0
msgid "Ready for next stage"
msgstr ""
#. module: project_issue
-#: view:project.issue.report:0
-#: field:project.issue.report,section_id:0
-msgid "Sale Team"
-msgstr ""
-
-#. module: project_issue
-#: view:project.issue:0
-#: view:project.issue.report:0
-#: field:project.issue.report,month:0
-msgid "Month"
-msgstr ""
-
-#. module: project_issue
-#: view:project.issue:0
-#: field:project.issue,name:0
-#: view:project.project:0
-msgid "Issue"
-msgstr ""
-
-#. module: project_issue
-#: model:project.category,name:project_issue.project_issue_category_02
-msgid "PBCK"
-msgstr ""
-
-#. module: project_issue
-#: view:project.issue:0
-msgid "Feature Tracker Search"
+#: view:project.issue:project_issue.view_project_issue_filter
+msgid "Responsible"
msgstr ""
#. module: project_issue
-#: view:project.issue:0
-msgid "Description"
+#: view:project.issue.report:project_issue.view_project_issue_report_filter
+#: field:project.issue.report,section_id:0
+msgid "Sale Team"
msgstr ""
#. module: project_issue
@@ -786,171 +665,166 @@ msgid "Sales Team"
msgstr ""
#. module: project_issue
-#: selection:project.issue.report,month:0
-msgid "May"
-msgstr ""
-
-#. module: project_issue
-#: model:ir.model,name:project_issue.model_project_config_settings
-msgid "project.config.settings"
+#: help:project.issue,section_id:0
+msgid "Sales team to which Case belongs to. Define Responsible user and Email account for mail gateway."
msgstr ""
#. module: project_issue
-#: model:mail.message.subtype,name:project_issue.mt_issue_closed
-#: model:mail.message.subtype,name:project_issue.mt_project_issue_closed
-msgid "Issue Closed"
+#: view:project.issue.report:project_issue.view_project_issue_report_filter
+msgid "Search"
msgstr ""
#. module: project_issue
-#: view:project.issue.report:0
-#: field:project.issue.report,email:0
-msgid "# Emails"
+#: view:project.issue:project_issue.view_project_issue_filter
+#: field:project.issue,stage_id:0
+#: view:project.issue.report:project_issue.view_project_issue_report_filter
+#: field:project.issue.report,stage_id:0
+msgid "Stage"
msgstr ""
#. module: project_issue
-#: model:mail.message.subtype,name:project_issue.mt_issue_new
-#: model:mail.message.subtype,name:project_issue.mt_project_issue_new
-msgid "Issue Created"
+#: model:mail.message.subtype,name:project_issue.mt_issue_stage
+msgid "Stage Changed"
msgstr ""
#. module: project_issue
-#: model:mail.message.subtype,name:project_issue.mt_issue_blocked
-#: model:mail.message.subtype,name:project_issue.mt_project_issue_blocked
-msgid "Issue Blocked"
+#: model:mail.message.subtype,description:project_issue.mt_issue_stage
+#: model:mail.message.subtype,description:project_issue.mt_project_issue_stage
+msgid "Stage changed"
msgstr ""
#. module: project_issue
-#: selection:project.issue.report,month:0
-msgid "February"
+#: view:project.issue:project_issue.project_issue_form_view
+msgid "Statistics"
msgstr ""
#. module: project_issue
-#: model:mail.message.subtype,description:project_issue.mt_issue_stage
-#: model:mail.message.subtype,description:project_issue.mt_project_issue_stage
-msgid "Stage changed"
+#: view:project.issue:project_issue.project_issue_form_view
+msgid "Status"
msgstr ""
#. module: project_issue
-#: view:project.issue:0
-msgid "Feature description"
+#: field:project.issue,message_summary:0
+msgid "Summary"
msgstr ""
#. module: project_issue
-#: field:project.project,project_escalation_id:0
-msgid "Project Escalation"
+#: field:project.issue,categ_ids:0
+msgid "Tags"
msgstr ""
#. module: project_issue
-#: model:ir.actions.act_window,help:project_issue.project_issue_version_action
-msgid "<p class=\"oe_view_nocontent_create\">\n"
-" Click to add a new version.\n"
-" </p><p>\n"
-" Define here the different versions of your products on which\n"
-" you can work on issues.\n"
-" </p>\n"
-" "
+#: field:project.issue,task_id:0
+#: view:project.issue.report:project_issue.view_project_issue_report_filter
+#: field:project.issue.report,task_id:0
+msgid "Task"
msgstr ""
#. module: project_issue
-#: help:project.issue,section_id:0
-msgid "Sales team to which Case belongs to. Define Responsible user and Email account for mail gateway."
+#: help:project.issue,email_cc:0
+msgid "These email addresses will be added to the CC field of all inbound and outbound emails for this record before being sent. Separate multiple email addresses with a comma"
msgstr ""
#. module: project_issue
-#: view:board.board:0
-msgid "My Issues"
+#: help:project.issue,email_from:0
+msgid "These people will receive email."
msgstr ""
#. module: project_issue
-#: help:project.issue.report,delay_open:0
-msgid "Number of Days to open the project issue."
+#: model:ir.actions.act_window,help:project_issue.action_project_issue_report
+msgid "This report on the project issues allows you to analyse the quality of your support or after-sales services. You can track the issues per age. You can analyse the time required to open or close an issue, the number of email to exchange and the time spent on average by issues."
msgstr ""
#. module: project_issue
-#: selection:project.issue.report,month:0
-msgid "April"
+#: view:project.issue:project_issue.view_project_issue_filter
+#: view:project.issue.report:project_issue.view_project_issue_report_filter
+msgid "Unassigned"
msgstr ""
#. module: project_issue
-#: view:project.issue:0
-msgid "⇒ Escalate"
+#: field:project.issue,message_unread:0
+msgid "Unread Messages"
msgstr ""
#. module: project_issue
-#: view:project.issue:0
-msgid "References"
+#: field:project.issue,write_date:0
+msgid "Update Date"
msgstr ""
#. module: project_issue
-#: model:mail.message.subtype,description:project_issue.mt_issue_new
-msgid "Issue created"
+#: field:project.issue,user_email:0
+msgid "User Email"
msgstr ""
#. module: project_issue
-#: field:project.issue,working_hours_close:0
-msgid "Working Hours to Close the Issue"
+#: field:project.issue,version_id:0
+#: view:project.issue.report:project_issue.view_project_issue_report_filter
+#: field:project.issue.report,version_id:0
+msgid "Version"
msgstr ""
#. module: project_issue
-#: field:project.issue,id:0
-msgid "ID"
+#: field:project.issue.version,name:0
+msgid "Version Number"
msgstr ""
#. module: project_issue
-#: model:mail.message.subtype,description:project_issue.mt_issue_blocked
-msgid "Issue blocked"
+#: model:ir.actions.act_window,name:project_issue.project_issue_version_action
+#: model:ir.ui.menu,name:project_issue.menu_project_issue_version_act
+msgid "Versions"
msgstr ""
#. module: project_issue
-#: model:ir.model,name:project_issue.model_project_issue_report
-msgid "project.issue.report"
+#: code:addons/project_issue/project_issue.py:397
+#, python-format
+msgid "Warning!"
msgstr ""
#. module: project_issue
-#: help:project.issue.report,delay_close:0
-msgid "Number of Days to close the project issue"
+#: field:project.issue,email_cc:0
+msgid "Watchers Emails"
msgstr ""
#. module: project_issue
-#: field:project.issue.report,working_hours_close:0
-msgid "Avg. Working Hours to Close"
+#: field:project.issue,working_hours_open:0
+msgid "Working Hours to assign the Issue"
msgstr ""
#. module: project_issue
-#: model:mail.message.subtype,name:project_issue.mt_issue_stage
-msgid "Stage Changed"
+#: field:project.issue,working_hours_close:0
+msgid "Working Hours to close the Issue"
msgstr ""
#. module: project_issue
-#: selection:project.issue,priority:0
-#: selection:project.issue.report,priority:0
-msgid "High"
+#: code:addons/project_issue/project_issue.py:397
+#, python-format
+msgid "You cannot escalate this issue.\n"
+"The relevant Project has not configured the Escalation Project!"
msgstr ""
#. module: project_issue
-#: field:project.issue,date_deadline:0
-msgid "Deadline"
+#: code:addons/project_issue/project_issue.py:348
+#, python-format
+msgid "issues"
msgstr ""
#. module: project_issue
-#: field:project.issue,date_action_last:0
-msgid "Last Action"
+#: field:project.project,issue_ids:0
+msgid "unknown"
msgstr ""
#. module: project_issue
-#: view:project.issue.report:0
-#: field:project.issue.report,name:0
-msgid "Year"
+#: view:project.project:project_issue.view_project_form_inherited
+msgid "{'invisible': [('use_tasks', '=', False),('use_issues','=',False)]}"
msgstr ""
#. module: project_issue
-#: field:project.issue,duration:0
-msgid "Duration"
+#: view:project.project:project_issue.view_project_form_inherited
+msgid "{'on_change': 'on_change_use_tasks_or_issues(use_tasks, use_issues)'}"
msgstr ""
#. module: project_issue
-#: model:mail.message.subtype,name:project_issue.mt_issue_started
-#: model:mail.message.subtype,name:project_issue.mt_project_issue_started
-msgid "Issue Started"
+#: view:project.issue:project_issue.project_issue_form_view
+msgid "⇒ Escalate"
msgstr ""
diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py
index 56a9799786b..83bb8e6e655 100644
--- a/addons/project_issue/project_issue.py
+++ b/addons/project_issue/project_issue.py
@@ -25,9 +25,11 @@ from openerp import api
from openerp import SUPERUSER_ID
from openerp import tools
from openerp.osv import fields, osv, orm
+from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT
from openerp.tools import html2plaintext
from openerp.tools.translate import _
+
class project_issue_version(osv.Model):
_name = "project.issue.version"
_order = "name desc"
@@ -42,7 +44,7 @@ class project_issue_version(osv.Model):
class project_issue(osv.Model):
_name = "project.issue"
_description = "Project Issue"
- _order = "priority, create_date desc"
+ _order = "priority desc, create_date desc"
_inherit = ['mail.thread', 'ir.needaction_mixin']
_mail_post_access = 'read'
@@ -129,73 +131,51 @@ class project_issue(osv.Model):
@return: difference between current date and log date
@param context: A standard dictionary for contextual values
"""
- cal_obj = self.pool.get('resource.calendar')
- res_obj = self.pool.get('resource.resource')
+ Calendar = self.pool['resource.calendar']
- res = {}
+ res = dict.fromkeys(ids, dict())
for issue in self.browse(cr, uid, ids, context=context):
-
+ values = {
+ 'day_open': 0.0, 'day_close': 0.0,
+ 'working_hours_open': 0.0, 'working_hours_close': 0.0,
+ 'days_since_creation': 0.0, 'inactivity_days': 0.0,
+ }
# if the working hours on the project are not defined, use default ones (8 -> 12 and 13 -> 17 * 5), represented by None
- if not issue.project_id or not issue.project_id.resource_calendar_id:
- working_hours = None
+ calendar_id = None
+ if issue.project_id and issue.project_id.resource_calendar_id:
+ calendar_id = issue.project_id.resource_calendar_id.id
+
+ dt_create_date = datetime.strptime(issue.create_date, DEFAULT_SERVER_DATETIME_FORMAT)
+
+ if issue.date_open:
+ dt_date_open = datetime.strptime(issue.date_open, DEFAULT_SERVER_DATETIME_FORMAT)
+ values['day_open'] = (dt_date_open - dt_create_date).total_seconds() / (24.0 * 3600)
+ values['working_hours_open'] = Calendar._interval_hours_get(
+ cr, uid, calendar_id, dt_create_date, dt_date_open,
+ timezone_from_uid=issue.user_id.id or uid,
+ exclude_leaves=False, context=context)
+
+ if issue.date_closed:
+ dt_date_closed = datetime.strptime(issue.date_closed, DEFAULT_SERVER_DATETIME_FORMAT)
+ values['day_close'] = (dt_date_closed - dt_create_date).total_seconds() / (24.0 * 3600)
+ values['working_hours_close'] = Calendar._interval_hours_get(
+ cr, uid, calendar_id, dt_create_date, dt_date_closed,
+ timezone_from_uid=issue.user_id.id or uid,
+ exclude_leaves=False, context=context)
+
+ days_since_creation = datetime.today() - dt_create_date
+ values['days_since_creation'] = days_since_creation.days
+ if issue.date_action_last:
+ inactive_days = datetime.today() - datetime.strptime(issue.date_action_last, DEFAULT_SERVER_DATETIME_FORMAT)
+ elif issue.date_last_stage_update:
+ inactive_days = datetime.today() - datetime.strptime(issue.date_last_stage_update, DEFAULT_SERVER_DATETIME_FORMAT)
else:
- working_hours = issue.project_id.resource_calendar_id.id
+ inactive_days = datetime.today() - datetime.strptime(issue.create_date, DEFAULT_SERVER_DATETIME_FORMAT)
+ values['inactivity_days'] = inactive_days.days
- res[issue.id] = {}
+ # filter only required values
for field in fields:
- duration = 0
- ans = False
- hours = 0
-
- date_create = datetime.strptime(issue.create_date, "%Y-%m-%d %H:%M:%S")
- if field in ['working_hours_open','day_open']:
- if issue.date_open:
- date_open = datetime.strptime(issue.date_open, "%Y-%m-%d %H:%M:%S")
- ans = date_open - date_create
- date_until = issue.date_open
- #Calculating no. of working hours to open the issue
- hours = cal_obj._interval_hours_get(cr, uid, working_hours,
- date_create,
- date_open,
- timezone_from_uid=issue.user_id.id or uid,
- exclude_leaves=False,
- context=context)
- elif field in ['working_hours_close','day_close']:
- if issue.date_closed:
- date_close = datetime.strptime(issue.date_closed, "%Y-%m-%d %H:%M:%S")
- date_until = issue.date_closed
- ans = date_close - date_create
- #Calculating no. of working hours to close the issue
- hours = cal_obj._interval_hours_get(cr, uid, working_hours,
- date_create,
- date_close,
- timezone_from_uid=issue.user_id.id or uid,
- exclude_leaves=False,
- context=context)
- elif field in ['days_since_creation']:
- if issue.create_date:
- days_since_creation = datetime.today() - datetime.strptime(issue.create_date, "%Y-%m-%d %H:%M:%S")
- res[issue.id][field] = days_since_creation.days
- continue
-
- elif field in ['inactivity_days']:
- res[issue.id][field] = 0
- if issue.date_action_last:
- inactive_days = datetime.today() - datetime.strptime(issue.date_action_last, '%Y-%m-%d %H:%M:%S')
- res[issue.id][field] = inactive_days.days
- continue
- if ans:
- resource_id = False
- if issue.user_id:
- resource_ids = res_obj.search(cr, uid, [('user_id','=',issue.user_id.id)])
- if resource_ids and len(resource_ids):
- resource_id = resource_ids[0]
- duration = float(ans.days) + float(ans.seconds)/(24*3600)
-
- if field in ['working_hours_open','working_hours_close']:
- res[issue.id][field] = hours
- elif field in ['day_open','day_close']:
- res[issue.id][field] = duration
+ res[issue.id][field] = values[field]
return res
@@ -230,11 +210,12 @@ class project_issue(osv.Model):
if work.task_id:
issues += issue_pool.search(cr, uid, [('task_id','=',work.task_id.id)])
return issues
+
_columns = {
'id': fields.integer('ID', readonly=True),
'name': fields.char('Issue', required=True),
'active': fields.boolean('Active', required=False),
- 'create_date': fields.datetime('Creation Date', readonly=True,select=True),
+ 'create_date': fields.datetime('Creation Date', readonly=True, select=True),
'write_date': fields.datetime('Update Date', readonly=True),
'days_since_creation': fields.function(_compute_day, string='Days since creation date', \
multi='compute_day', type="integer", help="Difference in days between creation date and current date"),
@@ -254,9 +235,9 @@ class project_issue(osv.Model):
required=False),
'email_from': fields.char('Email', size=128, help="These people will receive email.", select=1),
'email_cc': fields.char('Watchers Emails', size=256, help="These email addresses will be added to the CC field of all inbound and outbound emails for this record before being sent. Separate multiple email addresses with a comma"),
- 'date_open': fields.datetime('Opened', readonly=True,select=True),
+ 'date_open': fields.datetime('Assigned', readonly=True, select=True),
# Project Issue fields
- 'date_closed': fields.datetime('Closed', readonly=True,select=True),
+ 'date_closed': fields.datetime('Closed', readonly=True, select=True),
'date': fields.datetime('Date'),
'date_last_stage_update': fields.datetime('Last Stage Update', select=True),
'channel': fields.char('Channel', help="Communication channel."),
@@ -269,17 +250,21 @@ class project_issue(osv.Model):
'project_id': fields.many2one('project.project', 'Project', track_visibility='onchange', select=True),
'duration': fields.float('Duration'),
'task_id': fields.many2one('project.task', 'Task', domain="[('project_id','=',project_id)]"),
- 'day_open': fields.function(_compute_day, string='Days to Open', \
- multi='compute_day', type="float", store=True),
- 'day_close': fields.function(_compute_day, string='Days to Close', \
- multi='compute_day', type="float", store=True),
+ 'day_open': fields.function(_compute_day, string='Days to Assign',
+ multi='compute_day', type="float",
+ store={'project.issue': (lambda self, cr, uid, ids, c={}: ids, ['date_open'], 10)}),
+ 'day_close': fields.function(_compute_day, string='Days to Close',
+ multi='compute_day', type="float",
+ store={'project.issue': (lambda self, cr, uid, ids, c={}: ids, ['date_closed'], 10)}),
'user_id': fields.many2one('res.users', 'Assigned to', required=False, select=1, track_visibility='onchange'),
- 'working_hours_open': fields.function(_compute_day, string='Working Hours to Open the Issue', \
- multi='compute_day', type="float", store=True),
- 'working_hours_close': fields.function(_compute_day, string='Working Hours to Close the Issue', \
- multi='compute_day', type="float", store=True),
- 'inactivity_days': fields.function(_compute_day, string='Days since last action', \
- multi='compute_day', type="integer", help="Difference in days between last action and current date"),
+ 'working_hours_open': fields.function(_compute_day, string='Working Hours to assign the Issue',
+ multi='compute_day', type="float",
+ store={'project.issue': (lambda self, cr, uid, ids, c={}: ids, ['date_open'], 10)}),
+ 'working_hours_close': fields.function(_compute_day, string='Working Hours to close the Issue',
+ multi='compute_day', type="float",
+ store={'project.issue': (lambda self, cr, uid, ids, c={}: ids, ['date_closed'], 10)}),
+ 'inactivity_days': fields.function(_compute_day, string='Days since last action',
+ multi='compute_day', type="integer", help="Difference in days between last action and current date"),
'color': fields.integer('Color Index'),
'user_email': fields.related('user_id', 'email', type='char', string='User Email', readonly=True),
'date_action_last': fields.datetime('Last Action', readonly=1),
@@ -296,7 +281,7 @@ class project_issue(osv.Model):
'active': 1,
'stage_id': lambda s, cr, uid, c: s._get_default_stage_id(cr, uid, c),
'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.helpdesk', context=c),
- 'priority': '1',
+ 'priority': '0',
'kanban_state': 'normal',
'date_last_stage_update': fields.datetime.now,
'user_id': lambda obj, cr, uid, context: uid,
@@ -312,13 +297,16 @@ class project_issue(osv.Model):
default = {}
default = default.copy()
default.update(name=_('%s (copy)') % (issue['name']))
- return super(project_issue, self).copy(cr, uid, id, default=default,
- context=context)
+ return super(project_issue, self).copy(cr, uid, id, default=default, context=context)
def create(self, cr, uid, vals, context=None):
context = dict(context or {})
if vals.get('project_id') and not context.get('default_project_id'):
context['default_project_id'] = vals.get('project_id')
+ if vals.get('user_id'):
+ vals['date_open'] = fields.datetime.now()
+ if 'stage_id' in vals:
+ vals.update(self.onchange_stage_id(cr, uid, None, vals.get('stage_id'), context=context)['value'])
# context: no_log, because subtype already handle this
create_context = dict(context, mail_create_nolog=True)
@@ -327,12 +315,13 @@ class project_issue(osv.Model):
def write(self, cr, uid, ids, vals, context=None):
# stage change: update date_last_stage_update
if 'stage_id' in vals:
+ vals.update(self.onchange_stage_id(cr, uid, ids, vals.get('stage_id'), context=context)['value'])
vals['date_last_stage_update'] = fields.datetime.now()
if 'kanban_state' not in vals:
vals['kanban_state'] = 'normal'
# user_id change: update date_start
if vals.get('user_id'):
- vals['date_start'] = fields.datetime.now()
+ vals['date_open'] = fields.datetime.now()
return super(project_issue, self).write(cr, uid, ids, vals, context)
@@ -363,6 +352,14 @@ class project_issue(osv.Model):
# Stage management
# -------------------------------------------------------
+ def onchange_stage_id(self, cr, uid, ids, stage_id, context=None):
+ if not stage_id:
+ return {'value': {}}
+ stage = self.pool['project.task.type'].browse(cr, uid, stage_id, context=context)
+ if stage.fold:
+ return {'value': {'date_closed': fields.datetime.now()}}
+ return {'value': {'date_closed': False}}
+
def stage_find(self, cr, uid, cases, section_id, domain=[], order='sequence', context=None):
""" Override of the base.stage method
Parameter of the stage search taken from the issue:
diff --git a/addons/project_issue/project_issue_menu.xml b/addons/project_issue/project_issue_menu.xml
index 26981256c7f..18acc21b74e 100644
--- a/addons/project_issue/project_issue_menu.xml
+++ b/addons/project_issue/project_issue_menu.xml
@@ -9,7 +9,7 @@
<field name="name">Issues</field>
<field name="res_model">project.issue</field>
<field name="view_type">form</field>
- <field name="view_mode">kanban,tree,calendar</field>
+ <field name="view_mode">kanban,tree,calendar,form,graph</field>
<field name="view_id" eval="False"/>
<field name="domain" eval=""/>
<field name="search_view_id" ref="view_project_issue_filter"/>
@@ -50,6 +50,13 @@
<field name="act_window_id" ref="project_issue_categ_act0"/>
</record>
+ <record model="ir.actions.act_window.view" id="action_crm_tag_graph_view0">
+ <field name="sequence" eval="4"/>
+ <field name="view_mode">graph</field>
+ <field name="view_id" ref="project_issue_graph_view"/>
+ <field name="act_window_id" ref="project_issue_categ_act0"/>
+ </record>
+
<menuitem name="Issues" id="menu_project_issue_track" parent="project.menu_project_management"
action="project_issue_categ_act0" sequence="15"/>
</data>
diff --git a/addons/project_issue/project_issue_view.xml b/addons/project_issue/project_issue_view.xml
index 502598193a6..de81db8dfaf 100644
--- a/addons/project_issue/project_issue_view.xml
+++ b/addons/project_issue/project_issue_view.xml
@@ -52,7 +52,7 @@
options="{'fold_field': 'fold'}"/>
</header>
<sheet string="Issue">
- <div class="oe_right">
+ <div class="oe_right">
<field name="kanban_state" class="oe_inline" widget="kanban_state_selection"/>
</div>
<label for="name" class="oe_edit_only"/>
@@ -63,7 +63,7 @@
<field name="categ_ids" widget="many2many_tags"/>
<group>
<group>
- <field name="user_id"
+ <field name="user_id"
context="{'default_groups_ref': ['base.group_user', 'base.group_partner_manager', 'project.group_project_user']}"/>
<field name="partner_id" on_change="onchange_partner_id(partner_id)"/>
<field name="email_from"/>
@@ -90,16 +90,18 @@
<field name="description" placeholder="Add an internal note..." groups="base.group_user"/>
</page>
<page string="Extra Info" groups="project.group_project_manager,project.group_project_user">
- <group string="Statistics">
- <field name="day_open"/>
- <field name="day_close"/>
- <field name="working_hours_open" widget="float_time"/>
- <field name="working_hours_close" widget="float_time"/>
- <field name="inactivity_days"/>
- <field name="days_since_creation"/>
- </group>
- <group string="Status" groups="base.group_no_one">
- <field name="active"/>
+ <group>
+ <group string="Statistics">
+ <field name="day_open"/>
+ <field name="day_close"/>
+ <field name="working_hours_open" widget="float_time"/>
+ <field name="working_hours_close" widget="float_time"/>
+ <field name="inactivity_days"/>
+ <field name="days_since_creation"/>
+ </group>
+ <group string="Status" groups="base.group_no_one">
+ <field name="active"/>
+ </group>
</group>
</page>
</notebook>
@@ -153,12 +155,15 @@
<separator/>
<filter string="New Mail" name="message_unread" domain="[('message_unread','=',True)]"/>
<group expand="0" string="Group By" >
- <filter string="Responsible" name="group_user_id" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/>
- <filter string="Contact" name="group_partner_id" icon="terp-partner" domain="[]" context="{'group_by':'partner_id'}"/>
- <filter string="Project" name="group_project_id" icon="terp-folder-violet" domain="[]" context="{'group_by':'project_id'}"/>
- <filter string="Stage" name="group_stage_id" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/>
- <filter string="Creation Month" name="group_create_date" icon="terp-go-month" domain="[]" context="{'group_by':'create_date'}"/>
- <filter string="Last Message" name="group_message_last_post" domain="[]" context="{'group_by':'message_last_post:week'}"/>
+ <filter string="Assigned to" name="Responsible" context="{'group_by':'user_id'}" />
+ <filter string="Project" name="project" context="{'group_by':'project_id'}" />
+ <filter string="Task" context="{'group_by':'task_id'}"/>
+ <filter string="Priority" context="{'group_by':'priority'}" />
+ <filter string="Stage" context="{'group_by':'stage_id'}"/>
+ <filter string="Company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
+ <separator/>
+ <filter string="Create Day" context="{'group_by':'create_date:day'}" help="Create Date"/>
+ <filter string="Last Message" name="group_message_last_post" context="{'group_by':'message_last_post:week'}"/>
</group>
</search>
</field>
@@ -235,6 +240,17 @@
</field>
</record>
+ <record model="ir.ui.view" id="project_issue_graph_view">
+ <field name="name">Project Issue Tracker Graph</field>
+ <field name="model">project.issue</field>
+ <field name="arch" type="xml">
+ <graph string="Project Issues" type="bar">
+ <field name="project_id" type="row"/>
+ <field name="create_date" interval="month" type="col"/>
+ </graph>
+ </field>
+ </record>
+
<!-- Feature Requests -->
<record model="ir.ui.view" id="project_feature_tree_view">
@@ -260,7 +276,7 @@
<field name="name">Issues</field>
<field name="view_mode">kanban,tree,form,calendar,graph</field>
<field name="context">{
- 'search_default_project_id': [active_id],
+ 'search_default_project_id': [active_id],
'default_project_id': active_id,
}
</field>
@@ -285,7 +301,7 @@
<label for="use_issues"/>
</xpath>
<xpath expr='//div[@name="buttons"]' position='inside'>
- <button class="oe_inline oe_stat_button" type="action" attrs="{'invisible':[('use_issues','=', 0)]}"
+ <button class="oe_inline oe_stat_button" type="action" attrs="{'invisible':[('use_issues','=', 0)]}"
name="%(act_project_project_2_project_issue_all)d" icon="fa-bug">
<field string="Issues" name="issue_count" widget="statinfo"/>
</button>
@@ -355,14 +371,14 @@
<field name="priority" eval="50"/>
<field name="arch" type="xml">
<xpath expr="//div[@name='buttons']" position="inside">
- <button class="oe_inline oe_stat_button" type="action" name="%(action_view_issues)d"
+ <button class="oe_inline oe_stat_button" type="action" name="%(action_view_issues)d"
context="{'search_default_partner_id': active_id, 'default_partner_id': active_id}"
attrs="{'invisible': [('customer', '=', False)]}"
icon="fa-bug" groups="project.group_project_user">
<field string="Issues" name="issue_count" widget="statinfo"/>
- </button>
-
-
+ </button>
+
+
</xpath>
</field>
</record>
diff --git a/addons/project_issue/report/project_issue_report.py b/addons/project_issue/report/project_issue_report.py
index 2ab9b1a0da4..77894b0be81 100644
--- a/addons/project_issue/report/project_issue_report.py
+++ b/addons/project_issue/report/project_issue_report.py
@@ -31,12 +31,12 @@ class project_issue_report(osv.osv):
_columns = {
'section_id':fields.many2one('crm.case.section', 'Sale Team', readonly=True),
'company_id': fields.many2one('res.company', 'Company', readonly=True),
- 'opening_date': fields.date('Date of Opening', readonly=True),
- 'create_date': fields.date('Create Date', readonly=True),
- 'date_closed': fields.date('Date of Closing', readonly=True),
- 'date_last_stage_update': fields.date('Last Stage Update', readonly=True),
+ 'opening_date': fields.datetime('Date of Opening', readonly=True),
+ 'create_date': fields.datetime('Create Date', readonly=True),
+ 'date_closed': fields.datetime('Date of Closing', readonly=True),
+ 'date_last_stage_update': fields.datetime('Last Stage Update', readonly=True),
'stage_id': fields.many2one('project.task.type', 'Stage'),
- 'nbr': fields.integer('# of Issues', readonly=True),
+ 'nbr': fields.integer('# of Issues', readonly=True), # TDE FIXME master: rename into nbr_issues
'working_hours_open': fields.float('Avg. Working Hours to Open', readonly=True, group_operator="avg"),
'working_hours_close': fields.float('Avg. Working Hours to Close', readonly=True, group_operator="avg"),
'delay_open': fields.float('Avg. Delay to Open', digits=(16,2), readonly=True, group_operator="avg",
@@ -52,6 +52,7 @@ class project_issue_report(osv.osv):
'channel': fields.char('Channel', readonly=True, help="Communication Channel."),
'task_id': fields.many2one('project.task', 'Task'),
'email': fields.integer('# Emails', size=128, readonly=True),
+ 'reviewer_id': fields.many2one('res.users', 'Reviewer', readonly=True),
}
def init(self, cr):
@@ -60,9 +61,9 @@ class project_issue_report(osv.osv):
CREATE OR REPLACE VIEW project_issue_report AS (
SELECT
c.id as id,
- date(c.date_open) as opening_date,
- date(c.create_date) as create_date,
- date(c.date_last_stage_update) as date_last_stage_update,
+ c.date_open as opening_date,
+ c.create_date as create_date,
+ c.date_last_stage_update as date_last_stage_update,
c.user_id,
c.working_hours_open,
c.working_hours_close,
@@ -79,10 +80,12 @@ class project_issue_report(osv.osv):
c.task_id,
c.day_open as delay_open,
c.day_close as delay_close,
- (SELECT count(id) FROM mail_message WHERE model='project.issue' AND res_id=c.id) AS email
+ (SELECT count(id) FROM mail_message WHERE model='project.issue' AND res_id=c.id) AS email,
+ t.reviewer_id
FROM
project_issue c
+ LEFT JOIN project_task t on c.task_id = t.id
WHERE c.active= 'true'
)""")
diff --git a/addons/project_issue/report/project_issue_report_view.xml b/addons/project_issue/report/project_issue_report_view.xml
index 3382c6e3625..fb42c506235 100644
--- a/addons/project_issue/report/project_issue_report_view.xml
+++ b/addons/project_issue/report/project_issue_report_view.xml
@@ -6,27 +6,25 @@
<field name="model">project.issue.report</field>
<field name="arch" type="xml">
<graph orientation="horizontal" string="Project Issue" type="pivot" stacked="True">
+ <field name="project_id" type="row"/>
+ <field name="create_date" interval="month" type="col"/>
<field name="nbr" type="measure"/>
- <field name="user_id" type="row"/>
- <field name="stage_id" type="row"/>
</graph>
</field>
</record>
<!-- Custom reports (aka filters) -->
- <record id="filter_issue_report_responsible" model="ir.filters">
- <field name="name">By Responsible</field>
+ <record id="filter_issue_report_delay" model="ir.filters">
+ <field name="name">Delay</field>
<field name="model_id">project.issue.report</field>
- <field name="domain">[]</field>
<field name="user_id" eval="False"/>
- <field name="context">{'group_by': ['project_id', 'user_id']}</field>
+ <field name="context">{'group_by': ['project_id'], 'measures': ['delay_close', 'delay_open']}</field>
</record>
- <record id="filter_issue_report_reviewer" model="ir.filters">
- <field name="name">By Reviewer</field>
+ <record id="filter_issue_report_responsible" model="ir.filters">
+ <field name="name">By Responsible</field>
<field name="model_id">project.issue.report</field>
- <field name="domain">[]</field>
<field name="user_id" eval="False"/>
- <field name="context">{'group_by': ['project_id', 'reviewer_id']}</field>
+ <field name="context">{'group_by': ['project_id', 'user_id']}</field>
</record>
<record id="view_project_issue_report_filter" model="ir.ui.view">
@@ -39,22 +37,19 @@
<field name="partner_id" filter_domain="[('partner_id', 'child_of', self)]"/>
<field name="version_id"/>
<field name="stage_id"/>
- <filter string="My Task" domain="[('user_id','=',uid)]" />
+ <filter string="My Issues" domain="[('user_id','=',uid)]" />
<filter string="Unassigned" name="unassigned" domain="[('user_id','=',False)]"/>
<separator/>
<filter string="New" name="new" domain="[('stage_id.sequence', '&lt;=', 1)]"/>
<group expand="1" string="Group By">
- <filter string="Assigned to" name="Responsible" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}" />
- <filter string="Contact" icon="terp-partner" context="{'group_by':'partner_id'}" />
- <filter string="Sale Team" icon="terp-personal+" domain="[]" context="{'group_by':'section_id'}" groups="base.group_multi_salesteams"/>
- <filter string="Project" name="project" icon="terp-folder-violet" context="{'group_by':'project_id'}" />
- <filter string="Task" icon="terp-stock_align_left_24" domain="[]" context="{'group_by':'task_id'}"/>
- <filter string="Version" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'version_id'}"/>
- <filter string="Priority" icon="terp-rating-rated" domain="[]" context="{'group_by':'priority'}" />
- <filter string="Stage" icon="terp-stage" domain="[]" context="{'group_by':'stage_id'}"/>
- <filter string="Company" icon="terp-go-home" domain="[]" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
- <filter string="Create Date" icon="terp-go-month" domain="[]" context="{'group_by':'create_date'}" help="Create Date"/>
- <filter string="Last Stage Update" context="{'group_by':'date_last_stage_update'}"/>
+ <filter string="Assigned to" name="Responsible" context="{'group_by':'user_id'}" />
+ <filter string="Project" name="project" context="{'group_by':'project_id'}" />
+ <filter string="Task" context="{'group_by':'task_id'}"/>
+ <filter string="Priority" context="{'group_by':'priority'}" />
+ <filter string="Stage" context="{'group_by':'stage_id'}"/>
+ <filter string="Company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
+ <separator/>
+ <filter string="Create Day" context="{'group_by':'create_date:day'}" help="Create Date"/>
</group>
</search>
</field>