
CREATE OR ALTER trigger ttbremessa_item_processado_b1i for tbremessa_item_processado
active before insert position 1
AS
begin

end;

CREATE OR ALTER procedure spi_remessa_consumo_matriz_v7 (
    i_remessa_id integer,
    i_remessa_talao_id integer)
as
declare variable estabelecimento_id integer;
declare variable remessa_id integer;
declare variable remessa_talao_id integer;
declare variable densidade smallint;
declare variable espessura numeric(18,2);
declare variable talao_quantidade numeric(18,5);
declare variable consumo_medio numeric(18,5);
declare variable familia_id integer;
declare variable produto_id integer;
declare variable modelo_id integer;
declare variable cor_id integer;
declare variable tamanho smallint;
declare variable fator_divisor numeric(18,8);
declare variable fator_multiplicador numeric(18,1);
declare variable localizacao_id integer;
declare variable um_alternativa varchar(12);
declare variable quantidade numeric(18,4);
declare variable quanitdade_alternativa numeric(18,4);
declare variable perfil_id integer;
declare variable colecao varchar(10);
declare variable consumo_produto_status integer;
begin

end;

CREATE OR ALTER procedure spi_remessa_talao_extra (
    i_remessa_id integer)
as
declare variable estabelecimento_id integer;
declare variable familia_id integer;
declare variable remessa_id integer;
declare variable remessa_talao_id integer;
declare variable matriz_id integer;
declare variable modelo_id integer;
declare variable cor_id integer;
declare variable produto_id integer;
declare variable tamanho integer;
declare variable status varchar(4);
declare variable perfil_sku varchar(10);
declare variable gp_id integer;
declare variable quantidade_total_taloes numeric(18,4);
declare variable percentual numeric(18,4);
declare variable quantidade numeric(18,4);
BEGIN

END;

CREATE OR ALTER trigger ttbremessa_item_processado_b2i for tbremessa_item_processado
active before insert or update position 2
AS
declare variable LINHA_ID INTEGER;
declare variable COLECAO INTEGER;
declare variable DENSIDADE NUMERIC(15,4);
declare variable ESPESSURA NUMERIC(15,4);
declare variable MATRIZ_ID INTEGER;
declare variable REMESSA_WEB VARCHAR(10);
begin

end;

ALTER TABLE TBREMESSA_ITEM_PROCESSADO ADD OLD_PERFIL VARCHAR(10);
update TBREMESSA_ITEM_PROCESSADO set OLD_PERFIL = PERFIL;
ALTER TABLE TBREMESSA_ITEM_PROCESSADO DROP PERFIL;
ALTER TABLE TBREMESSA_ITEM_PROCESSADO ADD PERFIL VARCHAR(10) DEFAULT '';
update TBREMESSA_ITEM_PROCESSADO set PERFIL = OLD_PERFIL;
ALTER TABLE TBREMESSA_ITEM_PROCESSADO DROP OLD_PERFIL;

CREATE OR ALTER trigger ttbremessa_item_processado_b1i for tbremessa_item_processado
active before insert position 1
AS
begin

  IF ((TRIM(NEW.PERFIL) = '') OR (NEW.PERFIL IS NULL)) THEN
      BEGIN
      NEW.PERFIL = COALESCE((SELECT FIRST 1 M.PERFIL FROM TBPRODUTO P, TBMODELO_BLOQUEIO M
                              WHERE P.CODIGO    = NEW.PRODUTO_CODIGO
                                AND M.MODELO_ID = P.MODELO_CODIGO
                                AND M.COR_ID    = P.COR_CODIGO
                                AND M.TAMANHO   = NEW.TAMANHO),'');
      END
end;

CREATE OR ALTER procedure spi_remessa_consumo_matriz_v7 (
    i_remessa_id integer,
    i_remessa_talao_id integer)
as
declare variable estabelecimento_id integer;
declare variable remessa_id integer;
declare variable remessa_talao_id integer;
declare variable densidade smallint;
declare variable espessura numeric(18,2);
declare variable talao_quantidade numeric(18,5);
declare variable consumo_medio numeric(18,5);
declare variable familia_id integer;
declare variable produto_id integer;
declare variable modelo_id integer;
declare variable cor_id integer;
declare variable tamanho smallint;
declare variable fator_divisor numeric(18,8);
declare variable fator_multiplicador numeric(18,1);
declare variable localizacao_id integer;
declare variable um_alternativa varchar(12);
declare variable quantidade numeric(18,4);
declare variable quanitdade_alternativa numeric(18,4);
declare variable perfil_id integer;
declare variable colecao varchar(10);
declare variable consumo_produto_status integer;
begin

    PERFIL_ID = COALESCE((SELECT FIRST 1 P.CONTROLE FROM TBPERFIL P WHERE P.TABELA = 'SKU' AND P.ID = (
        SELECT FIRST 1 T.PERFIL
          FROM TBREMESSA_ITEM_PROCESSADO T
         WHERE T.REMESSA = :I_REMESSA_ID
           AND T.CONTROLE = :I_REMESSA_TALAO_ID)),0);
    COLECAO = COALESCE((SELECT FIRST 1 VALOR FROM TBPARAMETRO_DETALHE D WHERE D.PARAMETRO_ID = 523 AND D.TABELA_ID = :PERFIL_ID),1);

    FOR
        SELECT
            ESTABELECIMENTO_ID,
            REMESSA_ID,
            REMESSA_TALAO_ID,
            DENSIDADE,
            ESPESSURA,
            TALAO_QUANTIDADE,
            CONSUMO_MEDIO,
            FAMILIA_ID,
            PRODUTO_ID,
            MODELO_ID,
            COR_ID,
            TAMANHO,
            FATOR_DIVISOR,
            FATOR_MULTIPLICADOR,
            LOCALIZACAO_ID,
            UM_ALTERNATIVA,
            round(CAST(((CONSUMO_MEDIO * FATOR_MULTIPLICADOR) / FATOR_DIVISOR) AS NUMERIC(15,4))/COLECAO_DIVISOR,1) QUANTIDADE,
            IIF(TRIM(UM_ALTERNATIVA) = 'M',CAST((CONSUMO_MEDIO * FATOR_MULTIPLICADOR) AS NUMERIC(15,4)),0)/COLECAO_DIVISOR QUANITDADE_ALTERNATIVA,
            CONSUMO_PRODUTO_STATUS
        
        FROM (
            SELECT
                T.ESTABELECIMENTO_ID,
                T.REMESSA_ID, 
                T.REMESSA_TALAO_ID,
                T.DENSIDADE,
                T.ESPESSURA,
                (T.QUANTIDADE + T.QUANTIDADE_SOBRA) TALAO_QUANTIDADE,
                T.CONSUMO_MEDIO,
                C.CONSUMO_FAMILIA_ID FAMILIA_ID,
                C.CONSUMO_PRODUTO_ID PRODUTO_ID,
                C.CONSUMO_MODELO_ID MODELO_ID,
                C.CONSUMO_COR_ID COR_ID,
                C.CONSUMO_TAMANHO TAMANHO,
                C.CONSUMO_QUANTIDADE QUANTIDADE,
                C.CONSUMO_FATOR_DIVISOR FATOR_DIVISOR, /*CONVERSAO*/
                C.CONSUMO_FATOR_MULTIPLICADOR FATOR_MULTIPLICADOR, /*MATRIZ*/
                C.CONSUMO_LOCALIZACAO_ID LOCALIZACAO_ID,
                C.CONSUMO_UM_ALTERNATIVA UM_ALTERNATIVA,
                IIF(:COLECAO = '3' AND (T.REMESSA_TALAO_ID BETWEEN 0001 AND 0999 OR T.REMESSA_TALAO_ID BETWEEN 7001 AND 9999 OR T.REMESSA_TALAO_ID BETWEEN 70001 AND 79999),1,1) COLECAO_DIVISOR,
                c.CONSUMO_PRODUTO_STATUS
            FROM
                VWREMESSA_TALAO T
                LEFT JOIN TBPRODUTO P ON P.CODIGO = T.PRODUTO_ID
                LEFT JOIN VWMODELO_FICHA_CONSUMO C
                       ON C.MODELO_ID = T.MODELO_ID
                      AND C.TAMANHO = T.TAMANHO
                      AND (C.COR_ID = P.COR_CODIGO OR C.COR_ID IS NULL),
                TBFAMILIA_MODELO_ALOCACAO A
            WHERE
                T.REMESSA_ID = :I_REMESSA_ID
            AND T.REMESSA_TALAO_ID = :I_REMESSA_TALAO_ID
            AND C.HABILITA_GERAR_CONSUMO = '1'           
            --AND C.CONSUMO_PRODUTO_STATUS = '1'
            AND A.FAMILIA_ID = C.FAMILIA_ID
            AND A.FAMILIA_MODELO_ID = C.CONSUMO_FAMILIA_ID
            AND
                IIF ( :COLECAO = '1',TRUE,
                IIF(  :COLECAO = '3',
                --    IIF( T.REMESSA_TALAO_ID BETWEEN 0001 AND 0999 OR T.REMESSA_TALAO_ID BETWEEN 7001 AND 9999 OR T.REMESSA_TALAO_ID BETWEEN 70001 AND 79999 ,C.TIPO = '1',
                    IIF( T.REMESSA_TALAO_ID BETWEEN 6001 AND 6999 OR T.REMESSA_TALAO_ID BETWEEN 60001 AND 69999 , C.TIPO = '2', FALSE)/*)*/,FALSE
                )
                )


            UNION ALL

            SELECT FIRST 1
                T.ESTABELECIMENTO_ID,
                T.REMESSA_ID, 
                T.REMESSA_TALAO_ID,
                T.DENSIDADE,
                T.ESPESSURA,
                (T.QUANTIDADE + T.QUANTIDADE_SOBRA) TALAO_QUANTIDADE,
                T.CONSUMO_MEDIO,
                IIF(T.REMESSA_TALAO_ID BETWEEN 7001 AND 7999 OR T.REMESSA_TALAO_ID BETWEEN 70001 AND 79999,COALESCE(LEAD(C.CONSUMO_FAMILIA_ID) OVER(),C.CONSUMO_FAMILIA_ID),C.CONSUMO_FAMILIA_ID) FAMILIA_ID,
                IIF(T.REMESSA_TALAO_ID BETWEEN 7001 AND 7999 OR T.REMESSA_TALAO_ID BETWEEN 70001 AND 79999,COALESCE(LEAD(C.CONSUMO_PRODUTO_ID) OVER(),C.CONSUMO_PRODUTO_ID),C.CONSUMO_PRODUTO_ID) PRODUTO_ID,
                IIF(T.REMESSA_TALAO_ID BETWEEN 7001 AND 7999 OR T.REMESSA_TALAO_ID BETWEEN 70001 AND 79999,COALESCE(LEAD(C.CONSUMO_MODELO_ID) OVER(),C.CONSUMO_MODELO_ID),C.CONSUMO_MODELO_ID) MODELO_ID,
                IIF(T.REMESSA_TALAO_ID BETWEEN 7001 AND 7999 OR T.REMESSA_TALAO_ID BETWEEN 70001 AND 79999,COALESCE(LEAD(C.CONSUMO_COR_ID) OVER(),C.CONSUMO_COR_ID),C.CONSUMO_COR_ID) COR_ID,
                IIF(T.REMESSA_TALAO_ID BETWEEN 7001 AND 7999 OR T.REMESSA_TALAO_ID BETWEEN 70001 AND 79999,COALESCE(LEAD(C.CONSUMO_TAMANHO) OVER(),C.CONSUMO_TAMANHO),C.CONSUMO_TAMANHO) TAMANHO,
                IIF(T.REMESSA_TALAO_ID BETWEEN 7001 AND 7999 OR T.REMESSA_TALAO_ID BETWEEN 70001 AND 79999,COALESCE(LEAD(C.CONSUMO_QUANTIDADE) OVER(),C.CONSUMO_QUANTIDADE),C.CONSUMO_QUANTIDADE) QUANTIDADE,
                IIF(T.REMESSA_TALAO_ID BETWEEN 7001 AND 7999 OR T.REMESSA_TALAO_ID BETWEEN 70001 AND 79999,COALESCE(LEAD(C.CONSUMO_FATOR_DIVISOR) OVER(),C.CONSUMO_FATOR_DIVISOR),C.CONSUMO_FATOR_DIVISOR) FATOR_DIVISOR, /*CONVERSAO*/
                IIF(T.REMESSA_TALAO_ID BETWEEN 7001 AND 7999 OR T.REMESSA_TALAO_ID BETWEEN 70001 AND 79999,COALESCE(LEAD(C.CONSUMO_FATOR_MULTIPLICADOR) OVER(),C.CONSUMO_FATOR_MULTIPLICADOR),C.CONSUMO_FATOR_MULTIPLICADOR) FATOR_MULTIPLICADOR, /*MATRIZ*/
                IIF(T.REMESSA_TALAO_ID BETWEEN 7001 AND 7999 OR T.REMESSA_TALAO_ID BETWEEN 70001 AND 79999,COALESCE(LEAD(C.CONSUMO_LOCALIZACAO_ID) OVER(),C.CONSUMO_LOCALIZACAO_ID),C.CONSUMO_LOCALIZACAO_ID) LOCALIZACAO_ID,
                IIF(T.REMESSA_TALAO_ID BETWEEN 7001 AND 7999 OR T.REMESSA_TALAO_ID BETWEEN 70001 AND 79999,COALESCE(LEAD(C.CONSUMO_UM_ALTERNATIVA) OVER(),C.CONSUMO_UM_ALTERNATIVA),C.CONSUMO_UM_ALTERNATIVA) UM_ALTERNATIVA,
                1 COLECAO_DIVISOR,
                c.CONSUMO_PRODUTO_STATUS
            FROM
                VWREMESSA_TALAO T
                LEFT JOIN TBPRODUTO P ON P.CODIGO = T.PRODUTO_ID
                LEFT JOIN VWMODELO_FICHA_CONSUMO C
                       ON C.MODELO_ID = T.MODELO_ID
                      AND C.TAMANHO = T.TAMANHO
                      AND C.COR_ID = P.COR_CODIGO,
                TBFAMILIA_MODELO_ALOCACAO A
            WHERE
                T.REMESSA_ID = :I_REMESSA_ID
            AND T.REMESSA_TALAO_ID = :I_REMESSA_TALAO_ID
            AND C.HABILITA_GERAR_CONSUMO = '1'           
            --AND C.CONSUMO_PRODUTO_STATUS= '1'
            AND A.FAMILIA_ID = C.FAMILIA_ID
            AND A.FAMILIA_MODELO_ID = C.CONSUMO_FAMILIA_ID
            AND IIF( :COLECAO = '2' or (:COLECAO = '3' and (T.REMESSA_TALAO_ID BETWEEN 0001 AND 0999 OR T.REMESSA_TALAO_ID BETWEEN 7001 AND 9999 OR T.REMESSA_TALAO_ID BETWEEN 70001 AND 79999)) , TRUE,FALSE)

            ) X
        INTO
            ESTABELECIMENTO_ID,
            REMESSA_ID,
            REMESSA_TALAO_ID,
            DENSIDADE,
            ESPESSURA,
            TALAO_QUANTIDADE,
            CONSUMO_MEDIO,
            FAMILIA_ID,
            PRODUTO_ID,
            MODELO_ID,
            COR_ID,
            TAMANHO,
            FATOR_DIVISOR,
            FATOR_MULTIPLICADOR,
            LOCALIZACAO_ID,
            UM_ALTERNATIVA,
            QUANTIDADE,
            QUANITDADE_ALTERNATIVA,
            CONSUMO_PRODUTO_STATUS
        DO
        BEGIN

            IF ( :CONSUMO_PRODUTO_STATUS = 0 ) THEN
            BEGIN
                EXCEPTION "..." 'Produto de consumo esta inativo, TALAO: ' || :I_REMESSA_TALAO_ID || ',  Produto:'||:PRODUTO_ID||' - '||coalesce((select first 1 p.descricao from tbproduto p where p.codigo = :PRODUTO_ID),'') ;
            END


            IF ( QUANTIDADE > 0 ) THEN
            BEGIN
                INSERT INTO TBREMESSA_CONSUMO (
                    ESTABELECIMENTO_ID,
                    FAMILIA_ID,
                    REMESSA,
                    TALAO,
                    PRODUTO_ID,
                    TAMANHO,
                    LOCALIZACAO_ID,
                    DENSIDADE,
                    ESPESSURA,
                    COR_ID,
                    FATOR_CONVERSAO,
                    QUANTIDADE,
                    CONSUMO_KG,
                    CONSUMO_ML
                ) VALUES (
                    :ESTABELECIMENTO_ID,
                    :FAMILIA_ID,
                    :REMESSA_ID,
                    :REMESSA_TALAO_ID,
                    :PRODUTO_ID,
                    :TAMANHO,
                    :LOCALIZACAO_ID,
                    :DENSIDADE,
                    :ESPESSURA,
                    :COR_ID,
                    :FATOR_DIVISOR,
                    :TALAO_QUANTIDADE,
                    :QUANTIDADE,
                    :QUANITDADE_ALTERNATIVA);
            END
        END

end;

CREATE OR ALTER trigger ttbremessa_item_processado_b2i for tbremessa_item_processado
active before insert or update position 2
AS
declare variable LINHA_ID INTEGER;
declare variable COLECAO INTEGER;
declare variable DENSIDADE NUMERIC(15,4);
declare variable ESPESSURA NUMERIC(15,4);
declare variable MATRIZ_ID INTEGER;
declare variable REMESSA_WEB VARCHAR(10);
begin


    IF ( INSERTING OR (OLD.REPROCESSAR = 0 AND NEW.REPROCESSAR = 1) ) THEN
    BEGIN


        NEW.REPROCESSAR = 0;

        
        LINHA_ID = COALESCE((
        SELECT FIRST 1 LINHA_CODIGO
          FROM TBMODELO M
         WHERE M.CODIGO = NEW.MODELO_CODIGO),0);
    
            /*
        REMESSA_WEB = COALESCE((
            SELECT FIRST 1 R.WEB
              FROM VWREMESSA R
             WHERE R.REMESSA_ID = NEW.REMESSA
        ),0); */
    
        IF ( LINHA_ID > 0 AND COALESCE(NEW.TALAO_VINCULO,0) = 0 /*AND REMESSA_WEB = '1'*/ ) THEN
        BEGIN

            IF ( COALESCE(NEW.PERFIL,'') = '' ) THEN
            BEGIN
                NEW.PERFIL = (SELECT FIRST 1 S.PERFIL
                                FROM TBPRODUTO P,
                                     VWSKU S
                               WHERE P.CODIGO = NEW.PRODUTO_CODIGO
                                 AND S.MODELO_ID = P.MODELO_CODIGO
                                 AND S.COR_ID = P.COR_CODIGO
                                 AND S.TAMANHO = NEW.TAMANHO);
            END


            COLECAO = FN_PARAMETRO('TBPERFIL.TALAO_QUANTIDADE',(SELECT FIRST 1 P.CONTROLE FROM TBPERFIL P WHERE P.TABELA = 'SKU' AND P.ID = NEW.PERFIL));

            IF ( COLECAO > 1 ) THEN
            BEGIN
            
                DENSIDADE = 0;
                ESPESSURA = 0;
                MATRIZ_ID = 0;

                /* Em casos onde o modelo esteja configurado para gerar 2 ou mais talões para o edc (ex.space,aumentax), essa rotina
                   irah selecionar e gerar o PRIMEIRO talão da PRIMEIRA densidade/espessura configurada na ficha tecnica  */

                SELECT FIRST 1
                    Z.CONSUMO_DENSIDADE DENSIDADE,
                    Z.CONSUMO_ESPESSURA ESPESSURA,
                    Z.CONSUMO_MATRIZ_ID MATRIZ_ID
                
                FROM
                    VWMODELO_FICHA_CONSUMO Z,
                    TBFAMILIA_MODELO_ALOCACAO A
                WHERE
                    Z.HABILITA_GERAR_CONSUMO = '1'
                AND A.FAMILIA_ID             = Z.FAMILIA_ID
                AND A.FAMILIA_MODELO_ID      = Z.CONSUMO_FAMILIA_ID
                AND Z.MODELO_ID              = NEW.MODELO_CODIGO
                AND Z.COR_ID                 = CAST(FN_DESCRICAO('TBPRODUTO',NEW.PRODUTO_CODIGO,'COR_CODIGO') AS INTEGER)
                AND Z.TAMANHO                = NEW.TAMANHO
                INTO
                    DENSIDADE,
                    ESPESSURA,
                    MATRIZ_ID;
    
                NEW.TALAO_VINCULO = NEW.ID;
                NEW.DENSIDADE     = :DENSIDADE;
                NEW.ESPESSURA     = :ESPESSURA;
                NEW.MATRIZ_CODIGO = :MATRIZ_ID;
            END
    
            IF ( COLECAO = 3 ) THEN
            BEGIN
    
                      
                DENSIDADE = 0;
                ESPESSURA = 0;
                MATRIZ_ID = 0;

                /* Em casos onde o modelo esteja configurado para gerar 3 talões para o edc (ex.aumentax),
                   sendo o terceiro talão é a espuma que ficará no meio das 2 mantas, formando um "sanduiche",
                   essa rotina irah selecionar a dens./espessura dessa espuma do meio, o qual está informada
                   na ficha 2 da ficha tecnica */

                SELECT FIRST 1
                    Z.CONSUMO_DENSIDADE,
                    Z.CONSUMO_ESPESSURA,
                    Z.CONSUMO_MATRIZ_ID
                
                FROM
                    VWMODELO_FICHA_CONSUMO Z,
                    TBFAMILIA_MODELO_ALOCACAO A
                WHERE
                    Z.TIPO                   = '2'
                AND Z.HABILITA_GERAR_CONSUMO = '1'
                AND Z.CONSUMO_PRODUTO_STATUS = '1'
                AND A.FAMILIA_ID             = Z.FAMILIA_ID
                AND A.FAMILIA_MODELO_ID      = Z.CONSUMO_FAMILIA_ID
                AND Z.MODELO_ID              = NEW.MODELO_CODIGO
                AND Z.TAMANHO                = NEW.TAMANHO
                INTO
                    DENSIDADE,
                    ESPESSURA,
                    MATRIZ_ID;
    
    
    
                IF ( COALESCE(MATRIZ_ID,0) = 0 ) THEN
                BEGIN
                    EXCEPTION "..." 'REM.: ' || COALESCE(NEW.REMESSA,'') || ' MODELO: ' || COALESCE(NEW.MODELO_CODIGO,0) || ' - ' || COALESCE(FN_DESCRICAO('TBMODELO',NEW.MODELO_CODIGO),'') || ' Tam. ' || COALESCE(FN_TAMANHO_PRODUTO(NEW.PRODUTO_CODIGO,NEW.TAMANHO),'') || ' DA COLECAO AUMENTAX, NAO POSSUI PRODUTO HABILITADO PARA GERAR CONSUMO COM MATRIZ NA FICHA GERAL DE CONSUMO.';
                END
    
    
                INSERT INTO VWREMESSA_TALAO (
                    ESTABELECIMENTO_ID,
                    REMESSA_ID,
                    REMESSA_TALAO_ID,
                    FAMILIA_ID,
                    LOCALIZACAO_ID,
                    PRODUTO_ID,
                    MODELO_ID,
                    TAMANHO,
                    QUANTIDADE,
                    QUANTIDADE_ALTERNATIVA,
                    QUANTIDADE_SOBRA,
                    GP_ID,
                    UP_ID,
                    ESTACAO,
                    MATRIZ_ID,
                    DENSIDADE,
                    ESPESSURA,
                    STATUS,
                    TALAO_VINCULO
                ) VALUES (
                    NEW.ESTABELECIMENTO_CODIGO,
                    NEW.REMESSA,
                    6||FN_LPAD(NEW.CONTROLE,3,0),
                    NEW.FAMILIA_CODIGO,
                    NEW.LOCALIZACAO_ID,
                    NEW.PRODUTO_CODIGO,
                    NEW.MODELO_CODIGO,
                    NEW.TAMANHO,
                    NEW.QUANTIDADE,
                    NEW.QUANTIDADE_ALTERNATIVA,
                    NEW.QUANTIDADE_SOBRA,
                    NEW.PROGRAMACAO_ESTEIRA,
                    NEW.UP_ID,
                    NEW.PROGRAMACAO_BOCA,
                    :MATRIZ_ID,
                    :DENSIDADE,
                    :ESPESSURA,
                    NEW.SITUACAO,
                    NEW.ID
                );
    
    
                DENSIDADE = 0;
                ESPESSURA = 0;
                MATRIZ_ID = 0;

                /* Em casos onde o modelo esteja configurado para gerar 2 ou mais talões para o edc (ex.space,aumentax), essa rotina
                   irah selecionar e gerar o SEGUNDO talão da SEGUNDA densidade/espessura configurada na ficha tecnica  */

                SELECT FIRST 1
                    COALESCE(LEAD(Z.CONSUMO_DENSIDADE) OVER(),Z.CONSUMO_DENSIDADE) DENSIDADE,
                    COALESCE(LEAD(Z.CONSUMO_ESPESSURA) OVER(),Z.CONSUMO_ESPESSURA) ESPESSURA,
                    COALESCE(LEAD(Z.CONSUMO_MATRIZ_ID) OVER(),Z.CONSUMO_MATRIZ_ID) MATRIZ_ID
                
                FROM
                    VWMODELO_FICHA_CONSUMO Z,
                    TBFAMILIA_MODELO_ALOCACAO A
                WHERE
                    Z.HABILITA_GERAR_CONSUMO = '1'
                AND A.FAMILIA_ID             = Z.FAMILIA_ID
                AND A.FAMILIA_MODELO_ID      = Z.CONSUMO_FAMILIA_ID 
                AND Z.CONSUMO_PRODUTO_STATUS = '1'
                AND Z.MODELO_ID              = NEW.MODELO_CODIGO
                AND Z.COR_ID                 = CAST(FN_DESCRICAO('TBPRODUTO',NEW.PRODUTO_CODIGO,'COR_CODIGO') AS INTEGER)
                AND Z.TAMANHO                = NEW.TAMANHO
                INTO
                    DENSIDADE,
                    ESPESSURA,
                    MATRIZ_ID;
    
    
                INSERT INTO VWREMESSA_TALAO (
                    ESTABELECIMENTO_ID,
                    REMESSA_ID,
                    REMESSA_TALAO_ID,
                    FAMILIA_ID,
                    LOCALIZACAO_ID,
                    PRODUTO_ID,
                    MODELO_ID,
                    TAMANHO,
                    QUANTIDADE,
                    QUANTIDADE_ALTERNATIVA,
                    QUANTIDADE_SOBRA,
                    GP_ID,
                    UP_ID,
                    ESTACAO,  
                    MATRIZ_ID,
                    DENSIDADE,
                    ESPESSURA,
                    STATUS,
                    TALAO_VINCULO
                ) VALUES (
                    NEW.ESTABELECIMENTO_CODIGO,
                    NEW.REMESSA,
                    7||FN_LPAD(NEW.CONTROLE,3,0),
                    NEW.FAMILIA_CODIGO,
                    NEW.LOCALIZACAO_ID,
                    NEW.PRODUTO_CODIGO,
                    NEW.MODELO_CODIGO,
                    NEW.TAMANHO,
                    NEW.QUANTIDADE,
                    NEW.QUANTIDADE_ALTERNATIVA,
                    NEW.QUANTIDADE_SOBRA,
                    NEW.PROGRAMACAO_ESTEIRA,
                    NEW.UP_ID,
                    NEW.PROGRAMACAO_BOCA,  
                    :MATRIZ_ID,
                    :DENSIDADE,
                    :ESPESSURA,
                    NEW.SITUACAO,
                    NEW.ID
                );
            END
            ELSE
            IF ( COLECAO = 2 ) THEN
            BEGIN
                     
                DENSIDADE = 0;
                ESPESSURA = 0;
                MATRIZ_ID = 0;

                /* Em casos onde o modelo esteja configurado para gerar 2 ou mais talões para o edc (ex.space,aumentax), essa rotina
                   irah selecionar e gerar o SEGUNDO talão da SEGUNDA densidade/espessura configurada na ficha tecnica  */

                SELECT FIRST 1
                    COALESCE(LEAD(Z.CONSUMO_DENSIDADE) OVER(),Z.CONSUMO_DENSIDADE) DENSIDADE,
                    COALESCE(LEAD(Z.CONSUMO_ESPESSURA) OVER(),Z.CONSUMO_ESPESSURA) ESPESSURA,
                    COALESCE(LEAD(Z.CONSUMO_MATRIZ_ID) OVER(),Z.CONSUMO_MATRIZ_ID) MATRIZ_ID
                
                FROM
                    VWMODELO_FICHA_CONSUMO Z,
                    TBFAMILIA_MODELO_ALOCACAO A
                WHERE
                    Z.HABILITA_GERAR_CONSUMO = '1'     
                AND Z.CONSUMO_PRODUTO_STATUS = '1'
                AND A.FAMILIA_ID             = Z.FAMILIA_ID
                AND A.FAMILIA_MODELO_ID      = Z.CONSUMO_FAMILIA_ID
                AND Z.MODELO_ID              = NEW.MODELO_CODIGO
                AND Z.COR_ID                 = CAST(FN_DESCRICAO('TBPRODUTO',NEW.PRODUTO_CODIGO,'COR_CODIGO') AS INTEGER)
                AND Z.TAMANHO                = NEW.TAMANHO
                INTO
                    DENSIDADE,
                    ESPESSURA,
                    MATRIZ_ID;
    
                INSERT INTO VWREMESSA_TALAO (
                    ESTABELECIMENTO_ID,
                    REMESSA_ID,
                    REMESSA_TALAO_ID,
                    FAMILIA_ID,
                    LOCALIZACAO_ID,
                    PRODUTO_ID,
                    MODELO_ID,
                    TAMANHO,
                    QUANTIDADE,
                    QUANTIDADE_ALTERNATIVA,
                    QUANTIDADE_SOBRA,
                    GP_ID,
                    UP_ID,
                    ESTACAO,   
                    MATRIZ_ID,
                    DENSIDADE,
                    ESPESSURA,
                    STATUS,
                    TALAO_VINCULO
                ) VALUES (
                    NEW.ESTABELECIMENTO_CODIGO,
                    NEW.REMESSA,
                    7||FN_LPAD(NEW.CONTROLE,3,0),
                    NEW.FAMILIA_CODIGO,
                    NEW.LOCALIZACAO_ID,
                    NEW.PRODUTO_CODIGO,
                    NEW.MODELO_CODIGO,
                    NEW.TAMANHO,
                    NEW.QUANTIDADE,
                    NEW.QUANTIDADE_ALTERNATIVA,
                    NEW.QUANTIDADE_SOBRA,
                    NEW.PROGRAMACAO_ESTEIRA,
                    NEW.UP_ID,
                    NEW.PROGRAMACAO_BOCA, 
                    :MATRIZ_ID,
                    :DENSIDADE,
                    :ESPESSURA,
                    NEW.SITUACAO,
                    NEW.ID
                );
            END
    
    
        END
    END

end;

CREATE OR ALTER procedure spi_remessa_talao_extra (
    i_remessa_id integer)
as
declare variable estabelecimento_id integer;
declare variable familia_id integer;
declare variable remessa_id integer;
declare variable remessa_talao_id integer;
declare variable matriz_id integer;
declare variable modelo_id integer;
declare variable cor_id integer;
declare variable produto_id integer;
declare variable tamanho integer;
declare variable status varchar(4);
declare variable perfil_sku varchar(10);
declare variable gp_id integer;
declare variable quantidade_total_taloes numeric(18,4);
declare variable percentual numeric(18,4);
declare variable quantidade numeric(18,4);
BEGIN

    FOR
        SELECT           
            ESTABELECIMENTO_ID, 
            FAMILIA_ID,
            REMESSA_ID,
            8000 + ROW_NUMBER() OVER() REMESSA_TALAO_ID,
            MATRIZ_ID,
            MODELO_ID,    
            COR_ID,
            PRODUTO_ID,
            TAMANHO,
            STATUS,
            PERFIL_SKU,
            GP_ID,
            QUANTIDADE_TOTAL_TALOES,
            PERCENTUAL,
            QUANTIDADE

        FROM (
            SELECT         
                ESTABELECIMENTO_ID, 
                FAMILIA_ID,     
                REMESSA_ID,
                MODELO_ID,
                MATRIZ_ID,
                PRODUTO_ID,
                COR_ID,
                TAMANHO,
                STATUS,
                PERFIL_SKU,
                GP_ID,
                QUANTIDADE_TOTAL_TALOES,
                PERCENTUAL,
                FN_ARRENDONDAR_PARA_CIMA(QUANTIDADE_TOTAL_TALOES * PERCENTUAL) QUANTIDADE
            
            FROM (
                SELECT
                    T.REMESSA                AS REMESSA_ID,
                    T.ESTABELECIMENTO_CODIGO AS ESTABELECIMENTO_ID,
                    T.FAMILIA_CODIGO         AS FAMILIA_ID,
                    P.MODELO_CODIGO          AS MODELO_ID,
                    T.MATRIZ_CODIGO          AS MATRIZ_ID,
                    T.PRODUTO_CODIGO         AS PRODUTO_ID,
                    P.COR_CODIGO             AS COR_ID,
                    T.TAMANHO                AS TAMANHO,
                    '1'                      AS STATUS,
                    T.PERFIL                 AS PERFIL_SKU,
                    T.PROGRAMACAO_ESTEIRA    AS GP_ID,
                    SUM(T.QUANTIDADE)        AS QUANTIDADE_TOTAL_TALOES,
                    (SELECT PERCENTUAL_DEFEITO FROM SPC_REMESSA_SKU_DEFEITO_PERCENT (P.MODELO_CODIGO,P.COR_CODIGO,T.TAMANHO,T.REMESSA,0,'1')) PERCENTUAL
                
                FROM
                    TBREMESSA_ITEM_PROCESSADO T,
                    TBPRODUTO P
                
                WHERE T.REMESSA = :I_REMESSA_ID
                AND P.CODIGO  = T.PRODUTO_CODIGO
                
                GROUP BY 1,2,3,4,5,6,7,8,9,10,11
                ) X
            ) Y
        WHERE Y.QUANTIDADE > 0
    INTO    
        ESTABELECIMENTO_ID,   
        FAMILIA_ID,
        REMESSA_ID,
        REMESSA_TALAO_ID,     
        MATRIZ_ID,
        MODELO_ID,  
        COR_ID,
        PRODUTO_ID,
        TAMANHO,
        STATUS,
        PERFIL_SKU,
        GP_ID,
        QUANTIDADE_TOTAL_TALOES,
        PERCENTUAL,
        QUANTIDADE
    DO
    BEGIN
        INSERT INTO TBREMESSA_ITEM_PROCESSADO (
            ESTABELECIMENTO_CODIGO,   
            FAMILIA_CODIGO,  
            REMESSA,
            CONTROLE,
            MATRIZ_CODIGO,
            MODELO_CODIGO,
            PRODUTO_CODIGO,
            TAMANHO,
            QUANTIDADE,
            SITUACAO,
            PERFIL,
            PROGRAMACAO_ESTEIRA,
            PROGRAMACAO_BOCA,
            PERCENTUAL_TALAO_EXTRA
        ) VALUES (        
            :ESTABELECIMENTO_ID, 
            :FAMILIA_ID,
            :REMESSA_ID,
            :REMESSA_TALAO_ID, 
            :MATRIZ_ID,
            :MODELO_ID,
            :PRODUTO_ID,
            :TAMANHO,
            :QUANTIDADE,
            :STATUS,
            :PERFIL_SKU,
            :GP_ID,
            0,
            :PERCENTUAL
        );
    END

END;



