SET TERM ^ ;

CREATE OR ALTER procedure SPU_TRATA_PED_ITEM_REMESSA5 (
    PEDIDO_1 integer,
    CONTROLE_1 integer,
    ALOCDESALOC char(1)
)
returns (
    ESTABELECIMENTO_ID integer,
    PEDIDO integer,
    CONTROLE integer,
    PRODUTO_ID integer,
    LOCALIZACAO_ID integer,
    TAMANHO integer,
    PERFIL_SKU varchar(10),
    PERFIL_COR varchar(10),
    REM_STATUS char(1),
    QTD_PRD numeric(15,4),
    REMESSA integer,
    TALAO integer,
    AGRUPAMENTO_ID integer,
    AGRUP_PED_ID integer,
    ID integer,
    QTD_DISP numeric(15,4),
    QTD_MULT integer,
    ALOC_MULT char(1))
as
declare variable VQTD_PRD integer;
declare variable VQTD_DISP integer;
declare variable TIPO_REMESSA varchar(20);
declare variable OUTRO_PRODUTO_ID integer;
declare variable CONF_AGRUPAMENTO_ID integer;
declare variable MODELO_CODIGO integer;
declare variable COR_ID integer;
declare variable QTD_SALDO numeric(15,4);
declare variable PRODUTO_ORIGEM integer;
declare variable TAMANHO_ORIGEM integer;
declare variable PROD_ETAPA integer;
declare variable PADRAO_PRIORIDADE integer;
BEGIN

  ALOC_MULT = COALESCE((SELECT FIRST 1 COALESCE(PF.ALOCAR_MULTIPLO,'0')
                 FROM TBPEDIDO P, TBPERFIL PF
                WHERE P.PEDIDO = :PEDIDO_1
                  AND P.CLASSIFICACAO = PF.ID
                  AND PF.TABELA = 'PED'),'0');

  PADRAO_PRIORIDADE = COALESCE(FN_PARAMETRO_V2('SISTEMA.PADRAO_PRIORIDADE_ALOCACAO_REMESSA'),0);

   FOR
       SELECT
           A.ESTABELECIMENTO_CODIGO, A.PEDIDO, A.CONTROLE, A.PRODUTO_CODIGO,
           A.LOCALIZACAO_ID, A.TAMANHO, A.PERFIL, A.PERFIL_COR,
    
           COALESCE((SELECT FIRST 1 T.STATUS FROM TBREMESSA_ITEM_TRATAMENTO T
                      WHERE T.TABELA_ID = A.PEDIDO
                        AND T.TAB_ITEM_ID = A.CONTROLE
                        AND T.ESTABELECIMENTO_ID = A.ESTABELECIMENTO_CODIGO
                        AND T.TAMANHO = A.TAMANHO
                        AND T.STATUS = '1'),'0') REM_STATUS,
    
           COALESCE((SELECT FIRST 1 C.QUANTIDADE FROM TBPEDIDO_ITEM_SALDO C
                      WHERE C.PEDIDO = A.PEDIDO
                        AND C.PEDIDO_ITEM_CONTROLE = A.CONTROLE),0.0000)
           -A.QTD_EST-A.QTD_AGP-A.QTD_REM,

           COALESCE((SELECT FIRST 1 C.QUANTIDADE FROM TBPEDIDO_ITEM_SALDO C
                      WHERE C.PEDIDO = A.PEDIDO
                        AND C.PEDIDO_ITEM_CONTROLE = A.CONTROLE),0.0000)
           -A.QTD_EST AS QTD_SALDO,
    
           COALESCE((SELECT FIRST 1 IIF(A.TAMANHO = 1,MPC.MU01,IIF(A.TAMANHO = 2,MPC.MU02,
                                    IIF(A.TAMANHO = 3,MPC.MU03,IIF(A.TAMANHO = 4,MPC.MU04,
                                    IIF(A.TAMANHO = 5,MPC.MU05,IIF(A.TAMANHO = 6,MPC.MU06,
                                    IIF(A.TAMANHO = 7,MPC.MU07,IIF(A.TAMANHO = 8,MPC.MU08,
                                    IIF(A.TAMANHO = 9,MPC.MU09,IIF(A.TAMANHO =10,MPC.MU10,
                                    IIF(A.TAMANHO =11,MPC.MU11,IIF(A.TAMANHO =12,MPC.MU12,
                                    IIF(A.TAMANHO =13,MPC.MU13,IIF(A.TAMANHO =14,MPC.MU14,
                                    IIF(A.TAMANHO =15,MPC.MU15,IIF(A.TAMANHO =16,MPC.MU16,
                                    IIF(A.TAMANHO =17,MPC.MU17,IIF(A.TAMANHO =18,MPC.MU18,
                                    IIF(A.TAMANHO =19,MPC.MU19,IIF(A.TAMANHO =20,MPC.MU20,
                                    1))))))))))))))))))))
                       FROM TBMODELO_PEDIDO_COTA MPC WHERE MODELO_ID = A.MODELO_CODIGO),1) QTD_MULT
    
    
      FROM TBPEDIDO_ITEM A
     WHERE PEDIDO = :PEDIDO_1
       AND CONTROLE = :CONTROLE_1
       AND SITUACAO = 1
       AND TAMANHO > 0
     --FOR UPDATE
       WITH LOCK
    
    INTO :ESTABELECIMENTO_ID, :PEDIDO, :CONTROLE, :PRODUTO_ID, :LOCALIZACAO_ID,
         :TAMANHO, :PERFIL_SKU, :PERFIL_COR, /*:TRATAMENTO_PEDIDO,*/ :REM_STATUS, :QTD_PRD, :QTD_SALDO, :QTD_MULT
    DO BEGIN

    IF (:REM_STATUS = '0') THEN
         BEGIN

          IF (:ALOCDESALOC = 'D') THEN
              BEGIN

                UPDATE TBREMESSA_ITEM_ALOCACAO SET
                TABELA_ID = 0,
                TAB_ITEM_ID = 0
                WHERE ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID
                  AND TABELA_ID =  :PEDIDO
                  AND TAB_ITEM_ID = :CONTROLE
                --AND TIPO = 'P'
                  AND IIF(TIPO_REMESSA = '22595', TAMANHO_ORIGEM = :TAMANHO, TAMANHO = :TAMANHO)
                  AND SALDO > 0;
    
                DELETE FROM TBAGRUPAMENTO_PEDIDO 
                WHERE ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID
                  AND TABELA_ID = :PEDIDO
                  AND TAB_ITEM_ID = :CONTROLE
                  AND SALDO = 0
                  AND TIPO = 'M';
    
                EXECUTE PROCEDURE SPU_DESALOCA_AGRUP_PEDIDO2(:ESTABELECIMENTO_ID,:PEDIDO,:CONTROLE,:TAMANHO);
              END
            
          IF (:ALOCDESALOC = 'A') THEN
          BEGIN

           IF (COALESCE(:QTD_MULT, 0) <= 0) THEN
               BEGIN
               :QTD_MULT = 1;
               END
    
           VQTD_PRD = :QTD_PRD;
           IF (MOD(:VQTD_PRD,:QTD_MULT) > 0 AND :ALOC_MULT = '1') THEN
               BEGIN
               :VQTD_PRD = :VQTD_PRD - (MOD(:VQTD_PRD,:QTD_MULT));
               END
    
           IF (:ALOC_MULT <> '1') THEN
               BEGIN
               QTD_MULT = 1;
               END
    
            IF (:VQTD_PRD > 0) THEN
              BEGIN
    
                /* VERIFICA SE TEM MULTIPLOS AGRUPAMENTOS*/
                SELECT FIRST 1
                    M.CONF_AGRUPAMENTO_ID,
                    M.CODIGO,
                    P.COR_CODIGO
                FROM TBPRODUTO P, TBMODELO M
                WHERE P.CODIGO = :PRODUTO_ID
                AND M.CODIGO = P.MODELO_CODIGO
                INTO CONF_AGRUPAMENTO_ID, MODELO_CODIGO, :COR_ID;
    
                CONF_AGRUPAMENTO_ID =  COALESCE(CONF_AGRUPAMENTO_ID,0);
    
                IF(CONF_AGRUPAMENTO_ID = 0)THEN
                BEGIN
                  AGRUP_PED_ID = 0;   
                 --SE O PADRAO DO SISTEMA FOR PELA DATA
    
                  IF(:PADRAO_PRIORIDADE = 0) THEN
                  BEGIN
                    FOR
                      SELECT
                            B.REMESSA,
                            B.TALAO,
                            B.AGRUPAMENTO_ID,
                            B.ID,
                            B.SALDO,
                            B.TIPO_REMESSA,
                            B.OUTRO_PRODUTO_ID,
                            B.PRODUTO_ORIGEM,
                            B.TAMANHO_ORIGEM
                        FROM(
                            SELECT B.ESTABELECIMENTO_ID, B.REMESSA, B.TALAO, B.AGRUPAMENTO_ID, B.ID, B.SALDO, B.TAMANHO, B.TIPO_REMESSA, B.PRODUTO_ID AS OUTRO_PRODUTO_ID, B.PRODUTO_ORIGEM, B.TAMANHO_ORIGEM
                            FROM TBREMESSA_ITEM_ALOCACAO B
                            WHERE B.ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID
                            AND B.LOCALIZACAO_ID = :LOCALIZACAO_ID
                            AND B.TABELA_ID = 0
                            AND B.TAMANHO = :TAMANHO
                            AND B.STATUS = '1'
                            AND B.PRODUTO_ID_ALOCACAO = :PRODUTO_ID
                            AND B.SALDO >= :QTD_MULT
                        ) B, TBPEDIDO_ITEM_PROCESSADO A, TBREMESSA R
                        
                        WHERE B.REMESSA = R.NUMERO
                        AND A.REMESSA = B.REMESSA
                        AND A.REMESSA = B.REMESSA
                        AND A.CONTROLE = B.TALAO
                        AND R.ORIGEM <> 22599
                        AND ((A.SITUACAO < 3) OR (R.ORIGEM = 22600 AND A.SITUACAO < 6))
                        AND STATUS_ALOCAR = 1
                        
                        ORDER BY R.DATA
    
                    INTO :REMESSA, :TALAO, :AGRUPAMENTO_ID, :ID, :QTD_DISP, :TIPO_REMESSA, :OUTRO_PRODUTO_ID, :PRODUTO_ORIGEM, :TAMANHO_ORIGEM
                    DO BEGIN
                       :PRODUTO_ORIGEM = NULL;--COALESCE(PRODUTO_ORIGEM, PRODUTO_ID);
                       :TAMANHO_ORIGEM = NULL;--COALESCE(TAMANHO_ORIGEM, TAMANHO);

                          IF (:ID > 0) THEN
                               BEGIN
    
                                    VQTD_DISP = :QTD_DISP;
                                    --VERIFICA SE QUANTIDADE DISPONIVEL AO MULTIPLI DA QUANTIDADE PADRAO
                                    IF (MOD(:VQTD_DISP,:QTD_MULT) > 0 AND :ALOC_MULT = '1') THEN
                                        BEGIN
                                         :VQTD_DISP = :VQTD_DISP - (MOD(:VQTD_DISP,:QTD_MULT));
                                        END
                
                                    IF (:VQTD_PRD > 0 AND :VQTD_DISP > 0) THEN
                                        BEGIN
                        
                                        IF (:VQTD_PRD < :VQTD_DISP) THEN
                                           BEGIN
                                            IF (:AGRUPAMENTO_ID > 0) THEN-- AND :TRATAMENTO_PEDIDO = '2') THEN
                                                BEGIN
                                                UPDATE TBREMESSA_ITEM_ALOCACAO SET SALDO = SALDO - :VQTD_PRD, QUANTIDADE = QUANTIDADE - :VQTD_PRD
                                                WHERE ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID
                                                AND AGRUPAMENTO_ID = :AGRUPAMENTO_ID
                                                AND ID = :ID;
                
                
                                                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) VALUES (
                                                        :ESTABELECIMENTO_ID, :AGRUPAMENTO_ID, :AGRUP_PED_ID,
                                                        :PEDIDO, :CONTROLE, :PRODUTO_ID, :TAMANHO, :VQTD_PRD,
                                                        0, 'M', 0, :PERFIL_SKU, 0, :PERFIL_COR, 0, :PRODUTO_ORIGEM, :TAMANHO_ORIGEM);
                                                    END ELSE
                                                    BEGIN
                                                        UPDATE TBAGRUPAMENTO_PEDIDO SET
                                                        QUANTIDADE = QUANTIDADE + :VQTD_PRD
                                                        WHERE ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID
                                                        AND AGRUPAMENTO_ID = :AGRUPAMENTO_ID
                                                        AND ID = :AGRUP_PED_ID
                                                        AND TABELA_ID = :PEDIDO
                                                        AND TAB_ITEM_ID = :CONTROLE
                                                        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)
                                                VALUES (:ESTABELECIMENTO_ID, :PEDIDO, :CONTROLE, 'P',
                                                :LOCALIZACAO_ID, :OUTRO_PRODUTO_ID, :TAMANHO, :VQTD_PRD,
                                                :VQTD_PRD, :REMESSA, :TALAO, :AGRUPAMENTO_ID, :AGRUP_PED_ID, :TIPO_REMESSA, :PRODUTO_ID, :PRODUTO_ORIGEM, :TAMANHO_ORIGEM);
                                                END
                
                                            VQTD_PRD = 0;
                
                                            DELETE FROM TBPEDIDO_CONSUMO
                                            WHERE ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID
                                              AND PEDIDO_ID = :PEDIDO
                                              AND PEDIDO_ITEM_ID = :CONTROLE
                                              AND TAMANHO_ITEM = :TAMANHO
                                              AND TIPO = 'C';
                
                                            --EXIT;
                                           END ELSE
                                        IF (:VQTD_PRD >= :VQTD_DISP) THEN
                                           BEGIN
                                            IF (:AGRUPAMENTO_ID > 0) THEN-- AND :TRATAMENTO_PEDIDO = '2') THEN
                                                BEGIN
                                                DELETE FROM TBREMESSA_ITEM_ALOCACAO
                                                WHERE ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID
                                                AND AGRUPAMENTO_ID = :AGRUPAMENTO_ID
                                                AND ID = :ID;
                
                                                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) VALUES (
                                                        :ESTABELECIMENTO_ID, :AGRUPAMENTO_ID, :AGRUP_PED_ID,
                                                        :PEDIDO, :CONTROLE, :PRODUTO_ID, :TAMANHO, :VQTD_DISP,
                                                        0, 'M', 0, :PERFIL_SKU, 0, :PERFIL_COR, 0, :PRODUTO_ORIGEM, :TAMANHO_ORIGEM);
                                                    END ELSE
                                                    BEGIN
                                                        UPDATE TBAGRUPAMENTO_PEDIDO SET
                                                        QUANTIDADE = QUANTIDADE + :VQTD_DISP
                                                        WHERE ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID
                                                        AND AGRUPAMENTO_ID = :AGRUPAMENTO_ID
                                                        AND ID = :AGRUP_PED_ID
                                                        AND TABELA_ID = :PEDIDO
                                                        AND TAB_ITEM_ID = :CONTROLE
                                                        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)
                                                VALUES (:ESTABELECIMENTO_ID, :PEDIDO, :CONTROLE, 'P',
                                                :LOCALIZACAO_ID, :OUTRO_PRODUTO_ID, :TAMANHO, :VQTD_DISP,
                                                :VQTD_DISP, :REMESSA, :TALAO, :AGRUPAMENTO_ID, :AGRUP_PED_ID, :TIPO_REMESSA, :PRODUTO_ID, :PRODUTO_ORIGEM, :TAMANHO_ORIGEM);
                                                END
                
                                            VQTD_PRD = :VQTD_PRD - :VQTD_DISP;
                
                                            DELETE FROM TBPEDIDO_CONSUMO
                                            WHERE ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID
                                              AND PEDIDO_ID = :PEDIDO
                                              AND PEDIDO_ITEM_ID = :CONTROLE
                                              AND TAMANHO_ITEM = :TAMANHO
                                              AND TIPO = 'C';
                                           END
                        
                                       END
                                  END
                        END
                  END

                 --SE O PADRAO DO SISTEMA FOR PELA PROXIMIDADE DE CONCLUSAO
                 IF(:PADRAO_PRIORIDADE = 1) THEN
                 BEGIN
                    FOR
                        SELECT
                            REMESSA,
                            TALAO,
                            AGRUPAMENTO_ID,
                            ID,
                            SALDO,
                            TIPO_REMESSA,
                            OUTRO_PRODUTO_ID,
                            PRODUTO_ORIGEM,
                            TAMANHO_ORIGEM,
                            PROD_ETAPA
                      FROM (
                          SELECT
                                B.REMESSA,
                                B.TALAO,
                                B.AGRUPAMENTO_ID,
                                B.ID,
                                B.SALDO,
                                B.TAMANHO,
                                B.TIPO_REMESSA,
                                B.OUTRO_PRODUTO_ID,
                                B.PRODUTO_ORIGEM,
                                B.TAMANHO_ORIGEM,
                                COALESCE((SELECT MAX(S.ORDEM) - MAX(IIF(S.SITUACAO = 1, S.ORDEM,0)) FROM TBREMESSA_SETOR S WHERE S.REMESSA = A.REMESSA AND S.TALAO_ID = A.CONTROLE),0) AS PROD_ETAPA
                            FROM(
                                SELECT B.ESTABELECIMENTO_ID, B.REMESSA, B.TALAO, B.AGRUPAMENTO_ID, B.ID, B.SALDO, B.TAMANHO, B.TIPO_REMESSA, B.PRODUTO_ID AS OUTRO_PRODUTO_ID, B.PRODUTO_ORIGEM, B.TAMANHO_ORIGEM
                                FROM TBREMESSA_ITEM_ALOCACAO B
                                WHERE B.ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID
                                AND B.LOCALIZACAO_ID = :LOCALIZACAO_ID
                                AND B.TABELA_ID = 0
                                AND B.TAMANHO = :TAMANHO
                                AND B.STATUS = '1'
                                AND B.PRODUTO_ID_ALOCACAO = :PRODUTO_ID
                                AND B.SALDO >= :QTD_MULT
                            ) B, TBPEDIDO_ITEM_PROCESSADO A, TBREMESSA R
                            
                            WHERE B.REMESSA = R.NUMERO
                            AND A.REMESSA = B.REMESSA
                            AND A.REMESSA = B.REMESSA
                            AND A.CONTROLE = B.TALAO
                            AND R.ORIGEM <> 22599
                            AND ((A.SITUACAO < 3) OR (R.ORIGEM = 22600 AND A.SITUACAO < 6))
                            AND STATUS_ALOCAR = 1
                            
                            ORDER BY R.DATA
                          )
                          ORDER BY PROD_ETAPA ASCENDING

    
                    INTO :REMESSA, :TALAO, :AGRUPAMENTO_ID, :ID, :QTD_DISP, :TIPO_REMESSA, :OUTRO_PRODUTO_ID, :PRODUTO_ORIGEM, :TAMANHO_ORIGEM, PROD_ETAPA
                    DO BEGIN
                       :PRODUTO_ORIGEM = NULL;--COALESCE(PRODUTO_ORIGEM, PRODUTO_ID);
                       :TAMANHO_ORIGEM = NULL;--COALESCE(TAMANHO_ORIGEM, TAMANHO);

                          IF (:ID > 0) THEN
                               BEGIN
    
                                    VQTD_DISP = :QTD_DISP;
                                    --VERIFICA SE QUANTIDADE DISPONIVEL AO MULTIPLI DA QUANTIDADE PADRAO
                                    IF (MOD(:VQTD_DISP,:QTD_MULT) > 0 AND :ALOC_MULT = '1') THEN
                                        BEGIN
                                         :VQTD_DISP = :VQTD_DISP - (MOD(:VQTD_DISP,:QTD_MULT));
                                        END
                
                                    IF (:VQTD_PRD > 0 AND :VQTD_DISP > 0) THEN
                                        BEGIN
                        
                                        IF (:VQTD_PRD < :VQTD_DISP) THEN
                                           BEGIN
                                            IF (:AGRUPAMENTO_ID > 0) THEN-- AND :TRATAMENTO_PEDIDO = '2') THEN
                                                BEGIN
                                                UPDATE TBREMESSA_ITEM_ALOCACAO SET SALDO = SALDO - :VQTD_PRD, QUANTIDADE = QUANTIDADE - :VQTD_PRD
                                                WHERE ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID
                                                AND AGRUPAMENTO_ID = :AGRUPAMENTO_ID
                                                AND ID = :ID;
                
                
                                                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) VALUES (
                                                        :ESTABELECIMENTO_ID, :AGRUPAMENTO_ID, :AGRUP_PED_ID,
                                                        :PEDIDO, :CONTROLE, :PRODUTO_ID, :TAMANHO, :VQTD_PRD,
                                                        0, 'M', 0, :PERFIL_SKU, 0, :PERFIL_COR, 0, :PRODUTO_ORIGEM, :TAMANHO_ORIGEM);
                                                    END ELSE
                                                    BEGIN
                                                        UPDATE TBAGRUPAMENTO_PEDIDO SET
                                                        QUANTIDADE = QUANTIDADE + :VQTD_PRD
                                                        WHERE ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID
                                                        AND AGRUPAMENTO_ID = :AGRUPAMENTO_ID
                                                        AND ID = :AGRUP_PED_ID
                                                        AND TABELA_ID = :PEDIDO
                                                        AND TAB_ITEM_ID = :CONTROLE
                                                        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)
                                                VALUES (:ESTABELECIMENTO_ID, :PEDIDO, :CONTROLE, 'P',
                                                :LOCALIZACAO_ID, :OUTRO_PRODUTO_ID, :TAMANHO, :VQTD_PRD,
                                                :VQTD_PRD, :REMESSA, :TALAO, :AGRUPAMENTO_ID, :AGRUP_PED_ID, :TIPO_REMESSA, :PRODUTO_ID, :PRODUTO_ORIGEM, :TAMANHO_ORIGEM);
                                                END
                
                                            VQTD_PRD = 0;
                
                                            DELETE FROM TBPEDIDO_CONSUMO
                                            WHERE ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID
                                              AND PEDIDO_ID = :PEDIDO
                                              AND PEDIDO_ITEM_ID = :CONTROLE
                                              AND TAMANHO_ITEM = :TAMANHO
                                              AND TIPO = 'C';
                
                                            --EXIT;
                                           END ELSE
                                        IF (:VQTD_PRD >= :VQTD_DISP) THEN
                                           BEGIN
                                            IF (:AGRUPAMENTO_ID > 0) THEN-- AND :TRATAMENTO_PEDIDO = '2') THEN
                                                BEGIN
                                                DELETE FROM TBREMESSA_ITEM_ALOCACAO
                                                WHERE ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID
                                                AND AGRUPAMENTO_ID = :AGRUPAMENTO_ID
                                                AND ID = :ID;
                
                                                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) VALUES (
                                                        :ESTABELECIMENTO_ID, :AGRUPAMENTO_ID, :AGRUP_PED_ID,
                                                        :PEDIDO, :CONTROLE, :PRODUTO_ID, :TAMANHO, :VQTD_DISP,
                                                        0, 'M', 0, :PERFIL_SKU, 0, :PERFIL_COR, 0, :PRODUTO_ORIGEM, :TAMANHO_ORIGEM);
                                                    END ELSE
                                                    BEGIN
                                                        UPDATE TBAGRUPAMENTO_PEDIDO SET
                                                        QUANTIDADE = QUANTIDADE + :VQTD_DISP
                                                        WHERE ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID
                                                        AND AGRUPAMENTO_ID = :AGRUPAMENTO_ID
                                                        AND ID = :AGRUP_PED_ID
                                                        AND TABELA_ID = :PEDIDO
                                                        AND TAB_ITEM_ID = :CONTROLE
                                                        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)
                                                VALUES (:ESTABELECIMENTO_ID, :PEDIDO, :CONTROLE, 'P',
                                                :LOCALIZACAO_ID, :OUTRO_PRODUTO_ID, :TAMANHO, :VQTD_DISP,
                                                :VQTD_DISP, :REMESSA, :TALAO, :AGRUPAMENTO_ID, :AGRUP_PED_ID, :TIPO_REMESSA, :PRODUTO_ID, :PRODUTO_ORIGEM, :TAMANHO_ORIGEM);
                                                END
                
                                            VQTD_PRD = :VQTD_PRD - :VQTD_DISP;
                
                                            DELETE FROM TBPEDIDO_CONSUMO
                                            WHERE ESTABELECIMENTO_ID = :ESTABELECIMENTO_ID
                                              AND PEDIDO_ID = :PEDIDO
                                              AND PEDIDO_ITEM_ID = :CONTROLE
                                              AND TAMANHO_ITEM = :TAMANHO
                                              AND TIPO = 'C';
                                           END
                        
                                       END
                                  END
                              END
                         END


                        END ELSE
                        BEGIN
                            
                            VQTD_PRD = :QTD_SALDO;

                            IF (MOD(:VQTD_PRD,:QTD_MULT) > 0 AND :ALOC_MULT = '1') THEN
                            BEGIN
                                :VQTD_PRD = :VQTD_PRD - (MOD(:VQTD_PRD,:QTD_MULT));
                            END
                            
                            IF (:ALOC_MULT <> '1') THEN
                            BEGIN
                                QTD_MULT = 1;
                            END
                    
                            IF (:VQTD_PRD > 0) THEN
                            BEGIN

                                EXECUTE PROCEDURE SPI_TRATA_PEDIDO_MULT_TAL(
                                     :CONF_AGRUPAMENTO_ID,
                                     :PEDIDO,
                                     :CONTROLE,
                                     NULL,
                                     :MODELO_CODIGO,
                                     :PRODUTO_ID,
                                     :COR_ID,
                                     :PERFIL_SKU,
                                     :TAMANHO,
                                     :VQTD_PRD,
                                     :QTD_MULT,
                                     :ESTABELECIMENTO_ID,
                                     CURRENT_DATE,
                                     :PERFIL_COR,
                                     :VQTD_PRD,
                                     :PRODUTO_ID,
                                     :TAMANHO
                                );
    
                                --EXCEPTION "..." 'TRATAMENTO DE PEDIDOS COM MULTIPLOS AGRUPAMENTOS N??O CONFIGURADO';
                           END
                        END
                    END
               END
         END
     END
END
^

SET TERM ; ^


