Odoo18-Base/addons/mrp_account/models/analytic_account.py
2025-01-06 10:57:38 +07:00

91 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, _
class AccountAnalyticAccount(models.Model):
_inherit = 'account.analytic.account'
_description = 'Analytic Account'
production_ids = fields.Many2many('mrp.production')
production_count = fields.Integer("Manufacturing Orders Count", compute='_compute_production_count')
bom_ids = fields.Many2many('mrp.bom')
bom_count = fields.Integer("BoM Count", compute='_compute_bom_count')
workcenter_ids = fields.Many2many('mrp.workcenter')
workorder_count = fields.Integer("Work Order Count", compute='_compute_workorder_count')
@api.depends('production_ids')
def _compute_production_count(self):
for account in self:
account.production_count = len(account.production_ids)
@api.depends('bom_ids')
def _compute_bom_count(self):
for account in self:
account.bom_count = len(account.bom_ids)
@api.depends('workcenter_ids.order_ids', 'production_ids.workorder_ids')
def _compute_workorder_count(self):
for account in self:
account.workorder_count = len(account.workcenter_ids.order_ids | account.production_ids.workorder_ids)
def action_view_mrp_production(self):
self.ensure_one()
result = {
"type": "ir.actions.act_window",
"res_model": "mrp.production",
"domain": [['id', 'in', self.production_ids.ids]],
"name": _("Manufacturing Orders"),
'view_mode': 'list,form',
"context": {'default_analytic_account_id': self.id},
}
if len(self.production_ids) == 1:
result['view_mode'] = 'form'
result['res_id'] = self.production_ids.id
return result
def action_view_mrp_bom(self):
self.ensure_one()
result = {
"type": "ir.actions.act_window",
"res_model": "mrp.bom",
"domain": [['id', 'in', self.bom_ids.ids]],
"name": _("Bills of Materials"),
'view_mode': 'list,form',
"context": {'default_analytic_account_id': self.id},
}
if self.bom_count == 1:
result['view_mode'] = 'form'
result['res_id'] = self.bom_ids.id
return result
def action_view_workorder(self):
self.ensure_one()
result = {
"type": "ir.actions.act_window",
"res_model": "mrp.workorder",
"domain": [['id', 'in', (self.workcenter_ids.order_ids | self.production_ids.workorder_ids).ids]],
"context": {"create": False},
"name": _("Work Orders"),
'view_mode': 'list',
}
return result
class AccountAnalyticLine(models.Model):
_inherit = 'account.analytic.line'
category = fields.Selection(selection_add=[('manufacturing_order', 'Manufacturing Order')])
class AccountAnalyticApplicability(models.Model):
_inherit = 'account.analytic.applicability'
_description = "Analytic Plan's Applicabilities"
business_domain = fields.Selection(
selection_add=[
('manufacturing_order', 'Manufacturing Order'),
],
ondelete={'manufacturing_order': 'cascade'},
)