# -*- coding: utf-8 -*- # Copyright 2026 Nexa Systems Inc. # License OPL-1 (Odoo Proprietary License v1.0) # # 2026-05-20 — `staged` state retirement. # # Drop `staged` from the active receiving state machine. The state had # zero downstream effect (same SO mapping as counted), no captured # data, and median dwell of 11 sec — pure ceremony between Counted # and Closed. Any existing records currently sitting in `staged` get # promoted to `closed` (they're already past the box-count step; # closed is the next logical resting place). # # `staged` stays in the Selection as a (legacy) value so historical # records that ever held it can still be read — we just don't write # to it anymore. The view's statusbar_visible drops it. import logging _logger = logging.getLogger(__name__) def migrate(cr, version): cr.execute(""" UPDATE fp_receiving SET state = 'closed' WHERE state = 'staged' """) n = cr.rowcount if n: _logger.info( '`staged` retirement: advanced %d receiving record(s) to ' 'closed (state was dead ceremony, median dwell 11 sec).', n, ) # Mirror the new state onto the linked sale orders so downstream # gates (job step start, mark_done qty check, cert creation) # see the right `received` status without waiting for the next # state-transition action. cr.execute(""" UPDATE sale_order so SET x_fc_receiving_status = 'received' FROM fp_receiving r WHERE r.sale_order_id = so.id AND r.state = 'closed' AND so.x_fc_receiving_status != 'received' """) if cr.rowcount: _logger.info( '`staged` retirement: synced %d sale_order.x_fc_receiving' '_status to "received".', cr.rowcount, )