From 0cb6f111b8eb420044eb2636710570b56d753e67 Mon Sep 17 00:00:00 2001 From: Adrian Torres Date: Mon, 30 Mar 2020 08:39:00 +0000 Subject: [PATCH] [FIX] payment_*: reset payment acquirers to default on uninstall The `payment` module introduces a certain amount of payment acquirers, each one corresponding to a `payment_` module. When a `payment_` module is installed, this data is updated so that payments done with the corresponding acquirer change in behaviour using the provider installed by the `payment_` module. When a `payment_` module is uninstalled, this data should be reset to default, more especifically the `view_template_id` and the `provider` fields of `payment.acquirer`. This was not possible before this commit, and more importantly it would make the uninstallation of such `payment_` module impossible as the `view_template_id` is a required m2o ondelete='set null', which will make the registry crash. Even if the former wasn't a problem, the provider field would remain set to a non-existing selection option, which would make the registry crash (eventually, when checking a record with such a selection option). With this commit, we reset these fields to their default value upon module uninstall. In 13, the issue with `view_template_id` should be fixed, as required m2o that are ondelete='set null' are no longer possible. As for the provider Selection field, a fix should arrive in master soon. opw-2225333 closes odoo/odoo#48916 X-original-commit: 4f0c1c1bfd71dd1ff6793d0a91b49984c54d1351 Signed-off-by: Raphael Collet (rco) Signed-off-by: Adrian Torres (adt) --- addons/payment/__init__.py | 10 ++++++++++ addons/payment_adyen/__init__.py | 4 ++++ addons/payment_adyen/__manifest__.py | 1 + addons/payment_authorize/__init__.py | 4 ++++ addons/payment_authorize/__manifest__.py | 1 + addons/payment_buckaroo/__init__.py | 3 +++ addons/payment_buckaroo/__manifest__.py | 1 + addons/payment_ingenico/__init__.py | 3 +++ addons/payment_ingenico/__manifest__.py | 1 + addons/payment_paypal/__init__.py | 3 +++ addons/payment_paypal/__manifest__.py | 1 + addons/payment_payumoney/__init__.py | 3 +++ addons/payment_payumoney/__manifest__.py | 1 + addons/payment_sips/__init__.py | 3 +++ addons/payment_sips/__manifest__.py | 1 + addons/payment_stripe/__init__.py | 3 +++ addons/payment_stripe/__manifest__.py | 1 + addons/payment_transfer/__init__.py | 3 +++ addons/payment_transfer/__manifest__.py | 1 + 19 files changed, 48 insertions(+) diff --git a/addons/payment/__init__.py b/addons/payment/__init__.py index 4a05b41804c..95d9fb1ca40 100644 --- a/addons/payment/__init__.py +++ b/addons/payment/__init__.py @@ -1,6 +1,16 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. +from odoo import api, SUPERUSER_ID from . import models from . import controllers from . import wizards + + +def reset_payment_provider(cr, registry, provider): + env = api.Environment(cr, SUPERUSER_ID, {}) + acquirers = env['payment.acquirer'].search([('provider', '=', provider)]) + acquirers.write({ + 'view_template_id': acquirers._get_default_view_template_id().id, + 'provider': 'manual', + }) diff --git a/addons/payment_adyen/__init__.py b/addons/payment_adyen/__init__.py index f2ff55f0433..c0f04c7528c 100644 --- a/addons/payment_adyen/__init__.py +++ b/addons/payment_adyen/__init__.py @@ -4,3 +4,7 @@ from . import models from . import controllers from odoo.addons.payment.models.payment_acquirer import create_missing_journal_for_acquirers +from odoo.addons.payment import reset_payment_provider + +def uninstall_hook(cr, registry): + reset_payment_provider(cr, registry, 'adyen') diff --git a/addons/payment_adyen/__manifest__.py b/addons/payment_adyen/__manifest__.py index 60302ba5546..1aab5f7aad8 100644 --- a/addons/payment_adyen/__manifest__.py +++ b/addons/payment_adyen/__manifest__.py @@ -15,4 +15,5 @@ 'installable': True, 'application': True, 'post_init_hook': 'create_missing_journal_for_acquirers', + 'uninstall_hook': 'uninstall_hook', } diff --git a/addons/payment_authorize/__init__.py b/addons/payment_authorize/__init__.py index 3d944a17e8b..6752d7211e6 100644 --- a/addons/payment_authorize/__init__.py +++ b/addons/payment_authorize/__init__.py @@ -4,4 +4,8 @@ from . import models from . import controllers from odoo.addons.payment.models.payment_acquirer import create_missing_journal_for_acquirers +from odoo.addons.payment import reset_payment_provider + +def uninstall_hook(cr, registry): + reset_payment_provider(cr, registry, 'authorize') diff --git a/addons/payment_authorize/__manifest__.py b/addons/payment_authorize/__manifest__.py index b795e1522e0..5dd67d97d44 100644 --- a/addons/payment_authorize/__manifest__.py +++ b/addons/payment_authorize/__manifest__.py @@ -15,4 +15,5 @@ 'installable': True, 'application': True, 'post_init_hook': 'create_missing_journal_for_acquirers', + 'uninstall_hook': 'uninstall_hook', } diff --git a/addons/payment_buckaroo/__init__.py b/addons/payment_buckaroo/__init__.py index 3d944a17e8b..7632661d918 100644 --- a/addons/payment_buckaroo/__init__.py +++ b/addons/payment_buckaroo/__init__.py @@ -4,4 +4,7 @@ from . import models from . import controllers from odoo.addons.payment.models.payment_acquirer import create_missing_journal_for_acquirers +from odoo.addons.payment import reset_payment_provider +def uninstall_hook(cr, registry): + reset_payment_provider(cr, registry, 'buckaroo') diff --git a/addons/payment_buckaroo/__manifest__.py b/addons/payment_buckaroo/__manifest__.py index 91b4c3d66d6..82073e1174b 100644 --- a/addons/payment_buckaroo/__manifest__.py +++ b/addons/payment_buckaroo/__manifest__.py @@ -15,4 +15,5 @@ 'installable': True, 'application': True, 'post_init_hook': 'create_missing_journal_for_acquirers', + 'uninstall_hook': 'uninstall_hook', } diff --git a/addons/payment_ingenico/__init__.py b/addons/payment_ingenico/__init__.py index 3d944a17e8b..09f44ea4916 100644 --- a/addons/payment_ingenico/__init__.py +++ b/addons/payment_ingenico/__init__.py @@ -4,4 +4,7 @@ from . import models from . import controllers from odoo.addons.payment.models.payment_acquirer import create_missing_journal_for_acquirers +from odoo.addons.payment import reset_payment_provider +def uninstall_hook(cr, registry): + reset_payment_provider(cr, registry, 'ogone') diff --git a/addons/payment_ingenico/__manifest__.py b/addons/payment_ingenico/__manifest__.py index 1f792da5dd0..aa570a08558 100644 --- a/addons/payment_ingenico/__manifest__.py +++ b/addons/payment_ingenico/__manifest__.py @@ -15,4 +15,5 @@ 'installable': True, 'application': True, 'post_init_hook': 'create_missing_journal_for_acquirers', + 'uninstall_hook': 'uninstall_hook', } diff --git a/addons/payment_paypal/__init__.py b/addons/payment_paypal/__init__.py index 3d944a17e8b..5af06123e12 100644 --- a/addons/payment_paypal/__init__.py +++ b/addons/payment_paypal/__init__.py @@ -4,4 +4,7 @@ from . import models from . import controllers from odoo.addons.payment.models.payment_acquirer import create_missing_journal_for_acquirers +from odoo.addons.payment import reset_payment_provider +def uninstall_hook(cr, registry): + reset_payment_provider(cr, registry, 'paypal') diff --git a/addons/payment_paypal/__manifest__.py b/addons/payment_paypal/__manifest__.py index 9496dd117af..0e4abe514e2 100644 --- a/addons/payment_paypal/__manifest__.py +++ b/addons/payment_paypal/__manifest__.py @@ -16,4 +16,5 @@ 'installable': True, 'application': True, 'post_init_hook': 'create_missing_journal_for_acquirers', + 'uninstall_hook': 'uninstall_hook', } diff --git a/addons/payment_payumoney/__init__.py b/addons/payment_payumoney/__init__.py index 3d944a17e8b..6cf313c4b39 100644 --- a/addons/payment_payumoney/__init__.py +++ b/addons/payment_payumoney/__init__.py @@ -4,4 +4,7 @@ from . import models from . import controllers from odoo.addons.payment.models.payment_acquirer import create_missing_journal_for_acquirers +from odoo.addons.payment import reset_payment_provider +def uninstall_hook(cr, registry): + reset_payment_provider(cr, registry, 'payumoney') diff --git a/addons/payment_payumoney/__manifest__.py b/addons/payment_payumoney/__manifest__.py index 6ccb8312ab0..420457e4545 100644 --- a/addons/payment_payumoney/__manifest__.py +++ b/addons/payment_payumoney/__manifest__.py @@ -18,4 +18,5 @@ ], 'application': True, 'post_init_hook': 'create_missing_journal_for_acquirers', + 'uninstall_hook': 'uninstall_hook', } diff --git a/addons/payment_sips/__init__.py b/addons/payment_sips/__init__.py index 4f5370f91f3..0d6cb337a6e 100644 --- a/addons/payment_sips/__init__.py +++ b/addons/payment_sips/__init__.py @@ -1,4 +1,7 @@ from . import models from . import controllers from odoo.addons.payment.models.payment_acquirer import create_missing_journal_for_acquirers +from odoo.addons.payment import reset_payment_provider +def uninstall_hook(cr, registry): + reset_payment_provider(cr, registry, 'sips') diff --git a/addons/payment_sips/__manifest__.py b/addons/payment_sips/__manifest__.py index 1d6acfdc52d..15d7c7cd7e5 100644 --- a/addons/payment_sips/__manifest__.py +++ b/addons/payment_sips/__manifest__.py @@ -22,4 +22,5 @@ payments acquirer using Worldline SIPS.""", 'installable': True, 'application': True, 'post_init_hook': 'create_missing_journal_for_acquirers', + 'uninstall_hook': 'uninstall_hook', } diff --git a/addons/payment_stripe/__init__.py b/addons/payment_stripe/__init__.py index 3d944a17e8b..cb4afd418b5 100644 --- a/addons/payment_stripe/__init__.py +++ b/addons/payment_stripe/__init__.py @@ -4,4 +4,7 @@ from . import models from . import controllers from odoo.addons.payment.models.payment_acquirer import create_missing_journal_for_acquirers +from odoo.addons.payment import reset_payment_provider +def uninstall_hook(cr, registry): + reset_payment_provider(cr, registry, 'stripe') diff --git a/addons/payment_stripe/__manifest__.py b/addons/payment_stripe/__manifest__.py index a51046af0bb..1339649d8ca 100644 --- a/addons/payment_stripe/__manifest__.py +++ b/addons/payment_stripe/__manifest__.py @@ -16,4 +16,5 @@ 'installable': True, 'application': True, 'post_init_hook': 'create_missing_journal_for_acquirers', + 'uninstall_hook': 'uninstall_hook', } diff --git a/addons/payment_transfer/__init__.py b/addons/payment_transfer/__init__.py index 3d944a17e8b..1d52c9851d2 100644 --- a/addons/payment_transfer/__init__.py +++ b/addons/payment_transfer/__init__.py @@ -4,4 +4,7 @@ from . import models from . import controllers from odoo.addons.payment.models.payment_acquirer import create_missing_journal_for_acquirers +from odoo.addons.payment import reset_payment_provider +def uninstall_hook(cr, registry): + reset_payment_provider(cr, registry, 'transfer') diff --git a/addons/payment_transfer/__manifest__.py b/addons/payment_transfer/__manifest__.py index bbb6388c3e9..9f1f032bd70 100644 --- a/addons/payment_transfer/__manifest__.py +++ b/addons/payment_transfer/__manifest__.py @@ -15,4 +15,5 @@ 'installable': True, 'auto_install': True, 'post_init_hook': 'create_missing_journal_for_acquirers', + 'uninstall_hook': 'uninstall_hook', }