
/*------ ATD 443597 ------*/
--CRIANDO TRIGGER SKU_PRODUTO_ECOMMERCE_IU
CREATE OR REPLACE TRIGGER SKU_PRODUTO_ECOMMERCE_IU AFTER INSERT OR UPDATE ON SKU_PRODUTO_ECOMMERCE FOR EACH ROW
BEGIN
	-- ignorar quando está mudando flag de integração, pois é o monitor que altera
	-- só produtos com variação
	-- só cadastro realmente alterado
	IF nvl(:new.DESATIVADO,0) = 0 AND nvl(:new.INTEGRADOSITE,0) = nvl(:old.INTEGRADOSITE,0) AND :new.PRODUTOSEMVARIACAO = 0 
     AND nvl(:new.DATAATUALIZACAOCADASTRO,TO_DATE('31/12/2000','dd/mm/yyyy')) != nvl(:old.DATAATUALIZACAOCADASTRO,TO_DATE('31/12/2000','dd/mm/yyyy')) THEN
		-- somente de plataformas que integram produtos e não estão desativadas
		Insert Into FILA_INTEGRACAO_ECOMMERCE (RPLATAFORMA, OPERACAO, OBJETO, CODIGO, DATA)
		Select p.oid, case when :old.id is null then 'I' else 'A' end, 'SKU',
		(case when :new.codigo > 0 then cast(:new.codigo as varchar2(20)) else 'ID' || cast(:new.id as varchar2(20)) end), sysdate
		From PLATAFORMA_ECOMMERCE p
		WHERE p.oid = :new.rplataforma
		AND p.INTEGRAPRODUTOS = 1 AND p.DESATIVADO = 0
		AND not exists(select 1 from FILA_INTEGRACAO_ECOMMERCE
						 where RPLATAFORMA = p.oid and OBJETO = 'SKU'
             and CODIGO = (case when :new.codigo > 0 then cast(:new.codigo as varchar2(20)) else 'ID' || cast(:new.id as varchar2(20)) end) and OPERACAO != 'D');
	END IF;

	-- fazer o mesmo quando está alterando preço de produto sem variação
	IF nvl(:new.DESATIVADO,0) = 0 AND nvl(:new.INTEGRADOSITE,0) = nvl(:old.INTEGRADOSITE,0) AND :new.PRODUTOSEMVARIACAO = 1  
     AND nvl(:new.DATAATUALIZACAOCADASTRO,TO_DATE('31/12/2000','dd/mm/yyyy')) != nvl(:old.DATAATUALIZACAOCADASTRO,TO_DATE('31/12/2000','dd/mm/yyyy')) THEN
	  Insert Into FILA_INTEGRACAO_ECOMMERCE (RPLATAFORMA, OPERACAO, OBJETO, CODIGO, DATA) 
	  Select pe.rplataforma, 'A', 'PRODUTO', 
	  (case when pe.codigo > 0 then cast(pe.codigo as varchar2(20)) else 'ID' || cast(pe.id as varchar2(20)) end), SYSDATE 
	  FROM PRODUTO_ECOMMERCE pe  
	   join PLATAFORMA_ECOMMERCE p on p.oid = pe.rplataforma 
		WHERE pe.id = :new.rprodutoecommerce
		AND p.INTEGRAPRODUTOS = 1 AND p.DESATIVADO = 0 AND pe.DESATIVADO = 0
		and not exists(select 1 from FILA_INTEGRACAO_ECOMMERCE 
					  where RPLATAFORMA = pe.RPLATAFORMA and OBJETO = 'PRODUTO' 
					  and CODIGO = (case when pe.codigo > 0 then cast(pe.codigo as varchar2(20)) else 'ID' || cast(pe.id as varchar2(20)) end) 
					  and OPERACAO != 'D');
  END IF;
  
  -- atualização de preço
  IF nvl(:new.DESATIVADO,0) = 0 AND nvl(:new.CODIGO,0) > 0 AND 
     (nvl(:new.PRECO,0) != nvl(:old.PRECO,0) OR nvl(:new.PRECODELISTA,0) != nvl(:old.PRECODELISTA,0)   
      OR nvl(:new.OFERTAINICIO,TO_DATE('31/12/2000','dd/mm/yyyy')) = nvl(:old.OFERTAINICIO,TO_DATE('31/12/2000','dd/mm/yyyy'))
      OR nvl(:new.OFERTAFIM,TO_DATE('31/12/2000','dd/mm/yyyy')) = nvl(:old.OFERTAFIM,TO_DATE('31/12/2000','dd/mm/yyyy'))
	  OR nvl(:new.CONVERTERPRECO,0) != nvl(:old.CONVERTERPRECO,0) 
	  OR (nvl(:new.MULTIPLICADORUNIDADE,0) != nvl(:old.MULTIPLICADORUNIDADE,0) AND nvl(:new.CONVERTERPRECO,0) = 1)) THEN
		Insert Into FILA_INTEGRACAO_ECOMMERCE (RPLATAFORMA, OPERACAO, OBJETO, CODIGO, DATA)
		Select p.oid, 'A', (case when :new.PRODUTOSEMVARIACAO = 1 then 'PRECO_PRODUTO' else 'PRECO_SKU' end),
		cast(:new.codigo as varchar2(20)), sysdate
		From PLATAFORMA_ECOMMERCE p
		JOIN PRODUTO_ECOMMERCE pe on pe.id = :new.rprodutoecommerce
		WHERE p.oid = :new.rplataforma
		AND p.DESATIVADO = 0 
		and nvl((case when :new.PRODUTOSEMVARIACAO = 1 then pe.DESATIVADO else :new.DESATIVADO end),0) = 0
		AND not exists(select 1 from FILA_INTEGRACAO_ECOMMERCE
						 where RPLATAFORMA = p.oid and OBJETO = (case when :new.PRODUTOSEMVARIACAO = 1 then 'PRECO_PRODUTO' else 'PRECO_SKU' end)
             and CODIGO = cast(:new.codigo as varchar2(20)) and OPERACAO != 'D');
  END IF;

  -- forçar atualização de estoque
  IF nvl(:new.MULTIPLICADORUNIDADE,0) != nvl(:old.MULTIPLICADORUNIDADE,0) THEN
	UPDATE ESTOQUE_ARMAZEM_ECOMMERCE SET DATAENVIO = CONVERT(DATETIME,'01/01/1900',103)
		where CodPro = :new.CodPro
		and EXISTS(SELECT 1 FROM ARMAZEM_ECOMMERCE a WHERE a.ID = e.RARMAZEM and a.RPLATAFORMA = :new.RPLATAFORMA)
  END IF;


	-- Controlar coluna ExportaSite
	update complementoproduto set exportasite = 1
	where codpro = :new.codpro and nvl(exportasite,0) != 1;
END;

