Ir para o conteúdo principal

Migração de Tributação para Propriedades (Osklen - versão maior 3.16.0.2)

-- TRUNCATE TABLE propriedade;

INSERT INTO propriedade (tabela, id_tabela, propriedade, data_criacao, `data`)
	WITH pg AS (
		SELECT MIN(id) AS id_produto_grade, id_produto FROM produto_grade WHERE id_produto NOT IN (SELECT id_tabela FROM propriedade WHERE tabela = 'produto') GROUP BY id_produto
	)
	SELECT
		'produto', pg.id_produto, JSON_SET('{}', "$.tributacao", JSON_OBJECTAGG( i.descricao, i.valor )), gi.`data`, gi.`data`
	FROM
		imposto i
		INNER JOIN produto_grade_grupo_imposto gi ON (gi.id_grupo_imposto = i.id_grupo_imposto)
		INNER JOIN pg ON (gi.id_produto_grade = pg.id_produto_grade)
	WHERE
		i.valor IS NOT NULL
	GROUP BY
		i.id_grupo_imposto;

INSERT INTO propriedade (tabela, id_tabela, propriedade, data_criacao, `data`)
	WITH t AS (
		SELECT id, id_grupo_imposto, `data` FROM tributacao WHERE id NOT IN (SELECT id_tabela FROM propriedade WHERE tabela = 'tributacao')
	)
	SELECT
		'tributacao', t.id, JSON_OBJECTAGG( i.descricao, i.valor ), i.`data`, i.`data`
	FROM
		imposto i
		INNER JOIN t ON (t.id_grupo_imposto = i.id_grupo_imposto)
	WHERE
		i.valor IS NOT NULL
	GROUP BY
		i.id_grupo_imposto;

INSERT INTO propriedade (tabela, id_tabela, propriedade, data_criacao, `data`)
	WITH m AS (
		SELECT id FROM movimentacao WHERE id NOT IN (SELECT id_tabela FROM propriedade WHERE tabela = 'movimentacao')
	)
	SELECT
		'movimentacao', m.id, JSON_SET('{}', "$.tributacao", JSON_OBJECTAGG( i.descricao, i.valor )), gi.`data`, gi.`data`
	FROM
		imposto i
		INNER JOIN movimentacao_grupo_imposto gi ON (gi.id_grupo_imposto = i.id_grupo_imposto)
		INNER JOIN m ON (gi.id_movimentacao = m.id)
	WHERE
		i.valor IS NOT NULL
	GROUP BY
		i.id_grupo_imposto;

INSERT INTO propriedade (tabela, id_tabela, propriedade, data_criacao, `data`)
	WITH md AS (
		SELECT id FROM movimentacao WHERE id NOT IN (SELECT id_tabela FROM propriedade WHERE tabela = 'movimentacao_detalhe')
	)
	SELECT
		'movimentacao_detalhe', md.id, JSON_SET('{}', "$.tributacao", JSON_OBJECTAGG( i.descricao, i.valor )), gi.`data`, gi.`data`
	FROM
		imposto i
		INNER JOIN movimentacao_detalhe_grupo_imposto gi ON (gi.id_grupo_imposto = i.id_grupo_imposto)
		INNER JOIN md ON (gi.id_movimentacao_detalhe = md.id)
	WHERE
		i.valor IS NOT NULL
	GROUP BY
		i.id_grupo_imposto;

UPDATE tributacao SET id_grupo_imposto = NULL WHERE id_grupo_imposto IS NOT NULL;

SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE imposto;
TRUNCATE movimentacao_detalhe_grupo_imposto;
TRUNCATE movimentacao_grupo_imposto;
TRUNCATE produto_grade_grupo_imposto;
TRUNCATE grupo_imposto;
SET FOREIGN_KEY_CHECKS = 1;