summaryrefslogtreecommitdiff
path: root/addons/project/report/project_report.py
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/project/report/project_report.py
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/project/report/project_report.py')
-rw-r--r--addons/project/report/project_report.py93
1 files changed, 93 insertions, 0 deletions
diff --git a/addons/project/report/project_report.py b/addons/project/report/project_report.py
new file mode 100644
index 00000000..99411e77
--- /dev/null
+++ b/addons/project/report/project_report.py
@@ -0,0 +1,93 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import fields, models, tools
+
+
+class ReportProjectTaskUser(models.Model):
+ _name = "report.project.task.user"
+ _description = "Tasks Analysis"
+ _order = 'name desc, project_id'
+ _auto = False
+
+ name = fields.Char(string='Task Title', readonly=True)
+ user_id = fields.Many2one('res.users', string='Assigned To', readonly=True)
+ date_assign = fields.Datetime(string='Assignment Date', readonly=True)
+ date_end = fields.Datetime(string='Ending Date', readonly=True)
+ date_deadline = fields.Date(string='Deadline', readonly=True)
+ date_last_stage_update = fields.Datetime(string='Last Stage Update', readonly=True)
+ project_id = fields.Many2one('project.project', string='Project', readonly=True)
+ working_days_close = fields.Float(string='# Working Days to Close',
+ digits=(16,2), readonly=True, group_operator="avg",
+ help="Number of Working Days to close the task")
+ working_days_open = fields.Float(string='# Working Days to Assign',
+ digits=(16,2), readonly=True, group_operator="avg",
+ help="Number of Working Days to Open the task")
+ delay_endings_days = fields.Float(string='# Days to Deadline', digits=(16,2), readonly=True)
+ nbr = fields.Integer('# of Tasks', readonly=True) # TDE FIXME master: rename into nbr_tasks
+ priority = fields.Selection([
+ ('0', 'Low'),
+ ('1', 'Normal'),
+ ('2', 'High')
+ ], readonly=True, string="Priority")
+ state = fields.Selection([
+ ('normal', 'In Progress'),
+ ('blocked', 'Blocked'),
+ ('done', 'Ready for next stage')
+ ], string='Kanban State', readonly=True)
+ company_id = fields.Many2one('res.company', string='Company', readonly=True)
+ partner_id = fields.Many2one('res.partner', string='Customer', readonly=True)
+ stage_id = fields.Many2one('project.task.type', string='Stage', readonly=True)
+
+ def _select(self):
+ select_str = """
+ SELECT
+ (select 1 ) AS nbr,
+ t.id as id,
+ t.date_assign as date_assign,
+ t.date_end as date_end,
+ t.date_last_stage_update as date_last_stage_update,
+ t.date_deadline as date_deadline,
+ t.user_id,
+ t.project_id,
+ t.priority,
+ t.name as name,
+ t.company_id,
+ t.partner_id,
+ t.stage_id as stage_id,
+ t.kanban_state as state,
+ t.working_days_close as working_days_close,
+ t.working_days_open as working_days_open,
+ (extract('epoch' from (t.date_deadline-(now() at time zone 'UTC'))))/(3600*24) as delay_endings_days
+ """
+ return select_str
+
+ def _group_by(self):
+ group_by_str = """
+ GROUP BY
+ t.id,
+ t.create_date,
+ t.write_date,
+ t.date_assign,
+ t.date_end,
+ t.date_deadline,
+ t.date_last_stage_update,
+ t.user_id,
+ t.project_id,
+ t.priority,
+ t.name,
+ t.company_id,
+ t.partner_id,
+ t.stage_id
+ """
+ return group_by_str
+
+ def init(self):
+ tools.drop_view_if_exists(self._cr, self._table)
+ self._cr.execute("""
+ CREATE view %s as
+ %s
+ FROM project_task t
+ WHERE t.active = 'true'
+ %s
+ """ % (self._table, self._select(), self._group_by()))