#!/bin/bash set -euo pipefail DB_NAME="$1" ODOO_SERVICE="$2" echo "Running SQL cleanup..." CLEANUP_SQL=$(cat <<'EOF' -- Drop sequences that prevent Odoo from starting. -- These sequences are recreated by Odoo on startup but stale values -- from the old version can cause conflicts. DROP SEQUENCE IF EXISTS base_registry_signaling; DROP SEQUENCE IF EXISTS base_cache_signaling; -- Reset website templates to their original state. -- Views with arch_fs (file source) that have been customized (arch_db not null) -- are reset to use the file version, EXCEPT for actual website pages which -- contain user content that must be preserved. UPDATE ir_ui_view SET arch_db = NULL WHERE arch_fs IS NOT NULL AND arch_fs LIKE 'website/%' AND arch_db IS NOT NULL AND id NOT IN (SELECT view_id FROM website_page); -- Purge compiled frontend assets (CSS/JS bundles). -- These cached files reference old asset versions and must be regenerated -- by Odoo after migration to avoid broken stylesheets and scripts. DELETE FROM ir_attachment WHERE name LIKE '/web/assets/%' OR name LIKE '%.assets_%' OR (res_model = 'ir.ui.view' AND mimetype = 'text/css'); EOF ) query_postgres_container "$CLEANUP_SQL" "$DB_NAME" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" PYTHON_SCRIPT="${SCRIPT_DIR}/lib/python/fix_duplicated_views.py" echo "Remove duplicated views with script $PYTHON_SCRIPT ..." exec_python_script_in_odoo_shell "$DB_NAME" "$DB_NAME" "$PYTHON_SCRIPT" PYTHON_SCRIPT="${SCRIPT_DIR}/lib/python/cleanup_modules.py" echo "Uninstall obsolete add-ons with script $PYTHON_SCRIPT ..." exec_python_script_in_odoo_shell "$DB_NAME" "$DB_NAME" "$PYTHON_SCRIPT" # ──────────────────────────────────────────────────────────── # Regenerate POS inalterability hashes if needed # ──────────────────────────────────────────────────────────── HASHES_NEEDED=$(query_postgres_container " SELECT COUNT(*) FROM pos_order po JOIN res_company rc ON rc.id = po.company_id WHERE po.state IN ('paid', 'done', 'invoiced') AND rc.l10n_fr_pos_cert_sequence_id IS NOT NULL AND (po.l10n_fr_hash IS NULL OR po.l10n_fr_secure_sequence_number IS NULL) " "$DB_NAME") if [[ "$HASHES_NEEDED" =~ ^[0-9]+$ && "$HASHES_NEEDED" -gt 0 ]]; then echo "" echo "Found $HASHES_NEEDED pos.order(s) with missing inalterability hash or sequence number." echo "Regenerating all POS hashes..." PYTHON_SCRIPT="${SCRIPT_DIR}/lib/python/regenerate_pos_hashes.py" exec_python_script_in_odoo_shell "$DB_NAME" "$DB_NAME" "$PYTHON_SCRIPT" echo "POS hash regeneration completed." else echo "No missing POS hashes detected." fi # Give back the right to user to access to the tables # docker exec -u 70 "$DB_CONTAINER_NAME" pgm chown "$FINALE_SERVICE_NAME" "$DB_NAME" # Launch Odoo with database in finale version to run all updates run_compose --debug run "$ODOO_SERVICE" -u all --log-level=debug --stop-after-init --no-http echo "" echo "Running post-migration view validation..." if exec_python_script_in_odoo_shell "$DB_NAME" "$DB_NAME" "${SCRIPT_DIR}/lib/python/validate_views.py"; then echo "View validation passed." else echo "WARNING: View validation found issues. Run scripts/validate_migration.sh for the full report." fi