Ir para o conteúdo principal

Ajuste de Tributação (versão superior a 3.16.0.0)

Com a atualização disponível a partir da versão 3.16.0.0, algumas estruturas sofreram alteração, dentre elas a migração das tabelas de tributação para a propriedade e a migração do campo ICMS Origem do produto para o cadastro de produto, segue as rotinas a serem executadas abaixo:

1 - Migração de Dados

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;

2 - Ajuste do campo ICMS Origem

INSERT INTO propriedade (tabela, id_tabela, propriedade, data_criacao) (
	WITH x AS (
		SELECT
			'produto' AS tabela,
			p.id AS id_tabela,
			IF(
				pp.propriedade IS NULL,
				'{"tributacao": {"icmsOrigem": "0"}}',
				JSON_SET(pp.propriedade, "$.tributacao.icmsOrigem", '0')
			) AS propriedade,
			NOW() AS data_criacao
		FROM
			produto p
			LEFT JOIN propriedade pp ON (pp.id_tabela = p.id AND pp.tabela = 'produto')
	)
	SELECT * FROM x
) ON DUPLICATE KEY UPDATE propriedade = VALUES(propriedade);

3 - Limpeza de Banco

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;