SET TERM ^ ;

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', 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 ( :I_REMESSA_ID = 45655 AND :I_REMESSA_TALAO_ID = 224 ) THEN
--            BEGIN
--                EXCEPTION "..." 'TALAO: ' || COALESCE(TALAO_QUANTIDADE,-1) || ' CONSUMO MEDIO: ' || COALESCE(CONSUMO_MEDIO,-1);
--            END

            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
^

SET TERM ; ^

