Files
Odoo-18.0-20251222/sale_delivery_state/hooks.py
tocmo0nlord adbe430761
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
Initial commit: Odoo 18.0-20251222 extra-addons
2026-03-13 20:43:25 +00:00

46 lines
1.8 KiB
Python
Executable File

# Copyright 2023 Akretion (https://www.akretion.com).
# @author Sébastien BEAU <sebastien.beau@akretion.com>
# Copyright 2024 Manuel Regidor <manuel.regidor@sygel.es>
# Copyright 2025 Camptocamp SA
# @author: Simone Orsi <simahawk@gmail.com>
# @author: Sébastien Alix <sebastien.alix@camptocamp.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
import logging
import math
from odoo.tools.misc import split_every
from odoo.tools.sql import column_exists, create_column
_logger = logging.getLogger(__name__)
def pre_init_hook(env):
_setup_new_columns(env.cr)
def _setup_new_columns(cr):
if not column_exists(cr, "sale_order", "delivery_status"):
_logger.info("Create sale_order column delivery_status")
create_column(cr, "sale_order", "delivery_status", "varchar")
if not column_exists(cr, "sale_order_line", "skip_sale_delivery_state"):
_logger.info("Create sale_order_line column skip_sale_delivery_state")
create_column(cr, "sale_order_line", "skip_sale_delivery_state", "boolean")
cr.execute("UPDATE sale_order_line SET skip_sale_delivery_state = False")
def post_init_hook(env):
# Recompute '<sale.order>.delivery_status' by chunk to keep a constant
# memory consumption
order_model = env["sale.order"].with_context(prefetch_fields=False)
rec_ids = order_model.search([]).ids
_logger.info("Recompute 'delivery_status' on %s sale orders...", len(rec_ids))
chunk_size = 2000
nb_chunks = math.ceil(len(rec_ids) / chunk_size)
for i, chunk_ids in enumerate(split_every(chunk_size, rec_ids), 1):
_logger.info("... %s / %s", i, nb_chunks)
records = order_model.browse(chunk_ids)
records._compute_oca_delivery_status()
env.cr.commit()
env.invalidate_all()