Files
stock-logistics-warehouse/stock_request_analytic/models/stock_request_order.py

71 lines
2.6 KiB
Python

# Copyright 2018 Creu Blanca
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
from odoo import _, api, fields, models
from odoo.exceptions import ValidationError
MAP_ACTIONS = {
"analytic_account": "analytic.action_account_analytic_account_form",
"analytic_tag": "analytic.account_analytic_tag_action",
}
MAP_FIELDS = {
"analytic_account": "analytic_account_ids",
"analytic_tag": "analytic_tag_ids",
}
MAP_VIEWS = {
"analytic_account": "analytic.view_account_analytic_account_form",
"analytic_tag": "analytic.account_analytic_tag_form_view",
}
class StockRequestOrder(models.Model):
_inherit = "stock.request.order"
analytic_count = fields.Integer(compute="_compute_analytic_ids", readonly=True)
analytic_tag_count = fields.Integer(compute="_compute_analytic_ids", readonly=True)
analytic_account_ids = fields.One2many(
comodel_name="account.analytic.account",
compute="_compute_analytic_ids",
string="Analytic Accounts",
readonly=True,
)
analytic_tag_ids = fields.One2many(
comodel_name="account.analytic.tag",
compute="_compute_analytic_ids",
string="Analytic Tags",
readonly=True,
)
default_analytic_account_id = fields.Many2one(
comodel_name="account.analytic.account",
string="Default Analytic Account",
help="Set this if you want to define a default analytic account on requests",
)
@api.depends("stock_request_ids")
def _compute_analytic_ids(self):
for req in self.sudo():
req.analytic_account_ids = req.stock_request_ids.mapped(
"analytic_account_id"
)
req.analytic_tag_ids = req.stock_request_ids.mapped("analytic_tag_ids")
req.analytic_count = len(req.analytic_account_ids)
req.analytic_tag_count = len(req.analytic_tag_ids)
def action_view_analytic(self):
self.ensure_one()
analytic_type = self.env.context.get("analytic_type")
if not analytic_type:
raise ValidationError(
_("Analytic type (analytic_type) not present in the context")
)
action = self.env.ref(MAP_ACTIONS[analytic_type]).read()[0]
records = self.mapped(MAP_FIELDS[analytic_type])
if len(records) > 1:
action["domain"] = [("id", "in", records.ids)]
elif records:
action["views"] = [
(self.env.ref(MAP_VIEWS[self._context["analytic_type"]]).id, "form")
]
action["res_id"] = records.id
return action