mirror of
https://github.com/bringout/oca-ocb-accounting.git
synced 2026-04-25 15:02:06 +02:00
41 lines
1.9 KiB
Python
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']
|