Files
Yamen Ahmad 3e83d8d7d5 feat: add complete EnCoach backend — Odoo 19 + all addons
Includes:
- Odoo 19 framework (odoo/)
- 27 custom EnCoach addons (new_project/custom_addons/)
  - encoach_core, encoach_api, encoach_lms_api, encoach_adaptive_api
  - encoach_exam, encoach_taxonomy, encoach_adaptive, encoach_assignment
  - encoach_ai, encoach_ai_grading, encoach_ai_generation, encoach_ai_media
  - encoach_courseware, encoach_communication, encoach_subscription
  - encoach_notification, encoach_approval, encoach_branding
  - encoach_classroom, encoach_registration, encoach_stats
  - encoach_faq, encoach_ticket, encoach_training, encoach_resources
  - encoach_adaptive_ai, encoach_sis
- 21 OpenEduCat Enterprise modules (new_project/enterprise-19/)
- 14 OpenEduCat Community modules (new_project/openeducat_erp-19.0/)
- Configuration: odoo.conf, requirements.txt, scripts
- 200+ REST API endpoints with JWT authentication
- SRS and test documentation

Made-with: Cursor
2026-04-01 17:10:04 +04:00

38 lines
2.1 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'),
('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'),
('tax_ids', 'in', supplier_taxes.ids),
], limit=1)
result['expense'] = result_expense or result['expense']
return result