From dcccb667bb2b7af90a455604aaa7dfee68d341ed Mon Sep 17 00:00:00 2001 From: Dhaval Suthar Date: Wed, 10 May 2017 14:37:51 +0200 Subject: [PATCH] [REF] project_issue: replace report by pivot / graph views hr.recruitment.report is not necessary anymore as it can be replaced by classic pivot and graph views on hr.applicant model. Applicant has been slighty modified to ease reporting * adding group_operator average on both days to computation; * adding group_operator average on working hours computation; --- addons/project_issue/__init__.py | 1 - addons/project_issue/models/project_issue.py | 8 +-- addons/project_issue/report/__init__.py | 4 -- .../report/project_issue_report.py | 58 ------------------- .../report/project_issue_report_views.xml | 52 +++++++++-------- .../security/ir.model.access.csv | 2 - .../views/project_issue_views.xml | 3 + 7 files changed, 34 insertions(+), 94 deletions(-) delete mode 100644 addons/project_issue/report/__init__.py delete mode 100644 addons/project_issue/report/project_issue_report.py diff --git a/addons/project_issue/__init__.py b/addons/project_issue/__init__.py index 2609681a938..dc5e6b693d1 100644 --- a/addons/project_issue/__init__.py +++ b/addons/project_issue/__init__.py @@ -2,4 +2,3 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. from . import models -from . import report diff --git a/addons/project_issue/models/project_issue.py b/addons/project_issue/models/project_issue.py index 5513e4393ee..e16ed5376dc 100644 --- a/addons/project_issue/models/project_issue.py +++ b/addons/project_issue/models/project_issue.py @@ -55,12 +55,12 @@ class ProjectIssue(models.Model): duration = fields.Float('Duration') task_id = fields.Many2one('project.task', string='Task', domain="[('project_id','=',project_id)]", help="You can link this issue to an existing task or directly create a new one from here") - day_open = fields.Float(compute='_compute_day', string='Days to Assign', store=True) - day_close = fields.Float(compute='_compute_day', string='Days to Close', store=True) + day_open = fields.Float(compute='_compute_day', string='Days to Assign', store=True, group_operator="avg") + day_close = fields.Float(compute='_compute_day', string='Days to Close', store=True, group_operator="avg") user_id = fields.Many2one('res.users', string='Assigned to', index=True, track_visibility='onchange', default=lambda self: self.env.uid) - working_hours_open = fields.Float(compute='_compute_day', string='Working Hours to assign the Issue', store=True) - working_hours_close = fields.Float(compute='_compute_day', string='Working Hours to close the Issue', store=True) + working_hours_open = fields.Float(compute='_compute_day', string='Working Hours to assign the Issue', store=True, group_operator="avg") + working_hours_close = fields.Float(compute='_compute_day', string='Working Hours to close the Issue', store=True, group_operator="avg") inactivity_days = fields.Integer(compute='_compute_inactivity_days', string='Days since last action', help="Difference in days between last action and current date") color = fields.Integer('Color Index') diff --git a/addons/project_issue/report/__init__.py b/addons/project_issue/report/__init__.py deleted file mode 100644 index e76831f6b56..00000000000 --- a/addons/project_issue/report/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -# -*- coding: utf-8 -*- -# Part of Odoo. See LICENSE file for full copyright and licensing details. - -from . import project_issue_report diff --git a/addons/project_issue/report/project_issue_report.py b/addons/project_issue/report/project_issue_report.py deleted file mode 100644 index 70389f603e8..00000000000 --- a/addons/project_issue/report/project_issue_report.py +++ /dev/null @@ -1,58 +0,0 @@ -# -*- coding: utf-8 -*- -# Part of Odoo. See LICENSE file for full copyright and licensing details. - -from odoo import api, fields, models, tools - - -class ProjectIssueReport(models.Model): - _name = "project.issue.report" - _auto = False - - company_id = fields.Many2one('res.company', 'Company', 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_issues = fields.Integer('# of Issues', readonly=True) - 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", - help="Number of Days to open the project issue.") - delay_close = fields.Float('Avg. Delay to Close', digits=(16, 2), readonly=True, group_operator="avg", - help="Number of Days to close the project issue") - priority = fields.Selection([('0', 'Low'), ('1', 'Normal'), ('2', 'High')]) - project_id = fields.Many2one('project.project', 'Project', readonly=True) - user_id = fields.Many2one('res.users', 'Assigned to', readonly=True) - partner_id = fields.Many2one('res.partner', 'Contact') - email = fields.Integer('# Emails', readonly=True) - - @api.model_cr - def init(self): - tools.drop_view_if_exists(self._cr, 'project_issue_report') - self._cr.execute(""" - CREATE OR REPLACE VIEW project_issue_report AS ( - SELECT - c.id as id, - 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, - c.stage_id, - c.date_closed as date_closed, - c.company_id as company_id, - c.priority as priority, - c.project_id as project_id, - 1 as nbr_issues, - c.partner_id, - c.day_open as delay_open, - c.day_close as delay_close, - (SELECT count(id) FROM mail_message WHERE model='project.issue' AND message_type IN ('email', 'comment') AND res_id=c.id) AS email - - 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_views.xml b/addons/project_issue/report/project_issue_report_views.xml index 53165683b82..6178f6ba6fa 100644 --- a/addons/project_issue/report/project_issue_report_views.xml +++ b/addons/project_issue/report/project_issue_report_views.xml @@ -1,46 +1,30 @@ - project.issue.report.pivot - project.issue.report + project.issue.pivot + project.issue - - project.issue.report.graph - project.issue.report + project.issue.graph + project.issue - - - - Delay - project.issue.report - - {'group_by': ['project_id'], 'measures': ['delay_close', 'delay_open']} - - - By Responsible - project.issue.report - - {'group_by': ['project_id', 'user_id']} - - - project.issue.report.select - project.issue.report + project.issue.search + project.issue @@ -63,18 +47,36 @@ Issues Analysis - project.issue.report + project.issue form graph,pivot {'search_default_year':1,'search_default_This Month':1,'search_default_project':1} - + 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. + + + Delay + project.issue + + + {'group_by': ['project_id'], 'measures': ['delay_close', 'delay_open']} + + + By Responsible + project.issue + + + {'group_by': ['project_id', 'user_id']} + + Issues Analysis - project.issue.report + project.issue form graph,pivot { diff --git a/addons/project_issue/security/ir.model.access.csv b/addons/project_issue/security/ir.model.access.csv index 43a7db60e09..a073bc2cdf9 100644 --- a/addons/project_issue/security/ir.model.access.csv +++ b/addons/project_issue/security/ir.model.access.csv @@ -1,6 +1,4 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_project_issue_user,project.issue,model_project_issue,project.group_project_user,1,1,1,1 -access_project_issue_report_all,project.issue.report,model_project_issue_report,project.group_project_manager,1,1,1,1 access_resource_calendar_project_manager,resource.calendar.project.manager,resource.model_resource_calendar,project.group_project_manager,1,1,1,1 -access_project_issue_report_user,project.issue.report user,model_project_issue_report,project.group_project_user,1,0,0,0 access_project_issue_portal,project.issue,model_project_issue,base.group_portal,1,0,0,0 diff --git a/addons/project_issue/views/project_issue_views.xml b/addons/project_issue/views/project_issue_views.xml index 383bead65df..20ba2d1972c 100644 --- a/addons/project_issue/views/project_issue_views.xml +++ b/addons/project_issue/views/project_issue_views.xml @@ -287,6 +287,7 @@ form Issues kanban,tree,form,calendar,graph,pivot + { 'search_default_project_id': [active_id], 'default_project_id': active_id, @@ -306,6 +307,7 @@ form Issues kanban,tree,form,calendar,graph +

The Odoo issues tracker allows you to efficiently manage things @@ -337,6 +339,7 @@ (0, 0, {'view_mode': 'tree', 'view_id': ref('project_issue_tree_view')}), (0, 0, {'view_mode': 'calendar', 'view_id': ref('project_issue_calendar_view')}), (0, 0, {'view_mode': 'form', 'view_id': ref('project_issue_form_view')}), + (0, 0, {'view_mode': 'pivot', 'view_id': ref('project_issue_pivot_view')}), (0, 0, {'view_mode': 'graph', 'view_id': ref('project_issue_graph_view')}), ]"/>