diff --git a/docsource/modules130-140.rst b/docsource/modules130-140.rst
index 895ffb4dae70..9d368303ca1f 100644
--- a/docsource/modules130-140.rst
+++ b/docsource/modules130-140.rst
@@ -622,7 +622,7 @@ Module coverage 13.0 -> 14.0
+--------------------------------------------+-------------------------------------------------+
|social_media | Nothing to do |
+--------------------------------------------+-------------------------------------------------+
-|stock | |
+|stock | Done |
+--------------------------------------------+-------------------------------------------------+
|stock_account | |
+--------------------------------------------+-------------------------------------------------+
diff --git a/openupgrade_scripts/scripts/stock/14.0.1.1/noupdate_changes.xml b/openupgrade_scripts/scripts/stock/14.0.1.1/noupdate_changes.xml
index 709746846132..e555c0fb7431 100644
--- a/openupgrade_scripts/scripts/stock/14.0.1.1/noupdate_changes.xml
+++ b/openupgrade_scripts/scripts/stock/14.0.1.1/noupdate_changes.xml
@@ -35,66 +35,66 @@
-
+
-
-
-
- False
+
+
+
+
-
+
-
+
-
-
-
- Inter-company transit
-
+
+
+
+
+
-
+
['|',('company_id','=',False),('company_id', 'in', company_ids)]
-
+
[('company_id', 'in', company_ids)]
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
-
- San Francisco
+
+
+
+
diff --git a/openupgrade_scripts/scripts/stock/14.0.1.1/post-migration.py b/openupgrade_scripts/scripts/stock/14.0.1.1/post-migration.py
new file mode 100644
index 000000000000..0bd59ba78142
--- /dev/null
+++ b/openupgrade_scripts/scripts/stock/14.0.1.1/post-migration.py
@@ -0,0 +1,64 @@
+# Copyright 2021 ForgeFlow S.L.
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+from openupgradelib import openupgrade
+
+
+def propagate_orderpoints_on_moves(env):
+ openupgrade.logged_query(
+ env.cr,
+ """
+ UPDATE stock_move sm
+ SET orderpoint_id = sm2.orderpoint_id
+ FROM stock_move_move_rel rel
+ JOIN stock_move sm2 ON rel.move_dest_id = sm2.id
+ WHERE sm.rule_id IS NOT NULL AND sm.orderpoint_id IS NULL
+ AND rel.move_orig_id = sm.id AND sm2.orderpoint_id IS NOT NULL""",
+ )
+
+
+def merge_priorities(env):
+ openupgrade.map_values(
+ env.cr,
+ openupgrade.get_legacy_name("priority"),
+ "priority",
+ [("1", "0"), ("2", "1"), ("3", "1")],
+ table="stock_move",
+ )
+ openupgrade.map_values(
+ env.cr,
+ openupgrade.get_legacy_name("priority"),
+ "priority",
+ [("1", "0"), ("2", "1"), ("3", "1")],
+ table="stock_picking",
+ )
+
+
+def recompute_stock_picking_scheduled_date(env):
+ env.cr.execute(
+ """
+ SELECT sp.id
+ FROM stock_picking sp
+ JOIN stock_move sm ON sm.picking_id = sp.id
+ WHERE sm.state NOT IN ('done', 'cancel')"""
+ )
+ picking_ids = [pick[0] for pick in env.cr.fetchall()]
+ if picking_ids:
+ pickings = env["stock.picking"].browse(picking_ids)
+ pickings._compute_scheduled_date()
+
+
+def delete_domain_from_view(env):
+ view = env.ref("stock.report_stock_quantity_action")
+ view.domain = None
+
+
+@openupgrade.migrate()
+def migrate(env, version):
+ propagate_orderpoints_on_moves(env)
+ merge_priorities(env)
+ delete_domain_from_view(env)
+ openupgrade.load_data(env.cr, "stock", "14.0.1.1/noupdate_changes.xml")
+ recompute_stock_picking_scheduled_date(env)
+ openupgrade.delete_record_translations(
+ env.cr, "stock", ["mail_template_data_delivery_confirmation"]
+ )
diff --git a/openupgrade_scripts/scripts/stock/14.0.1.1/pre-migration.py b/openupgrade_scripts/scripts/stock/14.0.1.1/pre-migration.py
new file mode 100644
index 000000000000..a9d9b97ccada
--- /dev/null
+++ b/openupgrade_scripts/scripts/stock/14.0.1.1/pre-migration.py
@@ -0,0 +1,45 @@
+# Copyright 2021 ForgeFlow S.L.
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+from openupgradelib import openupgrade
+
+_column_copies = {
+ "stock_move": [
+ ("priority", None, None),
+ ],
+ "stock_picking": [
+ ("priority", None, None),
+ ],
+}
+
+_field_renames = [("stock.move", "stock_move", "date_expected", "date_deadline")]
+
+_xmlid_renames = [
+ ("stock.action_orderpoint_form", "stock.action_orderpoint"),
+ ("stock.access_stock_picking_portal", "sale_stock.access_stock_picking_portal"),
+]
+
+
+def fast_precreate_orderpoint_product_category_id(env):
+ openupgrade.logged_query(
+ env.cr,
+ """
+ ALTER TABLE stock_warehouse_orderpoint
+ ADD COLUMN product_category_id integer""",
+ )
+ openupgrade.logged_query(
+ env.cr,
+ """
+ UPDATE stock_warehouse_orderpoint swo
+ SET product_category_id = pt.categ_id
+ FROM product_product pp
+ JOIN product_template pt ON pp.product_tmpl_id = pt.id
+ WHERE swo.product_id = pp.id""",
+ )
+
+
+@openupgrade.migrate()
+def migrate(env, version):
+ openupgrade.copy_columns(env.cr, _column_copies)
+ openupgrade.rename_fields(env, _field_renames)
+ openupgrade.rename_xmlids(env.cr, _xmlid_renames)
+ fast_precreate_orderpoint_product_category_id(env)
diff --git a/openupgrade_scripts/scripts/stock/14.0.1.1/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/stock/14.0.1.1/upgrade_analysis_work.txt
new file mode 100644
index 000000000000..c0f755eb3f6d
--- /dev/null
+++ b/openupgrade_scripts/scripts/stock/14.0.1.1/upgrade_analysis_work.txt
@@ -0,0 +1,173 @@
+---Models in module 'stock'---
+obsolete model stock.overprocessed.transfer [transient]
+obsolete model stock.picking.responsible [transient]
+new model report.stock.report_product_product_replenishment [abstract]
+new model report.stock.report_product_template_replenishment [abstract]
+new model stock.backorder.confirmation.line [transient]
+new model stock.immediate.transfer.line [transient]
+new model stock.orderpoint.snooze [transient]
+# NOTHING TO DO: transient/abstract models
+
+---Fields in module 'stock'---
+stock / procurement.group / stock_move_ids (one2many) : NEW relation: stock.move
+# NOTHING TO DO: one2many
+
+stock / stock.inventory / activity_ids (one2many) : NEW relation: mail.activity
+stock / stock.inventory / message_follower_ids (one2many): NEW relation: mail.followers
+stock / stock.inventory / message_ids (one2many) : NEW relation: mail.message
+stock / stock.inventory / message_main_attachment_id (many2one): NEW relation: ir.attachment
+stock / stock.inventory / website_message_ids (one2many): NEW relation: mail.message
+# NOTHING TO DO: from added mail mixins
+
+stock / stock.inventory / exhausted (boolean) : NEW
+# NOTHING TO DO: new feature
+
+stock / stock.move / date_deadline (datetime) : NEW
+stock / stock.move / date_expected (datetime) : DEL required, req_default: function
+# DONE: pre-migration: renamed field
+
+stock / stock.move / delay_alert_date (datetime) : NEW isfunction: function, stored
+# NOTHING TO DO: computed during loading
+
+stock / stock.move / delay_alert (boolean) : DEL
+stock / stock.move / propagate_date (boolean) : DEL
+stock / stock.move / propagate_date_minimum_delta (integer): DEL
+stock / stock.rule / delay_alert (boolean) : DEL
+stock / stock.rule / propagate_date (boolean) : DEL
+stock / stock.rule / propagate_date_minimum_delta (integer): DEL
+# NOTHING TO DO: not used anymore
+
+stock / stock.move / orderpoint_id (many2one) : NEW relation: stock.warehouse.orderpoint
+# DONE: post-migration: filled
+
+stock / stock.move / priority (selection) : now a function
+stock / stock.move / 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
+
+stock / stock.picking / _order : _order is now 'priority desc, scheduled_date asc, id desc' ('priority desc, date asc, id desc')
+# NOTHING TO DO
+
+stock / stock.picking / date_deadline (datetime) : NEW isfunction: function, stored
+stock / stock.picking / has_deadline_issue (boolean) : NEW hasdefault, isfunction: function, stored
+# NOTHING TO DO: computed during loading
+
+stock / stock.picking / priority (selection) : not a function anymore
+stock / stock.picking / 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
+
+stock / stock.picking / signature (binary) : NEW attachment: True
+# NOTHING TO DO: new feature
+
+stock / stock.warehouse.orderpoint / _order : _order is now 'location_id,company_id,id' ('id')
+# NOTHING TO DO
+
+stock / stock.warehouse.orderpoint / lead_days (integer) : DEL
+stock / stock.warehouse.orderpoint / lead_type (selection) : DEL required, selection_keys: ['net', 'supplier'], req_default: function
+# NOTHING TO DO: removed (and seems to be replaced by computed lead_days_date)
+
+stock / stock.warehouse.orderpoint / product_category_id (many2one): NEW relation: product.category, isrelated: related, stored
+# DONE: pre-migration: precreated and fast filled
+
+stock / stock.warehouse.orderpoint / qty_to_order (float) : NEW isfunction: function, stored
+# NOTHING TO DO: computed during loading
+
+stock / stock.warehouse.orderpoint / route_id (many2one) : NEW relation: stock.location.route
+# NOTHING TO DO: replenished only when using new replenish feature
+
+stock / stock.warehouse.orderpoint / snoozed_until (date) : NEW
+# NOTHING TO DO: new feature (used in new wizard stock.orderpoint.snooze)
+
+stock / stock.warehouse.orderpoint / trigger (selection) : NEW required, selection_keys: ['auto', 'manual'], req_default: function, hasdefault
+# NOTHING TO DO: the default is the previous version behaviour
+
+---XML records in module 'stock'---
+NEW digest.tip: stock.digest_tip_stock_0
+# NOTHING TO DO
+
+DEL ir.actions.act_window: stock.action_orderpoint_form
+NEW ir.actions.act_window: stock.action_orderpoint
+# DONE: pre-migration: renamed xmlid
+
+ir.actions.act_window: stock.report_stock_quantity_action (deleted domain)
+# DONE: post-migration: deleted domain
+
+NEW ir.actions.act_window: stock.action_orderpoint_replenish
+NEW ir.actions.act_window: stock.action_orderpoint_snooze
+NEW ir.actions.act_window: stock.action_prod_inv_location_form
+DEL ir.actions.act_window: stock.act_product_stock_move_open
+DEL ir.actions.act_window: stock.action_receipt_picking_move
+DEL ir.actions.act_window: stock.product_open_orderpoint
+DEL ir.actions.act_window: stock.product_template_open_quants
+# NOTHING TO DO
+
+NEW ir.actions.client: stock.stock_replenishment_product_product_action
+NEW ir.actions.report: stock.stock_replenishment_report_product_product_action
+NEW ir.actions.report: stock.stock_replenishment_report_product_template_action
+NEW ir.actions.server: stock.action_open_routes
+NEW ir.actions.server: stock.action_replenishment
+NEW ir.actions.server: stock.action_unreserve_picking
+NEW ir.actions.server: stock.action_validate_picking
+# NOTHING TO DO
+
+DEL ir.model.access: stock.access_stock_picking_portal [renamed to sale_stock module]
+# DONE: pre-migration: renamed xmlid
+
+NEW ir.model.access: stock.access_product_replenish
+NEW ir.model.access: stock.access_stock_assign_serial
+NEW ir.model.access: stock.access_stock_backorder_confirmation
+NEW ir.model.access: stock.access_stock_backorder_confirmation_line
+NEW ir.model.access: stock.access_stock_change_product_qty
+NEW ir.model.access: stock.access_stock_immediate_transfer
+NEW ir.model.access: stock.access_stock_immediate_transfer_line
+NEW ir.model.access: stock.access_stock_location_partner_manager
+NEW ir.model.access: stock.access_stock_orderpoint_snooze
+NEW ir.model.access: stock.access_stock_package_destination
+NEW ir.model.access: stock.access_stock_quantity_history
+NEW ir.model.access: stock.access_stock_return_picking
+NEW ir.model.access: stock.access_stock_return_picking_line
+NEW ir.model.access: stock.access_stock_rules_report
+NEW ir.model.access: stock.access_stock_scheduler_compute
+NEW ir.model.access: stock.access_stock_traceability_report
+NEW ir.model.access: stock.access_stock_track_confirmation
+NEW ir.model.access: stock.access_stock_track_line
+NEW ir.model.access: stock.access_stock_warn_insufficient_qty_scrap
+DEL ir.model.access: stock.access_ir_property_group_stock_manager
+DEL ir.model.access: stock.access_stock_location__partner_manager
+DEL ir.model.access: stock.access_stock_location_stock_manager
+DEL ir.model.access: stock.access_stock_move_line_portal
+DEL ir.model.access: stock.access_stock_move_portal
+DEL ir.model.access: stock.access_stock_picking_type_portal
+DEL ir.model.access: stock.access_stock_rule
+DEL ir.model.access: stock.access_stock_rule_manager
+DEL ir.model.access: stock.access_stock_warehouse_orderpoint_portal
+# NOTHING TO DO
+
+NEW ir.ui.menu: stock.menu_reordering_rules_replenish
+NEW ir.ui.view: stock.assets_common_replenishment_report
+NEW ir.ui.view: stock.package_level_form_edit_view
+NEW ir.ui.view: stock.report_generic_barcode
+NEW ir.ui.view: stock.report_product_product_replenishment
+NEW ir.ui.view: stock.report_product_template_replenishment
+NEW ir.ui.view: stock.report_replenishment_header
+NEW ir.ui.view: stock.stock_inventory_line_tree_no_product_create
+NEW ir.ui.view: stock.stock_reorder_report_search
+NEW ir.ui.view: stock.stock_report_delivery_aggregated_move_lines
+NEW ir.ui.view: stock.stock_report_delivery_has_serial_move_line
+NEW ir.ui.view: stock.stock_report_delivery_no_package_section_line
+NEW ir.ui.view: stock.stock_report_delivery_package_section_line
+NEW ir.ui.view: stock.view_stock_orderpoint_snooze
+NEW ir.ui.view: stock.view_stock_quant_form_editable
+NEW ir.ui.view: stock.view_warehouse_orderpoint_tree_editable
+NEW ir.ui.view: stock.view_warehouse_orderpoint_tree_editable_config
+DEL ir.ui.view: stock.stock_inventory_line_tree2
+DEL ir.ui.view: stock.stock_move_tree
+DEL ir.ui.view: stock.stock_move_view_kanban
+DEL ir.ui.view: stock.stock_warehouse_view_form_editable
+DEL ir.ui.view: stock.stock_warehouse_view_tree_editable
+DEL ir.ui.view: stock.view_move_picking_tree
+DEL ir.ui.view: stock.view_move_tree_receipt_picking_board
+DEL ir.ui.view: stock.view_overprocessed_transfer
+DEL ir.ui.view: stock.view_stock_move_kanban
+DEL ir.ui.view: stock.view_warehouse_orderpoint_tree
+NEW res.groups: stock.group_stock_sign_delivery
+# NOTHING TO DO