75 lines
3.2 KiB
Python
75 lines
3.2 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import api, fields, models
|
|
from odoo.tools.sql import drop_view_if_exists, SQL
|
|
|
|
|
|
class TimesheetsAnalysisReport(models.Model):
|
|
_name = "timesheets.analysis.report"
|
|
_inherit = "hr.manager.department.report"
|
|
_description = "Timesheets Analysis Report"
|
|
_auto = False
|
|
|
|
name = fields.Char("Description", readonly=True)
|
|
user_id = fields.Many2one("res.users", string="User", readonly=True)
|
|
project_id = fields.Many2one("project.project", string="Project", readonly=True)
|
|
task_id = fields.Many2one("project.task", string="Task", readonly=True)
|
|
parent_task_id = fields.Many2one("project.task", string="Parent Task", readonly=True)
|
|
manager_id = fields.Many2one("hr.employee", "Manager", readonly=True)
|
|
company_id = fields.Many2one("res.company", string="Company", readonly=True)
|
|
department_id = fields.Many2one("hr.department", string="Department", readonly=True)
|
|
currency_id = fields.Many2one('res.currency', string="Currency", readonly=True)
|
|
date = fields.Date("Date", readonly=True)
|
|
amount = fields.Monetary("Amount", currency_field="currency_id", readonly=True)
|
|
unit_amount = fields.Float("Time Spent", readonly=True)
|
|
partner_id = fields.Many2one('res.partner', string="Partner", readonly=True)
|
|
milestone_id = fields.Many2one('project.milestone', related='task_id.milestone_id')
|
|
message_partner_ids = fields.Many2many('res.partner', compute='_compute_message_partner_ids',
|
|
search='_search_message_partner_ids', readonly=True)
|
|
|
|
@api.depends('project_id.message_partner_ids', 'task_id.message_partner_ids')
|
|
def _compute_message_partner_ids(self):
|
|
for line in self:
|
|
line.message_partner_ids = line.task_id.message_partner_ids | line.project_id.message_partner_ids
|
|
|
|
def _search_message_partner_ids(self, operator, value):
|
|
return self.env['account.analytic.line']._search_message_partner_ids(operator, value)
|
|
|
|
@property
|
|
def _table_query(self):
|
|
return "%s %s %s" % (self._select(), self._from(), self._where())
|
|
|
|
@api.model
|
|
def _select(self):
|
|
return """
|
|
SELECT
|
|
A.id AS id,
|
|
A.name AS name,
|
|
A.user_id AS user_id,
|
|
A.project_id AS project_id,
|
|
A.task_id AS task_id,
|
|
A.parent_task_id AS parent_task_id,
|
|
A.employee_id AS employee_id,
|
|
A.manager_id AS manager_id,
|
|
A.company_id AS company_id,
|
|
A.department_id AS department_id,
|
|
A.currency_id AS currency_id,
|
|
A.date AS date,
|
|
A.amount AS amount,
|
|
A.unit_amount AS unit_amount,
|
|
A.partner_id AS partner_id
|
|
"""
|
|
|
|
@api.model
|
|
def _from(self):
|
|
return "FROM account_analytic_line A"
|
|
|
|
@api.model
|
|
def _where(self):
|
|
return "WHERE A.project_id IS NOT NULL"
|
|
|
|
def init(self):
|
|
drop_view_if_exists(self.env.cr, self._table)
|
|
self.env.cr.execute(SQL("""CREATE or REPLACE VIEW %s as (%s)""", SQL.identifier(self._table), SQL(self._table_query)))
|