diff --git a/addons/stock_account/models/__init__.py b/addons/stock_account/models/__init__.py index 707d4618bda..a11616c850a 100644 --- a/addons/stock_account/models/__init__.py +++ b/addons/stock_account/models/__init__.py @@ -4,6 +4,7 @@ from . import account_chart_template from . import account_invoice from . import account_move +from . import account_reconciliation_widget from . import product from . import stock from . import res_config_settings diff --git a/addons/stock_account/models/account_reconciliation_widget.py b/addons/stock_account/models/account_reconciliation_widget.py new file mode 100644 index 00000000000..44110053899 --- /dev/null +++ b/addons/stock_account/models/account_reconciliation_widget.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- + +from odoo import api, models +from odoo.osv import expression + + +class AccountReconciliation(models.AbstractModel): + _inherit = "account.reconciliation.widget" + + @api.model + def _domain_move_lines_for_reconciliation(self, st_line, aml_accounts, partner_id, excluded_ids=None, search_str=False): + def to_int(val): + try: + return int(val) + except (ValueError, TypeError): + return None + + domain = super()._domain_move_lines_for_reconciliation( + st_line, aml_accounts, partner_id, excluded_ids=excluded_ids, search_str=search_str + ) + acc_props = ( + "property_stock_account_input", + "property_stock_account_output", + "property_stock_account_input_categ_id", + "property_stock_account_output_categ_id", + ) + acc_ids = [ + (acc["value_reference"] or "").split(",")[-1] + for acc in self.env["ir.property"] + .sudo() + .search([("name", "in", acc_props), ("value_reference", "!=", False)]) + .read(["value_reference"]) + if to_int((acc["value_reference"] or "").split(",")[-1]) + ] + if acc_ids: + domain = expression.AND([domain, [("account_id.id", "not in", acc_ids)]]) + return domain