[IMP] various: implement _neutralize method
As an overridable _neutralize model method was added in a previous commit, the method is now implemented for various models. closes odoo/odoo#67825 Related: odoo/enterprise#19042 Signed-off-by: Christophe Monniez (moc) <moc@odoo.com>
This commit is contained in:
@@ -191,3 +191,13 @@ class AccountEdiProxyClientUser(models.Model):
|
||||
)
|
||||
f = Fernet(key)
|
||||
return f.decrypt(base64.b64decode(data))
|
||||
|
||||
def _neutralize(self):
|
||||
super()._neutralize()
|
||||
self.flush()
|
||||
self.invalidate_cache()
|
||||
self.env.cr.execute("""
|
||||
INSERT INTO ir_config_parameter(key, value)
|
||||
VALUES ('account_edi_proxy_client.demo', true)
|
||||
ON CONFLICT (key) DO UPDATE SET value = true
|
||||
""")
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
@@ -21,3 +20,9 @@ class AuthOAuthProvider(models.Model):
|
||||
css_class = fields.Char(string='CSS class', default='fa fa-fw fa-sign-in text-primary')
|
||||
body = fields.Char(required=True, help='Link text in Login Dialog', translate=True)
|
||||
sequence = fields.Integer(default=10)
|
||||
|
||||
def _neutralize(self):
|
||||
super()._neutralize()
|
||||
self.flush()
|
||||
self.invalidate_cache()
|
||||
self.env.cr.execute("UPDATE auth_oauth_provider SET enabled = false")
|
||||
|
||||
@@ -358,3 +358,16 @@ class DeliveryCarrier(models.Model):
|
||||
|
||||
def _product_price_to_company_currency(self, quantity, product, company):
|
||||
return company.currency_id._convert(quantity * product.standard_price, product.currency_id, company, fields.Date.today())
|
||||
|
||||
# -------------------------- #
|
||||
# neutralize #
|
||||
# -------------------------- #
|
||||
|
||||
def _neutralize(self):
|
||||
super()._neutralize()
|
||||
self.flush()
|
||||
self.invalidate_cache()
|
||||
self.env.cr.execute("""
|
||||
UPDATE delivery_carrier
|
||||
SET prod_environment = false, active = false
|
||||
""")
|
||||
|
||||
@@ -76,3 +76,9 @@ class TestPacking(TestPackingCommon):
|
||||
# default weight was set.
|
||||
pack_wiz = self.env['choose.delivery.package'].with_context(pack_action_ctx).create({})
|
||||
self.assertEqual(pack_wiz.shipping_weight, 13.5)
|
||||
|
||||
def test_delivery_carrier_neutralize(self):
|
||||
""" ensure that devlivery carriers can be nautralized """
|
||||
self.assertTrue(self.test_carrier.active)
|
||||
self.env['delivery.carrier']._neutralize()
|
||||
self.assertFalse(self.test_carrier.active, "Delivery Carrier was not neutralized")
|
||||
|
||||
@@ -42,3 +42,9 @@ class ResCompany(models.Model):
|
||||
)
|
||||
else:
|
||||
company.l10n_es_edi_certificate_id = False
|
||||
|
||||
def _neutralize(self):
|
||||
super()._neutralize()
|
||||
self.flush()
|
||||
self.invalidate_cache()
|
||||
self.env.cr.execute("UPDATE res_company SET l10n_es_edi_test_env = true")
|
||||
|
||||
@@ -2,3 +2,4 @@
|
||||
|
||||
from . import test_edi_xml
|
||||
from . import test_edi_web_services
|
||||
from . import test_neutralize
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
from odoo.tests.common import tagged, TransactionCase
|
||||
|
||||
|
||||
@tagged('post_install_l10n', 'post_install', '-at_install')
|
||||
class TestL10nEsEdiNeutralize(TransactionCase):
|
||||
|
||||
def test_l10n_es_edi_neutralize(self):
|
||||
ar_company = self.env['res.company'].create({
|
||||
'name': 'Test ES Company',
|
||||
'l10n_es_edi_test_env': False,
|
||||
})
|
||||
|
||||
self.env['res.company']._neutralize()
|
||||
self.assertEqual(ar_company.l10n_es_edi_test_env, True)
|
||||
@@ -338,3 +338,13 @@ class MailTemplate(models.Model):
|
||||
if force_send:
|
||||
mail.send(raise_exception=raise_exception)
|
||||
return mail.id # TDE CLEANME: return mail + api.returns ?
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# neutralize
|
||||
# ------------------------------------------------------------
|
||||
|
||||
def _neutralize(self):
|
||||
super()._neutralize()
|
||||
self.flush()
|
||||
self.invalidate_cache()
|
||||
self.env.cr.execute("UPDATE mail_template SET mail_server_id=NULL")
|
||||
|
||||
@@ -463,3 +463,19 @@ class TestMailRender(common.MailCommon):
|
||||
self.assertEqual(result, '''<div style="display:none;font-size:1px;height:0px;width:0px;opacity:0;">
|
||||
foo<t t-out=""false" if 1 > 2 else "true""/>bar
|
||||
</div>body''')
|
||||
|
||||
def test_mail_template_neutralize(self):
|
||||
""" ensure mail templates can be neutralized """
|
||||
fake_mail_server = self.env['ir.mail_server'].create({
|
||||
'name': "fake test email server",
|
||||
'smtp_host': "mail.example.com",
|
||||
'smtp_port': 15626,
|
||||
})
|
||||
self.test_template.mail_server_id = fake_mail_server
|
||||
self.env['mail.template']._neutralize()
|
||||
self.assertFalse(self.test_template.mail_server_id)
|
||||
|
||||
# bonus test mail server neutralize too
|
||||
self.assertTrue(fake_mail_server.active)
|
||||
self.env['ir.mail_server']._neutralize()
|
||||
self.assertFalse(fake_mail_server.active)
|
||||
|
||||
@@ -1758,3 +1758,12 @@ class Website(models.Model):
|
||||
for word in re.findall(match_pattern, value):
|
||||
if word[0] == search[0]:
|
||||
yield word.lower()
|
||||
|
||||
# ----------------------------------------------------------
|
||||
# ORM overrides
|
||||
# ----------------------------------------------------------
|
||||
def _neutralize(self):
|
||||
super()._neutralize()
|
||||
self.flush()
|
||||
self.invalidate_cache()
|
||||
self.env.cr.execute("UPDATE website SET domain=NULL")
|
||||
|
||||
@@ -658,6 +658,19 @@ class IrActionsServer(models.Model):
|
||||
)
|
||||
return res or False
|
||||
|
||||
def _neutralize(self):
|
||||
# In some cases, cron neutralization is not enough as modifying records
|
||||
# like `fetchmail.server`, `calendar.alarm` and `base.automation` will
|
||||
# re-enable their cron jobs as a side-effect.
|
||||
super()._neutralize()
|
||||
self.flush()
|
||||
self.invalidate_cache()
|
||||
self.env.cr.execute("""
|
||||
UPDATE ir_act_server
|
||||
SET code = '#' || REPLACE(code, E'\n', E'\n#')
|
||||
WHERE usage = 'ir_cron' AND state = 'code'
|
||||
""")
|
||||
|
||||
|
||||
class IrServerObjectLines(models.Model):
|
||||
_name = 'ir.server.object.lines'
|
||||
|
||||
@@ -465,6 +465,19 @@ class ir_cron(models.Model):
|
||||
cr.execute('NOTIFY cron_trigger, %s', [self.env.cr.dbname])
|
||||
_logger.debug("cron workers notified")
|
||||
|
||||
def _neutralize(self):
|
||||
super()._neutralize()
|
||||
self.flush()
|
||||
self.invalidate_cache()
|
||||
self.env.cr.execute("""
|
||||
UPDATE ir_cron
|
||||
SET active = false
|
||||
WHERE id NOT IN (
|
||||
SELECT res_id FROM ir_model_data
|
||||
WHERE model='ir.cron' AND name = 'autovacuum_job'
|
||||
)
|
||||
""")
|
||||
|
||||
|
||||
class ir_cron_trigger(models.Model):
|
||||
_name = 'ir.cron.trigger'
|
||||
|
||||
@@ -712,3 +712,9 @@ class IrMailServer(models.Model):
|
||||
outgoing mail server.
|
||||
"""
|
||||
return getattr(threading.currentThread(), 'testing', False) or self.env.registry.in_test_mode()
|
||||
|
||||
def _neutralize(self):
|
||||
super()._neutralize()
|
||||
self.flush()
|
||||
self.invalidate_cache()
|
||||
self.env.cr.execute("UPDATE ir_mail_server SET active = false")
|
||||
|
||||
Reference in New Issue
Block a user