# -*- 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', readonly=True) user_ids = fields.Many2many('res.users', relation='project_task_user_rel', column1='task_id', column2='user_id', string='Assignees', readonly=True) create_date = fields.Datetime("Create Date", 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), group_operator="avg", readonly=True) nbr = fields.Integer('# of Tasks', readonly=True) # TDE FIXME master: rename into nbr_tasks working_hours_open = fields.Float(string='Working Hours to Assign', digits=(16, 2), readonly=True, group_operator="avg", help="Number of Working Hours to open the task") working_hours_close = fields.Float(string='Working Hours to Close', digits=(16, 2), readonly=True, group_operator="avg", help="Number of Working Hours to close the task") rating_last_value = fields.Float('Rating Value (/5)', group_operator="avg", readonly=True, groups="project.group_project_rating") 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) task_id = fields.Many2one('project.task', string='Tasks', readonly=True) def _select(self): select_str = """ SELECT (select 1 ) AS nbr, t.id as id, t.id as task_id, t.create_date as create_date, 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.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, NULLIF(t.rating_last_value, 0) as rating_last_value, t.working_days_close as working_days_close, t.working_days_open as working_days_open, t.working_hours_open as working_hours_open, t.working_hours_close as working_hours_close, (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.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 LEFT JOIN project_task_user_rel tu on t.id=tu.task_id WHERE t.active = 'true' AND t.project_id IS NOT NULL %s """ % (self._table, self._select(), self._group_by()))