Odoo18-Base/addons/mrp_account/models/mrp_bom.py
2025-03-10 10:52:11 +07:00

43 lines
1.8 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import json
from odoo import models, api, fields
class MrpBom(models.Model):
_name = 'mrp.bom'
_inherit = ['mrp.bom', 'analytic.mixin']
# Company dependent JSON fields are not yet supported
analytic_distribution_text = fields.Text(company_dependent=True)
analytic_distribution = fields.Json(inverse="_inverse_analytic_distribution", store=False, precompute=False)
analytic_account_ids = fields.Many2many('account.analytic.account', compute="_compute_analytic_account_ids", copy=True)
@api.depends_context('company')
@api.depends('analytic_distribution_text')
def _compute_analytic_distribution(self):
for record in self:
record.analytic_distribution = json.loads(record.analytic_distribution_text or '{}')
def _inverse_analytic_distribution(self):
for record in self:
record.analytic_distribution_text = json.dumps(record.analytic_distribution)
@api.depends('analytic_distribution')
def _compute_analytic_account_ids(self):
for record in self:
record.analytic_account_ids = bool(record.analytic_distribution) and self.env['account.analytic.account'].browse(
list({int(account_id) for ids in record.analytic_distribution for account_id in ids.split(",")})
).exists()
@api.onchange('product_id')
def _onchange_analytic_distribution(self):
for record in self:
if record.product_id:
record.analytic_distribution = record.env['account.analytic.distribution.model'].sudo()._get_distribution({
"product_id": record.product_id.id,
"product_categ_id": record.product_id.categ_id.id,
"company_id": record.company_id.id,
})