oca-ocb-accounting/odoo-bringout-oca-ocb-stock_account/stock_account/models/stock_location.py
Ernad Husremovic 768b70e05e 19.0 vanilla
2026-03-09 09:30:07 +01:00

41 lines
1.9 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import fields, models
from odoo.fields import Domain
class StockLocation(models.Model):
_inherit = "stock.location"
valuation_account_id = fields.Many2one(
'account.account', 'Stock Valuation Account',
domain=[('account_type', 'not in', ('asset_receivable', 'liability_payable', 'asset_cash', 'liability_credit_card'))],
help="Expense account used to re-qualify products removed from stock and sent to this location")
is_valued_internal = fields.Boolean('Is valued inside the company', compute="_compute_is_valued", search="_search_is_valued")
is_valued_external = fields.Boolean('Is valued outside the company', compute="_compute_is_valued")
def _search_is_valued(self, operator, value):
if operator not in ['=', '!=']:
raise NotImplementedError(self.env._("Invalid search operator or value"))
positive_operator = (operator == '=' and value) or (operator == '!=' and not value)
domain = Domain([('company_id', 'in', self.env.companies.ids), ('usage', 'in', ['internal', 'transit'])])
if positive_operator:
return domain
return ~domain
def _compute_is_valued(self):
for location in self:
if location._should_be_valued():
location.is_valued_internal = True
location.is_valued_external = False
else:
location.is_valued_internal = False
location.is_valued_external = True
def _should_be_valued(self):
""" This method returns a boolean reflecting whether the products stored in `self` should
be considered when valuating the stock of a company.
"""
self.ensure_one()
return bool(self.company_id) and self.usage in ['internal', 'transit']