19.0 vanilla

This commit is contained in:
Ernad Husremovic 2026-03-09 09:31:28 +01:00
parent ff721d030e
commit 7721452493
1826 changed files with 124775 additions and 274114 deletions

View file

@ -0,0 +1,4 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import account_journal
from . import account_move
from . import template_si

View file

@ -0,0 +1,10 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import fields, models
class AccountJournal(models.Model):
_inherit = 'account.journal'
invoice_reference_model = fields.Selection(selection_add=[
('si', 'Slovenian 01 (SI01 25-1235-8403)')
], ondelete={'si': lambda recs: recs.write({'invoice_reference_model': 'odoo'})})

View file

@ -0,0 +1,55 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import re
from odoo import models
class AccountMove(models.Model):
_inherit = 'account.move'
def _get_invoice_reference_si_partner(self):
"""
Generate the Slovenian structured payment reference using the partner's ID.
Format: SI01 (P1-P2-P3)K
- P1: Last two digits of the invoice year
- P2: Partner ID
- P3: Journal ID
- K: Check digit
:return: the formatted structured reference string (SI01...)
"""
self.ensure_one()
p3 = str(self.partner_id.id)
return self._build_invoice_reference(p3)
def _get_invoice_reference_si_invoice(self):
"""
Generate the Slovenian structured payment reference using the invoice sequence number.
Format: SI01 (P1-P2-P3)K
- P1: Last two digits of the invoice year
- P2: Trailing digits of the invoice name (sequence number)
- P3: Journal ID
- K: Check digit
:return: the formatted structured reference string (SI01...)
"""
self.ensure_one()
match = re.search(r'(\d+)$', self.name or '')
p3 = str(int(match.group(1))) if match else '0'
return self._build_invoice_reference(p3)
def _build_invoice_reference(self, p3):
"""Builds the reference using a shared structure for both methods."""
p1 = str(self.journal_id.id)
p2 = str(self.invoice_date.year)[-2:]
reference_base = f"{p1}-{p2}-{p3}"
# Calculate check digit
digits = [int(d) for d in reference_base if d.isdigit()]
weights = list(range(2, 14))[:len(digits)]
weighted_sum = sum(d * w for d, w in zip(reversed(digits), weights))
check_digit = 11 - (weighted_sum % 11)
check_digit = 0 if check_digit in (10, 11) else check_digit
return f"SI01 {reference_base}{check_digit}"

View file

@ -0,0 +1,34 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import models
from odoo.addons.account.models.chart_template import template
class AccountChartTemplate(models.AbstractModel):
_inherit = 'account.chart.template'
@template('si')
def _get_si_template_data(self):
return {
'property_account_receivable_id': 'gd_acc_120000',
'property_account_payable_id': 'gd_acc_220000',
'code_digits': '6',
'use_storno_accounting': True,
}
@template('si', 'res.company')
def _get_si_res_company(self):
return {
self.env.company.id: {
'account_fiscal_country_id': 'base.si',
'bank_account_code_prefix': '110',
'cash_account_code_prefix': '100',
'transfer_account_code_prefix': '109',
'account_default_pos_receivable_account_id': 'gd_acc_125000',
'income_currency_exchange_account_id': 'gd_acc_777000',
'expense_currency_exchange_account_id': 'gd_acc_484000',
'account_sale_tax_id': 'gd_taxr_3',
'account_purchase_tax_id': 'gd_taxp_3',
'expense_account_id': 'gd_acc_702000',
'income_account_id': 'gd_acc_762000',
},
}