diff --git a/addons/mrp/migrations/13.0.2.0/openupgrade_analysis_work.txt b/addons/mrp/migrations/13.0.2.0/openupgrade_analysis_work.txt new file mode 100644 index 000000000000..13018a347e1b --- /dev/null +++ b/addons/mrp/migrations/13.0.2.0/openupgrade_analysis_work.txt @@ -0,0 +1,156 @@ +---Models in module 'mrp'--- +obsolete model mrp.subproduct (renamed to mrp.bom.byproduct) +new model mrp.bom.byproduct (renamed from mrp.subproduct) +# DONE: pre-migration: renamed models and tables + +new model mrp.abstract.workorder [abstract] +new model mrp.abstract.workorder.line [abstract] +new model mrp.workorder.line +# NOTHING TO DO: new models + +---Fields in module 'mrp'--- +mrp / mrp.bom / consumption (selection) : NEW selection_keys: ['flexible', 'strict'], hasdefault +mrp / mrp.workorder / consumption (selection) : NEW required, selection_keys: ['flexible', 'strict'] +# DONE: pre-migration: set 'flexible' for normal bom and workorder + +mrp / mrp.bom.byproduct / company_id (many2one) : NEW relation: res.company, isrelated: related, stored +mrp / mrp.bom.byproduct / routing_id (many2one) : NEW relation: mrp.routing, isrelated: related, stored +mrp / mrp.bom.line / company_id (many2one) : NEW relation: res.company, isrelated: related, stored +# DONE: pre-migration: precreated and filled (to go faster) + +mrp / mrp.bom.line / attribute_value_ids (many2many): DEL relation: product.attribute.value +mrp / mrp.bom.line / bom_product_template_attribute_value_ids (many2many): NEW relation: product.template.attribute.value +# DONE: post-migration: filled relation table + +mrp / mrp.document / key (char) : module is now 'website' ('mrp') +mrp / mrp.document / res_id (integer) : relation is now 'res_model' ('False') [nothing to do] +mrp / mrp.document / res_id (integer) : type is now 'many2one_reference' ('integer') +mrp / mrp.document / website_id (many2one) : module is now 'website' ('mrp') +mrp / mrp.document / website_url (char) : module is now 'website' ('mrp') +# NOTHING TO DO + +mrp / mrp.production / availability (selection) : DEL selection_keys: ['assigned', 'none', 'partially_available', 'waiting'] +mrp / mrp.production / reservation_state (selection) : NEW selection_keys: ['assigned', 'confirmed', 'waiting'], isfunction: function, stored +# DONE: pre-migration: copy `availability` +# post-migration: set NULL IF availability == 'none' OR state in ('done', 'cancel') +# set 'assign' or 'confirm' according to _compute_state function + +mrp / mrp.production / propagate (boolean) : DEL +mrp / mrp.production / propagate_cancel (boolean) : NEW +# DONE: pre-migration (renamed) + +mrp / mrp.production / propagate_date (boolean) : NEW +# DONE: post-migration: filled empty field using old 'use_propagation_minimum_delta' ir.config.parameter + +mrp / mrp.production / propagate_date_minimum_delta (integer): NEW +# DONE: post-migration: filled empty cases when they have company + +mrp / mrp.production / date_deadline (datetime) : NEW +mrp / mrp.production / date_start_wo (datetime) : NEW +mrp / mrp.production / orderpoint_id (many2one) : NEW relation: stock.warehouse.orderpoint +mrp / mrp.production / state (selection) : now a function +mrp / mrp.production / state (selection) : selection_keys is now '['cancel', 'confirmed', 'done', 'draft', 'planned', 'progress', 'to_close']' ('['cancel', 'confirmed', 'done', 'planned', 'progress']') +mrp / mrp.routing / location_id (many2one) : DEL relation: stock.location +mrp / mrp.routing.workcenter / worksheet_google_slide (char) : NEW +mrp / mrp.routing.workcenter / worksheet_type (selection) : NEW selection_keys: ['google_slide', 'pdf'], hasdefault +mrp / mrp.workcenter / alternative_workcenter_ids (many2many): NEW relation: mrp.workcenter +# NOTHING TO DO: new features + +mrp / mrp.unbuild / company_id (many2one) : NEW relation: res.company, required, req_default: function, hasdefault +# DONE: post-migration: filled the field when empty + +mrp / mrp.workcenter.productivity / company_id (many2one) : NEW relation: res.company, required, req_default: function, hasdefault +# DONE: post-migration: filled correctly, not from env. + +mrp / mrp.workorder / final_lot_id (many2one) : DEL relation: stock.production.lot +mrp / mrp.workorder / finished_lot_id (many2one) : NEW relation: stock.production.lot +# DONE: pre-migration (renamed) + +mrp / mrp.workorder / active_move_line_ids (one2many): DEL relation: stock.move.line +mrp / mrp.workorder / activity_ids (one2many) : NEW relation: mail.activity +mrp / mrp.workorder / leave_id (many2one) : NEW relation: resource.calendar.leaves +mrp / mrp.workorder / move_finished_ids (one2many) : NEW relation: stock.move +# NOTHING TO DO: new features + +mrp / mrp.workorder / date_planned_finished (datetime): now a function +mrp / mrp.workorder / date_planned_start (datetime) : now a function +# DONE: post-migration: set where empty + +mrp / mrp.workorder / finished_workorder_line_ids (one2many): NEW relation: mrp.workorder.line +mrp / mrp.workorder / raw_workorder_line_ids (one2many): NEW relation: mrp.workorder.line +# DONE: post-migration: generate new records where need + +mrp / mrp.workorder / product_uom_id (many2one) : is now stored +mrp / mrp.workorder / product_uom_id (many2one) : not related anymore +mrp / mrp.workorder / product_uom_id (many2one) : now required +# DONE: post-migration: filled related values + +mrp / mrp.workorder.line / finished_workorder_id (many2one): NEW relation: mrp.workorder +mrp / mrp.workorder.line / lot_id (many2one) : NEW relation: stock.production.lot +mrp / mrp.workorder.line / move_id (many2one) : NEW relation: stock.move +mrp / mrp.workorder.line / product_id (many2one) : NEW relation: product.product, required +mrp / mrp.workorder.line / product_uom_id (many2one) : NEW relation: uom.uom +mrp / mrp.workorder.line / qty_done (float) : NEW +mrp / mrp.workorder.line / qty_reserved (float) : NEW +mrp / mrp.workorder.line / qty_to_consume (float) : NEW +mrp / mrp.workorder.line / raw_workorder_id (many2one) : NEW relation: mrp.workorder +# NOTHING TO DO: new model + +mrp / stock.move / active_move_line_ids (one2many): DEL relation: stock.move.line +mrp / stock.move.line / done_wo (boolean) : DEL +# NOTHING TO DO + +mrp / stock.move.line / lot_produced_id (many2one) : DEL relation: stock.production.lot +mrp / stock.move.line / lot_produced_ids (many2many) : NEW relation: stock.production.lot +# DONE: post-migration: transformed the many2one to many2many + +mrp / stock.picking.type / use_create_components_lots (boolean): NEW hasdefault +mrp / stock.production.lot / use_next_on_work_order_id (many2one): DEL relation: mrp.workorder +# NOTHING TO DO: new feature + +mrp / stock.warehouse / manufacture_mto_pull_id (many2one): NEW relation: stock.rule +# Done: post-migration: generate for warehouses where manufacture_to_resupply is set True + +mrp / mrp.bom / byproduct_ids (one2many) : NEW relation: mrp.bom.byproduct +mrp / stock.move / byproduct_id (many2one) : NEW relation: mrp.bom.byproduct +mrp_byproduct / mrp.bom / sub_products (one2many) : DEL relation: mrp.subproduct +mrp_byproduct / stock.move / subproduct_id (many2one) : DEL relation: mrp.subproduct +# DONE: pre-migration: field renamed + +---XML records in module 'mrp'--- +NEW ir.actions.report: mrp.label_manufacture_template +# NOTHING TO DO: new xml + +NEW ir.model.access: mrp.access_mrp_bom_byproduct_manager +NEW ir.model.access: mrp.access_mrp_bom_byproduct_user +DEL ir.model.access: mrp_byproduct.access_mrp_subproduct_manager +DEL ir.model.access: mrp_byproduct.access_mrp_subproduct_user +# DONE: pre-migration (renamed) + +NEW ir.model.access: mrp.access_mrp_workorder_line_mrp_manager +NEW ir.model.access: mrp.access_mrp_workorder_line_mrp_user +DEL ir.model.access: mrp.access_product_price_history_mrp_manager +DEL ir.model.access: mrp_byproduct.access_mrp_subproduct_all +# NOTHING TO DO: noupdate=0 + +NEW ir.module.category: base.module_category_manufacturing_manufacturing (noupdate) +NEW ir.rule: mrp.mrp_bom_byproduct_rule (noupdate) +NEW ir.rule: mrp.mrp_bom_line_rule (noupdate) +NEW ir.rule: mrp.mrp_unbuild_rule (noupdate) +NEW ir.rule: mrp.mrp_workcenter_productivity (noupdate) +NEW ir.rule: mrp.mrp_workorder_rule (noupdate) +# NOTHING TO DO: new xml + +DEL ir.sequence: mrp.sequence_mrp_unbuild (noupdate) +# DONE: post-migration (removed) + +DEL ir.ui.menu: mrp.menu_mrp_workcenter_productivity_loss +DEL ir.ui.menu: mrp.menu_view_resource_calendar_search_mrp +NEW ir.ui.view: mrp.label_production_view +NEW ir.ui.view: mrp.mrp_bom_byproduct_form_view +NEW ir.ui.view: mrp.mrp_product_produce_line_form +NEW ir.ui.view: mrp.mrp_product_produce_line_kanban +NEW ir.ui.view: mrp.view_stock_move_raw_tree +DEL ir.ui.view: mrp_byproduct.mrp_subproduct_view +NEW res.groups: mrp.group_mrp_byproducts +# NOTHING TO DO: noupdate=0 diff --git a/addons/mrp/migrations/13.0.2.0/post-migration.py b/addons/mrp/migrations/13.0.2.0/post-migration.py new file mode 100644 index 000000000000..abf94b1b1d33 --- /dev/null +++ b/addons/mrp/migrations/13.0.2.0/post-migration.py @@ -0,0 +1,327 @@ +# Copyright 2020 Payam Yasaie +# Copyright 2020 Andrii Skrypka +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from openupgradelib import openupgrade + +_unlink_by_xmlid = [ + 'mrp.sequence_mrp_unbuild', +] + + +def fill_bom_product_template_attribute_value(env): + openupgrade.logged_query(env.cr, """ + INSERT INTO mrp_bom_line_product_template_attribute_value_rel + (mrp_bom_line_id, product_template_attribute_value_id) + SELECT mbl_pav_rel.mrp_bom_line_id, ptav.id + FROM mrp_bom_line_product_attribute_value_rel mbl_pav_rel + JOIN mrp_bom_line mbl ON mbl.id = mbl_pav_rel.mrp_bom_line_id + JOIN mrp_bom mb ON mbl.bom_id = mb.id + JOIN product_template pt ON mb.product_tmpl_id = pt.id + JOIN product_template_attribute_value ptav ON ( + pt.id = ptav.product_tmpl_id + AND mbl_pav_rel.product_attribute_value_id = ptav.product_attribute_value_id) + GROUP BY mbl_pav_rel.mrp_bom_line_id, ptav.id + """) + + +def fill_propagate_date_minimum_delta(env): + # mrp production + openupgrade.logged_query( + env.cr, """ + UPDATE mrp_production mp + SET propagate_date_minimum_delta = rc.propagation_minimum_delta + FROM res_company rc + WHERE mp.company_id = rc.id AND + mp.propagate_date_minimum_delta IS NULL + AND rc.propagation_minimum_delta IS NOT NULL + """ + ) + openupgrade.logged_query( + env.cr, """ + UPDATE mrp_production mp + SET propagate_date = TRUE + FROM ir_config_parameter icp + WHERE mp.propagate_date IS NULL + AND icp.key = 'stock.use_propagation_minimum_delta' + AND icp.value = 'True' + """ + ) + + +def mapped_reservation_state(env): + openupgrade.logged_query( + env.cr, """ + UPDATE mrp_production + SET reservation_state = NULL + WHERE reservation_state = 'none' + """ + ) + # in v12 reservation state is not NULL when MO was done or cancel + openupgrade.logged_query( + env.cr, """ + UPDATE mrp_production + SET reservation_state = NULL + WHERE state in ('done', 'cancel') + """ + ) + + # convert 'partially_available' according to + # _compute_state function of mrp_production model + + # get MO ids which need mapped value according to _get_ready_to_produce_state function + openupgrade.logged_query( + env.cr, """ + SELECT mo.id as id + FROM mrp_production mo + JOIN mrp_routing_workcenter operation + ON mo.routing_id = operation.routing_id + JOIN mrp_bom bom + ON mo.bom_id = bom.id AND bom.ready_to_produce = 'asap' + WHERE mo.routing_id IS NOT NULL AND mo.reservation_state = 'partially_available' + GROUP BY mo.id + """ + ) + mo_ids = tuple(x[0] for x in env.cr.fetchall()) + if mo_ids: + reservation_state = {} + for mo in env['mrp.production'].browse(mo_ids): + reservation_state.setdefault( + mo._get_ready_to_produce_state(), []).append(mo.id) + for value, ids in reservation_state.items(): + openupgrade.logged_query( + env.cr, """ + UPDATE mrp_production + SET reservation_state = %s + WHERE id in %s + """, (value, tuple(ids)) + ) + # set 'confirm' for record which not in mo_ids + openupgrade.logged_query( + env.cr, """ + UPDATE mrp_production mo + SET reservation_state = 'confirm' + WHERE mo.reservation_state = 'partially_available' + """ + ) + # manual update related store=True field + openupgrade.logged_query( + env.cr, """ + UPDATE mrp_workorder wo + SET production_availability = mo.reservation_state + FROM mrp_production mo + WHERE wo.production_id = mo.id + """ + ) + + +def convert_many2one_field(env): + openupgrade.m2o_to_x2m( + env.cr, + env['stock.move.line'], 'stock_move_line', + 'lot_produced_ids', openupgrade.get_legacy_name('lot_produced_id') + ) + + +def fill_mrp_workcenter_productivity_company_id(env): + # from mrp_workorder + openupgrade.logged_query( + env.cr, """ + UPDATE mrp_workcenter_productivity mwp + SET company_id = mp.company_id + FROM mrp_workorder mw + JOIN mrp_production mp ON mw.production_id = mp.id + WHERE mwp.workorder_id = mw.id AND mp.company_id IS NOT NULL + """ + ) + # from mrp_workcenter + openupgrade.logged_query( + env.cr, """ + UPDATE mrp_workcenter_productivity mwp + SET company_id = mw.company_id + FROM mrp_workcenter mw + WHERE mwp.workcenter_id = mw.id AND mw.company_id IS NOT NULL + """ + ) + + +def fill_unbuild_company_id(cr): + # from mrp_bom + openupgrade.logged_query( + cr, """ + UPDATE mrp_unbuild mu + SET company_id = mb.company_id + FROM mrp_bom mb + WHERE mu.bom_id = mb.id AND mb.company_id IS NOT NULL + AND mu.company_id IS NULL""" + ) + # from stock_move/res_users + openupgrade.logged_query( + cr, """ + UPDATE mrp_unbuild mu + SET company_id = COALESCE( + (SELECT sm.company_id FROM stock_move sm + WHERE mu.id = sm.unbuild_id AND sm.company_id IS NOT NULL + LIMIT 1), ru.company_id) + FROM res_users ru + WHERE ru.id = mu.create_uid AND mu.company_id IS NULL + """ + ) + + +def fill_stock_picking_type_sequence_code(env): + openupgrade.logged_query( + env.cr, """ + UPDATE stock_picking_type spt + SET sequence_code = CASE + WHEN spt.id = wh.pbm_type_id THEN 'PC' + WHEN spt.id = wh.sam_type_id THEN 'SFP' + WHEN spt.id = wh.manu_type_id THEN 'MO' + END + FROM stock_warehouse wh + WHERE sequence_code = 'TO_FILL' AND spt.id in (wh.pbm_type_id, wh.sam_type_id, wh.manu_type_id) + """ + ) + + +def handle_unbuild_sequence(env): + # although later the 'mrp.sequence_mrp_unbuild' sequence will be deleted, + # we need to nullify its code (if having one) here + # because we want a new autogenerated sequence + openupgrade.logged_query( + env.cr, """ + UPDATE ir_sequence seq + SET code = NULL + FROM ir_model_data imd + WHERE imd.res_id = seq.id AND imd.module = 'mrp' + AND imd.name = 'sequence_mrp_unbuild'""" + ) + # force execute this function (it is noupdate=1 in xml data) + env['res.company'].create_missing_unbuild_sequences() + + +def fill_manufacture_mto_pull(env): + warehouses = env['stock.warehouse'].with_context(active_test=False).search([ + ('manufacture_to_resupply', '=', True), + ('manufacture_mto_pull_id', '=', False), + ]) + for wh in warehouses: + rule_details = wh._get_global_route_rules_values()['manufacture_mto_pull_id'] + values = rule_details.get('update_values', {}) + values.update(rule_details['create_values']) + values.update({'warehouse_id': wh.id}) + wh['manufacture_mto_pull_id'] = env['stock.rule'].create(values) + + +def fill_mrp_workorder_product_uom_id(cr): + openupgrade.logged_query( + cr, """ + UPDATE mrp_workorder mw + SET product_uom_id = mp.product_uom_id + FROM mrp_production mp + WHERE mw.production_id = mp.id AND mw.product_uom_id IS NULL + """ + ) + + +def update_consumption(env): + """ Create column and pre-fill 'flexible' because In Odoo 12 work like 'flexible'""" + openupgrade.logged_query( + env.cr, """ + UPDATE mrp_bom + SET consumption = 'flexible' + WHERE type = 'normal' + """, + ) + openupgrade.logged_query( + env.cr, """ + UPDATE mrp_workorder + SET consumption = 'flexible' + """, + ) + + +def enable_group_mrp_byproducts(env): + if env['mrp.bom.byproduct'].search([], limit=1): + config = env['res.config.settings'].create({'group_mrp_byproducts': True}) + config.execute() + + +def generate_wo_line(env): + """ Convert active_move_line_ids to raw_workorder_line_ids """ + openupgrade.logged_query(env.cr, """ + SELECT id, workorder_id + FROM stock_move_line + WHERE workorder_id IS NOT NULL AND done_wo = False and state NOT IN ('done', 'cancel') + """) + active_sml_ids = [] + wo_ids = set() + for sml_id, wo_id in env.cr.fetchall(): + wo_ids.add(wo_id) + active_sml_ids.append(sml_id) + env['mrp.workorder'].browse(list(wo_ids))._refresh_wo_lines() + env['stock.move.line'].browse(active_sml_ids).unlink() + + +def fill_planned_datetime(env): + openupgrade.logged_query(env.cr, """ + UPDATE mrp_workorder wo + SET date_planned_start = mo.date_planned_start, date_planned_finished = mo.date_planned_finished + FROM mrp_production mo + WHERE wo.state NOT IN ('done', 'cancel') AND wo.production_id = mo.id + AND wo.date_planned_finished IS NULL AND wo.date_planned_start IS NULL + """) + + +def fill_stock_move_bom_line_id(env): + """v13 added a new functionality to this bom_line_id field. + A part from the usual value for raw moves in mrp productions, + now this field has a value for delivery moves generated from a kit. + See _prepare_phantom_move_values method, that has bom_line_id field.""" + openupgrade.logged_query( + env.cr, """ + UPDATE stock_move sm0 + SET bom_line_id = mbl0.id + FROM ( + SELECT moves.id, moves.product_id, + (array_agg(moves.bom_id))[1] as bom_id + FROM ( + SELECT sm.id, mb.id AS bom_id, sm.product_id + FROM stock_move sm + JOIN stock_picking_type spt ON ( + sm.picking_type_id = spt.id AND spt.code = 'outgoing') + JOIN product_product pp ON sm.product_id = pp.id + JOIN product_template pt ON ( + pp.product_tmpl_id = pt.id AND pt.type != 'service') + JOIN mrp_bom_line mbl ON mbl.product_id = pp.id + JOIN mrp_bom mb ON (mbl.bom_id = mb.id + AND (mb.company_id IS NULL OR mb.company_id = sm.company_id) + AND mb.type = 'phantom') + WHERE sm.bom_line_id IS NULL + ORDER BY sm.id, mb.sequence, mb.product_id + ) moves + GROUP BY moves.id, moves.product_id + ) rel + JOIN mrp_bom_line mbl0 ON ( + rel.bom_id = mbl0.bom_id AND mbl0.product_id = rel.product_id) + WHERE sm0.id = rel.id""") + + +@openupgrade.migrate() +def migrate(env, version): + fill_bom_product_template_attribute_value(env) + fill_propagate_date_minimum_delta(env) + mapped_reservation_state(env) + convert_many2one_field(env) + fill_mrp_workcenter_productivity_company_id(env) + fill_unbuild_company_id(env.cr) + fill_stock_picking_type_sequence_code(env) + handle_unbuild_sequence(env) + fill_manufacture_mto_pull(env) + fill_mrp_workorder_product_uom_id(env.cr) + update_consumption(env) + openupgrade.load_data(env.cr, 'mrp', 'migrations/13.0.2.0/noupdate_changes.xml') + openupgrade.delete_records_safely_by_xml_id(env, _unlink_by_xmlid) + enable_group_mrp_byproducts(env) + generate_wo_line(env) + fill_planned_datetime(env) + fill_stock_move_bom_line_id(env) diff --git a/addons/mrp/migrations/13.0.2.0/pre-migration.py b/addons/mrp/migrations/13.0.2.0/pre-migration.py new file mode 100644 index 000000000000..7abb9f5c998e --- /dev/null +++ b/addons/mrp/migrations/13.0.2.0/pre-migration.py @@ -0,0 +1,101 @@ +# Copyright 2020 Payam Yasaie +# Copyright 2020 Andrii Skrypka +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from openupgradelib import openupgrade + +_model_renames = [ + ('mrp.subproduct', 'mrp.bom.byproduct'), +] + +_mrp_subproduct_table_renames = [ + ('mrp_subproduct', 'mrp_bom_byproduct'), +] + +_field_renames = [ + ('mrp.workorder', 'mrp_workorder', 'final_lot_id', 'finished_lot_id'), + ('mrp.bom', 'mrp_bom', 'sub_products', 'byproduct_ids'), + ('mrp.bom.line', 'mrp_bom_line', 'attribute_value_ids', 'bom_product_template_attribute_value_ids'), + ('mrp.production', 'mrp_production', 'propagate', 'propagate_cancel'), + ('stock.move', 'stock_move', 'subproduct_id', 'byproduct_id'), +] + +_column_renames = { + 'stock_move_line': [ + ('lot_produced_id', None), + ], +} + +_column_copies = { + 'mrp_production': [ + ('availability', 'reservation_state', None), + ], +} + +_mrp_subproduct_xmlid_renames = [ + # ir.model.access + ('mrp.access_mrp_subproduct_manager', 'mrp.access_mrp_bom_byproduct_manager'), + ('mrp.access_mrp_subproduct_user', 'mrp.access_mrp_bom_byproduct_user'), +] + + +def fast_precreation_and_fill_mrp_bom_byproduct(env): + """Faster way""" + openupgrade.logged_query( + env.cr, """ + ALTER TABLE mrp_bom_byproduct + ADD COLUMN company_id integer""", + ) + openupgrade.logged_query( + env.cr, """ + ALTER TABLE mrp_bom_byproduct + ADD COLUMN routing_id integer""", + ) + openupgrade.logged_query( + env.cr, """ + UPDATE mrp_bom_byproduct mbb + SET company_id = mb.company_id, routing_id = mb.routing_id + FROM mrp_bom mb + WHERE mb.id = mbb.bom_id""", + ) + + +def fast_precreation_and_fill_mrp_bom_line(env): + openupgrade.logged_query( + env.cr, """ + ALTER TABLE mrp_bom_line + ADD COLUMN company_id integer""", + ) + openupgrade.logged_query( + env.cr, """ + UPDATE mrp_bom_line mbl + SET company_id = mb.company_id + FROM mrp_bom mb + WHERE mb.id = mbl.bom_id""", + ) + + +def mapped_reservation_state(env): + openupgrade.logged_query( + env.cr, """ + UPDATE mrp_production + SET reservation_state = CASE + WHEN reservation_state = 'partially_available' THEN 'assigned' + WHEN reservation_state = 'none' THEN NULL + END + WHERE reservation_state in ('partially_available', 'none')""" + ) + + +@openupgrade.migrate() +def migrate(env, version): + openupgrade.remove_tables_fks(env.cr, 'mrp_bom_line_product_attribute_value_rel') + openupgrade.rename_models(env.cr, _model_renames) + if openupgrade.table_exists(env.cr, 'mrp_subproduct'): + openupgrade.rename_tables(env.cr, _mrp_subproduct_table_renames) + fast_precreation_and_fill_mrp_bom_byproduct(env) + openupgrade.rename_xmlids(env.cr, _mrp_subproduct_xmlid_renames) + fast_precreation_and_fill_mrp_bom_line(env) + openupgrade.rename_fields(env, _field_renames) + openupgrade.copy_columns(env.cr, _column_copies) + openupgrade.rename_columns(env.cr, _column_renames) + mapped_reservation_state(env) diff --git a/odoo/openupgrade/doc/source/modules120-130.rst b/odoo/openupgrade/doc/source/modules120-130.rst index adbc65a97af1..85ec9638df40 100644 --- a/odoo/openupgrade/doc/source/modules120-130.rst +++ b/odoo/openupgrade/doc/source/modules120-130.rst @@ -433,13 +433,13 @@ missing in the new release are marked with |del|. +----------------------------------------------+-------------------------------------------------+ |membership | Done | +----------------------------------------------+-------------------------------------------------+ -|mrp | | +|mrp | Done | +----------------------------------------------+-------------------------------------------------+ | |new| mrp_account | | +----------------------------------------------+-------------------------------------------------+ | |del| mrp_bom_cost | | +----------------------------------------------+-------------------------------------------------+ -| |del| mrp_byproduct | | +| |del| mrp_byproduct | Done. Merged into mrp | +----------------------------------------------+-------------------------------------------------+ | |new| mrp_subcontracting | | +----------------------------------------------+-------------------------------------------------+