diff --git a/addons/l10n_de/models/datev.py b/addons/l10n_de/models/datev.py index edcfd693057..d2e0f8cbd64 100644 --- a/addons/l10n_de/models/datev.py +++ b/addons/l10n_de/models/datev.py @@ -33,3 +33,25 @@ class AccountMove(models.Model): raise UserError(_('Account %s does not authorize to have tax %s specified on the line. \ Change the tax used in this invoice or remove all taxes from the account') % (account_name, tax.name)) return super()._post(soft) + + +class ProductTemplate(models.Model): + _inherit = "product.template" + + def _get_product_accounts(self): + """ As taxes with a different rate need a different income/expense account, we add this logic in case people only use + invoicing to not be blocked by the above constraint""" + result = super(ProductTemplate, self)._get_product_accounts() + company = self.env.company + if company.country_id.code == "DE": + if not self.property_account_income_id: + taxes = self.taxes_id.filtered(lambda t: t.company_id == company) + if not result['income'] or (result['income'].tax_ids and taxes and taxes[0] not in result['income'].tax_ids): + result['income'] = self.env['account.account'].search([('internal_group', '=', 'income'), ('deprecated', '=', False), + ('tax_ids', 'in', taxes.ids)], limit=1) + if not self.property_account_expense_id: + supplier_taxes = self.supplier_taxes_id.filtered(lambda t: t.company_id == company) + if not result['expense'] or (result['expense'].tax_ids and supplier_taxes and supplier_taxes[0] not in result['expense'].tax_ids): + result['expense'] = self.env['account.account'].search([('internal_group', '=', 'expense'), ('deprecated', '=', False), + ('tax_ids', 'in', supplier_taxes.ids)], limit=1) + return result