When we remove the inheritS between project and analytic account, we move the analytic_accound_id field in timesheet because it was the only use case for a project to be linked to an analytic account. This commit prepares new cost origin for a project (other that timesheet). Register costs on project will required an analytic account to keep analytic costs tracking. The analytic account management is now moved to project, like it was in 10.0, but without the inheritS. Task-1911581
46 lines
1.9 KiB
Python
46 lines
1.9 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.exceptions import UserError
|
|
|
|
|
|
class AccountAnalyticAccount(models.Model):
|
|
_inherit = 'account.analytic.account'
|
|
_description = 'Analytic Account'
|
|
|
|
project_ids = fields.One2many('project.project', 'analytic_account_id', string='Projects')
|
|
project_count = fields.Integer("Project Count", compute='_compute_project_count')
|
|
|
|
@api.multi
|
|
@api.depends('project_ids')
|
|
def _compute_project_count(self):
|
|
project_data = self.env['project.project'].read_group([('analytic_account_id', 'in', self.ids)], ['analytic_account_id'], ['analytic_account_id'])
|
|
mapping = {m['analytic_account_id'][0]: m['analytic_account_id_count'] for m in project_data}
|
|
for account in self:
|
|
account.project_count = mapping.get(account.id, 0)
|
|
|
|
@api.multi
|
|
def unlink(self):
|
|
projects = self.env['project.project'].search([('analytic_account_id', 'in', self.ids)])
|
|
has_tasks = self.env['project.task'].search_count([('project_id', 'in', projects.ids)])
|
|
if has_tasks:
|
|
raise UserError(_('Please remove existing tasks in the project linked to the accounts you want to delete.'))
|
|
return super(AccountAnalyticAccount, self).unlink()
|
|
|
|
@api.multi
|
|
def action_view_projects(self):
|
|
kanban_view_id = self.env.ref('project.view_project_kanban').id
|
|
result = {
|
|
"type": "ir.actions.act_window",
|
|
"res_model": "project.project",
|
|
"views": [[kanban_view_id, "kanban"], [False, "form"]],
|
|
"domain": [['analytic_account_id', '=', self.id]],
|
|
"context": {"create": False},
|
|
"name": "Projects",
|
|
}
|
|
if len(self.project_ids) == 1:
|
|
result['views'] = [(False, "form")]
|
|
result['res_id'] = self.project_ids.id
|
|
return result
|