diff --git a/addons/sale/migrations/10.0.1.0/openupgrade_analysis.txt b/addons/sale/migrations/10.0.1.0/openupgrade_analysis.txt index 734a5bc1acd4..cca8357cb589 100644 --- a/addons/sale/migrations/10.0.1.0/openupgrade_analysis.txt +++ b/addons/sale/migrations/10.0.1.0/openupgrade_analysis.txt @@ -13,7 +13,6 @@ sale / sale.layout_category / pagebreak (boolean) : NEW sale / sale.layout_category / sequence (integer) : NEW required: required, req_default: function sale / sale.layout_category / subtotal (boolean) : NEW sale / sale.order / confirmation_date (datetime) : NEW -sale / sale.order / website_message_ids (one2many): DEL relation: mail.message sale / sale.order.line / analytic_tag_ids (many2many) : NEW relation: account.analytic.tag sale / sale.order.line / layout_category_id (many2one) : NEW relation: sale.layout_category ---XML records in module 'sale'--- diff --git a/addons/sale/migrations/10.0.1.0/openupgrade_analysis_work.txt b/addons/sale/migrations/10.0.1.0/openupgrade_analysis_work.txt index 8df60c6e24ad..86d74287f746 100644 --- a/addons/sale/migrations/10.0.1.0/openupgrade_analysis_work.txt +++ b/addons/sale/migrations/10.0.1.0/openupgrade_analysis_work.txt @@ -1,25 +1,43 @@ ---Fields in module 'sale'--- sale / account.invoice / partner_shipping_id (many2one): NEW relation: res.partner -sale / account.invoice.line / layout_category_id (many2one) : NEW relation: sale.layout_category # NOTHING TO DO + +sale / account.invoice.line / layout_category_id (many2one) : NEW relation: sale.layout_category +sale / account.invoice.line / layout_category_sequence (integer) : NEW +# FYI: layout_category_sequence was not found by the analysis +# DONE: pre-migration: rename columns + +sale / product.pricelist / discount_policy (selection) : NEW selection_keys: ['with_discount', 'without_discount'] +# DONE: pre-migration: update_module_names (old module product_visible_discount) + +sale / product.template / expense_policy (selection) : NEW selection_keys: ['cost', 'no', 'sales_price'] +# DONE: pre-migration: partial "update_module_names" process (sale_expense) + sale / product.template / invoice_policy (selection) : selection_keys is now '['delivery', 'order']' ('['cost', 'delivery', 'order']') -# TODO: pre-migration: copy column -# TODO: post-migration: map value 'cost' to new value +# DONE: pre-migration: copy column +# DONE: post-migration: map value 'cost' to new value + +sale / product.template / sale_line_warn (selection) : NEW required: required, selection_keys: ['block', 'no-message', 'warning'], req_default: no-message +sale / product.template / sale_line_warn_msg (text) : NEW +sale / res.partner / sale_warn (selection) : NEW required: required, selection_keys: ['block', 'no-message', 'warning'], req_default: no-message +sale / res.partner / sale_warn_msg (text) : NEW +# DONE: pre-migration: partial "update_module_names" process (old module warning) ##### NEW MODEL SALE.LAYOUT.CATEGORY #### sale / sale.layout_category / name (char) : NEW required: required sale / sale.layout_category / pagebreak (boolean) : NEW sale / sale.layout_category / sequence (integer) : NEW required: required, req_default: function sale / sale.layout_category / subtotal (boolean) : NEW -# NOTHING TO DO +# DONE: pre-migration: update_module_names (old module sale_layout) sale / sale.order / confirmation_date (datetime) : NEW -sale / sale.order / website_message_ids (one2many): DEL relation: mail.message +sale / sale.order.line / analytic_tag_ids (many2many) : NEW relation: account.analytic.tag # NOTHING TO DO -sale / sale.order.line / analytic_tag_ids (many2many) : NEW relation: account.analytic.tag sale / sale.order.line / layout_category_id (many2one) : NEW relation: sale.layout_category -# NOTHING TO DO +sale / sale.order.line / layout_category_sequence (integer) : NEW +# FYI: layout_category_sequence was not found by the analysis +# DONE: pre-migration: rename columns ---XML records in module 'sale'--- NEW ir.actions.act_window: sale.report_configuration_action @@ -66,6 +84,8 @@ DEL ir.ui.menu: base.menu_sale_config DEL ir.ui.menu: base.menu_sale_general_settings DEL ir.ui.menu: base.menu_sales_config NEW ir.ui.view: sale.account_invoice_line_form +NEW ir.ui.view: sale.account_invoice_line_tree +NEW ir.ui.view: sale.account_invoice_supplier_form NEW ir.ui.view: sale.product_pricelist_view_form NEW ir.ui.view: sale.product_pricelist_view_tree NEW ir.ui.view: sale.report_configuration_form_view @@ -75,7 +95,12 @@ NEW ir.ui.view: sale.report_invoice_document_inherit_sale NEW ir.ui.view: sale.report_invoice_layouted NEW ir.ui.view: sale.sale_order_view_search_inherit_quotation NEW ir.ui.view: sale.sale_order_view_search_inherit_sale +# NOTHING TO DO + DEL ir.ui.view: sale.view_account_config +# NOTHING TO DO, FYI: the view still exists in addons/sale/views/account_config_settings_views.xml, +# but it is not included in the manifest file + DEL ir.ui.view: sale.view_company_inherit_form2 NEW mail.template: sale.mail_template_data_notification_email_sale_order NEW res.groups: base.group_portal @@ -85,10 +110,15 @@ NEW res.groups: sale.group_sale_layout NEW res.groups: sale.group_show_price_subtotal NEW res.groups: sale.group_show_price_total NEW res.groups: sale.group_warning_sale +# NOTHING TO DO + DEL res.groups: base.group_sale_manager DEL res.groups: base.group_sale_salesman DEL res.groups: base.group_sale_salesman_all_leads +# NOTHING TO DO, FYI: renaming of groups is already done in sales_team migration + NEW sale.layout_category: sale.sale_layout_cat_1 NEW sale.layout_category: sale.sale_layout_cat_2 DEL web.tip: sale.sale_tip_1 DEL web.tip: sale.sale_tip_2 +# NOTHING TO DO diff --git a/addons/sale/migrations/10.0.1.0/post-migration.py b/addons/sale/migrations/10.0.1.0/post-migration.py new file mode 100644 index 000000000000..c607faa373ab --- /dev/null +++ b/addons/sale/migrations/10.0.1.0/post-migration.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- +# © 2017 bloopark systems () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from openupgradelib import openupgrade + + +@openupgrade.migrate(use_env=False) +def migrate(cr, version): + # map old / non existing value 'cost' to default value 'order' + openupgrade.map_values( + cr, + openupgrade.get_legacy_name('invoice_policy'), 'invoice_policy', + [('cost', 'order')], + table='product_template', write='sql') diff --git a/addons/sale/migrations/10.0.1.0/pre-migration.py b/addons/sale/migrations/10.0.1.0/pre-migration.py new file mode 100644 index 000000000000..57bb7ccbbafe --- /dev/null +++ b/addons/sale/migrations/10.0.1.0/pre-migration.py @@ -0,0 +1,134 @@ +# -*- coding: utf-8 -*- +# Copyright 2017 bloopark systems () +# Copyright 2017 Tecnativa - Pedro M. Baeza +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +from openupgradelib import openupgrade + + +# backup of separator column in table sale_layout_category because it doesn't +# exist anymore in odoo 10 +column_renames_sale_layout = { + 'sale_layout_category': [ + ('separator', None), + ], + 'account_invoice_line': [ + ('sale_layout_cat_id', 'layout_category_id'), + ('categ_sequence', 'layout_category_sequence'), + ], + 'sale_order_line': [ + ('sale_layout_cat_id', 'layout_category_id'), + ('categ_sequence', 'layout_category_sequence'), + ], +} + + +# rename_tables is not needed because "sale_layout.category" and +# "sale.layout_category" result both in "sale_layout_category" +model_renames_sale_layout = [ + ('sale_layout.category', 'sale.layout_category') +] + + +# backup of invoice_policy column with old / non existing value 'cost' +column_copies = { + 'product_template': [ + ('invoice_policy', None, None), + ], +} + + +def cleanup_modules(cr): + openupgrade.update_module_names( + cr, + [ + ('sale_layout', 'sale'), + ('product_visible_discount', 'sale'), + ], + merge_modules=True + ) + + +def warning_update_module_names_partial(cr): + """We don't use openupgrade.update_module_names here because only the + fields sale_line_warn, sale_line_warn_msg, sale_warn and sale_warn_msg are + moved from the old warning module to the sale module. Other fields are + moved in other modules (e. g. field purchase_warn in purchase module). If + we would using openupgrade.update_module_names there might be problems when + first use openupgrade.update_module_names in sale module and then again in + purchase module and so on. + Because the field names didn't change and we only deal with text fields + without constraints etc. we only have to change the related + ir_model_data and ir_translation entries. + """ + new_name = 'sale' + old_name = 'warning' + if not openupgrade.is_module_installed(cr, old_name): + return + + # get moved model fields + moved_fields = ['sale_line_warn', 'sale_line_warn_msg', 'sale_warn', + 'sale_warn_msg'] + cr.execute(""" + SELECT id + FROM ir_model_fields + WHERE model IN ('res.partner', 'product.template') AND name in %s + """, (moved_fields,)) + field_ids = [r[0] for r in cr.fetchall()] + + # update ir_model_data, the subselect allows to avoid duplicated XML-IDs + query = ("UPDATE ir_model_data SET module = %s " + "WHERE module = %s AND res_id IN %s AND name NOT IN " + "(SELECT name FROM ir_model_data WHERE module = %s)") + openupgrade.logged_query(cr, query, (new_name, old_name, field_ids, + new_name)) + + # update ir_translation + query = ("UPDATE ir_translation SET module = %s " + "WHERE module = %s AND res_id IN %s") + openupgrade.logged_query(cr, query, (new_name, old_name, field_ids)) + + +def sale_expense_update_module_names_partial(cr): + """We don't use openupgrade.update_module_names here because the field + expense_policy is moved from the sale_expense module to the sale module but + sale_expense still exists in odoo 10. + Because the field name didn't change and we only deal with text field + without constraints etc. we only have to change the related ir_model_data + entries. + """ + new_name = 'sale' + old_name = 'sale_expense' + if not openupgrade.is_module_installed(cr, old_name): + return + + # get moved model fields + moved_fields = ['expense_policy'] + cr.execute(""" + SELECT id + FROM ir_model_fields + WHERE model = 'product.template' AND name in %s + """, (moved_fields,)) + field_ids = [r[0] for r in cr.fetchall()] + + # update ir_model_data, the subselect allows to avoid duplicated XML-IDs, + query = ("UPDATE ir_model_data SET module = %s " + "WHERE module = %s AND res_id IN %s AND name NOT IN " + "(SELECT name FROM ir_model_data WHERE module = %s)") + openupgrade.logged_query(cr, query, (new_name, old_name, field_ids, + new_name)) + + # delete ir_translation because the translations changes completely + query = ("DELETE FROM ir_translation " + "WHERE module = %s AND res_id IN %s") + openupgrade.logged_query(cr, query, (old_name, field_ids)) + + +@openupgrade.migrate(use_env=True) +def migrate(env, version): + if openupgrade.is_module_installed(env.cr, 'sale_layout'): + openupgrade.rename_columns(env.cr, column_renames_sale_layout) + openupgrade.rename_models(env.cr, model_renames_sale_layout) + openupgrade.copy_columns(env.cr, column_copies) + cleanup_modules(env.cr) + warning_update_module_names_partial(env.cr) + sale_expense_update_module_names_partial(env.cr) diff --git a/odoo/openupgrade/doc/source/modules90-100.rst b/odoo/openupgrade/doc/source/modules90-100.rst index e339fae4ccd4..ed9c88aecdbf 100644 --- a/odoo/openupgrade/doc/source/modules90-100.rst +++ b/odoo/openupgrade/doc/source/modules90-100.rst @@ -431,7 +431,7 @@ missing in the new release are marked with |del|. +-----------------------------------+-----------------------------------+ |resource | Nothing to do | +-----------------------------------+-----------------------------------+ -|sale | | +|sale | Done | +-----------------------------------+-----------------------------------+ |sale_crm | | +-----------------------------------+-----------------------------------+