Initial commit: Odoo 18.0-20251222 extra-addons
Some checks failed
pre-commit / pre-commit (push) Has been cancelled
tests / Detect unreleased dependencies (push) Has been cancelled
tests / test with OCB (push) Has been cancelled
tests / test with Odoo (push) Has been cancelled

This commit is contained in:
tocmo0nlord
2026-03-13 20:43:25 +00:00
parent 36e847a7df
commit adbe430761
9472 changed files with 1265727 additions and 0 deletions

View File

@@ -0,0 +1,3 @@
from . import account_journal
from . import account_move
from . import account_move_line

View File

@@ -0,0 +1,52 @@
# Copyright 2022 Moduon
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
import logging
from odoo import api, fields, models
_logger = logging.getLogger(__name__)
class AccountJournal(models.Model):
_inherit = "account.journal"
entry_number_sequence_id = fields.Many2one(
comodel_name="ir.sequence",
string="Account entry number sequence",
compute="_compute_entry_number_sequence",
domain="[('company_id', '=', company_id)]",
check_company=True,
readonly=False,
store=True,
copy=False,
help="Sequence used for account entry numbering.",
)
entry_number_sequence_id_name = fields.Char(related="entry_number_sequence_id.code")
@api.depends("company_id")
def _compute_entry_number_sequence(self):
"""Get the default sequence for all journals."""
for one in self:
sequence = self.env["ir.sequence"].search(
[
("code", "=", "account_journal_general_sequence.default"),
("company_id", "=", one.company_id.id),
]
)
if not sequence:
_logger.info("Creating default sequence for account move numbers")
sequence = self.env["ir.sequence"].create(
{
"name": self.env._(
"Account entry default numbering (%s)",
one.company_id.name,
),
"code": "account_journal_general_sequence.default",
"company_id": one.company_id.id,
"implementation": "no_gap",
"prefix": "%(range_year)s/",
"padding": 8,
"use_date_range": True,
}
)
one.entry_number_sequence_id = sequence

View File

@@ -0,0 +1,75 @@
# Copyright 2022 Moduon
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
import logging
from odoo import api, fields, models
_logger = logging.getLogger(__name__)
ADDON = "account_journal_general_sequence"
class AccountMove(models.Model):
_inherit = "account.move"
_sql_constraints = [
(
"entry_number_unique",
"UNIQUE(entry_number, journal_id)",
"Entry number must be unique per journal.",
),
]
entry_number = fields.Char(
index=True,
readonly=True,
store=True,
compute="_compute_entry_number",
help="Automatic numbering, based on journal configuration.",
)
@api.depends("state")
def _compute_entry_number(self):
"""Assign an entry number when posting."""
# Skip if installing module, for performance reasons
if self.env.context.get("module") == ADDON:
module = self.env["ir.module.module"].search([("name", "=", ADDON)])
if module.state == "to install":
_logger.info(
"Skipping entry number generation at install for %s.",
self,
)
return
canceled = self.filtered_domain(
[("state", "=", "cancel"), ("entry_number", "!=", False)]
)
canceled.entry_number = False
if canceled:
no_gap_seqs = canceled.mapped(
"journal_id.entry_number_sequence_id"
).filtered_domain([("implementation", "=", "no_gap")])
if no_gap_seqs:
_logger.warning(
"Emptied entry_number for %r after cancellation. "
"This created gaps on %r.",
canceled,
no_gap_seqs,
)
chosen = self.filtered_domain(
[("state", "=", "posted"), ("entry_number", "=", False)]
)
# Cache all the new numbers to avoid wasting recomputations, caused by
# searches done by _next() in the loop below
chosen_map = {}
for move in chosen.sorted(
lambda one: (one.date or "", one.name or "", one.id or 0)
):
chosen_map[move.id] = move.journal_id.entry_number_sequence_id._next(
move.date
)
# Write all the new numbers in the chosen moves
for move_id, new_number in chosen_map.items():
self.browse(move_id).entry_number = new_number
if chosen:
_logger.info("Added entry_number to %d account moves", len(chosen))
_logger.debug("Added entry_number to %r", chosen)

View File

@@ -0,0 +1,10 @@
# Copyright 2022 Moduon
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
from odoo import fields, models
class AccountMoveLine(models.Model):
_inherit = "account.move.line"
entry_number = fields.Char(related="move_id.entry_number")