SET TERM ^ ;

CREATE OR ALTER trigger ttbpedido_item_processado_b7u for tbpedido_item_processado
active before update position 7
AS
declare variable OLD_TALAO_ID               INTEGER;
declare variable OLD_TALAO_STATUS           INTEGER;
declare variable TALAO_ID INTEGER;
declare variable NEW_TALAO_ID               INTEGER;
declare variable NEW_ESTABELECIMENTO_ID     INTEGER;
declare variable NEW_REMESSA_ID             INTEGER;
declare variable NEW_LOCALIZACAO_ID         INTEGER;
declare variable NEW_PRODUTO_ID             INTEGER;
declare variable NEW_MODELO_ID              INTEGER;
declare variable NEW_TAMANHO                INTEGER;
declare variable NEW_QUANTIDADE             NUMERIC(15,4);
declare variable NEW_QUANTIDADE_ALTERNATIVA NUMERIC(15,4);
declare variable NEW_GP_ID                  INTEGER;
declare variable NEW_UP_ID                  INTEGER;
declare variable NEW_ESTACAO                INTEGER;
declare variable NEW_DENSIDADE              NUMERIC(15,4);
declare variable NEW_ESPESSURA              NUMERIC(15,4);
declare variable NEW_STATUS                 INTEGER;

declare variable NEW_C_ESTABELECIMENTO_ID        INTEGER;
declare variable NEW_C_FAMILIA_ID                INTEGER;
declare variable NEW_C_REMESSA                   INTEGER;
declare variable NEW_C_TALAO                     INTEGER;
declare variable NEW_C_PRODUTO_ID                INTEGER;
declare variable NEW_C_TAMANHO                   INTEGER;
declare variable NEW_C_LOCALIZACAO_ID            INTEGER;
declare variable NEW_C_DENSIDADE                 NUMERIC(15,4);
declare variable NEW_C_ESPESSURA                 NUMERIC(15,4);
declare variable NEW_C_COR_ID                    INTEGER;
declare variable NEW_C_ESTEIRA_ID                INTEGER;
declare variable NEW_C_SETOR_ID                  INTEGER;
declare variable NEW_C_FATOR_CONVERSAO           NUMERIC(15,4);
declare variable NEW_C_QUANTIDADE                NUMERIC(15,4);
declare variable NEW_C_CONSUMO_ML                NUMERIC(15,4);
declare variable NEW_C_CONSUMO_KG                NUMERIC(15,4);
declare variable NEW_C_QUANTIDADE_CONFERENCIA    NUMERIC(15,4);
declare variable NEW_C_DATAHORA_CONFERENCIA      NUMERIC(15,4);
declare variable NEW_C_REQUISICAO_ID             INTEGER;
declare variable NEW_C_DATA                      DATE;
declare variable NEW_C_CCUSTO                    VARCHAR(12);
declare variable NEW_C_QUEBRA                    CHAR(1);
declare variable NEW_C_SEGURANCA                 NUMERIC(15,4);
declare variable NEW_C_TALAO_DETALHE_ID          INTEGER;
declare variable NEW_C_SALDO                     NUMERIC(15,4);
declare variable NEW_C_CONTROLE                  INTEGER;
declare variable NEW_C_QUANTIDADE_CONFERENCIA_ML NUMERIC(15,4);
declare variable NEW_C_SALDO_ML                  NUMERIC(15,4);
declare variable NEW_C_COMPONENTE                CHAR(1);
declare variable NEW_C_QUANTIDADE_SOBRA          NUMERIC(15,4);
declare variable NEW_C_SALDO_BAIXAR              NUMERIC(15,4);
declare variable NEW_C_QUANTIDADE_NECES          NUMERIC(15,4);
declare variable NEW_C_QUANTIDADE_NECES_ALTERN   NUMERIC(15,4);
declare variable TEMPO_SETUP                     NUMERIC(15,4);

BEGIN
    IF ( OLD.REMESSA_ACUMULADO_CONTROLE <> NEW.REMESSA_ACUMULADO_CONTROLE ) THEN
    BEGIN

        SELECT FIRST 1 ID, STATUS
          FROM VWREMESSA_TALAO T
         WHERE T.REMESSA_ID = OLD.REMESSA
           AND T.REMESSA_TALAO_ID = OLD.REMESSA_ACUMULADO_CONTROLE
        INTO
            :OLD_TALAO_ID,
            :OLD_TALAO_STATUS;

        IF ( OLD_TALAO_STATUS < 3 ) THEN
        BEGIN
            DELETE FROM TBREMESSA_TALAO_VINCULO V WHERE V.TALAO_ID = :OLD_TALAO_ID;
    
            UPDATE VWREMESSA_TALAO_DETALHE D
               SET D.QUANTIDADE_PRODUCAO_TMP = 0,
                   D.QUANTIDADE_ALTERN_PRODUCAO_TMP = 0,
                   D.QUANTIDADE_SOBRA_TMP = 0
             WHERE D.REMESSA_ID = OLD.REMESSA
               AND D.REMESSA_TALAO_ID = OLD.REMESSA_ACUMULADO_CONTROLE;

        END

        TALAO_ID = COALESCE((SELECT FIRST 1 ID
                               FROM VWREMESSA_TALAO T
                              WHERE T.REMESSA_ID = NEW.REMESSA
                                AND T.REMESSA_TALAO_ID = NEW.REMESSA_ACUMULADO_CONTROLE),0);

        IF ( TALAO_ID = 0 ) THEN
        BEGIN
            SELECT FIRST 1
                ESTABELECIMENTO_ID,
                REMESSA_ID,
                LOCALIZACAO_ID,
                PRODUTO_ID,
                MODELO_ID,
                TAMANHO,
                QUANTIDADE,
                QUANTIDADE_ALTERNATIVA,
                GP_ID,
                UP_ID,
                ESTACAO,
                DENSIDADE,
                ESPESSURA,
                STATUS
            FROM VWREMESSA_TALAO T
            WHERE T.REMESSA_ID = NEW.REMESSA
              AND T.REMESSA_TALAO_ID = OLD.REMESSA_ACUMULADO_CONTROLE
            INTO
            :NEW_ESTABELECIMENTO_ID    ,
            :NEW_REMESSA_ID            ,
            :NEW_LOCALIZACAO_ID        ,
            :NEW_PRODUTO_ID            ,
            :NEW_MODELO_ID             ,
            :NEW_TAMANHO               ,
            :NEW_QUANTIDADE            ,
            :NEW_QUANTIDADE_ALTERNATIVA,
            :NEW_GP_ID                 ,
            :NEW_UP_ID                 ,
            :NEW_ESTACAO               ,
            :NEW_DENSIDADE             ,
            :NEW_ESPESSURA             ,
            :NEW_STATUS                ;


            if( coalesce((select first 1 r.web from tbremessa r where r.numero = NEW.REMESSA),0) <> 3 )then
            begin
                NEW_MODELO_ID = COALESCE((SELECT FIRST 1 P.MODELO_CODIGO FROM TBPRODUTO P WHERE P.CODIGO = NEW.PRODUTO_CODIGO),NEW_MODELO_ID);
            end else
            begin

            end

            INSERT INTO VWREMESSA_TALAO (
                ESTABELECIMENTO_ID,
                REMESSA_ID,
                REMESSA_TALAO_ID,
                LOCALIZACAO_ID,
                PRODUTO_ID,
                MODELO_ID,
                TAMANHO,
                QUANTIDADE,
                QUANTIDADE_ALTERNATIVA,
                GP_ID,
                UP_ID,
                ESTACAO,
                DENSIDADE,
                ESPESSURA,
                STATUS
            )VALUES (
                :NEW_ESTABELECIMENTO_ID        ,
                :NEW_REMESSA_ID                ,
                 NEW.REMESSA_ACUMULADO_CONTROLE,
                :NEW_LOCALIZACAO_ID            ,
                :NEW_PRODUTO_ID                ,
                :NEW_MODELO_ID                 ,
                :NEW_TAMANHO                   ,
                 NEW.QUANTIDADE_PEDIDO         ,
                 NEW.QUANTIDADE_ALTERN         ,
                :NEW_GP_ID                     ,
                :NEW_UP_ID                     ,
                :NEW_ESTACAO                   ,
                :NEW_DENSIDADE                 ,
                :NEW_ESPESSURA                 ,
                :NEW_STATUS
            ) returning ID into :NEW_TALAO_ID;

            EXECUTE PROCEDURE SPI_PROGRAMACAO2(
                :NEW_ESTABELECIMENTO_ID,
                'A',
                :NEW_GP_ID,
                :NEW_UP_ID,
                :NEW_ESTACAO,
                :NEW_TALAO_ID,
                :NEW_PRODUTO_ID,
                :NEW_TAMANHO,
                NEW.QUANTIDADE_PEDIDO,
                1,
                :NEW_REMESSA_ID,
                CURRENT_DATE,
                0
            );

        
            FOR
                SELECT        
                    ESTABELECIMENTO_ID       ,
                    FAMILIA_ID               ,
                    REMESSA                  ,
                    TALAO                    ,
                    PRODUTO_ID               ,
                    TAMANHO                  ,
                    LOCALIZACAO_ID           ,
                    DENSIDADE                ,
                    ESPESSURA                ,
                    COR_ID                   ,
                    ESTEIRA_ID               ,
                    SETOR_ID                 ,
                    FATOR_CONVERSAO          ,
                    QUANTIDADE               ,
                    CONSUMO_ML               ,
                    CONSUMO_KG               ,
                    QUANTIDADE_CONFERENCIA   ,
                    DATAHORA_CONFERENCIA     ,
                    REQUISICAO_ID            ,
                    DATA                     ,
                    CCUSTO                   ,
                    QUEBRA                   ,
                    SEGURANCA                ,
                    TALAO_DETALHE_ID         ,
                    CONTROLE                 ,
                    QUANTIDADE_CONFERENCIA_ML,
                    COMPONENTE               ,
                    QUANTIDADE_SOBRA         ,
                    SALDO_BAIXAR             ,
                    QUANTIDADE_NECES         ,
                    QUANTIDADE_NECES_ALTERN  
                FROM
                    TBREMESSA_CONSUMO C
                WHERE
                    C.REMESSA = NEW.REMESSA
                AND C.TALAO = OLD.REMESSA_ACUMULADO_CONTROLE
                AND C.TALAO_DETALHE_ID = 0
            INTO
                :NEW_C_ESTABELECIMENTO_ID       ,
                :NEW_C_FAMILIA_ID               ,
                :NEW_C_REMESSA                  ,
                :NEW_C_TALAO                    ,
                :NEW_C_PRODUTO_ID               ,
                :NEW_C_TAMANHO                  ,
                :NEW_C_LOCALIZACAO_ID           ,
                :NEW_C_DENSIDADE                ,
                :NEW_C_ESPESSURA                ,
                :NEW_C_COR_ID                   ,
                :NEW_C_ESTEIRA_ID               ,
                :NEW_C_SETOR_ID                 ,
                :NEW_C_FATOR_CONVERSAO          ,
                :NEW_C_QUANTIDADE               ,
                :NEW_C_CONSUMO_ML               ,
                :NEW_C_CONSUMO_KG               ,
                :NEW_C_QUANTIDADE_CONFERENCIA   ,
                :NEW_C_DATAHORA_CONFERENCIA     ,
                :NEW_C_REQUISICAO_ID            ,
                :NEW_C_DATA                     ,
                :NEW_C_CCUSTO                   ,
                :NEW_C_QUEBRA                   ,
                :NEW_C_SEGURANCA                ,
                :NEW_C_TALAO_DETALHE_ID         ,
                :NEW_C_CONTROLE                 ,
                :NEW_C_QUANTIDADE_CONFERENCIA_ML,
                :NEW_C_COMPONENTE               ,
                :NEW_C_QUANTIDADE_SOBRA         ,
                :NEW_C_SALDO_BAIXAR             ,
                :NEW_C_QUANTIDADE_NECES         ,
                :NEW_C_QUANTIDADE_NECES_ALTERN  
            DO
            BEGIN
                INSERT INTO TBREMESSA_CONSUMO (
                    ESTABELECIMENTO_ID,
                    FAMILIA_ID,
                    REMESSA,
                    TALAO,
                    PRODUTO_ID,
                    TAMANHO,
                    LOCALIZACAO_ID,
                    DENSIDADE,
                    ESPESSURA,
                    COR_ID,
                    ESTEIRA_ID,
                    SETOR_ID,
                    FATOR_CONVERSAO,
                    QUANTIDADE,
                    CONSUMO_ML,
                    CONSUMO_KG,
                    QUANTIDADE_CONFERENCIA,
                    DATAHORA_CONFERENCIA,
                    REQUISICAO_ID,
                    DATA,
                    CCUSTO,
                    QUEBRA,
                    SEGURANCA,
                    TALAO_DETALHE_ID,
                    CONTROLE,
                    QUANTIDADE_CONFERENCIA_ML,
                    COMPONENTE,
                    QUANTIDADE_SOBRA,
                    SALDO_BAIXAR,
                    QUANTIDADE_NECES,
                    QUANTIDADE_NECES_ALTERN
                ) VALUES (
                    :NEW_C_ESTABELECIMENTO_ID       ,
                    :NEW_C_FAMILIA_ID               ,
                    :NEW_C_REMESSA                  ,
                     NEW.REMESSA_ACUMULADO_CONTROLE ,
                    :NEW_C_PRODUTO_ID               ,
                    :NEW_C_TAMANHO                  ,
                    :NEW_C_LOCALIZACAO_ID           ,
                    :NEW_C_DENSIDADE                ,
                    :NEW_C_ESPESSURA                ,
                    :NEW_C_COR_ID                   ,
                    :NEW_C_ESTEIRA_ID               ,
                    :NEW_C_SETOR_ID                 ,
                    :NEW_C_FATOR_CONVERSAO          ,
                    :NEW_C_QUANTIDADE               ,
                    :NEW_C_CONSUMO_ML               ,
                    :NEW_C_CONSUMO_KG               ,
                    :NEW_C_QUANTIDADE_CONFERENCIA   ,
                    :NEW_C_DATAHORA_CONFERENCIA     ,
                    :NEW_C_REQUISICAO_ID            ,
                    :NEW_C_DATA                     ,
                    :NEW_C_CCUSTO                   ,
                    :NEW_C_QUEBRA                   ,
                    :NEW_C_SEGURANCA                ,
                    :NEW_C_TALAO_DETALHE_ID         ,
                    :NEW_C_CONTROLE                 ,
                    :NEW_C_QUANTIDADE_CONFERENCIA_ML,
                    :NEW_C_COMPONENTE               ,
                    :NEW_C_QUANTIDADE_SOBRA         ,
                    :NEW_C_SALDO_BAIXAR             ,
                    :NEW_C_QUANTIDADE_NECES         ,
                    :NEW_C_QUANTIDADE_NECES_ALTERN  
                );
            END

        END
        ELSE
        BEGIN
            UPDATE VWREMESSA_TALAO T
               SET T.QUANTIDADE = T.QUANTIDADE + NEW.QUANTIDADE_PEDIDO,
                   T.QUANTIDADE_ALTERNATIVA = T.QUANTIDADE_ALTERNATIVA + NEW.QUANTIDADE_ALTERN
             WHERE T.ID = :TALAO_ID;
        END
        

        UPDATE VWREMESSA_CONSUMO C
           SET C.REMESSA_TALAO_ID = NEW.REMESSA_ACUMULADO_CONTROLE
         WHERE C.REMESSA_TALAO_DETALHE_ID = OLD.CONTROLE;

        UPDATE TBREMESSA_CONSUMO_VINCULO V
           SET V.REMESSA_TALAO_ID = NEW.REMESSA_ACUMULADO_CONTROLE
         WHERE V.REMESSA_TALAO_DETALHE_ID = OLD.CONTROLE;

        NEW.TALAO_DESMEMBRAMENTO = OLD.REMESSA_ACUMULADO_CONTROLE;

        EXECUTE PROCEDURE SPI_HISTORICO (
            'TBREMESSA',
            NEW.REMESSA,
            'DETALHAMENTO: ' || NEW.CONTROLE || ' DESMEMBRADO DO TALAO: ' || OLD.REMESSA_ACUMULADO_CONTROLE || ' PARA: ' || NEW.REMESSA_ACUMULADO_CONTROLE
        );

--        EXECUTE PROCEDURE SPI_EMAIL('emersoncoelho@delfa.com.br','Desmembramento Realizado REMESSA: ' || COALESCE((SELECT FIRST 1 REMESSA FROM VWREMESSA R WHERE R.REMESSA_ID = NEW.REMESSA),'') || ' PARA: ' || NEW.REMESSA_ACUMULADO_CONTROLE,'
--        REMESSA: ' || COALESCE((SELECT FIRST 1 REMESSA FROM VWREMESSA R WHERE R.REMESSA_ID = NEW.REMESSA),'') || '
--        REMESSA_ID: ' || NEW.REMESSA || '<br/>
--        DETALHAMENTO: ' || NEW.CONTROLE || ' DESMEMBRADO DO TALAO: ' || OLD.REMESSA_ACUMULADO_CONTROLE || ' PARA: ' || NEW.REMESSA_ACUMULADO_CONTROLE
--        );
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPU_DESMEMBRAR_TALAO_ETAPA2 (
    I_REMESSA_ID integer,
    I_REMESSA_TALAO_ID integer)
as
declare variable V_REMESSA_ID integer;
declare variable MAX_ID integer;
declare variable V_REMESSA_TALAO_DETALHE_ID integer;
begin

        V_REMESSA_ID = ( SELECT FIRST 1 V.REMESSA_ID
                          FROM VWREMESSA_TALAO_DETALHE D,
                               VWREMESSA_CONSUMO C,
                               TBREMESSA_CONSUMO_VINCULO V
                         WHERE D.REMESSA_ID = :I_REMESSA_ID
                           AND D.REMESSA_TALAO_ID = :I_REMESSA_TALAO_ID
                           AND C.REMESSA_TALAO_DETALHE_ID = D.ID
                           AND V.CONSUMO_ID = C.ID);

        MAX_ID = (SELECT MAX(T.REMESSA_TALAO_ID) MAX_ID
                    FROM VWREMESSA_TALAO T
                   WHERE T.REMESSA_ID = :V_REMESSA_ID)+1;

        FOR
            SELECT V.REMESSA_TALAO_DETALHE_ID
              FROM VWREMESSA_TALAO_DETALHE D,
                   VWREMESSA_CONSUMO C,
                   TBREMESSA_CONSUMO_VINCULO V
             WHERE D.REMESSA_ID = :I_REMESSA_ID
               AND D.REMESSA_TALAO_ID = :I_REMESSA_TALAO_ID
               AND C.REMESSA_TALAO_DETALHE_ID = D.ID
               AND V.CONSUMO_ID = C.ID
        INTO
            :V_REMESSA_TALAO_DETALHE_ID
        DO
        BEGIN

            UPDATE VWREMESSA_TALAO_DETALHE T
               SET T.REMESSA_TALAO_ID = :MAX_ID
             WHERE T.ID = :V_REMESSA_TALAO_DETALHE_ID;
        END

        if(:V_REMESSA_ID > 0 and :MAX_ID > 0)then
        begin
            execute procedure SPU_DESMEMBRAR_TALAO_ETAPA2(:V_REMESSA_ID, :MAX_ID);
        end
end
^

SET TERM ; ^



SET TERM ^ ;

CREATE OR ALTER trigger ttbpedido_item_processado_b13u for tbpedido_item_processado
active before update position 13
AS
declare variable meta integer;
begin

  if(new.data_producao is distinct from old.data_producao)then
  begin

        meta = coalesce((
            select sum(p.previsao) from
            TBPROGRAMACAO_SETOR p
            where p.data = new.data_producao
            and p.estabelecimento_codigo = new.estabelecimento_codigo
            and p.esteira_codigo = new.esteira_producao
        ),0);


        if(meta = 0 AND NEW.esteira_producao > 0)then
        begin
            IF(fn_parametro('TBGP.BLOQUEAR_SEM_META', NEW.esteira_producao) = 1)THEN
            BEGIN
                exception "..." 'GRUPO DE PRODUCAO SEM PREVISAO DE PRODUCAO DEFINIDA, ENTRE EM CONTATO COM O PPCP.';
            END
        end

  end

end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbprogramacao_b14u for tbprogramacao
active before update position 14
AS
begin

  IF(coalesce(NEW.ferramenta_id,0) = 0 AND OLD.status = '3' AND (NEW.status = '1' or NEW.status = '2' or NEW.status = '6'))THEN
  BEGIN
     --exception "..." 'TALAO JA FOI FINALIAZDO, STATUS NAO PODE SER ALTERADO PARA '||IIF(NEW.status = '1', 'PAUSADO', IIF(NEW.status = '2', 'EM ANDAMENTO', IIF(NEW.status = '6', 'ENCERRADO', 'INDEFINIDO')));
  END

end
^

SET TERM ; ^


CREATE OR ALTER VIEW VWESTOQUE_MINIMO(
    ID,
    ESTABELECIMENTO_ID,
    PRODUTO_ID,
    LOCALIZACAO_ID,
    FAMILIA_ID,
    PRODUTO_DESCRICAO,
    SEGURANCA,
    PONTO_REPOSICAO,
    TIPO_REPOSICAO,
    TAMANHO,
    ESTOQUE_MIN,
    ESTOQUE_MAX,
    TAM_DESCRICAO,
    HABILITA_KANBAN,
    KANBAN_LOCALIZACAO_ID)
AS
SELECT CAST(A.ID||LPAD(00,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 00 TAMANHO, A.QUANTIDADE,  A.ESTOQUE_MAX,                                                 '' TAM_DESCRICAO, A.HABILITA_KANBAN, A.KANBAN_LOCALIZACAO_ID FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.QUANTIDADE > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO = 0 UNION
SELECT CAST(A.ID||LPAD(01,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 01 TAMANHO,        A.T01,          A.M01, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,01)), A.HABILITA_KANBAN, A.KANBAN_LOCALIZACAO_ID FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T01        > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION
SELECT CAST(A.ID||LPAD(02,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 02 TAMANHO,        A.T02,          A.M02, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,02)), A.HABILITA_KANBAN, A.KANBAN_LOCALIZACAO_ID FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T02        > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION
SELECT CAST(A.ID||LPAD(03,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 03 TAMANHO,        A.T03,          A.M03, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,03)), A.HABILITA_KANBAN, A.KANBAN_LOCALIZACAO_ID FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T03        > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION
SELECT CAST(A.ID||LPAD(04,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 04 TAMANHO,        A.T04,          A.M04, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,04)), A.HABILITA_KANBAN, A.KANBAN_LOCALIZACAO_ID FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T04        > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION
SELECT CAST(A.ID||LPAD(05,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 05 TAMANHO,        A.T05,          A.M05, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,05)), A.HABILITA_KANBAN, A.KANBAN_LOCALIZACAO_ID FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T05        > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION
SELECT CAST(A.ID||LPAD(06,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 06 TAMANHO,        A.T06,          A.M06, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,06)), A.HABILITA_KANBAN, A.KANBAN_LOCALIZACAO_ID FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T06        > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION
SELECT CAST(A.ID||LPAD(07,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 07 TAMANHO,        A.T07,          A.M07, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,07)), A.HABILITA_KANBAN, A.KANBAN_LOCALIZACAO_ID FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T07        > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION
SELECT CAST(A.ID||LPAD(08,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 08 TAMANHO,        A.T08,          A.M08, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,08)), A.HABILITA_KANBAN, A.KANBAN_LOCALIZACAO_ID FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T08        > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION
SELECT CAST(A.ID||LPAD(09,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 09 TAMANHO,        A.T09,          A.M09, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,09)), A.HABILITA_KANBAN, A.KANBAN_LOCALIZACAO_ID FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T09        > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION
SELECT CAST(A.ID||LPAD(10,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 10 TAMANHO,        A.T10,          A.M10, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,10)), A.HABILITA_KANBAN, A.KANBAN_LOCALIZACAO_ID FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T10        > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION
SELECT CAST(A.ID||LPAD(11,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 11 TAMANHO,        A.T11,          A.M11, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,11)), A.HABILITA_KANBAN, A.KANBAN_LOCALIZACAO_ID FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T11        > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION
SELECT CAST(A.ID||LPAD(12,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 12 TAMANHO,        A.T12,          A.M12, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,12)), A.HABILITA_KANBAN, A.KANBAN_LOCALIZACAO_ID FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T12        > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION
SELECT CAST(A.ID||LPAD(13,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 13 TAMANHO,        A.T13,          A.M13, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,13)), A.HABILITA_KANBAN, A.KANBAN_LOCALIZACAO_ID FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T13        > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION
SELECT CAST(A.ID||LPAD(14,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 14 TAMANHO,        A.T14,          A.M14, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,14)), A.HABILITA_KANBAN, A.KANBAN_LOCALIZACAO_ID FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T14        > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION
SELECT CAST(A.ID||LPAD(15,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 15 TAMANHO,        A.T15,          A.M15, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,15)), A.HABILITA_KANBAN, A.KANBAN_LOCALIZACAO_ID FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T15        > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION
SELECT CAST(A.ID||LPAD(16,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 16 TAMANHO,        A.T16,          A.M16, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,16)), A.HABILITA_KANBAN, A.KANBAN_LOCALIZACAO_ID FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T16        > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION
SELECT CAST(A.ID||LPAD(17,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 17 TAMANHO,        A.T17,          A.M17, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,17)), A.HABILITA_KANBAN, A.KANBAN_LOCALIZACAO_ID FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T17        > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION
SELECT CAST(A.ID||LPAD(18,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 18 TAMANHO,        A.T18,          A.M18, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,18)), A.HABILITA_KANBAN, A.KANBAN_LOCALIZACAO_ID FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T18        > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION
SELECT CAST(A.ID||LPAD(19,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 19 TAMANHO,        A.T19,          A.M19, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,19)), A.HABILITA_KANBAN, A.KANBAN_LOCALIZACAO_ID FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T19        > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0 UNION
SELECT CAST(A.ID||LPAD(20,2,0) AS INTEGER), A.ESTABELECIMENTO_CODIGO, A.PRODUTO_CODIGO, A.LOCALIZACAO_CODIGO, P.FAMILIA_CODIGO, P.DESCRICAO, A.SEGURANCA, A.PONTO_REPOSICAO, A.TIPO_REPOSICAO, 20 TAMANHO,        A.T20,          A.M20, (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO,20)), A.HABILITA_KANBAN, A.KANBAN_LOCALIZACAO_ID FROM TBESTOQUE_MINIMO A LEFT JOIN TBPRODUTO P ON P.CODIGO = A.PRODUTO_CODIGO WHERE A.T20        > 0 AND P.STATUS = '1' AND P.GRADE_CODIGO > 0
;


