SET TERM ^ ;

CREATE OR ALTER procedure SPC_CONJUNTO (
    MODELO_CODIGO integer,
    COR_CODIGO integer,
    TAMANHO_CODIGO integer)
returns (
    PECA_ID integer,
    MODELO_PAI_ID integer,
    MODELO_ID integer,
    PRODUTO_ID integer,
    FATOR_CONVERSAO numeric(15,4),
    TAMANHO integer,
    PERFIL_SKU varchar(10),
    ITEM_CONJUNTOS integer)
as
begin

  for
    select
        iif(j.CONJUNTO > 0, row_number() over(),0) PECA_ID,
        j.modelo_pai,
        j.MODELO_CODIGO,
        j.PRODUTO_ID,
        j.FATOR_CONVERSAO,
        j.TAMANHO,
        (select first 1 a.perfil from vwsku a where a.modelo_id = :MODELO_CODIGO and a.cor_id = :COR_CODIGO and a.tamanho = j.TAMANHO) as PERFIL_SKU,
        COM_CONJUNTOS
    from(
        select
            CONJUNTO,
            modelo_pai,
            MODELO_CODIGO,
            PRODUTO_ID,
            FATOR_CONVERSAO,
            TAMANHO,
            max(CONJUNTO) over() as COM_CONJUNTOS
        from(
            select
                1 as CONJUNTO,
                m.modelo_pai,
                m.codigo as MODELO_CODIGO,
                p.codigo as PRODUTO_ID,
                m.FATOR_CONVERSAO,
                coalesce((select first 1 g.tamanho_filho from tbmodelo_conjunto_grade g where g.modelo_pai_id = m.modelo_pai and g.modelo_filho_id = m.codigo and g.tamanho_pai = :TAMANHO_CODIGO),:TAMANHO_CODIGO) as TAMANHO
            
            from tbproduto p, tbmodelo m
            left join tbmodelo_conjunto_cor c on c.modelo_pai_id = m.modelo_pai and c.modelo_filho_id = m.codigo and c.cor_pai_id = :COR_CODIGO
            where m.modelo_pai = :MODELO_CODIGO
            and m.modelo_pai <> m.codigo
            and m.status = '1'
            and p.modelo_codigo = m.codigo
            and p.cor_codigo = iif(coalesce(c.cor_filho_id,0) > 0, c.cor_filho_id, :COR_CODIGO)
            
            union all
            
            select
                0 as CONJUNTO,
                0 as modelo_pai,
                m.codigo as MODELO_CODIGO,
                p.codigo as PRODUTO_ID,
                iif(:MODELO_CODIGO <> m.codigo, coalesce(m.FATOR_CONVERSAO,1),1) as FATOR_CONVERSAO,
                cast(:TAMANHO_CODIGO as integer) as TAMANHO
            
            from tbmodelo m, tbproduto p
            where m.codigo = :MODELO_CODIGO
            and m.status = '1'
            and p.modelo_codigo = m.codigo
            and p.cor_codigo = :COR_CODIGO
        ) order by FATOR_CONVERSAO desc, MODELO_CODIGO
    ) j where COM_CONJUNTOS = CONJUNTO

  into
    PECA_ID,
    MODELO_PAI_ID,
    MODELO_ID,
    PRODUTO_ID,
    FATOR_CONVERSAO,
    TAMANHO,
    PERFIL_SKU,
    ITEM_CONJUNTOS
  do begin
    suspend;
  end

end
^

SET TERM ; ^


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;
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
            M.FAMILIA_CODIGO as FAMILIA_MODELO_ID,
            D.remessa_acumulado_controle REMESSA_TALAO_ID,
            D.controle REMESSA_TALAO_DETALHE_ID,
            D.modelo_codigo MODELO_ID,
            D.COR_ID,
            D.TAMANHO,
            D.TAMANHO_ORIGEM,
            T.DENSIDADE,
            T.ESPESSURA,
            T.QUANTIDADE TALAO_QUANTIDADE,
            D.quantidade_pedido QUANTIDADE,
            D.QUANTIDADE_ALTERN,
            P.FAMILIA_CODIGO,
            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

        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.codigo
        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
    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


            /* 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 ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPI_TRATA_PEDIDO_MULT_AGP (
    CONF_AGRUPAMENTO_ID integer,
    PROGRAMADO varchar(10),
    PEDIDO integer,
    PED_ITEM_ID integer,
    DATA_PRODUCAO date,
    DATA_CLIENTE date,
    DATA_EMISSAO date,
    MODELO_CODIGO integer,
    PRODUTO_CODIGO integer,
    COR_ID integer,
    PERFIL varchar(10),
    TAMANHO integer,
    QTD_EST numeric(18,4),
    QTD_REM numeric(18,4),
    QTD_AGP numeric(18,4),
    EST_MIN varchar(10),
    SALDO numeric(18,4),
    QTD_MINIMO integer,
    QTD_MULTIPLO integer,
    REM_STATUS varchar(10),
    MP numeric(18,4),
    ESTABELECIMENTO_ID integer,
    PERFIL_PED varchar(10),
    DATA_AGRUPAMENTO date,
    VPED_ITEM_ID integer,
    PERFIL_COR varchar(10),
    TRATAMENTO_PEDIDO_MP varchar(10),
    PRODUZIR numeric(18,4),
    CAP_PROD_SKU numeric(18,4),
    TIPO_EXEC integer)
as
declare variable OLD_TIPO_AGP varchar(10);
declare variable SUB_TIPO_GP integer;
declare variable ORDEM_AGP integer;
declare variable OPERFIL varchar(10);
declare variable OPERFIL_COR varchar(10);
declare variable OPRODUTO_CODIGO integer;
declare variable OCOR_ID integer;
declare variable ODATA_PRODUCAO date;
declare variable ODATA_AGRUPAMENTO date;
declare variable TIPO_AGP varchar(10);
declare variable TIPO_DATA integer;
declare variable GP_AGRUPAMENTO_ID integer;
declare variable PRINCIPAL integer;
declare variable CONJUNTO_MODELO_PAI integer;
declare variable CONJUNTO_PECA_ID integer;
declare variable FATOR_CONVERSAO numeric(15,4);
declare variable TAMANHO_ORIGINAL integer;
declare variable PRODUTO_ORIGINAL integer;
declare variable MODELO_ORIGINAL integer;
declare variable PERFIL_ORIGINAL varchar(10);
declare variable TPRINCIPAL integer;
declare variable TIPO_CONSUMO integer;
declare variable GERAR_CONJUNTOS integer;
declare variable ITEM_CONJUNTOS integer;
begin
  
    OLD_TIPO_AGP = '';

    TAMANHO_ORIGINAL = TAMANHO;
    PRODUTO_ORIGINAL = PRODUTO_CODIGO;
    MODELO_ORIGINAL  = MODELO_CODIGO;
    PERFIL_ORIGINAL  = PERFIL;

    for
        select
            h.PECA_ID,
            h.MODELO_PAI_ID,
            h.modelo_id,
            h.PRODUTO_ID,
            h.FATOR_CONVERSAO,
            h.TAMANHO,
            h.PERFIL_SKU,
            0 as PRINCIPAL,
            1 as ITEM_CONJUNTOS
        from SPC_CONJUNTO(:MODELO_CODIGO, :COR_ID, :TAMANHO) h

        union all

        select
            0 PECA_ID,
            0 MODELO_PAI_ID,
            :MODELO_CODIGO modelo_id,
            :PRODUTO_CODIGO PRODUTO_ID,
            1 FATOR_CONVERSAO,
            :TAMANHO TAMANHO,
            :PERFIL PERFIL_SKU,
            1 as PRINCIPAL,
            0 as ITEM_CONJUNTOS
       from RDB$DATABASE

    into
        CONJUNTO_PECA_ID,
        CONJUNTO_MODELO_PAI,
        MODELO_CODIGO,
        PRODUTO_CODIGO,
        FATOR_CONVERSAO,
        TAMANHO,
        PERFIL,
        TPRINCIPAL,
        ITEM_CONJUNTOS
    do begin

        for
            select
                g.gp_id,
                g.principal,
                iif(g.principal = 1, 'P', h.tipo_agrupamento) as tipo_agrupamento,
                h.sub_tipo_gp,
                g.ordem,
                g.tipo_consumo,
                g.GERAR_CONJUNTOS
            from TBCONFI_ALOCACAO_MODELO_ITENS g, tbesteira h
            where g.confi_alocacao_id = :conf_agrupamento_id
            and h.codigo = g.gp_id
            order by ordem
        into
            :GP_AGRUPAMENTO_ID,
            :PRINCIPAL,
            :TIPO_AGP,
            :SUB_TIPO_GP,
            :ORDEM_AGP,
            :TIPO_CONSUMO,
            :GERAR_CONJUNTOS
        do begin

            if(GERAR_CONJUNTOS = ITEM_CONJUNTOS)then
            begin

                if(GERAR_CONJUNTOS = 0)then
                begin
                    TAMANHO         = TAMANHO_ORIGINAL;
                    PRODUTO_CODIGO  = PRODUTO_ORIGINAL;
                    MODELO_CODIGO   = MODELO_ORIGINAL;
                    PERFIL          = PERFIL_ORIGINAL;
                end

                :OPERFIL            = PERFIL;
                :OPERFIL_COR        = PERFIL_COR;
                :OPRODUTO_CODIGO    = PRODUTO_CODIGO;
                :OCOR_ID            = COR_ID;
                :ODATA_PRODUCAO     = DATA_PRODUCAO;
                :ODATA_AGRUPAMENTO  = DATA_AGRUPAMENTO;
    
                if(TIPO_CONSUMO = 0 and SUB_TIPO_GP <> 8 and SUB_TIPO_GP <> 9)then
                begin
                    :OPRODUTO_CODIGO = 0;
    
                    select
                        (select first 1 C.perfil FROM tbcor C WHERE C.codigo = P.cor_codigo) AS PERFIL_COR,
                        p.codigo,
                        p.cor_codigo
                    from tbproduto p
                    where p.modelo_codigo = :MODELO_CODIGO
                    and p.cor_codigo = fn_parametro('SISTEMA.COR_TECELAGEM_SEAMLESS')
                    into :OPERFIL_COR, :OPRODUTO_CODIGO, :OCOR_ID;
    
                    if(coalesce(:OPRODUTO_CODIGO,0) = 0)then
                    begin                               
                        exception "..." 'COR TECELAGEM (CRU) NAO ENCONTRADA NO MODELO '||:MODELO_CODIGO;
                    end
    
                    if(coalesce(:OPERFIL,'') = '')then
                    begin                               
                        exception "..." 'PERFIL DA COR TECELAGEM (CRU) NAO ENCONTRADA NO MODELO '||:MODELO_CODIGO;
                    end
                end

                if(SUB_TIPO_GP = 8)then
                begin
    
                    select
                        (select first 1 B.perfil FROM tbmodelo_bloqueio B WHERE B.modelo_id = P.modelo_codigo AND B.cor_id = P.cor_codigo) AS PERFIL,
                        (select first 1 C.perfil FROM tbcor C WHERE C.codigo = P.cor_codigo) AS PERFIL_COR,
                        p.cor_codigo
                    from tbmodelo m, tbgrupo_modelo j, tbmodelo m2, tbproduto p
                    where m.codigo = :MODELO_CODIGO
                    and j.id = m.grupo_id
                    and m2.codigo = j.modelo_id
                    and p.modelo_codigo = m2.codigo
                    and p.cor_codigo = fn_parametro('SISTEMA.COR_TECELAGEM_SEAMLESS')
                    into :OPERFIL, :OPERFIL_COR, :OCOR_ID;
    
                    if(coalesce(:OCOR_ID,0) = 0)then
                    begin                               
                        exception "..." 'COR DO GRUPO DE FIO (CRU) NAO ENCONTRADA NO MODELO '||:MODELO_CODIGO;
                    end
    
                    if(coalesce(:OPERFIL,'') = '')then
                    begin                               
                        exception "..." 'PERFIL DO GRUPO DE FIO NAO ENCONTRADA NO MODELO '||:MODELO_CODIGO;
                    end
    
                end
    
                if(SUB_TIPO_GP = 9)then
                begin
                    :OPRODUTO_CODIGO = 0;
    
                    select  
                        (select first 1 B.perfil FROM tbmodelo_bloqueio B WHERE B.modelo_id = P.modelo_codigo AND B.cor_id = P.cor_codigo AND B.tamanho = :tamanho) AS PERFIL,
                        (select first 1 C.perfil FROM tbcor C WHERE C.codigo = P.cor_codigo) AS PERFIL_COR,
                        p.codigo,
                        p.cor_codigo
                    from tbproduto p
                    where p.modelo_codigo = :MODELO_CODIGO
                    and p.cor_codigo = fn_parametro('SISTEMA.COR_TECELAGEM_SEAMLESS')
                    into :OPERFIL, :OPERFIL_COR, :OPRODUTO_CODIGO, :OCOR_ID;
    
                    if(coalesce(:OPRODUTO_CODIGO,0) = 0)then
                    begin                               
                        exception "..." 'COR TECELAGEM (CRU) NAO ENCONTRADA NO MODELO '||:MODELO_CODIGO;
                    end
    
                    if(coalesce(:OPERFIL,'') = '')then
                    begin                               
                        exception "..." 'PERFIL DA COR TECELAGEM (CRU) NAO ENCONTRADA NO MODELO '||:MODELO_CODIGO;
                    end
    
                end

                QTD_AGP  = coalesce((select
                                        sum(p.quantidade)
                                     from tbagrupamento_pedido p
                                     where p.tipo = :TIPO_AGP
                                     and p.tabela_id = :PEDIDO
                                     and p.tab_item_id = :VPED_ITEM_ID
                                     and p.produto_id = :OPRODUTO_CODIGO
                                     and p.tamanho = :TAMANHO
                                     and p.CONJUNTO_MODELO_PAI = :CONJUNTO_MODELO_PAI
                                     and p.CONJUNTO_PECA_ID = :CONJUNTO_PECA_ID
                            ),0);
    
                QTD_REM  = coalesce((select
                                        sum(p.quantidade)
                                     from TbRemessa_Item_Alocacao p
                                     where p.tipo = :TIPO_AGP
                                     and p.tabela_id = :PEDIDO
                                     and p.tab_item_id = :VPED_ITEM_ID
                                     and p.produto_id = :OPRODUTO_CODIGO
                                     and p.tamanho = :TAMANHO
                                     and p.CONJUNTO_MODELO_PAI = :CONJUNTO_MODELO_PAI
                                     and p.CONJUNTO_PECA_ID = :CONJUNTO_PECA_ID
                            ),0);
    
                PRODUZIR = SALDO - (QTD_EST + QTD_REM + QTD_AGP);
                PRODUZIR = FN_INT_ROUND_UP(PRODUZIR * FATOR_CONVERSAO);

                TIPO_DATA = 0;
    
                if(ORDEM_AGP > 1)then
                begin
                    :TIPO_DATA = 1;
                    :ODATA_PRODUCAO = (select
                                            max(a.data_inicial)
                                         from tbagrupamento_pedido p, tbagrupamento a
                                         where p.tipo = :OLD_TIPO_AGP
                                         and p.tabela_id = :PEDIDO
                                        and p.tab_item_id = :VPED_ITEM_ID
                                         and p.tamanho_original = :tamanho_original
                                         and a.id = p.agrupamento_id
                                         and iif(:GERAR_CONJUNTOS = 0, true,
                                            p.CONJUNTO_MODELO_PAI = :CONJUNTO_MODELO_PAI and p.CONJUNTO_PECA_ID = :CONJUNTO_PECA_ID
                                         )
                                      );
    
                    :ODATA_AGRUPAMENTO = ODATA_PRODUCAO;
    
                    if(ODATA_PRODUCAO is null)then
                    begin
                        PRODUZIR = 0;
                        --exception "..." 'PARAR | '||:OLD_TIPO_AGP||' | '||:TIPO_AGP;
                    end
                end else
                begin
                    ODATA_PRODUCAO = null;
                end
    
                if(ODATA_AGRUPAMENTO < current_date)then
                begin
                    ODATA_AGRUPAMENTO = current_date;
                end

                IF (PRODUZIR > 0) THEN
                BEGIN
                    if(:TIPO_AGP = 'V')then
                    begin
                        --exception "..." ODATA_PRODUCAO||' PARAR | '||:TIPO_EXEC||' | '||:TIPO_AGP||' | '||:MODELO_CODIGO||' | '||:PERFIL;
                    end

                    if(TIPO_EXEC = 1)then
                    begin
    
                        EXECUTE PROCEDURE SPI_PEDIDO_AGP_CAP_PROD_SKU(
                             :PROGRAMADO,
                             :PEDIDO,
                             :PED_ITEM_ID,
                             :ODATA_PRODUCAO,
                             :DATA_CLIENTE,
                             :DATA_EMISSAO,
                             :MODELO_CODIGO,
                             :PRODUTO_CODIGO,
                             :PERFIL,
                             :TAMANHO,
                             :QTD_EST,
                             :QTD_REM,
                             :QTD_AGP,
                             :EST_MIN,
                             :CAP_PROD_SKU,
                             :SALDO,
                             :QTD_MINIMO,
                             :QTD_MULTIPLO,
                             :REM_STATUS,
                             :MP,
                             :ESTABELECIMENTO_ID,
                             :PERFIL_PED,
                             :ODATA_AGRUPAMENTO,
                             :VPED_ITEM_ID,
                             :PERFIL_COR,
                             :TRATAMENTO_PEDIDO_MP,
                             :PRODUZIR,
                             :GP_AGRUPAMENTO_ID,
                             :TIPO_AGP,  
                             :TIPO_DATA,
                             :PRODUTO_CODIGO,
                             :CONJUNTO_MODELO_PAI,
                             :CONJUNTO_PECA_ID,
                             :TAMANHO_ORIGINAL,
                             :PRODUTO_ORIGINAL
                        );
    
                    end else
                    begin
    
                        EXECUTE PROCEDURE SPI_PEDIDO_AGP_TEMPO_PROD_SKU(
                             :PROGRAMADO,
                             :PEDIDO,
                             :PED_ITEM_ID,
                             :ODATA_PRODUCAO,
                             :DATA_CLIENTE,
                             :DATA_EMISSAO,
                             :MODELO_CODIGO,
                             :OPRODUTO_CODIGO,
                             :OCOR_ID,
                             :OPERFIL,
                             :TAMANHO,
                             :QTD_EST,
                             :QTD_REM,
                             :QTD_AGP,
                             :EST_MIN,
                             :SALDO,
                             :QTD_MINIMO,
                             :QTD_MULTIPLO,
                             :REM_STATUS,
                             :MP,
                             :ESTABELECIMENTO_ID,
                             :PERFIL_PED,
                             :ODATA_AGRUPAMENTO,
                             :VPED_ITEM_ID,
                             :OPERFIL_COR,
                             :TRATAMENTO_PEDIDO_MP,
                             :PRODUZIR,
                             :GP_AGRUPAMENTO_ID,
                             :TIPO_AGP,
                             :TIPO_DATA,
                             :PRODUTO_CODIGO,
                             :CONJUNTO_MODELO_PAI,
                             :CONJUNTO_PECA_ID,
                             :TAMANHO_ORIGINAL,
                             :PRODUTO_ORIGINAL
                        );
                     end
                 END
             end
             OLD_TIPO_AGP = :TIPO_AGP;
         end
    end
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPI_TRATA_PEDIDO_MULT_TAL (
    CONF_AGRUPAMENTO_ID integer,
    PEDIDO integer,
    PED_ITEM_ID integer,
    DATA_PRODUCAO date,
    MODELO_CODIGO integer,
    PRODUTO_CODIGO integer,
    COR_ID integer,
    PERFIL varchar(10),
    TAMANHO integer,
    SALDO numeric(18,4),
    QTD_MULTIPLO integer,
    ESTABELECIMENTO_ID integer,
    DATA_AGRUPAMENTO date,
    PERFIL_COR varchar(10),
    PRODUZIR numeric(18,4),
    PRODUTO_ORIGEM integer,
    TAMANHO_ORIGEM integer)
as
declare variable OLD_TIPO_AGP varchar(10);
declare variable DESALOCAR_ITENS integer;
declare variable SUB_TIPO_GP integer;
declare variable ORDEM_AGP integer;
declare variable OPERFIL varchar(10);
declare variable OPRODUTO_CODIGO integer;
declare variable OCOR_ID integer;
declare variable ODATA_PRODUCAO date;
declare variable ODATA_AGRUPAMENTO date;
declare variable ALOCADO integer;
declare variable TIPO_AGP varchar(10);
declare variable GP_AGRUPAMENTO_ID integer;
declare variable SALDO_ALOCACAO integer;
declare variable TALAO_DETALHE_ID integer;
declare variable REMESSA_ID integer;
declare variable LOCALIZACAO_ID integer;
declare variable PERFIL_SKU varchar(10);
declare variable QUANTIDADE_ALOC_PED integer;
declare variable QUANTIDADE_ALOCAR integer;
declare variable AGRUPAMENTO_ID integer;
declare variable AGRUP_PED_ID integer;
declare variable TIPO_REMESSA varchar(10);
declare variable OPERFIL_COR varchar(10);
declare variable TIPO_DATA integer;
declare variable QTD_AGP integer;
declare variable PRODUTO_ORIGEM_ID integer;
declare variable GP_ID integer;
declare variable UP_ID integer;
declare variable MODELO_ID integer;
declare variable TTAMANHO integer;
declare variable TOTALTEMPO numeric(15,4);
declare variable AGP_ITEM_ID integer;
declare variable QTD_REM integer;
declare variable CONJUNTO_PECA_ID integer;
declare variable TAMANHO_ORIGINAL integer;
declare variable PRODUTO_ORIGINAL integer;
declare variable MODELO_ORIGINAL integer;
declare variable PERFIL_ORIGINAL varchar(10);
declare variable CONJUNTO_MODELO_PAI integer;
declare variable FATOR_CONVERSAO numeric(15,4);
declare variable TPRINCIPAL integer;
declare variable PRINCIPAL integer;
begin

    OLD_TIPO_AGP = '';
    DESALOCAR_ITENS = 0;
    TIPO_REMESSA = '22595';
    PRODUTO_ORIGEM_ID = :PRODUTO_CODIGO;

    --exception "..." TAMANHO_ORIGEM;

    TAMANHO_ORIGINAL = TAMANHO;
    PRODUTO_ORIGINAL = PRODUTO_CODIGO;
    MODELO_ORIGINAL  = MODELO_CODIGO;
    PERFIL_ORIGINAL  = PERFIL;

    for
        select
            h.PECA_ID,
            h.MODELO_PAI_ID,
            h.modelo_id,
            h.PRODUTO_ID,
            h.FATOR_CONVERSAO,
            h.TAMANHO,
            h.PERFIL_SKU,
            0 as PRINCIPAL
        from SPC_CONJUNTO(:MODELO_CODIGO, :COR_ID, :TAMANHO) h

        union all

        select
            0 PECA_ID,
            0 MODELO_PAI_ID,
            :MODELO_CODIGO modelo_id,
            :PRODUTO_CODIGO PRODUTO_ID,
            1 FATOR_CONVERSAO,
            :TAMANHO TAMANHO,
            :PERFIL PERFIL_SKU,
            1 as PRINCIPAL
       from RDB$DATABASE

    into
        CONJUNTO_PECA_ID,
        CONJUNTO_MODELO_PAI,
        MODELO_CODIGO,
        PRODUTO_CODIGO,
        FATOR_CONVERSAO,
        TAMANHO,
        PERFIL,
        TPRINCIPAL
    do begin

        for
            select
                g.gp_id, 
                g.principal,
                iif(g.principal = 1, 'P', h.tipo_agrupamento) as tipo_agrupamento,
                h.sub_tipo_gp,
                g.ordem
            from TBCONFI_ALOCACAO_MODELO_ITENS g, tbesteira h
            where g.confi_alocacao_id = :conf_agrupamento_id
            and h.codigo = g.gp_id
            order by ordem
        into
            :GP_AGRUPAMENTO_ID,
            :PRINCIPAL,
            :TIPO_AGP,
            :SUB_TIPO_GP,
            :ORDEM_AGP
        do begin
    
            if(TPRINCIPAL = PRINCIPAL)then
            begin

                if(PRINCIPAL = 1)then
                begin
                    TAMANHO         = TAMANHO_ORIGINAL;
                    PRODUTO_CODIGO  = PRODUTO_ORIGINAL;
                    MODELO_CODIGO   = MODELO_ORIGINAL;
                    PERFIL          = PERFIL_ORIGINAL;
                end

                :OPERFIL            = PERFIL;
                :OPERFIL_COR        = PERFIL_COR;
                :OPRODUTO_CODIGO    = PRODUTO_CODIGO;
                :OCOR_ID            = COR_ID;
                :ODATA_PRODUCAO     = DATA_PRODUCAO;
                :ODATA_AGRUPAMENTO  = DATA_AGRUPAMENTO;
    
                if(SUB_TIPO_GP = 8)then
                begin
    
                    select
                        (select first 1 B.perfil FROM tbmodelo_bloqueio B WHERE B.modelo_id = P.modelo_codigo AND B.cor_id = P.cor_codigo) AS PERFIL,
                        (select first 1 C.perfil FROM tbcor C WHERE C.codigo = P.cor_codigo) AS PERFIL_COR,
                        p.cor_codigo
                    from tbmodelo m, tbgrupo_modelo j, tbmodelo m2, tbproduto p
                    where m.codigo = :MODELO_CODIGO
                    and j.id = m.grupo_id
                    and m2.codigo = j.modelo_id
                    and p.modelo_codigo = m2.codigo
                    and p.cor_codigo = fn_parametro('SISTEMA.COR_TECELAGEM_SEAMLESS')
                    into :OPERFIL, :OPERFIL_COR, :OCOR_ID;
    
                    if(coalesce(:OCOR_ID,0) = 0)then
                    begin                               
                        exception "..." 'COR DO GRUPO DE FIO (CRU) NAO ENCONTRADA NO MODELO '||:MODELO_CODIGO;
                    end
    
                    if(coalesce(:OPERFIL,'') = '')then
                    begin                               
                        exception "..." 'PERFIL DO GRUPO DE FIO NAO ENCONTRADA NO MODELO '||:MODELO_CODIGO;
                    end
    
                end
    
                if(SUB_TIPO_GP = 9)then
                begin
                    :OPRODUTO_CODIGO = 0;
    
                    select  
                        (select first 1 B.perfil FROM tbmodelo_bloqueio B WHERE B.modelo_id = P.modelo_codigo AND B.cor_id = P.cor_codigo AND B.tamanho = :tamanho) AS PERFIL,
                        (select first 1 C.perfil FROM tbcor C WHERE C.codigo = P.cor_codigo) AS PERFIL_COR,
                        p.codigo,
                        p.cor_codigo
                    from tbproduto p
                    where p.modelo_codigo = :MODELO_CODIGO
                    and p.cor_codigo = fn_parametro('SISTEMA.COR_TECELAGEM_SEAMLESS')
                    into :OPERFIL, :OPERFIL_COR, :OPRODUTO_CODIGO, :OCOR_ID;
    
                    if(coalesce(:OPRODUTO_CODIGO,0) = 0)then
                    begin                               
                        exception "..." 'COR TECELAGEM (CRU) NAO ENCONTRADA NO MODELO '||:MODELO_CODIGO;
                    end
    
                    if(coalesce(:OPERFIL,'') = '')then
                    begin                               
                        exception "..." 'PERFIL DA COR TECELAGEM (CRU) NAO ENCONTRADA NO MODELO '||:MODELO_CODIGO;
                    end
    
                end
    
                --exception "..." 'TIPO:'||TIPO_AGP||', PEDIDO:'||PEDIDO||', PRODUTO:'||OPRODUTO_CODIGO||', TAMANHO:'||TAMANHO;
    
                QTD_AGP  = coalesce((select
                                        sum(p.quantidade)
                                     from tbagrupamento_pedido p
                                     where p.tipo = :TIPO_AGP
                                     and p.tabela_id = :PEDIDO
                                     and p.produto_id = :OPRODUTO_CODIGO
                                     and p.tab_item_id = :PED_ITEM_ID
                                     and p.tamanho = :TAMANHO 
                                     and p.CONJUNTO_MODELO_PAI = :CONJUNTO_MODELO_PAI
                                     and p.CONJUNTO_PECA_ID = :CONJUNTO_PECA_ID
                            ),0);
    
                QTD_REM  = coalesce((select
                                        sum(p.quantidade)
                                     from TbRemessa_Item_Alocacao p
                                     where p.tipo = :TIPO_AGP
                                     and p.tabela_id = :PEDIDO
                                     and p.tab_item_id = :PED_ITEM_ID
                                     and p.produto_id = :OPRODUTO_CODIGO
                                     and p.tamanho = :TAMANHO 
                                     and p.CONJUNTO_MODELO_PAI = :CONJUNTO_MODELO_PAI
                                     and p.CONJUNTO_PECA_ID = :CONJUNTO_PECA_ID
                            ),0);
    
                PRODUZIR = SALDO - (QTD_REM + QTD_AGP);
                TIPO_DATA = 0;

    
                if(ORDEM_AGP > 1)then
                begin
                    :TIPO_DATA = 1;
                    :ODATA_PRODUCAO = (select
                                            max(a.data_inicial)
                                         from TbRemessa_Item_Alocacao p, tbagrupamento a
                                         where p.tipo = :OLD_TIPO_AGP
                                         and p.tabela_id = :PEDIDO
                                         and p.produto_origem = :produto_original
                                         and p.tamanho_origem = :tamanho_original
                                         and a.id = p.agrupamento_id
                                         and iif(:PRINCIPAL = 1, true,
                                            p.CONJUNTO_MODELO_PAI = :CONJUNTO_MODELO_PAI and p.CONJUNTO_PECA_ID = :CONJUNTO_PECA_ID
                                         )
                                      );
    
                    :ODATA_AGRUPAMENTO = ODATA_PRODUCAO;
    
                    if(ODATA_PRODUCAO is null)then
                    begin
                        PRODUZIR = 0;
                    end
                end
    
                PRODUZIR = FN_INT_ROUND_UP(PRODUZIR * FATOR_CONVERSAO);

                IF (PRODUZIR > 0) THEN
                BEGIN
                    SALDO_ALOCACAO = :PRODUZIR;

                    For
                        Select
                            a.agrupamento_id,
                            A.controle AS id,
                            A.remessa,
                            A.estabelecimento_codigo,
                            A.localizacao_codigo,
                            A.perfil,
                            coalesce((select first 1 J.perfil FROM tbcor J WHERE J.codigo = A.cor_id),0) PERFIL_COR,
                            A.tamanho,
                            b.saldo
                        From TbRemessa_Item_Alocacao B, TbPedido_item_Processado A, TbRemessa R, tbagrupamento C
                        Where B.Remessa = R.Numero
                            and B.Tabela_Id = 0
                            and B.tamanho = :TAMANHO
                            and B.Status = '1'
                            and B.produto_id = :OPRODUTO_CODIGO
                            and A.Remessa = B.Remessa
                            and A.Controle = B.Talao
                            and A.Estabelecimento_Codigo = B.Estabelecimento_Id
                            AND C.id = B.agrupamento_id
                            AND C.gp_id = :GP_AGRUPAMENTO_ID
                            and a.estoque_id = 0
                            and R.ORIGEM = 22595
                            AND A.SITUACAO < 6
                            and iif(:TIPO_AGP = 'P', A.Data_Expedicao is Null, true)
                            and B.Saldo >= :QTD_MULTIPLO
                            AND :ODATA_AGRUPAMENTO between C.data_inicial and c.data_final
    
                        Order By R.Data
                    INTO
                        AGRUPAMENTO_ID,
                        TALAO_DETALHE_ID,
                        REMESSA_ID,
                        ESTABELECIMENTO_ID,
                        LOCALIZACAO_ID,
                        PERFIL_SKU,
                        PERFIL_COR,
                        TAMANHO,
                        QUANTIDADE_ALOC_PED
                    Do
                    Begin
    
                        IF(SALDO_ALOCACAO > QUANTIDADE_ALOC_PED)THEN
                        BEGIN
                            QUANTIDADE_ALOCAR = QUANTIDADE_ALOC_PED;
                            SALDO_ALOCACAO = SALDO_ALOCACAO - QUANTIDADE_ALOC_PED;
                        END ELSE
                        BEGIN
                            QUANTIDADE_ALOCAR = SALDO_ALOCACAO;
                            SALDO_ALOCACAO = 0;
                        END
                    
                        AGRUP_PED_ID = coalesce((SELECT FIRST 1 K.ID FROM TBAGRUPAMENTO_PEDIDO K WHERE ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID
                                                    AND AGRUPAMENTO_ID  = :AGRUPAMENTO_ID
                                                    AND TABELA_ID       = :PEDIDO
                                                    AND TAB_ITEM_ID     = :PED_ITEM_ID
                                                    AND TIPO            = 'M'),0);
                    
                        IF(TALAO_DETALHE_ID > 0 AND PEDIDO > 0 AND QUANTIDADE_ALOCAR > 0)THEN
                        BEGIN
                    
                            IF(AGRUP_PED_ID = 0)THEN
                            BEGIN
                                AGRUP_PED_ID = gen_id(gtbagrupamento_pedido,1);
                        
                                INSERT INTO TBAGRUPAMENTO_PEDIDO (
                                    ESTABELECIMENTO_ID, AGRUPAMENTO_ID, ID, TABELA_ID,
                                    TAB_ITEM_ID, PRODUTO_ID, TAMANHO, QUANTIDADE,
                                    SALDO, TIPO, REMESSA, PERFIL_SKU, NECESS_SKU, PERFIL_COR, NECESS_COR, PRODUTO_ORIGINAL, TAMANHO_ORIGINAL, CONJUNTO_PECA_ID
                                ) VALUES (
                                    :ESTABELECIMENTO_ID, :AGRUPAMENTO_ID, :AGRUP_PED_ID,
                                    :PEDIDO, :PED_ITEM_ID, :OPRODUTO_CODIGO, :TAMANHO, :QUANTIDADE_ALOCAR,
                                    0, 'M', 0, :PERFIL_SKU, 0, :PERFIL_COR, 0, :PRODUTO_ORIGEM, :TAMANHO_ORIGEM, :CONJUNTO_PECA_ID
                                );
                            END ELSE
                            BEGIN
                                UPDATE TBAGRUPAMENTO_PEDIDO SET QUANTIDADE = QUANTIDADE + :QUANTIDADE_ALOCAR
                                WHERE ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID
                                AND AGRUPAMENTO_ID  = :AGRUPAMENTO_ID
                                AND ID              = :AGRUP_PED_ID
                                AND TABELA_ID       = :PEDIDO
                                AND TAB_ITEM_ID     = :PED_ITEM_ID
                                AND TIPO            = 'M';
                            END
                        
                            INSERT INTO TBREMESSA_ITEM_ALOCACAO (
                                ESTABELECIMENTO_ID, TABELA_ID, TAB_ITEM_ID, TIPO,
                                LOCALIZACAO_ID, PRODUTO_ID, TAMANHO, QUANTIDADE, SALDO,
                                REMESSA, TALAO, AGRUPAMENTO_ID, AGRUP_PED_ID, TIPO_REMESSA, ORIGEM_PRODUTO_ID, PRODUTO_ORIGEM, TAMANHO_ORIGEM, CONJUNTO_PECA_ID
                            ) VALUES (
                                :ESTABELECIMENTO_ID, :PEDIDO, :PED_ITEM_ID, :TIPO_AGP,
                                :LOCALIZACAO_ID, :OPRODUTO_CODIGO, :TAMANHO, :QUANTIDADE_ALOCAR,
                                :QUANTIDADE_ALOCAR, :REMESSA_ID, :TALAO_DETALHE_ID, :AGRUPAMENTO_ID, :AGRUP_PED_ID, :TIPO_REMESSA, :PRODUTO_ORIGEM_ID, :PRODUTO_ORIGEM, :TAMANHO_ORIGEM, :CONJUNTO_PECA_ID
                            );
    
                            /* -------------------------------------------------------------------------------- */
                            SELECT first 1
                                P.modelo_codigo,
                                P.cor_codigo
                            FROM TBPRODUTO P WHERE P.codigo = :OPRODUTO_CODIGO
                            INTO MODELO_ID, COR_ID;
    
                            select
                                s.TOTAL
                            from SPC_TEMPO_GP_CONJUNTO(:GP_AGRUPAMENTO_ID, :MODELO_ID, :COR_ID, :TAMANHO, :QUANTIDADE_ALOCAR) s
                            into :TOTALTEMPO;
                            
                            TOTALTEMPO = coalesce(TOTALTEMPO,0);
                            
                            if(TOTALTEMPO = 0)then
                            begin
                                exception "..." 'TEMPO DO MODELO NAO FOI ENCONTRADO, MODELO:'||MODELO_ID||', COR:'||COR_ID||', TAMANHO:'||TAMANHO;
                            end
                            
                            UPDATE TBAGRUPAMENTO_CARGA_SKU_UP A SET a.quantidade = a.quantidade - :QUANTIDADE_ALOCAR, a.necessidade = a.necessidade - :TOTALTEMPO
                            WHERE AGRUPAMENTO_ID = :AGRUPAMENTO_ID
                            AND AGRUP_PED_ID = :AGP_ITEM_ID
                            and TIPO = 2;
                            /* -------------------------------------------------------------------------------- */
    
                        END
                    END
                END
            end

            OLD_TIPO_AGP = :TIPO_AGP;
        end
    end


    /*
    if (DESALOCAR_ITENS = 1) then
    BEGIN
        delete from TBREMESSA_ITEM_ALOCACAO p
        where p.tabela_id = :PEDIDO
        and p.tab_item_id = :PED_ITEM_ID
        and p.origem_produto_id = :PRODUTO_ORIGEM_ID
        and p.tamanho = :TAMANHO;
    END else
    begin
       for
        select
            t.agrupamento_id,
            t.id,
            u.programacao_esteira,
            u.setor_codigo,
            u.modelo_codigo,
            p.cor_codigo,
            u.tamanho,
            t.saldo
         from tbpedido_item_processado u, tbproduto p, tbprogramacao s, TBREMESSA_ITEM_ALOCACAO t
         where u.controle = t.talao
             and p.codigo = u.produto_codigo
             and s.tipo = 'D'
             and s.tabela_id = u.controle
             and s.remessa_id = u.remessa
             and t.tabela_id = :PEDIDO
             and t.tab_item_id = :PED_ITEM_ID
             and t.origem_produto_id = :PRODUTO_ORIGEM_ID
             and t.tamanho = :TAMANHO
             and t.saldo > 0
             and t.REMESSA = u.remessa
         into AGRUPAMENTO_ID, AGP_ITEM_ID, GP_ID, UP_ID, MODELO_ID, COR_ID, tTAMANHO, :QUANTIDADE_ALOCAR
       do begin
         select
            s.TOTAL
         from SPC_TEMPO_GP(:GP_ID, :MODELO_ID, :COR_ID, :tTAMANHO, :QUANTIDADE_ALOCAR) s
         into :TOTALTEMPO;

         TOTALTEMPO = coalesce(TOTALTEMPO,0);

         if(TOTALTEMPO = 0)then
         begin
            exception "..." 'TEMPO DO MODELO NAO FOI ENCONTRADO, MODELO:'||MODELO_ID||', COR:'||COR_ID||', TAMANHO:'||tTAMANHO;
         end

         UPDATE TBAGRUPAMENTO_CARGA_SKU_UP A SET a.quantidade = a.quantidade - :QUANTIDADE_ALOCAR, a.necessidade = a.necessidade - :TOTALTEMPO
          WHERE AGRUPAMENTO_ID = :AGRUPAMENTO_ID
            AND AGRUP_PED_ID = :AGP_ITEM_ID
            and TIPO = 2;
       end
    end
    */

end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPC_TEMPO_GP_CONJUNTO (
    GP_ID numeric(15,4),
    MODELO_ID numeric(15,4),
    COR_ID numeric(15,4),
    TAMANHO numeric(15,4),
    QUANTIDADE numeric(15,4))
returns (
    TEMPOSETUP numeric(15,4),
    TEMPOSETCOR numeric(15,4),
    TEMPOREB numeric(15,4),
    TEMPOPROCESSO numeric(15,4),
    TOTALSETUP numeric(15,4),
    TOTALPROCESSO numeric(15,4),
    TOTAL numeric(15,4),
    QUANTIDADE_OPERADOR numeric(15,4),
    PECA_ID integer)
as
declare variable TTEMPOSETUP numeric(15,4);
declare variable TTEMPOSETCOR numeric(15,4);
declare variable TTEMPOREB numeric(15,4);
declare variable TTEMPOPROCESSO numeric(15,4);
declare variable TTOTALSETUP numeric(15,4);
declare variable TTOTALPROCESSO numeric(15,4);
declare variable TTOTAL numeric(15,4);
declare variable TQUANTIDADE_OPERADOR numeric(15,4);
declare variable FATOR_CONVERSAO numeric(15,4);
Begin

    TEMPOSETUP          = coalesce(TEMPOSETUP,0);
    TEMPOSETCOR         = coalesce(TEMPOSETCOR,0);
    TEMPOREB            = coalesce(TEMPOREB,0);
    TEMPOPROCESSO       = coalesce(TEMPOPROCESSO,0);
    TOTALSETUP          = coalesce(TOTALSETUP,0);
    TOTALPROCESSO       = coalesce(TOTALPROCESSO,0);
    TOTAL               = coalesce(TOTAL,0);
    QUANTIDADE_OPERADOR = coalesce(QUANTIDADE_OPERADOR,0);

    for
        select
            h.PECA_ID,
            h.modelo_id,
            :COR_ID as COR_ID,
            h.TAMANHO,
            h.fator_conversao
        from SPC_CONJUNTO(:MODELO_ID, :COR_ID, :TAMANHO) h
    into
        PECA_ID,
        MODELO_ID,
        COR_ID,
        TAMANHO,
        FATOR_CONVERSAO
    do begin

        SELECT
            PECA_ID,
            TEMPOSETUP,
            TEMPOSETCOR,
            TEMPOREB,
            TEMPOPROCESSO,
            TOTALSETUP,
            TOTALPROCESSO,
            TOTAL,
            QUANTIDADE_OPERADOR
        FROM SPC_TEMPO_GP(:GP_ID, :MODELO_ID, :COR_ID, :TAMANHO, :QUANTIDADE, :PECA_ID) S
        INTO
            PECA_ID,
            TTEMPOSETUP,
            TTEMPOSETCOR,
            TTEMPOREB,
            TTEMPOPROCESSO,
            TTOTALSETUP,
            TTOTALPROCESSO,
            TTOTAL,
            TQUANTIDADE_OPERADOR;

            TEMPOSETUP          = TEMPOSETUP            + (FATOR_CONVERSAO * coalesce(TTEMPOSETUP,0));
            TEMPOSETCOR         = TEMPOSETCOR           + (FATOR_CONVERSAO * coalesce(TTEMPOSETCOR,0));
            TEMPOREB            = TEMPOREB              + (FATOR_CONVERSAO * coalesce(TTEMPOREB,0));
            TEMPOPROCESSO       = TEMPOPROCESSO         + (FATOR_CONVERSAO * coalesce(TTEMPOPROCESSO,0));
            TOTALSETUP          = TOTALSETUP            + (FATOR_CONVERSAO * coalesce(TTOTALSETUP,0));
            TOTALPROCESSO       = TOTALPROCESSO         + (FATOR_CONVERSAO * coalesce(TTOTALPROCESSO,0));
            TOTAL               = TOTAL                 + (FATOR_CONVERSAO * coalesce(TTOTAL,0));
            QUANTIDADE_OPERADOR = QUANTIDADE_OPERADOR   + (FATOR_CONVERSAO * coalesce(TQUANTIDADE_OPERADOR,0));

    end

   suspend;
End
^

SET TERM ; ^

