From 0d16e7331cc859a6f060eeed8ea2b53801c08ca6 Mon Sep 17 00:00:00 2001 From: Nicolas Martinelli Date: Mon, 23 Mar 2020 12:14:09 +0000 Subject: [PATCH] [FIX] mrp, mrp_subcontracting: clean-up routes at uninstall When `mrp` or `mrp_subcontracting` are uninstalled, the routes used as 'Picking Before Manufacturing Route' and 'Resupply Subcontractor' are kept active. When the modules are re-installed, the routes are created again, and appear duplicated. The routes should be deleted if they are not used anywhere else. opw-2222895 closes odoo/odoo#48206 X-original-commit: ce219b8375dc14daf9d380433d254b622a947773 Signed-off-by: Nicolas Martinelli (nim) --- addons/mrp/__init__.py | 13 +++++++++++++ addons/mrp/__manifest__.py | 1 + addons/mrp_subcontracting/__init__.py | 15 +++++++++++++++ addons/mrp_subcontracting/__manifest__.py | 1 + 4 files changed, 30 insertions(+) diff --git a/addons/mrp/__init__.py b/addons/mrp/__init__.py index 616729a420d..07f99e38042 100644 --- a/addons/mrp/__init__.py +++ b/addons/mrp/__init__.py @@ -16,3 +16,16 @@ def _create_warehouse_data(cr, registry): env = api.Environment(cr, SUPERUSER_ID, {}) warehouse_ids = env['stock.warehouse'].search([('manufacture_pull_id', '=', False)]) warehouse_ids.write({'manufacture_to_resupply': True}) + +def uninstall_hook(cr, registry): + env = api.Environment(cr, SUPERUSER_ID, {}) + warehouses = env["stock.warehouse"].search([]) + subcontracting_routes = warehouses.mapped("pbm_route_id") + warehouses.write({"pbm_route_id": False}) + # Fail unlink means that the route is used somewhere (e.g. route_id on stock.rule). In this case + # we don't try to do anything. + try: + subcontracting_routes.unlink() + except: + pass + diff --git a/addons/mrp/__manifest__.py b/addons/mrp/__manifest__.py index f664c4883e2..4f08bb9f0ab 100644 --- a/addons/mrp/__manifest__.py +++ b/addons/mrp/__manifest__.py @@ -47,4 +47,5 @@ 'test': [], 'application': True, 'post_init_hook': '_create_warehouse_data', + 'uninstall_hook': 'uninstall_hook', } diff --git a/addons/mrp_subcontracting/__init__.py b/addons/mrp_subcontracting/__init__.py index 35e7c9600c5..276d3a48dbf 100644 --- a/addons/mrp_subcontracting/__init__.py +++ b/addons/mrp_subcontracting/__init__.py @@ -1,4 +1,19 @@ # -*- coding: utf-8 -*- +from odoo import SUPERUSER_ID, api + from . import models from . import wizard + + +def uninstall_hook(cr, registry): + env = api.Environment(cr, SUPERUSER_ID, {}) + warehouses = env["stock.warehouse"].search([]) + subcontracting_routes = warehouses.mapped("subcontracting_route_id") + warehouses.write({"subcontracting_route_id": False}) + # Fail unlink means that the route is used somewhere (e.g. route_id on stock.rule). In this case + # we don't try to do anything. + try: + subcontracting_routes.unlink() + except: + pass diff --git a/addons/mrp_subcontracting/__manifest__.py b/addons/mrp_subcontracting/__manifest__.py index e40a4ced61f..1d390e86d1c 100644 --- a/addons/mrp_subcontracting/__manifest__.py +++ b/addons/mrp_subcontracting/__manifest__.py @@ -23,4 +23,5 @@ 'demo': [ 'data/mrp_subcontracting_demo.xml', ], + 'uninstall_hook': 'uninstall_hook', }