SET TERM ^ ;

CREATE OR ALTER procedure SPI_REM_CONSUMO_MULT_AGP (
    ESTABELECIMENTO_ID integer,
    REMESSA_ID integer,
    TALAO_DETALHE_ID integer = 0)
as
declare variable O_ESTABELECIMENTO_ID integer;
declare variable O_REMESSA_ID integer;
declare variable O_REMESSA_TALAO_ID integer;
declare variable O_CONTROLE integer;
declare variable O_LOCALIZACAO_ID integer;
declare variable O_PRODUTO_ID integer;
declare variable O_TAMANHO integer;
declare variable O_DENSIDADE numeric(15,2);
declare variable O_ESPESSURA numeric(15,2);
declare variable O_QUANTIDADE numeric(15,4);
declare variable O_QUANTIDADE_ALTERNATIVA numeric(15,4);
declare variable REMESSA_TALAO_ID integer;
declare variable REMESSA_TALAO_DETALHE_ID integer;
declare variable MODELO_ID integer;
declare variable COR_ID integer;
declare variable TAMANHO integer;
declare variable DENSIDADE smallint;
declare variable ESPESSURA numeric(15,4);
declare variable TALAO_QUANTIDADE numeric(15,4);
declare variable QUANTIDADE numeric(15,4);
declare variable QUANTIDADE_ALTERNATIVA numeric(15,4);
declare variable PROJECAO_PRODUTO_ID integer;
declare variable PROJECAO_TAMANHO integer;
declare variable PROJECAO_LOCALIZACAO_ID integer;
declare variable PROJECAO_QUANTIDADE numeric(15,4);
declare variable FATOR_MULT numeric(10,1);
declare variable FATOR_DIV numeric(15,4);
declare variable DESTINO_FAMILIA_ID integer;
declare variable UM_ALTERNATIVA varchar(10);
declare variable INCREMENTO integer;
declare variable CONTROLE2 integer;
declare variable OLD_TALAO_DETALHE_ID integer;
declare variable OLD_DESTINO_FAMILIA_ID integer;
declare variable CONSUMO_QUANTIDADE2 numeric(15,4);
declare variable CONSUMO_ALTERNATIVO2 numeric(15,4);
declare variable ACUMULA_PROJECAO char(1);
declare variable OLD_VALORES varchar(500);
declare variable OLD_QUANTIDADE_ORIGINAL numeric(15,4);
declare variable OLD_QUANTIDADE numeric(15,4);
declare variable OLD_QUANTIDADE_ALTERNATIVA numeric(15,4);
declare variable PROJECAO_DIRETA integer;
declare variable PROJECAO_GP integer;
declare variable FAMILIA_ID integer;
declare variable PRODUTO_ID integer;
declare variable CONSUMO_QUANTIDADE1 numeric(15,4);
declare variable CONSUMO_ALTERNATIVO1 numeric(15,4);
declare variable CONTROLE1 integer;
declare variable LOCALIZACAO_ID integer;
declare variable GP_ID integer;
declare variable UM varchar(10);
declare variable CONSUMO_PERMITE_FRACAO varchar(10);
declare variable FAMILIA_MODELO_ID integer;
declare variable GERAR integer;
declare variable SETOR_ID integer;
declare variable KIT integer;
declare variable ORDEM_PROD integer;
declare variable TIPO_CONSUMO_PROD integer;
declare variable ORDEM_ANTERIOR integer;
declare variable TIPO_CONSUMO_ANTERIOR integer;
declare variable TAMANHO_ORIGEM integer;
declare variable PRODUTO_ORIGEM_ID integer;
declare variable MODELO_ORIGEM_ID integer;
declare variable COR_TROCA integer;
declare variable CONJ_ETAPA_ATUAL integer;
declare variable CONJ_PROX_ETAPA integer;
BEGIN

    /**
     * Limpa os registros atuais para poder recalcular
     */

    ESTABELECIMENTO_ID = coalesce((select first 1 r.estabelecimento_codigo from tbremessa r where r.numero = :REMESSA_ID),0);
    DELETE FROM VWREMESSA_CONSUMO A WHERE A.ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID AND iif(:TALAO_DETALHE_ID > 0, a.remessa_talao_detalhe_id = :TALAO_DETALHE_ID, true) AND A.REMESSA_ID = :REMESSA_ID and coalesce(a.fixo,0) = 1;

    CONTROLE1 = 0;
    CONTROLE2 = 1;

    /**
     * Inicio do loop que carrega todos os taloes detalhados da remessa que foi parametrizada
     */
    FOR
        SELECT distinct
            M.FAMILIA_CODIGO AS FAMILIA_MODELO_ID,
            D.REMESSA_ACUMULADO_CONTROLE REMESSA_TALAO_ID,
            D.CONTROLE REMESSA_TALAO_DETALHE_ID,
            IIF(I.GERAR_CONJUNTOS = 0 AND I2.GERAR_CONJUNTOS =  1, m2.codigo, D.MODELO_CODIGO) MODELO_ID,
            D.COR_ID,
            D.TAMANHO,
            D.TAMANHO_ORIGEM,
            T.DENSIDADE,
            T.ESPESSURA,
            FN_INT_ROUND_UP(T.QUANTIDADE        * coalesce(m2.fator_conversao, 1))     TALAO_QUANTIDADE,
            FN_INT_ROUND_UP(D.QUANTIDADE_PEDIDO * coalesce(m2.fator_conversao, 1))     QUANTIDADE,
            D.QUANTIDADE_ALTERN,
            P.FAMILIA_CODIGO,
--            IIF(
--                I.GERAR_CONJUNTOS = 0 AND I2.GERAR_CONJUNTOS =  1,
--                (SELECT  FIRST 1 P3.codigo FROM TBPRODUTO P3 WHERE P3.modelo_codigo = M2.codigo AND P3.cor_codigo = D.cor_id),
--                IIF(
--                    (I.gerar_conjuntos = I2.gerar_conjuntos and (SELECT FIRST 1 ES.SUB_TIPO_GP FROM TBESTEIRA ES WHERE ES.codigo = I.gp_id) = 8),
--                    (SELECT  FIRST 1 P3.codigo FROM TBPRODUTO P3 WHERE P3.modelo_codigo = M2.codigo AND P3.cor_codigo = D.cor_id),
--                    D.PRODUTO_ORIGEM
--
--
--                )
--            ) AS PRODUTO_ID,
 IIF(
                I.GERAR_CONJUNTOS = 0 AND I2.GERAR_CONJUNTOS =  1,
                (SELECT  FIRST 1 P3.codigo FROM TBPRODUTO P3 WHERE P3.modelo_codigo = M2.codigo AND P3.cor_codigo = D.cor_id),
                IIF(
                    (I.gerar_conjuntos = 1 AND I2.gerar_conjuntos = 1 and ((SELECT FIRST 1 ES.SUB_TIPO_GP FROM TBESTEIRA ES WHERE ES.codigo = I2.gp_id) = 8 or (SELECT FIRST 1 ES.SUB_TIPO_GP FROM TBESTEIRA ES WHERE ES.codigo = I.gp_id) = 8 )),
                    (SELECT  FIRST 1 P3.codigo FROM TBPRODUTO P3 WHERE P3.modelo_codigo = M2.codigo AND P3.cor_codigo = D.cor_id),
                    D.PRODUTO_ORIGEM


                )
            ) AS PRODUTO_ID, -- DEFINE QUAL É O PRODUTO QUE SERÁ USADO NO CONSUMO (ENGLOBA CASO DE CONJUNTO, TINTURARIA E ETC...)
--            D.produto_codigo PRODUTO_ID,
            D.PRODUTO_ORIGEM PRODUTO_ORIGEM_ID,
            P2.MODELO_CODIGO AS MODELO_ORIGEM_ID,
            I.CONS_LOCALIZACAO_ID LOCALIZACAO_ID,
            T.GP_ID,
            D.KIT,

            I.ORDEM,
            I.TIPO_CONSUMO,

            COALESCE(I2.ORDEM,0) AS ORDEM_ANT,
            COALESCE(I2.TIPO_CONSUMO,0) AS TIPO_CONSUMO_ANT,

            IIF(I.GERAR_CONJUNTOS = 0 AND I2.GERAR_CONJUNTOS = 1,
            COALESCE((SELECT J.COR_FILHO_ID FROM TBMODELO_CONJUNTO_COR J WHERE J.MODELO_PAI_ID = P2.MODELO_CODIGO AND J.MODELO_FILHO_ID = D.MODELO_CODIGO AND J.COR_PAI_ID = D.COR_ID),0)
            , 0) AS COR_TROCA,
            I.GERAR_CONJUNTOS  AS CONJ_ETAPA_ATUAL,
            I2.GERAR_CONJUNTOS AS CONJ_PROX_ETAPA

        FROM
            TBPEDIDO_ITEM_PROCESSADO D,
            VWREMESSA_TALAO T,
            TBPRODUTO P,
            TBMODELO M,
            TBPRODUTO P2,
            TBMODELO M2,
            TBCONFI_ALOCACAO_MODELO_ITENS I
            LEFT JOIN TBCONFI_ALOCACAO_MODELO_ITENS I2 ON I2.CONFI_ALOCACAO_ID = I.CONFI_ALOCACAO_ID AND I2.ORDEM = (I.ORDEM - 1)

        WHERE
            D.REMESSA                       = T.REMESSA_ID
        AND D.REMESSA_ACUMULADO_CONTROLE    = T.REMESSA_TALAO_ID
        AND P.CODIGO                        = D.PRODUTO_CODIGO
        AND D.ESTABELECIMENTO_CODIGO        = :ESTABELECIMENTO_ID
        AND D.REMESSA                       = :REMESSA_ID
        AND M.CODIGO                        = P.MODELO_CODIGO
        AND IIF(:TALAO_DETALHE_ID > 0, D.CONTROLE = :TALAO_DETALHE_ID, TRUE)

        AND I.GP_ID = T.GP_ID
        AND P2.CODIGO = D.PRODUTO_ORIGEM
        AND P2.MODELO_CODIGO = M2.modelo_pai
        AND I.CONFI_ALOCACAO_ID  = M2.CONF_AGRUPAMENTO_ID


    INTO
        :FAMILIA_MODELO_ID,
        :REMESSA_TALAO_ID,
        :REMESSA_TALAO_DETALHE_ID,
        :MODELO_ID,
        :COR_ID,
        :TAMANHO,
        :TAMANHO_ORIGEM,
        :DENSIDADE,
        :ESPESSURA,
        :TALAO_QUANTIDADE,
        :QUANTIDADE,
        :QUANTIDADE_ALTERNATIVA,
        :FAMILIA_ID,
        :PRODUTO_ID,
        :PRODUTO_ORIGEM_ID,
        :MODELO_ORIGEM_ID,
        :LOCALIZACAO_ID,
        :GP_ID,
        :KIT,
        :ORDEM_PROD,
        :TIPO_CONSUMO_PROD,
        :ORDEM_ANTERIOR,
        :TIPO_CONSUMO_ANTERIOR,
        :COR_TROCA,
        :CONJ_ETAPA_ATUAL,
        :CONJ_PROX_ETAPA
    DO BEGIN

        /**
         * Codigo que ira referenciar pares de insumo
         */
        CONTROLE1            = COALESCE(CONTROLE1,0)+1;
        CONSUMO_QUANTIDADE1  = :QUANTIDADE;
        CONSUMO_ALTERNATIVO1 = :QUANTIDADE_ALTERNATIVA;

        if(ORDEM_PROD > 1)then
        begin

            if(TIPO_CONSUMO_PROD = 0)then
            begin
                select
                    p.codigo,
                    p.cor_codigo
                from tbproduto p
                where p.modelo_codigo = :MODELO_ID
                and p.cor_codigo = fn_parametro('SISTEMA.COR_TECELAGEM_SEAMLESS')
                into :PRODUTO_ID, :COR_ID;
            end

            if(COR_TROCA > 0)then
            begin
                select
                    p.codigo,
                    p.cor_codigo
                from tbproduto p
                where p.modelo_codigo = :MODELO_ID
                and p.cor_codigo = :COR_TROCA
                into :PRODUTO_ID, :COR_ID;
            end

--            IF(


            /* Atualiza ou insere o consumo na tabela (PROJECAO ACUMULADA) */
            UPDATE OR INSERT INTO
            VWREMESSA_CONSUMO (
                ESTABELECIMENTO_ID,
                REMESSA_ID,
                REMESSA_TALAO_ID,
                REMESSA_TALAO_DETALHE_ID,
                CONTROLE,
                LOCALIZACAO_ID,
                PRODUTO_ID,
                TAMANHO,
                DENSIDADE,
                ESPESSURA,
                QUANTIDADE_ORIGINAL,
                QUANTIDADE_NECES,
                QUANTIDADE_NECES_ALTERN,
                QUANTIDADE,
                QUANTIDADE_ALTERNATIVA,
                SALDO_BAIXAR,
                COMPONENTE,
                FIXO
            ) VALUES (
                :ESTABELECIMENTO_ID,
                :REMESSA_ID,
                :REMESSA_TALAO_ID,
                :REMESSA_TALAO_DETALHE_ID,
                :CONTROLE1,
                :LOCALIZACAO_ID,
                :PRODUTO_ID,
                :TAMANHO,
                :DENSIDADE,
                :ESPESSURA,  
                :TALAO_QUANTIDADE,
                :CONSUMO_QUANTIDADE1,
                :CONSUMO_ALTERNATIVO1,
                :CONSUMO_QUANTIDADE1,
                :CONSUMO_ALTERNATIVO1,
                :CONSUMO_QUANTIDADE1,
                '0',
                1
            ) MATCHING (
                ESTABELECIMENTO_ID,
                REMESSA_ID,
                REMESSA_TALAO_ID,
                REMESSA_TALAO_DETALHE_ID,
                PRODUTO_ID,
                TAMANHO
            );
        end

        OLD_TALAO_DETALHE_ID            = :REMESSA_TALAO_DETALHE_ID;
        OLD_DESTINO_FAMILIA_ID          = :DESTINO_FAMILIA_ID      ;
        O_ESTABELECIMENTO_ID            = :ESTABELECIMENTO_ID      ;
        O_REMESSA_ID                    = :REMESSA_ID              ;
        O_REMESSA_TALAO_ID              = :REMESSA_TALAO_ID        ;
        O_CONTROLE                      = :CONTROLE2               ;
        O_LOCALIZACAO_ID                = :PROJECAO_LOCALIZACAO_ID ;
        O_PRODUTO_ID                    = :PROJECAO_PRODUTO_ID     ;
        O_TAMANHO                       = :PROJECAO_TAMANHO        ;
        O_DENSIDADE                     = :DENSIDADE               ;
        O_ESPESSURA                     = :ESPESSURA               ;
        O_QUANTIDADE                    = :CONSUMO_QUANTIDADE2     ;
        O_QUANTIDADE_ALTERNATIVA        = :CONSUMO_ALTERNATIVO2    ;

    END

END
^

SET TERM ; ^

