40 lines
2.2 KiB
Python
40 lines
2.2 KiB
Python
from odoo import fields, models
|
|
|
|
|
|
class AccountTax(models.Model):
|
|
_inherit = "account.tax"
|
|
|
|
l10n_de_datev_code = fields.Char(size=4, help="4 digits code use by Datev", tracking=True)
|
|
|
|
|
|
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.account_fiscal_country_id.code == "DE":
|
|
if not self.property_account_income_id:
|
|
taxes = self.taxes_id.filtered_domain(self.env['account.tax']._check_company_domain(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'].with_company(company).search([
|
|
*self.env['account.account']._check_company_domain(company),
|
|
('internal_group', '=', 'income'),
|
|
('deprecated', '=', False),
|
|
('tax_ids', 'in', taxes.ids)
|
|
], limit=1)
|
|
result['income'] = result_income or result['income']
|
|
if not self.property_account_expense_id:
|
|
supplier_taxes = self.supplier_taxes_id.filtered_domain(self.env['account.tax']._check_company_domain(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'].with_company(company).search([
|
|
*self.env['account.account']._check_company_domain(company),
|
|
('internal_group', '=', 'expense'),
|
|
('deprecated', '=', False),
|
|
('tax_ids', 'in', supplier_taxes.ids),
|
|
], limit=1)
|
|
result['expense'] = result_expense or result['expense']
|
|
return result
|