From 333a2360d8bc01b15c893398f4f101a5d24f512d Mon Sep 17 00:00:00 2001 From: Adrian Torres Date: Wed, 18 Oct 2017 10:18:47 +0200 Subject: [PATCH] [FIX] website_quote: don't unlink website_description This is a hotfix/hack for a conflict between website_quote and website_sale, on the field website_description. The conflict happens when both modules are installed. Fixes #20118 --- addons/website_quote/models/__init__.py | 1 + .../website_quote/models/ir_model_fields.py | 35 +++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 addons/website_quote/models/ir_model_fields.py diff --git a/addons/website_quote/models/__init__.py b/addons/website_quote/models/__init__.py index 011bafd821f..a83051f5a10 100644 --- a/addons/website_quote/models/__init__.py +++ b/addons/website_quote/models/__init__.py @@ -4,3 +4,4 @@ import sale_order import sale_quote import product_template +import ir_model_fields diff --git a/addons/website_quote/models/ir_model_fields.py b/addons/website_quote/models/ir_model_fields.py new file mode 100644 index 00000000000..55643edfe0d --- /dev/null +++ b/addons/website_quote/models/ir_model_fields.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import api, models + +# !! Attention, this is a hack of a hack, do not try this at home !! +# This is done because website_quote defines the website_description +# field which is also defined by website_sale, but these two modules +# are independent of each other, the part of the ORM that generates +# xmlids does not support this case therefore it only creates a single +# pair of xmlids for whichever module is installed first, therefore +# when uninstalling any of the two modules the website_descripion field +# will be deleted from the db and the other module won't be able to +# use this field, resulting in a crash and data-loss. +# See opw-776464 for more details. +# +# This is hotfixed by overriding the unlink method so as to not delete +# the website_description field if website_quote is uninstalled, it's +# an ugly hack but it works and big changes can't be done to the ORM +# in stable versions, Odoo v12+ will properly fix this + + +class IrModelFields(models.Model): + _inherit = "ir.model.fields" + + @api.multi + def unlink(self): + # Prevent the deletion of the field "website_description" + self = self.filtered( + lambda rec: not ( + rec.model in ('product.product', 'product.template') and + rec.name == 'website_description' + ) + ) + return super(IrModelFields, self).unlink()