From d8056cb54331762489e0a4ecb6b3b805f0cf1a8b Mon Sep 17 00:00:00 2001 From: Jordi Ballester Alomar Date: Sat, 5 Nov 2022 08:38:02 +0100 Subject: [PATCH] [FIX] rma: Ensure migration script will not break if fields do not exist --- rma/migrations/14.0.1.1.0/post-migration.py | 200 +++++++++++--------- 1 file changed, 114 insertions(+), 86 deletions(-) diff --git a/rma/migrations/14.0.1.1.0/post-migration.py b/rma/migrations/14.0.1.1.0/post-migration.py index ae792b79..0ddbbca8 100644 --- a/rma/migrations/14.0.1.1.0/post-migration.py +++ b/rma/migrations/14.0.1.1.0/post-migration.py @@ -6,115 +6,143 @@ _logger = logging.getLogger(__name__) def set_rma_customer_operation_property(cr): """ """ cr.execute( + """SELECT column_name + FROM information_schema.columns + WHERE table_name='product_template' AND + column_name='rma_customer_operation_id'""" + ) + if cr.fetchone(): + cr.execute( + """ + WITH rma_customer_operation_id_field AS ( + SELECT id FROM ir_model_fields WHERE model='product.template' + AND name='rma_customer_operation_id' + ) + INSERT INTO ir_property(name, type, fields_id, company_id, res_id, + value_reference) + SELECT 'rma_customer_operation_id', 'many2one', rco.id, ro.company_id, + CONCAT('product.template,', t.id), CONCAT('rma.operation,', ro.id) + FROM product_template t JOIN rma_operation ro + ON t.rma_customer_operation_id = ro.id + , rma_customer_operation_id_field rco + WHERE ro.company_id IS NOT NULL + AND NOT EXISTS(SELECT 1 + FROM ir_property + WHERE fields_id=rco.id + AND company_id=ro.company_id + AND res_id=CONCAT('product.template,', t.id)) """ - WITH rma_customer_operation_id_field AS ( - SELECT id FROM ir_model_fields WHERE model='product.template' - AND name='rma_customer_operation_id' ) - INSERT INTO ir_property(name, type, fields_id, company_id, res_id, - value_reference) - SELECT 'rma_customer_operation_id', 'many2one', rco.id, ro.company_id, - CONCAT('product.template,', t.id), CONCAT('rma.operation,', ro.id) - FROM product_template t JOIN rma_operation ro - ON t.rma_customer_operation_id = ro.id - , rma_customer_operation_id_field rco - WHERE ro.company_id IS NOT NULL - AND NOT EXISTS(SELECT 1 - FROM ir_property - WHERE fields_id=rco.id - AND company_id=ro.company_id - AND res_id=CONCAT('product.template,', t.id)) - """ - ) - _logger.info( - "Added %s rma_customer_operation_id_field product properties", cr.rowcount - ) + _logger.info( + "Added %s rma_customer_operation_id_field product properties", cr.rowcount + ) def set_rma_supplier_operation_property(cr): """ """ cr.execute( + """SELECT column_name + FROM information_schema.columns + WHERE table_name='product_template' AND + column_name='rma_supplier_operation_id'""" + ) + if cr.fetchone(): + cr.execute( + """ + WITH rma_supplier_operation_id_field AS ( + SELECT id FROM ir_model_fields WHERE model='product.template' + AND name='rma_supplier_operation_id' + ) + INSERT INTO ir_property(name, type, fields_id, company_id, res_id, + value_reference) + SELECT 'rma_supplier_operation_id', 'many2one', rco.id, ro.company_id, + CONCAT('product.template,', t.id), CONCAT('rma.operation,', ro.id) + FROM product_template t JOIN rma_operation ro + ON t.rma_supplier_operation_id = ro.id + , rma_supplier_operation_id_field rco + WHERE ro.company_id IS NOT NULL + AND NOT EXISTS(SELECT 1 + FROM ir_property + WHERE fields_id=rco.id + AND company_id=ro.company_id + AND res_id=CONCAT('product.template,', t.id)) """ - WITH rma_supplier_operation_id_field AS ( - SELECT id FROM ir_model_fields WHERE model='product.template' - AND name='rma_supplier_operation_id' ) - INSERT INTO ir_property(name, type, fields_id, company_id, res_id, - value_reference) - SELECT 'rma_supplier_operation_id', 'many2one', rco.id, ro.company_id, - CONCAT('product.template,', t.id), CONCAT('rma.operation,', ro.id) - FROM product_template t JOIN rma_operation ro - ON t.rma_supplier_operation_id = ro.id - , rma_supplier_operation_id_field rco - WHERE ro.company_id IS NOT NULL - AND NOT EXISTS(SELECT 1 - FROM ir_property - WHERE fields_id=rco.id - AND company_id=ro.company_id - AND res_id=CONCAT('product.template,', t.id)) - """ - ) - _logger.info( - "Added %s rma_supplier_operation_id_field product properties", cr.rowcount - ) + _logger.info( + "Added %s rma_supplier_operation_id_field product properties", cr.rowcount + ) def set_rma_customer_operation_category_property(cr): """ """ cr.execute( + """SELECT column_name + FROM information_schema.columns + WHERE table_name='product_category' AND + column_name='rma_customer_operation_id'""" + ) + if cr.fetchone(): + cr.execute( + """ + WITH rma_customer_operation_id_field AS ( + SELECT id FROM ir_model_fields WHERE model='product.category' + AND name='rma_customer_operation_id' + ) + INSERT INTO ir_property(name, type, fields_id, company_id, res_id, + value_reference) + SELECT 'rma_customer_operation_id', 'many2one', rco.id, ro.company_id, + CONCAT('product.category,', pc.id), CONCAT('rma.operation,', ro.id) + FROM product_category pc JOIN rma_operation ro + ON pc.rma_customer_operation_id = ro.id + , rma_customer_operation_id_field rco + WHERE ro.company_id IS NOT NULL + AND NOT EXISTS(SELECT 1 + FROM ir_property + WHERE fields_id=rco.id + AND company_id=ro.company_id + AND res_id=CONCAT('product.category,', pc.id)) """ - WITH rma_customer_operation_id_field AS ( - SELECT id FROM ir_model_fields WHERE model='product.category' - AND name='rma_customer_operation_id' ) - INSERT INTO ir_property(name, type, fields_id, company_id, res_id, - value_reference) - SELECT 'rma_customer_operation_id', 'many2one', rco.id, ro.company_id, - CONCAT('product.category,', pc.id), CONCAT('rma.operation,', ro.id) - FROM product_category pc JOIN rma_operation ro - ON pc.rma_customer_operation_id = ro.id - , rma_customer_operation_id_field rco - WHERE ro.company_id IS NOT NULL - AND NOT EXISTS(SELECT 1 - FROM ir_property - WHERE fields_id=rco.id - AND company_id=ro.company_id - AND res_id=CONCAT('product.category,', pc.id)) - """ - ) - _logger.info( - "Added %s rma_customer_operation_id_field product category properties", - cr.rowcount, - ) + _logger.info( + "Added %s rma_customer_operation_id_field product category properties", + cr.rowcount, + ) def set_rma_supplier_operation_category_property(cr): """ """ cr.execute( + """SELECT column_name + FROM information_schema.columns + WHERE table_name='product_category' AND + column_name='rma_supplier_operation_id'""" + ) + if cr.fetchone(): + cr.execute( + """ + WITH rma_supplier_operation_id_field AS ( + SELECT id FROM ir_model_fields WHERE model='product.category' + AND name='rma_supplier_operation_id' + ) + INSERT INTO ir_property(name, type, fields_id, company_id, res_id, + value_reference) + SELECT 'rma_supplier_operation_id', 'many2one', rco.id, ro.company_id, + CONCAT('product.category,', pc.id), CONCAT('rma.operation,', ro.id) + FROM product_category pc JOIN rma_operation ro + ON pc.rma_supplier_operation_id = ro.id + , rma_supplier_operation_id_field rco + WHERE ro.company_id IS NOT NULL + AND NOT EXISTS(SELECT 1 + FROM ir_property + WHERE fields_id=rco.id + AND company_id=ro.company_id + AND res_id=CONCAT('product.category,', pc.id)) """ - WITH rma_supplier_operation_id_field AS ( - SELECT id FROM ir_model_fields WHERE model='product.category' - AND name='rma_supplier_operation_id' ) - INSERT INTO ir_property(name, type, fields_id, company_id, res_id, - value_reference) - SELECT 'rma_supplier_operation_id', 'many2one', rco.id, ro.company_id, - CONCAT('product.category,', pc.id), CONCAT('rma.operation,', ro.id) - FROM product_category pc JOIN rma_operation ro - ON pc.rma_supplier_operation_id = ro.id - , rma_supplier_operation_id_field rco - WHERE ro.company_id IS NOT NULL - AND NOT EXISTS(SELECT 1 - FROM ir_property - WHERE fields_id=rco.id - AND company_id=ro.company_id - AND res_id=CONCAT('product.category,', pc.id)) - """ - ) - _logger.info( - "Added %s rma_supplier_operation_id_field product category properties", - cr.rowcount, - ) + _logger.info( + "Added %s rma_supplier_operation_id_field product category properties", + cr.rowcount, + ) def migrate(cr, version=None):