SET TERM ^ ;

CREATE OR ALTER trigger ttbpedido_item_processado_b5u for tbpedido_item_processado
active before update position 5
AS
Declare variable LOCALIZACAO_PROCESSO Integer;
Declare variable ESTOQUE_ID Integer;
Declare variable ESTOQUE_ID_ENTRADA Integer;
declare variable ESTOQUE_ID_ENTRADA_CORTE Integer;
declare variable CORTE Integer;
Declare variable OBSERVACAO VARCHAR(100);
Declare variable DATA DATE;
Begin

  -- Registra no estoque
  If (NEW.FAMILIA_CODIGO > 0) then
      BEGIN

        if ((Old.Situacao = 2 and New.Situacao = 3) or
            (Old.Situacao = 2 and New.Situacao = 6) or
            (Old.Situacao = 6 and New.Situacao = 2) or
            (Old.Situacao = 3 and New.Situacao = 2)) Then
            Begin

            LOCALIZACAO_PROCESSO = Coalesce((Select First 1 Localizacao_Processo From TbFamilia_Ficha
                                              Where Familia_Codigo = Old.Familia_Codigo
                                                and Estabelecimento_Codigo = Old.Estabelecimento_Codigo),0);

            /*
            ESTOQUE_ID_ENTRADA = Coalesce((Select First 1 ESTOQUE_ID From TbREMESSA_ITEM_PROCESSADO
                                              Where Estabelecimento_Codigo = Old.Estabelecimento_Codigo
                                                and Familia_Codigo = Old.Familia_Codigo
                                                and Remessa  = Old.Remessa
                                                and Controle = Old.Remessa_Acumulado_Controle),0);
            */
               SELECT FIRST 1
                    ESTOQUE_ID,
                    COALESCE((SELECT FIRST 1 P.ESTOQUE_ID FROM TBPEDIDO_ITEM_PROCESSADO P WHERE P.CONTROLE = V.REMESSA_TALAO_DETALHE_ID),0) ESTOQUE_ID_CORTE,
                    IIF(COALESCE(R.WEB,0) <> 3, 0, 1) AS CORTE
                FROM TBREMESSA_ITEM_PROCESSADO J
                 LEFT JOIN TBREMESSA_CONSUMO C ON C.REMESSA = J.REMESSA AND C.TALAO = J.CONTROLE
                 LEFT JOIN TBREMESSA_CONSUMO_VINCULO V ON V.CONSUMO_ID = C.ID
                 LEFT JOIN TBREMESSA R ON R.NUMERO = V.REMESSA_ID
               WHERE J.ESTABELECIMENTO_CODIGO = OLD.ESTABELECIMENTO_CODIGO
                 AND J.FAMILIA_CODIGO = OLD.FAMILIA_CODIGO
                 AND J.REMESSA  = OLD.REMESSA
                 AND J.CONTROLE = OLD.REMESSA_ACUMULADO_CONTROLE
               INTO :ESTOQUE_ID_ENTRADA, :ESTOQUE_ID_ENTRADA_CORTE, :CORTE;

               ESTOQUE_ID_ENTRADA = COALESCE(ESTOQUE_ID_ENTRADA,0);
               ESTOQUE_ID_ENTRADA_CORTE = COALESCE(ESTOQUE_ID_ENTRADA_CORTE,0);
               CORTE = COALESCE(CORTE,0);

               IF(CORTE = 1)THEN
               BEGIN
                    ESTOQUE_ID_ENTRADA = ESTOQUE_ID_ENTRADA_CORTE;
                    LOCALIZACAO_PROCESSO = COALESCE((SELECT FIRST 1 I.LOCALIZACAO_CODIGO FROM TBESTOQUE_TRANSACAO_ITEM I WHERE I.CONTROLE = :ESTOQUE_ID_ENTRADA_CORTE),0);
               END

                If (Old.Situacao = 2 and New.Situacao = 3) Then
                    Begin
                     DATA = NEW.DATA_EXPEDICAO;
                     OBSERVACAO = '';
                    End
                If (Old.Situacao = 2 and New.Situacao = 6) Then
                    Begin
                     DATA = Current_Date;--NEW.DATA_LIBERACAO;
                     OBSERVACAO = 'TALAO ENCERRADO. ITEM BAIXADO DO WIP';
                    End
                If (Old.Situacao = 3 and New.Situacao = 2) Then
                    Begin
                     DATA = old.DATA_EXPEDICAO;
                     OBSERVACAO = 'ENTRADA EXCLUIDA NO DPA. ITEM DEVOLVIDO AO WIP';
                    End
                If (Old.Situacao = 6 and New.Situacao = 2) Then
                    Begin
                     DATA = NEW.DATA_LIBERACAO;
                     OBSERVACAO = 'ENCERRAMENTO DO TALAO DESFEITO. ITEM DEVOLVIDO AO WIP';
                    End

            if (LOCALIZACAO_PROCESSO > 0 and ESTOQUE_ID_ENTRADA > 0) then
                Begin

                --Baixa Estoque em Processo
                IF ((OLD.SITUACAO = 2 AND NEW.SITUACAO = 3) OR
                    (OLD.SITUACAO = 2 AND NEW.SITUACAO = 6)) THEN
                    BEGIN
                     --if (Coalesce(OLD.ESTOQUE_ID,0) = 0) then
                     --   Begin
                        ESTOQUE_ID = GEN_ID(GTBESTOQUE_TRANSACAO_ITEM,1);
                     --   if (:ESTOQUE_ID > 0) Then
                     --       BEGIN

                                EXECUTE PROCEDURE SPU_ESTOQUE_SALDO4 (
                                NEW.ESTABELECIMENTO_CODIGO,:LOCALIZACAO_PROCESSO,
                                NEW.PRODUTO_CODIGO, 'S',:DATA,NEW.QUANTIDADE_PRODUCAO,
                                IIF(NEW.TAMANHO = 1,NEW.QUANTIDADE_PRODUCAO,0),
                                IIF(NEW.TAMANHO = 2,NEW.QUANTIDADE_PRODUCAO,0),
                                IIF(NEW.TAMANHO = 3,NEW.QUANTIDADE_PRODUCAO,0),
                                IIF(NEW.TAMANHO = 4,NEW.QUANTIDADE_PRODUCAO,0),
                                IIF(NEW.TAMANHO = 5,NEW.QUANTIDADE_PRODUCAO,0),
                                IIF(NEW.TAMANHO = 6,NEW.QUANTIDADE_PRODUCAO,0),
                                IIF(NEW.TAMANHO = 7,NEW.QUANTIDADE_PRODUCAO,0),
                                IIF(NEW.TAMANHO = 8,NEW.QUANTIDADE_PRODUCAO,0),
                                IIF(NEW.TAMANHO = 9,NEW.QUANTIDADE_PRODUCAO,0),
                                IIF(NEW.TAMANHO =10,NEW.QUANTIDADE_PRODUCAO,0),
                                IIF(NEW.TAMANHO =11,NEW.QUANTIDADE_PRODUCAO,0),
                                IIF(NEW.TAMANHO =12,NEW.QUANTIDADE_PRODUCAO,0),
                                IIF(NEW.TAMANHO =13,NEW.QUANTIDADE_PRODUCAO,0),
                                IIF(NEW.TAMANHO =14,NEW.QUANTIDADE_PRODUCAO,0),
                                IIF(NEW.TAMANHO =15,NEW.QUANTIDADE_PRODUCAO,0),
                                IIF(NEW.TAMANHO =16,NEW.QUANTIDADE_PRODUCAO,0),
                                IIF(NEW.TAMANHO =17,NEW.QUANTIDADE_PRODUCAO,0),
                                IIF(NEW.TAMANHO =18,NEW.QUANTIDADE_PRODUCAO,0),
                                IIF(NEW.TAMANHO =19,NEW.QUANTIDADE_PRODUCAO,0),
                                IIF(NEW.TAMANHO =20,NEW.QUANTIDADE_PRODUCAO,0),
                                :ESTOQUE_ID,NEW.REMESSA,0,0,'WPS',OLD.REMESSA_ACUMULADO_CONTROLE,0,0,0,0,
                                Current_Date,0,null,:OBSERVACAO,'0',0,0,0,0);
                                NEW.ESTOQUE_ID = :ESTOQUE_ID;

                        --    End ELSE
                        --    Begin
                        --    NEW.ESTOQUE_ID = -1;
                        --    End
                      END ELSE

                    --Estorna Baixa do Estoque em Processo
                    If ((Old.Situacao = 6 and New.Situacao = 2) or
                        (Old.Situacao = 3 and New.Situacao = 2)) Then
                         BEGIN
                            /*
                                If (Old.Estoque_Id > 0) Then
                                Begin
                                    NEW.ESTOQUE_ID = -2;
        
                                    DELETE FROM TbEstoque_Transacao_Item
                                    WHERE  TRANSACAO_CONTROLE    = 0
                                    AND  CONTROLE              = OLD.ESTOQUE_ID
                                    AND ESTABELECIMENTO_CODIGO = OLD.ESTABELECIMENTO_CODIGO
                                    AND LOCALIZACAO_CODIGO     = :LOCALIZACAO_PROCESSO
                                  --AND DATA                   = :DATA_1
                                    AND PRODUTO_CODIGO         = OLD.PRODUTO_CODIGO;
        
                                --EXECUTE PROCEDURE SPD_ESTOQUE_TRANSACAO2 (
                                --OLD.ESTABELECIMENTO_CODIGO,:LOCALIZACAO_PROCESSO, :DATA,
                                --OLD.PRODUTO_CODIGO,0,0,0,0,0,OLD.ESTOQUE_ID,0);
                                End
                            */
                            ESTOQUE_ID = GEN_ID(GTBESTOQUE_TRANSACAO_ITEM, 1);
                            EXECUTE PROCEDURE SPU_ESTOQUE_SALDO4 (
                            NEW.ESTABELECIMENTO_CODIGO,:LOCALIZACAO_PROCESSO,
                            NEW.PRODUTO_CODIGO, 'E',:DATA,NEW.QUANTIDADE_PRODUCAO,
                            IIF(NEW.TAMANHO = 1,NEW.QUANTIDADE_PRODUCAO,0),
                            IIF(NEW.TAMANHO = 2,NEW.QUANTIDADE_PRODUCAO,0),
                            IIF(NEW.TAMANHO = 3,NEW.QUANTIDADE_PRODUCAO,0),
                            IIF(NEW.TAMANHO = 4,NEW.QUANTIDADE_PRODUCAO,0),
                            IIF(NEW.TAMANHO = 5,NEW.QUANTIDADE_PRODUCAO,0),
                            IIF(NEW.TAMANHO = 6,NEW.QUANTIDADE_PRODUCAO,0),
                            IIF(NEW.TAMANHO = 7,NEW.QUANTIDADE_PRODUCAO,0),
                            IIF(NEW.TAMANHO = 8,NEW.QUANTIDADE_PRODUCAO,0),
                            IIF(NEW.TAMANHO = 9,NEW.QUANTIDADE_PRODUCAO,0),
                            IIF(NEW.TAMANHO =10,NEW.QUANTIDADE_PRODUCAO,0),
                            IIF(NEW.TAMANHO =11,NEW.QUANTIDADE_PRODUCAO,0),
                            IIF(NEW.TAMANHO =12,NEW.QUANTIDADE_PRODUCAO,0),
                            IIF(NEW.TAMANHO =13,NEW.QUANTIDADE_PRODUCAO,0),
                            IIF(NEW.TAMANHO =14,NEW.QUANTIDADE_PRODUCAO,0),
                            IIF(NEW.TAMANHO =15,NEW.QUANTIDADE_PRODUCAO,0),
                            IIF(NEW.TAMANHO =16,NEW.QUANTIDADE_PRODUCAO,0),
                            IIF(NEW.TAMANHO =17,NEW.QUANTIDADE_PRODUCAO,0),
                            IIF(NEW.TAMANHO =18,NEW.QUANTIDADE_PRODUCAO,0),
                            IIF(NEW.TAMANHO =19,NEW.QUANTIDADE_PRODUCAO,0),
                            IIF(NEW.TAMANHO =20,NEW.QUANTIDADE_PRODUCAO,0),
                            :ESTOQUE_ID,NEW.REMESSA,0,0,'WPE',OLD.REMESSA_ACUMULADO_CONTROLE,0,0,0,0,
                            Current_Date,0,null,:OBSERVACAO,'0',0,0,0,0);
                            NEW.ESTOQUE_ID_ESTORNO = :ESTOQUE_ID;

                         END
                   End --if (LOCALIZACAO_PROCESSO > 0 and ESTOQUE_ID_ENTRADA > 0) then
             End -- if ((Old.Situacao = 2 and New.Situacao = 3) or ...
      End --If (NEW.FAMILIA_CODIGO > 0) then
End
^

SET TERM ; ^

