From 283a6a72be9bde447c6fcf5b9254b92ce4ef9913 Mon Sep 17 00:00:00 2001 From: mreficent Date: Wed, 21 Jul 2021 20:00:52 +0200 Subject: [PATCH 1/2] [OU-ADD] mrp: Migration scripts --- docsource/modules130-140.rst | 2 +- .../scripts/mrp/14.0.2.0/noupdate_changes.xml | 18 +- .../scripts/mrp/14.0.2.0/post-migration.py | 56 +++++ .../scripts/mrp/14.0.2.0/pre-migration.py | 107 ++++++++++ .../mrp/14.0.2.0/upgrade_analysis_work.txt | 198 ++++++++++++++++++ 5 files changed, 371 insertions(+), 10 deletions(-) create mode 100644 openupgrade_scripts/scripts/mrp/14.0.2.0/post-migration.py create mode 100644 openupgrade_scripts/scripts/mrp/14.0.2.0/pre-migration.py create mode 100644 openupgrade_scripts/scripts/mrp/14.0.2.0/upgrade_analysis_work.txt diff --git a/docsource/modules130-140.rst b/docsource/modules130-140.rst index 4aec1e44e4b3..cf0cab923f2d 100644 --- a/docsource/modules130-140.rst +++ b/docsource/modules130-140.rst @@ -456,7 +456,7 @@ Module coverage 13.0 -> 14.0 +--------------------------------------------+-------------------------------------------------+ | |new| microsoft_calendar | | +--------------------------------------------+-------------------------------------------------+ -|mrp | | +|mrp | Done | +--------------------------------------------+-------------------------------------------------+ |mrp_account | | +--------------------------------------------+-------------------------------------------------+ diff --git a/openupgrade_scripts/scripts/mrp/14.0.2.0/noupdate_changes.xml b/openupgrade_scripts/scripts/mrp/14.0.2.0/noupdate_changes.xml index 40e581faefcb..a0c7c162ccea 100644 --- a/openupgrade_scripts/scripts/mrp/14.0.2.0/noupdate_changes.xml +++ b/openupgrade_scripts/scripts/mrp/14.0.2.0/noupdate_changes.xml @@ -1,30 +1,30 @@ - + - + - + - + - + - + - + - + - + diff --git a/openupgrade_scripts/scripts/mrp/14.0.2.0/post-migration.py b/openupgrade_scripts/scripts/mrp/14.0.2.0/post-migration.py new file mode 100644 index 000000000000..55403f593e7b --- /dev/null +++ b/openupgrade_scripts/scripts/mrp/14.0.2.0/post-migration.py @@ -0,0 +1,56 @@ +# Copyright 2021 ForgeFlow S.L. +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from openupgradelib import openupgrade + + +def merge_priorities(env): + openupgrade.map_values( + env.cr, + openupgrade.get_legacy_name("priority"), + "priority", + [("1", "0"), ("2", "1"), ("3", "1")], + table="mrp_production", + ) + + +def map_stock_move_line_lot_produced_ids(env): + openupgrade.logged_query( + env.cr, + """ + UPDATE stock_move_line sml + SET lot_id = rel.stock_production_lot_id + FROM stock_move_line_stock_production_lot_rel rel + JOIN stock_move_line_consume_rel rel2 + ON rel2.produce_line_id = rel.stock_move_line_id + WHERE sml.lot_id IS NULL AND rel2.consume_line_id = sml.id""", + ) + openupgrade.logged_query( + env.cr, + """ + INSERT INTO stock_move_line_consume_rel ( + produce_line_id, consume_line_id) + SELECT rel.stock_move_line_id, sml.id + FROM stock_move_line_stock_production_lot_rel rel + JOIN stock_move_line sml ON ( + sml.lot_id = rel.stock_production_lot_id + AND rel.stock_move_line_id != sml.id) + LEFT JOIN stock_move_line_consume_rel rel2 ON ( + rel2.produce_line_id = rel.stock_move_line_id + AND rel2.consume_line_id = sml.id) + WHERE rel2.produce_line_id IS NULL""", + ) + + +def map_mrp_production_state_planned(env): + env["mrp.production"].search([("state", "=", "planned")])._compute_state() + + +@openupgrade.migrate() +def migrate(env, version): + merge_priorities(env) + map_stock_move_line_lot_produced_ids(env) + map_mrp_production_state_planned(env) + openupgrade.load_data(env.cr, "mrp", "14.0.2.0/noupdate_changes.xml") + openupgrade.delete_records_safely_by_xml_id( + env, ["mrp.mrp_routing_rule", "mrp.sequence_mrp_route"] + ) diff --git a/openupgrade_scripts/scripts/mrp/14.0.2.0/pre-migration.py b/openupgrade_scripts/scripts/mrp/14.0.2.0/pre-migration.py new file mode 100644 index 000000000000..e2f42d3f7c03 --- /dev/null +++ b/openupgrade_scripts/scripts/mrp/14.0.2.0/pre-migration.py @@ -0,0 +1,107 @@ +# Copyright 2021 ForgeFlow S.L. +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from openupgradelib import openupgrade + +_column_copies = { + "mrp_production": [ + ("priority", None, None), + ("state", None, None), + ], +} + + +def fill_mrp_routing_workcenter_bom_id(env): + openupgrade.logged_query( + env.cr, + """ + ALTER TABLE mrp_routing_workcenter + ADD COLUMN bom_id integer""", + ) + openupgrade.logged_query( + env.cr, + """ + ALTER TABLE mrp_routing_workcenter + ADD COLUMN old_routing_workcenter_id integer""", + ) + openupgrade.logged_query( + env.cr, + """ + ALTER TABLE mrp_routing_workcenter + ALTER COLUMN routing_id DROP NOT NULL""", + ) + openupgrade.logged_query( + env.cr, + """ + ALTER TABLE mrp_routing_workcenter + ALTER COLUMN batch DROP NOT NULL""", + ) + openupgrade.logged_query( + env.cr, + """ + INSERT INTO mrp_routing_workcenter (name, workcenter_id, sequence, + company_id, worksheet_type, note, worksheet_google_slide, time_mode, + time_mode_batch, time_cycle_manual, create_uid, write_uid, + create_date, write_date, bom_id, routing_id, + old_routing_workcenter_id) + SELECT mrw.name, mrw.workcenter_id, mrw.sequence, mrw.company_id, + mrw.worksheet_type, mrw.note, mrw.worksheet_google_slide, + mrw.time_mode, mrw.time_mode_batch, mrw.time_cycle_manual, + mrw.create_uid, mb.write_uid, mb.create_date, mb.create_date, + mb.id, mrw.routing_id, mrw.id + FROM mrp_routing_workcenter mrw + JOIN mrp_bom mb ON mb.routing_id = mrw.routing_id""", + ) + openupgrade.logged_query( + env.cr, + """ + UPDATE mrp_bom_line mbl + SET operation_id = mrw.id + FROM mrp_bom mb + JOIN mrp_routing_workcenter mrw ON mrw.bom_id = mb.id + JOIN mrp_routing_workcenter mrw2 ON mrw.old_routing_workcenter_id = mrw2.id + WHERE mbl.bom_id = mb.id AND mbl.operation_id = mrw2.id""", + ) + openupgrade.logged_query( + env.cr, + """ + UPDATE mrp_bom_byproduct mbp + SET operation_id = mrw.id + FROM mrp_bom mb + JOIN mrp_routing_workcenter mrw ON mrw.bom_id = mb.id + JOIN mrp_routing_workcenter mrw2 ON mrw.old_routing_workcenter_id = mrw2.id + WHERE mbp.bom_id = mb.id AND mbp.operation_id = mrw2.id""", + ) + openupgrade.logged_query( + env.cr, + """ + UPDATE mrp_workorder mw + SET operation_id = mrw.id + FROM mrp_production mp + JOIN mrp_bom mb ON mp.bom_id = mb.id + JOIN mrp_routing_workcenter mrw ON mrw.bom_id = mb.id + JOIN mrp_routing_workcenter mrw2 ON mrw.old_routing_workcenter_id = mrw2.id + WHERE mw.production_id = mp.id AND mw.operation_id = mrw2.id""", + ) + openupgrade.logged_query( + env.cr, + """ + UPDATE stock_move sm + SET operation_id = mrw.id + FROM mrp_production mp + JOIN mrp_bom mb ON mp.bom_id = mb.id + JOIN mrp_routing_workcenter mrw ON mrw.bom_id = mb.id + JOIN mrp_routing_workcenter mrw2 ON mrw.old_routing_workcenter_id = mrw2.id + WHERE sm.raw_material_production_id = mp.id AND sm.operation_id = mrw2.id""", + ) + openupgrade.logged_query( + env.cr, + """ + DELETE FROM mrp_routing_workcenter + WHERE old_routing_workcenter_id IS NULL""", + ) + + +@openupgrade.migrate() +def migrate(env, version): + openupgrade.copy_columns(env.cr, _column_copies) + fill_mrp_routing_workcenter_bom_id(env) diff --git a/openupgrade_scripts/scripts/mrp/14.0.2.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/mrp/14.0.2.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..544ccc0052bd --- /dev/null +++ b/openupgrade_scripts/scripts/mrp/14.0.2.0/upgrade_analysis_work.txt @@ -0,0 +1,198 @@ +---Models in module 'mrp'--- +obsolete model mrp.abstract.workorder [abstract] +obsolete model mrp.abstract.workorder.line [abstract] +obsolete model mrp.product.produce [transient] +obsolete model mrp.product.produce.line [transient] +new model mrp.consumption.warning [transient] +new model mrp.consumption.warning.line [transient] +new model mrp.immediate.production [transient] +new model mrp.immediate.production.line [transient] +new model mrp.production.backorder [transient] +new model mrp.production.backorder.line [transient] +# NOTHING TO DO: abstract + transient models + +obsolete model mrp.routing +obsolete model mrp.workorder.line +# NOTHING TO DO: obsolete models + +---Fields in module 'mrp'--- +mrp / mrp.document / key (char) : previously in module website +mrp / mrp.document / theme_template_id (many2one) : previously in module website_theme_install +mrp / mrp.document / website_id (many2one) : previously in module website +mrp / mrp.document / website_url (char) : previously in module website +# NOTHING TO DO: falsy analysis, but if anything, handled by ORM + +mrp / mrp.bom / consumption (selection) : now required, req_default: function +mrp / mrp.bom / consumption (selection) : selection_keys is now '['flexible', 'strict', 'warning']' ('['flexible', 'strict']') +# NOTHING TO DO: new default value 'warning' + +mrp / mrp.production / consumption (selection) : NEW required, selection_keys: ['flexible', 'strict', 'warning'], req_default: function, hasdefault +mrp / mrp.workorder / consumption (selection) : selection_keys is now '['flexible', 'strict', 'warning']' ('['flexible', 'strict']') +# NOTHING TO DO: new features + +mrp / mrp.bom / operation_ids (one2many) : NEW relation: mrp.routing.workcenter +mrp / mrp.routing / operation_ids (one2many) : DEL relation: mrp.routing.workcenter +mrp / mrp.routing.workcenter / bom_id (many2one) : NEW relation: mrp.bom +mrp / mrp.routing.workcenter / routing_id (many2one) : DEL relation: mrp.routing, required +# DONE: pre-migration: duplicate mrp.routing.workcenter records and fill bom_id + +mrp / mrp.bom / routing_id (many2one) : DEL relation: mrp.routing +mrp / mrp.bom.byproduct / routing_id (many2one) : DEL relation: mrp.routing +mrp / mrp.bom.line / routing_id (many2one) : DEL relation: mrp.routing +mrp / mrp.production / routing_id (many2one) : DEL relation: mrp.routing +# NOTHING TO DO: mrp.routing model is obsolete + +mrp / mrp.production / _order : _order is now 'priority desc, date_planned_start asc,id' ('date_planned_start asc,id') +# NOTHING TO DO + +mrp / mrp.production / backorder_sequence (integer) : NEW hasdefault +# NOTHING TO DO: new feature + +mrp / mrp.production / date_deadline (datetime) : now a function +mrp / mrp.production / date_start_wo (datetime) : DEL +# NOTHING TO DO + +mrp / mrp.production / lot_producing_id (many2one) : NEW relation: stock.production.lot +mrp / mrp.production / qty_producing (float) : NEW +# NOTHING TO DO: fields from mrp.abstract.workorder (used in old mrp.product.produce wizard) + +mrp / mrp.production / priority (selection) : selection_keys is now '['0', '1']' ('['0', '1', '2', '3']') +# DONE: post-migration: merge 1 to 0, and 2 and 3 to 1 + +mrp / mrp.production / product_description_variants (char): NEW +# TODO: new feature, may be filled in some cases + +mrp / mrp.production / production_location_id (many2one): is now stored +mrp / mrp.production / production_location_id (many2one): not related anymore +mrp / mrp.production / production_location_id (many2one): now a function +# NOTHING TO DO: computed in load + +mrp / mrp.production / propagate_date (boolean) : DEL +mrp / mrp.production / propagate_date_minimum_delta (integer): DEL +# NOTHING TO DO: not used anymore + +mrp / mrp.production / state (selection) : selection_keys is now '['cancel', 'confirmed', 'done', 'draft', 'progress', 'to_close']' ('['cancel', 'confirmed', 'done', 'draft', 'planned', 'progress', 'to_close']') +DONE: post-migration: map 'planned' to 'confirmed'/'progress'/'done' using _compute_state method + +mrp / mrp.routing / active (boolean) : DEL +mrp / mrp.routing / code (char) : DEL +mrp / mrp.routing / company_id (many2one) : DEL relation: res.company +mrp / mrp.routing / name (char) : DEL required +mrp / mrp.routing / note (text) : DEL +# NOTHING TO DO: obsolete model + +mrp / mrp.routing.workcenter / batch (selection) : DEL required, selection_keys: ['no', 'yes'], req_default: function +mrp / mrp.routing.workcenter / batch_size (float) : DEL +# NOTHING TO DO: obsolete + +mrp / mrp.routing.workcenter / company_id (many2one) : not related anymore +# NOTHING TO DO + +mrp / mrp.routing.workcenter / worksheet_type (selection) : selection_keys is now '['google_slide', 'pdf', 'text']' ('['google_slide', 'pdf']') +# NOTHING TO DO: new option 'text' + +mrp / mrp.workorder / activity_ids (one2many) : DEL relation: mail.activity +mrp / mrp.workorder / message_follower_ids (one2many): DEL relation: mail.followers +mrp / mrp.workorder / message_ids (one2many) : DEL relation: mail.message +mrp / mrp.workorder / message_main_attachment_id (many2one): DEL relation: ir.attachment +mrp / mrp.workorder / website_message_ids (one2many): DEL relation: mail.message +# NOTHING TO DO: losing mail mixins + +mrp / mrp.workorder / capacity (float) : DEL +# NOTHING TO DO: unused field + +mrp / mrp.workorder / finished_lot_id (many2one) : not stored anymore +mrp / mrp.workorder / finished_lot_id (many2one) : now a function +mrp / mrp.workorder / qty_producing (float) : not stored anymore +mrp / mrp.workorder / qty_producing (float) : now a function +# NOTHING TO DO: non-stored computes + +mrp / mrp.workorder.line / finished_workorder_id (many2one): DEL relation: mrp.workorder +mrp / mrp.workorder.line / lot_id (many2one) : DEL relation: stock.production.lot +mrp / mrp.workorder.line / move_id (many2one) : DEL relation: stock.move +mrp / mrp.workorder.line / product_id (many2one) : DEL relation: product.product, required +mrp / mrp.workorder.line / product_uom_id (many2one) : DEL relation: uom.uom +mrp / mrp.workorder.line / qty_done (float) : DEL +mrp / mrp.workorder.line / qty_reserved (float) : DEL +mrp / mrp.workorder.line / qty_to_consume (float) : DEL +mrp / mrp.workorder.line / raw_workorder_id (many2one) : DEL relation: mrp.workorder +mrp / mrp.workorder / finished_workorder_line_ids (one2many): DEL relation: mrp.workorder.line +# NOTHING TO DO: obsolete model + +mrp / procurement.group / mrp_production_ids (one2many) : NEW relation: mrp.production +# NOTHING TO DO: one2many + +mrp / stock.move / unit_factor (float) : now a function +# NOTHING TO DO: automatic compute + +mrp / stock.move.line / done_move (boolean) : DEL +mrp / stock.move.line / lot_produced_qty (float) : DEL +# NOTHING TO DO: unused fields + +mrp / stock.move.line / lot_produced_ids (many2many) : DEL relation: stock.production.lot +DONE: post-migration: use stock_move_line_stock_production_lot_rel to fill stock_move_line_consume_rel + +mrp / stock.warehouse.orderpoint / bom_id (many2one) : NEW relation: mrp.bom +# NOTHING TO DO: new feature + +---XML records in module 'mrp'--- +NEW digest.tip: mrp.digest_tip_mrp_0 +NEW ir.actions.act_window: mrp.action_mrp_consumption_warning +NEW ir.actions.act_window: mrp.action_mrp_production_backorder +NEW ir.actions.act_window: mrp.mrp_workorder_mrp_production_form +DEL ir.actions.act_window: mrp.act_mrp_product_produce +DEL ir.actions.act_window: mrp.act_product_mrp_production +DEL ir.actions.act_window: mrp.action_mrp_unbuild_move_line +DEL ir.actions.act_window: mrp.mrp_workcenter_productivity_loss_action +DEL ir.actions.act_window: mrp.mrp_workorder_delta_report +NEW ir.actions.server: mrp.action_production_order_mark_done +NEW ir.actions.server: mrp.mrp_production_action_unreserve_tree +NEW ir.model.access: mrp.access_change_production_qty +NEW ir.model.access: mrp.access_mrp_consumption_warning +NEW ir.model.access: mrp.access_mrp_consumption_warning_line +NEW ir.model.access: mrp.access_mrp_immediate_production +NEW ir.model.access: mrp.access_mrp_immediate_production_line +NEW ir.model.access: mrp.access_mrp_production_backorder +NEW ir.model.access: mrp.access_mrp_production_backorder_line +NEW ir.model.access: mrp.access_stock_warn_insufficient_qty_unbuild +DEL ir.model.access: mrp.access_mrp_resource_manager +DEL ir.model.access: mrp.access_mrp_routing +DEL ir.model.access: mrp.access_mrp_routing_manager +DEL ir.model.access: mrp.access_mrp_workorder_line_mrp_manager +DEL ir.model.access: mrp.access_mrp_workorder_line_mrp_user +NEW ir.ui.menu: mrp.menu_procurement_compute_mrp +DEL ir.ui.menu: mrp.menu_mrp_dashboard +NEW ir.ui.view: mrp.mrp_production_workorder_form_view_inherit_editable +NEW ir.ui.view: mrp.mrp_production_workorder_tree_editable_view +NEW ir.ui.view: mrp.mrp_production_workorder_tree_view +NEW ir.ui.view: mrp.mrp_report_product_product_replenishment +NEW ir.ui.view: mrp.mrp_unbuild_form_view_simplified +NEW ir.ui.view: mrp.stock_report_delivery_document_inherit_mrp +NEW ir.ui.view: mrp.stock_report_delivery_kit_sections +NEW ir.ui.view: mrp.stock_report_delivery_no_kit_section +NEW ir.ui.view: mrp.view_immediate_production +NEW ir.ui.view: mrp.view_mrp_consumption_warning_form +NEW ir.ui.view: mrp.view_mrp_document_form +NEW ir.ui.view: mrp.view_mrp_production_backorder_form +NEW ir.ui.view: mrp.view_stock_move_operations_finished +NEW ir.ui.view: mrp.view_stock_move_operations_raw +NEW ir.ui.view: mrp.view_warehouse_orderpoint_tree_editable_inherited_purchase +DEL ir.ui.view: mrp.mrp_product_produce_line_form +DEL ir.ui.view: mrp.mrp_product_produce_line_kanban +DEL ir.ui.view: mrp.mrp_production_workorder_tree_view_inherit +DEL ir.ui.view: mrp.mrp_routing_form_view +DEL ir.ui.view: mrp.mrp_routing_kanban_view +DEL ir.ui.view: mrp.mrp_routing_search_view +DEL ir.ui.view: mrp.mrp_routing_tree_view +DEL ir.ui.view: mrp.view_document_form +DEL ir.ui.view: mrp.view_finisehd_move_line +DEL ir.ui.view: mrp.view_move_kanban_inherit_mrp +DEL ir.ui.view: mrp.view_mrp_product_produce_wizard +DEL ir.ui.view: mrp.view_stock_move_lots +DEL ir.ui.view: mrp.view_stock_move_raw_tree +NEW res.groups: mrp.group_locked_by_default +# NOTHING TO DO + +DEL ir.rule: mrp.mrp_routing_rule (noupdate) +DEL ir.sequence: mrp.sequence_mrp_route (noupdate) +# DONE: post-migration: safely deleted xmlids From a09e41264475314d5ecb24e26b2528a1a42a70a5 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Sun, 27 Mar 2022 17:51:30 +0200 Subject: [PATCH 2/2] [OU-ADD] mrp: Migration scripts (continuation) --- .../scripts/mrp/14.0.2.0/noupdate_changes.xml | 22 +++++------ .../scripts/mrp/14.0.2.0/post-migration.py | 38 +++++++++++++++++++ .../scripts/mrp/14.0.2.0/pre-migration.py | 28 ++++++++++++++ .../mrp/14.0.2.0/upgrade_analysis_work.txt | 19 ++++++---- 4 files changed, 88 insertions(+), 19 deletions(-) diff --git a/openupgrade_scripts/scripts/mrp/14.0.2.0/noupdate_changes.xml b/openupgrade_scripts/scripts/mrp/14.0.2.0/noupdate_changes.xml index a0c7c162ccea..330faff28cc2 100644 --- a/openupgrade_scripts/scripts/mrp/14.0.2.0/noupdate_changes.xml +++ b/openupgrade_scripts/scripts/mrp/14.0.2.0/noupdate_changes.xml @@ -1,30 +1,30 @@ - - + + - + - + - + - + - + - + - - + + --> diff --git a/openupgrade_scripts/scripts/mrp/14.0.2.0/post-migration.py b/openupgrade_scripts/scripts/mrp/14.0.2.0/post-migration.py index 55403f593e7b..a622eae1ecb5 100644 --- a/openupgrade_scripts/scripts/mrp/14.0.2.0/post-migration.py +++ b/openupgrade_scripts/scripts/mrp/14.0.2.0/post-migration.py @@ -45,11 +45,49 @@ def map_mrp_production_state_planned(env): env["mrp.production"].search([("state", "=", "planned")])._compute_state() +def generate_workorders_for_draft_orders(env): + """Recreate workorders for draft production orders, as in v13, this is only done + later when planning production. + """ + env.cr.execute( + "SELECT id, routing_id FROM mrp_production " + "WHERE state = 'draft' AND routing_id IS NOT NULL" + ) + for production_id, routing_id in env.cr.fetchall(): + production = env["mrp.production"].browse(production_id) + workorders_values = [] + env.cr.execute( + """ + SELECT mrw.id, mrw.name, mrw.workcenter_id + FROM mrp_routing_workcenter mrw + WHERE mrw.routing_id = %s AND mrw.bom_id = %s + """, + (routing_id, production.bom_id.id), + ) + # TODO: If there are phantom BoMs with other routings, it won't be covered + for operation_id, operation_name, workcenter_id in env.cr.fetchall(): + workorders_values += [ + { + "name": operation_name, + "production_id": production_id, + "workcenter_id": workcenter_id, + "product_uom_id": production.product_uom_id.id, + "operation_id": operation_id, + "state": "pending", + "consumption": production.consumption, + } + ] + workorders = production.workorder_ids.create(workorders_values) + for workorder in workorders: + workorder.duration_expected = workorder._get_duration_expected() + + @openupgrade.migrate() def migrate(env, version): merge_priorities(env) map_stock_move_line_lot_produced_ids(env) map_mrp_production_state_planned(env) + generate_workorders_for_draft_orders(env) openupgrade.load_data(env.cr, "mrp", "14.0.2.0/noupdate_changes.xml") openupgrade.delete_records_safely_by_xml_id( env, ["mrp.mrp_routing_rule", "mrp.sequence_mrp_route"] diff --git a/openupgrade_scripts/scripts/mrp/14.0.2.0/pre-migration.py b/openupgrade_scripts/scripts/mrp/14.0.2.0/pre-migration.py index e2f42d3f7c03..b13948247770 100644 --- a/openupgrade_scripts/scripts/mrp/14.0.2.0/pre-migration.py +++ b/openupgrade_scripts/scripts/mrp/14.0.2.0/pre-migration.py @@ -10,6 +10,32 @@ } +def switch_flexible_consumption_to_warning(env): + """For benefiting from this new feature.""" + openupgrade.logged_query( + env.cr, + "UPDATE mrp_bom SET consumption = 'warning' WHERE consumption='flexible'", + ) + openupgrade.logged_query( + env.cr, + "UPDATE mrp_workorder SET consumption = 'warning' WHERE consumption='flexible'", + ) + + +def fill_mrp_production__consumption(env): + openupgrade.logged_query( + env.cr, "ALTER TABLE mrp_production ADD consumption VARCHAR" + ) + openupgrade.logged_query( + env.cr, + """UPDATE mrp_production mp + SET consumption = mb.consumption + FROM mrp_bom mb + WHERE mb.id = mp.bom_id + """, + ) + + def fill_mrp_routing_workcenter_bom_id(env): openupgrade.logged_query( env.cr, @@ -104,4 +130,6 @@ def fill_mrp_routing_workcenter_bom_id(env): @openupgrade.migrate() def migrate(env, version): openupgrade.copy_columns(env.cr, _column_copies) + switch_flexible_consumption_to_warning(env) + fill_mrp_production__consumption(env) fill_mrp_routing_workcenter_bom_id(env) diff --git a/openupgrade_scripts/scripts/mrp/14.0.2.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/mrp/14.0.2.0/upgrade_analysis_work.txt index 544ccc0052bd..3d6e0bc5524f 100644 --- a/openupgrade_scripts/scripts/mrp/14.0.2.0/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/mrp/14.0.2.0/upgrade_analysis_work.txt @@ -11,7 +11,6 @@ new model mrp.production.backorder [transient] new model mrp.production.backorder.line [transient] # NOTHING TO DO: abstract + transient models -obsolete model mrp.routing obsolete model mrp.workorder.line # NOTHING TO DO: obsolete models @@ -24,24 +23,28 @@ mrp / mrp.document / website_url (char) : previo mrp / mrp.bom / consumption (selection) : now required, req_default: function mrp / mrp.bom / consumption (selection) : selection_keys is now '['flexible', 'strict', 'warning']' ('['flexible', 'strict']') -# NOTHING TO DO: new default value 'warning' +mrp / mrp.workorder / consumption (selection) : selection_keys is now '['flexible', 'strict', 'warning']' ('['flexible', 'strict']') +# DONE: pre-migration: Switch 'flexible' to 'warning' for benefiting from this new feature mrp / mrp.production / consumption (selection) : NEW required, selection_keys: ['flexible', 'strict', 'warning'], req_default: function, hasdefault -mrp / mrp.workorder / consumption (selection) : selection_keys is now '['flexible', 'strict', 'warning']' ('['flexible', 'strict']') -# NOTHING TO DO: new features +# DONE: pre-migration: Init the field with its related BoM value +obsolete model mrp.routing mrp / mrp.bom / operation_ids (one2many) : NEW relation: mrp.routing.workcenter mrp / mrp.routing / operation_ids (one2many) : DEL relation: mrp.routing.workcenter mrp / mrp.routing.workcenter / bom_id (many2one) : NEW relation: mrp.bom mrp / mrp.routing.workcenter / routing_id (many2one) : DEL relation: mrp.routing, required -# DONE: pre-migration: duplicate mrp.routing.workcenter records and fill bom_id - mrp / mrp.bom / routing_id (many2one) : DEL relation: mrp.routing +# DONE: pre-migration: duplicate mrp.routing.workcenter records per assigned BoM, filling bom_id +# TODO: There can be mrp.routing without assigned BoMs that will be in a limbo after this migration. This will be highlighted through mrp.routing.workcenter having nulls in `bom_id` field. One possible strategy is to create fake BoMs for that routings with a wildcard product. + mrp / mrp.bom.byproduct / routing_id (many2one) : DEL relation: mrp.routing mrp / mrp.bom.line / routing_id (many2one) : DEL relation: mrp.routing -mrp / mrp.production / routing_id (many2one) : DEL relation: mrp.routing # NOTHING TO DO: mrp.routing model is obsolete +mrp / mrp.production / routing_id (many2one) : DEL relation: mrp.routing +# DONE: post-migration: Populate workorders for draft production orders from old routing + mrp / mrp.production / _order : _order is now 'priority desc, date_planned_start asc,id' ('date_planned_start asc,id') # NOTHING TO DO @@ -117,7 +120,7 @@ mrp / mrp.workorder.line / qty_reserved (float) : DEL mrp / mrp.workorder.line / qty_to_consume (float) : DEL mrp / mrp.workorder.line / raw_workorder_id (many2one) : DEL relation: mrp.workorder mrp / mrp.workorder / finished_workorder_line_ids (one2many): DEL relation: mrp.workorder.line -# NOTHING TO DO: obsolete model +# TODO: Not clear if there should be any conversion mrp / procurement.group / mrp_production_ids (one2many) : NEW relation: mrp.production # NOTHING TO DO: one2many