CREATE OR ALTER trigger ttbpedido00iu for tbpedido
active before insert or update position 0
AS
begin
  if(new.CLASSIFICACAO <> ' ')then
  begin
     new.CLASSIFICACAO = trim(new.CLASSIFICACAO);
  end

  new.pedido_cliente = coalesce(new.pedido_cliente,'');
  
  if(inserting)then
  begin
	new.STATUS_ECOMMERCE = 2;
  end
end;

CREATE OR ALTER trigger ttbpedido_bu_api for tbpedido
active before update position 999
AS
begin

    if(new.codigo_rastreio is distinct from old.codigo_rastreio)then
    begin
        if(updating )then execute procedure spi_integracao_api('TBPEDIDO_RATREAMENTO',new.pedido,'A');
    end

    if(new.status_ecommerce is distinct from old.status_ecommerce)then
    begin
        if(updating )then execute procedure spi_integracao_api('TBPEDIDO_STATUS',new.pedido,'A');
    end

    if((new.autorizacao_supervisor is distinct from old.autorizacao_supervisor) or (new.autorizacao_financeiro is distinct from old.autorizacao_financeiro))then
    begin

        --if(new.status = '2')then begin new.status_ecommerce = 4; end
        --if(new.status = '4')then begin new.status_ecommerce = 9; end

        if((new.autorizacao_financeiro = 2 or new.autorizacao_financeiro = 0) and (new.autorizacao_supervisor = 2 or new.autorizacao_supervisor = 0))then
        begin
            new.status_ecommerce = 3;
            execute procedure spi_integracao_api('TBPEDIDO_STATUS',new.pedido,'A');
        end else
        begin
            new.status_ecommerce = 2;
            execute procedure spi_integracao_api('TBPEDIDO_STATUS',new.pedido,'A');
        end
    end

end;

CREATE OR ALTER trigger ttbnfs_embarque_b0u_01 for tbnfs_embarque
active before update position 0
AS
declare variable pedido integer;
begin
    if ( (old.DATA_SAIDA <> new.DATA_SAIDA) or (old.DATA_SAIDA is null)  ) then
    begin
        update TBNFS n set n.SALESFORCE = '0' where n.CONTROLE = old.NFS_CONTROLE;
    end

    --atualiza status embarque ecomerce
    if ( (old.DATA_SAIDA <> new.DATA_SAIDA) or (old.DATA_SAIDA is not null)  ) then
    begin
        for
            select distinct
                p.pedido
            from tbnfs_item i, tbpedido_item pi, tbpedido p
            where i.nfs_controle = new.nfs_controle
            and pi.controle = i.pedido_item_pe_controle
            and p.pedido = i.pedido
            and p.ecommerce = 1
       into
          :pedido
       do begin
          update tbpedido c set c.status_ecommerce = 7 where c.pedido = :pedido;
          execute procedure spi_integracao_api('TBPEDIDO_STATUS',:pedido,'A');
       end
    end

    --atualiza status entrega ecomerce
    if ( (old.data_entrega <> new.data_entrega) or (old.data_entrega is not null)  ) then
    begin
        for
            select distinct
                p.pedido
            from tbnfs_item i, tbpedido_item pi, tbpedido p
            where i.nfs_controle = new.nfs_controle
            and pi.controle = i.pedido_item_pe_controle
            and p.pedido = i.pedido
            and p.ecommerce = 1
       into
          :pedido
       do begin
          update tbpedido c set c.status_ecommerce = 8 where c.pedido = :pedido;
          execute procedure spi_integracao_api('TBPEDIDO_STATUS',:pedido,'A');
       end
    end

end;

CREATE OR ALTER trigger ttbpedido_item_b10u for tbpedido_item
active before update position 10
AS
declare variable ecommerce integer;
declare variable pendentes integer;
declare variable pontos integer;
begin

  if(((new.situacao = 3 and old.situacao = 1) or (new.situacao = 1 and old.situacao = 3)) or (new.valor_total <> old.valor_total))then
  begin
    --validar pontuacao pedidos
    pontos = FN_PONTOS_VALIDAR_PEDIDO(new.pedido, new.controle);
  end


  if(new.situacao <> old.situacao)then
  begin
      ecommerce = coalesce((select first 1 p.ecommerce from tbpedido p where p.pedido = new.pedido),0);

      if(ecommerce = 1 OR ecommerce = 2)then
      begin
         pendentes = coalesce((select count(i.controle) as pendentes from tbpedido_item i where i.pedido = new.pedido and i.situacao = 1),1);
    
         if(pendentes = 0)then
         begin
            update tbpedido c set c.status_ecommerce = 4 where c.pedido = new.pedido;
            execute procedure spi_integracao_api('TBPEDIDO_STATUS',new.pedido,'A');
         end
      end
  end
end;

CREATE OR ALTER trigger ttbpedido00iu for tbpedido
active before insert or update position 0
AS
begin
    if(new.CLASSIFICACAO <> ' ')then
    begin
        new.CLASSIFICACAO = trim(new.CLASSIFICACAO);
    end
    
    new.pedido_cliente = coalesce(new.pedido_cliente,'');
    
    if(inserting)then
    begin
        new.STATUS_ECOMMERCE = 2;
		
		if((new.autorizacao_financeiro = 2 or new.autorizacao_financeiro = 0) and (new.autorizacao_supervisor = 2 or new.autorizacao_supervisor = 0))then
        begin
            new.status_ecommerce = 3;
            execute procedure spi_integracao_api('TBPEDIDO_STATUS',new.pedido,'A');
        end
    end

    if(updating and new.status_ecommerce is distinct from old.status_ecommerce)then
    begin
        execute procedure spi_integracao_api('TBPEDIDO_STATUS',new.pedido,'A');
    end
end;

