Current behaviour: You cannot set the Default Analytic Plan for projects in the settings. Expected behaviour: You should be able to set the default plan, like any other settings. Steps to reproduce: - Install Accounting, Project, (Timesheets if you want to test project creation with an auto-created analytic account) - Settings > Check Analytic Accounts - Try to change the Default Plan in Settings > Project - Upon saving, the change is lost Reason for the problem: The `analytic_plan_id` in the project's `res.config.settings` is related to the same field on the `res.company` model. The `analytic_plan_id` that is set on the company upon installing the project module is a non-stored computed field, which makes a call to a `_get_default` -> the field cannot be set. It will always return the first default plan in the sequence. Fix: Since the field isn't stored (which would have worked if it was), we use `ir.config_parameter` to write and read to it, per company. In master we should just add a `store=True` and write a migration for it? Affected versions: - 16.0 - saas-16.1 - master opw-3127638 closes odoo/odoo#111635 X-original-commit: 11b0e2556ce824048bb4c760893b05e98537d171 Signed-off-by: Xavier Bol (xbo) <xbo@odoo.com>
29 lines
1.1 KiB
Python
29 lines
1.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
from odoo import fields, models
|
|
|
|
|
|
class ResCompany(models.Model):
|
|
_name = "res.company"
|
|
_inherit = "res.company"
|
|
|
|
analytic_plan_id = fields.Many2one(
|
|
'account.analytic.plan',
|
|
string="Default Plan",
|
|
check_company=True,
|
|
readonly=False,
|
|
compute="_compute_analytic_plan_id",
|
|
help="Default Plan for a new analytic account for projects")
|
|
|
|
def _compute_analytic_plan_id(self):
|
|
for company in self:
|
|
default_plan = self.env['ir.config_parameter'].with_company(company).sudo().get_param("default_analytic_plan_id_%s" % company.id)
|
|
company.analytic_plan_id = int(default_plan) if default_plan else False
|
|
if not company.analytic_plan_id:
|
|
company.analytic_plan_id = self.env['account.analytic.plan'].with_company(company)._get_default()
|
|
|
|
def write(self, values):
|
|
for company in self:
|
|
if 'analytic_plan_id' in values:
|
|
self.env['ir.config_parameter'].sudo().set_param("default_analytic_plan_id_%s" % company.id, values['analytic_plan_id'])
|
|
return super().write(values)
|