mirror of
https://github.com/bringout/oca-workflow-process.git
synced 2026-04-19 12:52:04 +02:00
102 lines
3.1 KiB
Python
102 lines
3.1 KiB
Python
# Copyright 2022 Camptocamp SA
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
|
|
|
import logging
|
|
|
|
from openupgradelib import openupgrade
|
|
|
|
from odoo import SUPERUSER_ID, api
|
|
from odoo.tools.sql import column_exists, create_column
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def setup_move_line_progress(cr):
|
|
"""Update the 'progress' column for move lines."""
|
|
table = "stock_move_line"
|
|
column = "progress"
|
|
if column_exists(cr, table, column):
|
|
logger.info("%s already exists on %s, skipping setup", column, table)
|
|
return
|
|
env = api.Environment(cr, SUPERUSER_ID, {})
|
|
logger.info("creating %s on table %s", column, table)
|
|
field_spec = [
|
|
(
|
|
"progress",
|
|
"stock.move.line",
|
|
"stock_move_line",
|
|
"float",
|
|
"float",
|
|
"stock_picking_progress",
|
|
100.0,
|
|
)
|
|
]
|
|
openupgrade.add_fields(env, field_spec)
|
|
logger.info("filling up %s on %s", column, table)
|
|
cr.execute("""UPDATE stock_move_line SET progress =0 WHERE state = 'cancel'""")
|
|
cr.execute(
|
|
"""
|
|
UPDATE stock_move_line SET progress =(qty_done / reserved_qty) * 100
|
|
WHERE state not in ('done', 'cancel') AND reserved_qty > 0.0
|
|
"""
|
|
)
|
|
|
|
|
|
def setup_move_progress(cr):
|
|
"""Update the 'progress' column for not-started or already done moves."""
|
|
table = "stock_move"
|
|
column = "progress"
|
|
if column_exists(cr, table, column):
|
|
logger.info("%s already exists on %s, skipping setup", column, table)
|
|
return
|
|
env = api.Environment(cr, SUPERUSER_ID, {})
|
|
logger.info("creating %s on table %s", column, table)
|
|
field_spec = [
|
|
(
|
|
"progress",
|
|
"stock.move",
|
|
"stock_move",
|
|
"float",
|
|
"float",
|
|
"stock_picking_progress",
|
|
100.0,
|
|
)
|
|
]
|
|
openupgrade.add_fields(env, field_spec)
|
|
logger.info("filling up %s on %s", column, table)
|
|
cr.execute("""UPDATE stock_move SET progress =0 WHERE state = 'cancel'""")
|
|
cr.execute(
|
|
"""
|
|
UPDATE stock_move SET progress =(quantity_done / product_uom_qty) * 100
|
|
WHERE state not in ('done', 'cancel') AND product_uom_qty > 0.0
|
|
"""
|
|
)
|
|
|
|
|
|
def setup_picking_progress(cr):
|
|
table = "stock_picking"
|
|
column = "progress"
|
|
_type = "float"
|
|
if column_exists(cr, table, column):
|
|
logger.info("%s already exists on %s, skipping setup", column, table)
|
|
return
|
|
logger.info("creating %s on table %s", column, table)
|
|
create_column(cr, table, column, _type)
|
|
fill_column_query = """
|
|
UPDATE stock_picking p
|
|
SET progress = subquery.avg_progress
|
|
FROM (
|
|
SELECT sm.picking_id, avg(sm.progress) as avg_progress
|
|
FROM stock_move sm
|
|
GROUP BY sm.picking_id
|
|
) as subquery
|
|
WHERE p.id = subquery.picking_id;
|
|
"""
|
|
logger.info("filling up %s on %s", column, table)
|
|
cr.execute(fill_column_query)
|
|
|
|
|
|
def pre_init_hook(cr):
|
|
setup_move_line_progress(cr)
|
|
setup_move_progress(cr)
|
|
setup_picking_progress(cr)
|