From 023b195eefe41678763dc39a544adea264eb9181 Mon Sep 17 00:00:00 2001 From: Adrian Torres Date: Fri, 20 Oct 2017 08:21:43 +0200 Subject: [PATCH] [FIX] website_sale: don't unlink website_description This is a hotfix/hack for a conflict between website_sale and website_quote, on the field website_description. The conflict happens when both modules are installed. Fixes #20118 Completes rev 333a236 --- addons/website_sale/models/__init__.py | 1 + addons/website_sale/models/ir_model_fields.py | 35 +++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 addons/website_sale/models/ir_model_fields.py diff --git a/addons/website_sale/models/__init__.py b/addons/website_sale/models/__init__.py index a40ad2379a6..a54c1194068 100644 --- a/addons/website_sale/models/__init__.py +++ b/addons/website_sale/models/__init__.py @@ -4,3 +4,4 @@ import product import sale_order import crm_team import res_config +import ir_model_fields diff --git a/addons/website_sale/models/ir_model_fields.py b/addons/website_sale/models/ir_model_fields.py new file mode 100644 index 00000000000..e109ab809b5 --- /dev/null +++ b/addons/website_sale/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_sale defines the website_description +# field which is also defined by website_quote, 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_sale 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()