/******************************************************************************/
/****                                Tables                                ****/
/******************************************************************************/


CREATE GENERATOR GTBTEMP_ESTOQUE_CATALOGO;

CREATE TABLE TBTEMP_ESTOQUE_CATALOGO (
    ID                   INTEGER NOT NULL,
    CATALOGO_PRODUTO_ID  INTEGER,
    MODELO_ID            INTEGER,
    TIPO_ESTOQUE         INTEGER,
    ESTOQUE              BLOB SUB_TYPE 1 SEGMENT SIZE 80
);




/******************************************************************************/
/****                             Primary keys                             ****/
/******************************************************************************/

ALTER TABLE TBTEMP_ESTOQUE_CATALOGO ADD CONSTRAINT PK_TBTEMP_ESTOQUE_CATALOGO PRIMARY KEY (ID);


/******************************************************************************/
/****                               Indices                                ****/
/******************************************************************************/

CREATE INDEX ITBTEMP_ESTOQUE_CATALOGO_01 ON TBTEMP_ESTOQUE_CATALOGO (CATALOGO_PRODUTO_ID);
CREATE INDEX ITBTEMP_ESTOQUE_CATALOGO_02 ON TBTEMP_ESTOQUE_CATALOGO (MODELO_ID);
CREATE INDEX ITBTEMP_ESTOQUE_CATALOGO_03 ON TBTEMP_ESTOQUE_CATALOGO (TIPO_ESTOQUE);


/******************************************************************************/
/****                               Triggers                               ****/
/******************************************************************************/



SET TERM ^ ;



/******************************************************************************/
/****                         Triggers for tables                          ****/
/******************************************************************************/



/* Trigger: TTBTEMP_ESTOQUE_CATALOGO_B01I */
CREATE OR ALTER TRIGGER TTBTEMP_ESTOQUE_CATALOGO_B01I FOR TBTEMP_ESTOQUE_CATALOGO
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
    IF (NEW.ID IS NULL) THEN
        NEW.ID = GEN_ID(GTBTEMP_ESTOQUE_CATALOGO, 1);
END
^

SET TERM ; ^



/******************************************************************************/
/****                         Fields descriptions                          ****/
/******************************************************************************/

COMMENT ON COLUMN TBTEMP_ESTOQUE_CATALOGO.TIPO_ESTOQUE IS 
'1 - FISICO - ALOCADO;
2 - FISICO - PEDIDO EM ABERTO;
3 - FISICO;';


/******************************************************************************/
/******************************************************************************/
/******************************************************************************/


ALTER TABLE TBTEMP_ESTOQUE_CATALOGO
	ADD ESTABELECIMENTO_ID INTEGER,
	ADD LOCALIZACAO_ID INTEGER;

/******************************************************************************/

CREATE INDEX ITBTEMP_ESTOQUE_CATALOGO_04
ON TBTEMP_ESTOQUE_CATALOGO (ESTABELECIMENTO_ID);

CREATE INDEX ITBTEMP_ESTOQUE_CATALOGO_05
ON TBTEMP_ESTOQUE_CATALOGO (LOCALIZACAO_ID);


/******************************************************************************/
/******************************************************************************/
/******************************************************************************/


SET TERM ^ ;

CREATE OR ALTER procedure SPU_TEMP_ESTOQUE_CATALOGO (
    ICATALOGO_PRODUTO_ID integer = 0)
returns (
    OARRAY_ESTOQUE_CORES blob sub_type 1 segment size 80)
as
declare variable VESTABELECIMENTO_ID integer;
declare variable VLOCALIZACAO_ID integer;
declare variable VTIPO_ESTOQUE integer;
declare variable VMODELO_ID integer;
declare variable VCOR_ID integer;
declare variable VPRODUTO_ID integer;
declare variable VTAMANHO_ID integer;
declare variable V2_COR_ID integer;
declare variable V2_PRODUTO_ID integer;
declare variable V2_ESTOQUE_TOTAL numeric(18,8);
declare variable V2_DISPONIVEL numeric(18,8);
declare variable V2_DISPONIVEL_01 numeric(18,8);
declare variable V2_DISPONIVEL_02 numeric(18,8);
declare variable V2_DISPONIVEL_03 numeric(18,8);
declare variable V2_DISPONIVEL_04 numeric(18,8);
declare variable V2_DISPONIVEL_05 numeric(18,8);
declare variable V2_DISPONIVEL_06 numeric(18,8);
declare variable V2_DISPONIVEL_07 numeric(18,8);
declare variable V2_DISPONIVEL_08 numeric(18,8);
declare variable V2_DISPONIVEL_09 numeric(18,8);
declare variable V2_DISPONIVEL_10 numeric(18,8);
declare variable V2_DISPONIVEL_11 numeric(18,8);
declare variable V2_DISPONIVEL_12 numeric(18,8);
declare variable V2_DISPONIVEL_13 numeric(18,8);
declare variable V2_DISPONIVEL_14 numeric(18,8);
declare variable V2_DISPONIVEL_15 numeric(18,8);
declare variable V2_DISPONIVEL_16 numeric(18,8);
declare variable V2_DISPONIVEL_17 numeric(18,8);
declare variable V2_DISPONIVEL_18 numeric(18,8);
declare variable V2_DISPONIVEL_19 numeric(18,8);
declare variable V2_DISPONIVEL_20 numeric(18,8);
declare variable V2_SALDO_PEDIDO numeric(18,8);
declare variable V2_SALDO_PEDIDO_01 numeric(18,8);
declare variable V2_SALDO_PEDIDO_02 numeric(18,8);
declare variable V2_SALDO_PEDIDO_03 numeric(18,8);
declare variable V2_SALDO_PEDIDO_04 numeric(18,8);
declare variable V2_SALDO_PEDIDO_05 numeric(18,8);
declare variable V2_SALDO_PEDIDO_06 numeric(18,8);
declare variable V2_SALDO_PEDIDO_07 numeric(18,8);
declare variable V2_SALDO_PEDIDO_08 numeric(18,8);
declare variable V2_SALDO_PEDIDO_09 numeric(18,8);
declare variable V2_SALDO_PEDIDO_10 numeric(18,8);
declare variable V2_SALDO_PEDIDO_11 numeric(18,8);
declare variable V2_SALDO_PEDIDO_12 numeric(18,8);
declare variable V2_SALDO_PEDIDO_13 numeric(18,8);
declare variable V2_SALDO_PEDIDO_14 numeric(18,8);
declare variable V2_SALDO_PEDIDO_15 numeric(18,8);
declare variable V2_SALDO_PEDIDO_16 numeric(18,8);
declare variable V2_SALDO_PEDIDO_17 numeric(18,8);
declare variable V2_SALDO_PEDIDO_18 numeric(18,8);
declare variable V2_SALDO_PEDIDO_19 numeric(18,8);
declare variable V2_SALDO_PEDIDO_20 numeric(18,8);
declare variable V2_FISICO numeric(18,8);
declare variable V2_FISICO_01 numeric(18,8);
declare variable V2_FISICO_02 numeric(18,8);
declare variable V2_FISICO_03 numeric(18,8);
declare variable V2_FISICO_04 numeric(18,8);
declare variable V2_FISICO_05 numeric(18,8);
declare variable V2_FISICO_06 numeric(18,8);
declare variable V2_FISICO_07 numeric(18,8);
declare variable V2_FISICO_08 numeric(18,8);
declare variable V2_FISICO_09 numeric(18,8);
declare variable V2_FISICO_10 numeric(18,8);
declare variable V2_FISICO_11 numeric(18,8);
declare variable V2_FISICO_12 numeric(18,8);
declare variable V2_FISICO_13 numeric(18,8);
declare variable V2_FISICO_14 numeric(18,8);
declare variable V2_FISICO_15 numeric(18,8);
declare variable V2_FISICO_16 numeric(18,8);
declare variable V2_FISICO_17 numeric(18,8);
declare variable V2_FISICO_18 numeric(18,8);
declare variable V2_FISICO_19 numeric(18,8);
declare variable V2_FISICO_20 numeric(18,8);
BEGIN

    FOR
        SELECT DISTINCT
            T2.ESTABELECIMENTO_ID,
            T2.LOCALIZACAO_ID,
            T2.ESTOQUE,

            T.MODELO_ID,
            T.COR_ID,
            T.PRODUTO_ID,
            T.TAMANHO_ID

        FROM TBCATALOGO_PRODUTO T2, TBCATALOGO_PRODUTO_IMPORT T
        WHERE T.ID > 0
        AND CURRENT_DATE BETWEEN T2.DATA_INICIAL AND T2.DATA_FIM
        AND T2.ORIGEM = '12461'
        AND IIF(COALESCE(:ICATALOGO_PRODUTO_ID, 0) > 0, T.CATALOGO_PRODUTO_ID = COALESCE(:ICATALOGO_PRODUTO_ID, 0), TRUE = TRUE)

    INTO
        :VESTABELECIMENTO_ID,
        :VLOCALIZACAO_ID,
        :VTIPO_ESTOQUE,
        :VMODELO_ID,
        :VCOR_ID,
        :VPRODUTO_ID,
        :VTAMANHO_ID
    
    DO
    BEGIN

        DELETE FROM TBTEMP_ESTOQUE_CATALOGO
            WHERE ESTABELECIMENTO_ID = :VESTABELECIMENTO_ID
            AND LOCALIZACAO_ID = :VLOCALIZACAO_ID
            AND MODELO_ID = :VMODELO_ID;

        /************************************************************************************/

        :OARRAY_ESTOQUE_CORES = '';


        IF (:VCOR_ID > 0) THEN
        BEGIN

            FOR  
                SELECT FIRST 1
                    X.COR_ID,
                    X.PRODUTO_ID,

                    X.DISPONIVEL,
                    FN_CALC_PRECISION_V2(X.FISICO, X.PEDIDO, '-', 8) AS SALDO_PEDIDO,
                    X.FISICO

                FROM (
                    SELECT
                        CAST(:VCOR_ID AS INTEGER) AS COR_ID,
                        CAST(:VPRODUTO_ID AS INTEGER) AS PRODUTO_ID,

                        FN_ESTOQUE_SALDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, :VPRODUTO_ID, :VTAMANHO_ID) AS FISICO,
                        FN_ESTOQUE_SALDO_DISPONIVEL(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, :VPRODUTO_ID, :VTAMANHO_ID) AS DISPONIVEL,
                        FN_EMPENHADO_PEDIDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, :VPRODUTO_ID, :VTAMANHO_ID) AS PEDIDO
    
                    FROM RDB$DATABASE
                ) X

            INTO
                :V2_COR_ID,
                :V2_PRODUTO_ID,

                :V2_DISPONIVEL,
                :V2_SALDO_PEDIDO,
                :V2_FISICO

            DO
            BEGIN

                :V2_ESTOQUE_TOTAL = 0;

                IF (:VTIPO_ESTOQUE = 1) THEN
                BEGIN

                    :V2_ESTOQUE_TOTAL = :V2_DISPONIVEL;

                    /******************************************************************/

                    IF (COALESCE(:OARRAY_ESTOQUE_CORES, '') <> '') THEN
                    BEGIN
        
                        :OARRAY_ESTOQUE_CORES = :OARRAY_ESTOQUE_CORES||','||FN_TO_JSON_V3(
                                                                                FN_TO_PAR_JSON_V3('COR_ID', :V2_COR_ID),
                                                                                FN_TO_PAR_JSON_V3('PRODUTO_ID', :V2_PRODUTO_ID),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE', :V2_ESTOQUE_TOTAL),
                                    
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_'||FN_LPAD(:VTAMANHO_ID, 2, '0'), :V2_DISPONIVEL)
                                                                                );
        
                    END ELSE
                    BEGIN
        
                        :OARRAY_ESTOQUE_CORES = FN_TO_JSON_V3(
                                                    FN_TO_PAR_JSON_V3('COR_ID', :V2_COR_ID),
                                                    FN_TO_PAR_JSON_V3('PRODUTO_ID', :V2_PRODUTO_ID),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE', :V2_ESTOQUE_TOTAL),
        
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_'||FN_LPAD(:VTAMANHO_ID, 2, '0'), :V2_DISPONIVEL)
                                                    );
        
                    END
                END ELSE
                IF (:VTIPO_ESTOQUE = 2) THEN
                BEGIN

                    :V2_ESTOQUE_TOTAL = :V2_SALDO_PEDIDO;

                    /******************************************************************/

                    IF (COALESCE(:OARRAY_ESTOQUE_CORES, '') <> '') THEN
                    BEGIN
        
                        :OARRAY_ESTOQUE_CORES = :OARRAY_ESTOQUE_CORES||','||FN_TO_JSON_V3(
                                                                                FN_TO_PAR_JSON_V3('COR_ID', :V2_COR_ID),
                                                                                FN_TO_PAR_JSON_V3('PRODUTO_ID', :V2_PRODUTO_ID),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE', :V2_ESTOQUE_TOTAL),
                                    
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_'||FN_LPAD(:VTAMANHO_ID, 2, '0'), :V2_SALDO_PEDIDO)
                                                                                );
        
                    END ELSE
                    BEGIN
        
                        :OARRAY_ESTOQUE_CORES = FN_TO_JSON_V3(
                                                    FN_TO_PAR_JSON_V3('COR_ID', :V2_COR_ID),
                                                    FN_TO_PAR_JSON_V3('PRODUTO_ID', :V2_PRODUTO_ID),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE', :V2_ESTOQUE_TOTAL),
        
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_'||FN_LPAD(:VTAMANHO_ID, 2, '0'), :V2_SALDO_PEDIDO)
                                                    );
        
                    END
                END ELSE
                IF (:VTIPO_ESTOQUE = 3) THEN
                BEGIN

                    :V2_ESTOQUE_TOTAL = :V2_FISICO;

                    /******************************************************************/

                    IF (COALESCE(:OARRAY_ESTOQUE_CORES, '') <> '') THEN
                    BEGIN
        
                        :OARRAY_ESTOQUE_CORES = :OARRAY_ESTOQUE_CORES||','||FN_TO_JSON_V3(
                                                                                FN_TO_PAR_JSON_V3('COR_ID', :V2_COR_ID),
                                                                                FN_TO_PAR_JSON_V3('PRODUTO_ID', :V2_PRODUTO_ID),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE', :V2_ESTOQUE_TOTAL),
                                    
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_'||FN_LPAD(:VTAMANHO_ID, 2, '0'), :V2_FISICO)
                                                                                );
        
                    END ELSE
                    BEGIN
        
                        :OARRAY_ESTOQUE_CORES = FN_TO_JSON_V3(
                                                    FN_TO_PAR_JSON_V3('COR_ID', :V2_COR_ID),
                                                    FN_TO_PAR_JSON_V3('PRODUTO_ID', :V2_PRODUTO_ID),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE', :V2_ESTOQUE_TOTAL),
        
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_'||FN_LPAD(:VTAMANHO_ID, 2, '0'), :V2_FISICO)
                                                    );
        
                    END
                END
                    

            END

            INSERT INTO TBTEMP_ESTOQUE_CATALOGO (ESTABELECIMENTO_ID, LOCALIZACAO_ID, MODELO_ID, TIPO_ESTOQUE, ESTOQUE)
                VALUES (:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, :VMODELO_ID, :VTIPO_ESTOQUE, '['||:OARRAY_ESTOQUE_CORES||']');
    
        END ELSE
        BEGIN

            FOR
                SELECT
                    X.COR_ID,
                    X.PRODUTO_ID,
    
                    X.DISPONIVEL_01, X.DISPONIVEL_02, X.DISPONIVEL_03, X.DISPONIVEL_04, X.DISPONIVEL_05,
                    X.DISPONIVEL_06, X.DISPONIVEL_07, X.DISPONIVEL_08, X.DISPONIVEL_09, X.DISPONIVEL_10,
                    X.DISPONIVEL_11, X.DISPONIVEL_12, X.DISPONIVEL_13, X.DISPONIVEL_14, X.DISPONIVEL_15,
                    X.DISPONIVEL_16, X.DISPONIVEL_17, X.DISPONIVEL_18, X.DISPONIVEL_19, X.DISPONIVEL_20,
    
                    FN_CALC_PRECISION_V2(X.FISICO_01, X.PEDIDO_01, '-', 8) AS SALDO_PEDIDO_01, FN_CALC_PRECISION_V2(X.FISICO_02, X.PEDIDO_02, '-', 8) AS SALDO_PEDIDO_02, FN_CALC_PRECISION_V2(X.FISICO_03, X.PEDIDO_03, '-', 8) AS SALDO_PEDIDO_03, FN_CALC_PRECISION_V2(X.FISICO_04, X.PEDIDO_04, '-', 8) AS SALDO_PEDIDO_04, FN_CALC_PRECISION_V2(X.FISICO_05, X.PEDIDO_05, '-', 8) AS SALDO_PEDIDO_05,
                    FN_CALC_PRECISION_V2(X.FISICO_06, X.PEDIDO_06, '-', 8) AS SALDO_PEDIDO_06, FN_CALC_PRECISION_V2(X.FISICO_07, X.PEDIDO_07, '-', 8) AS SALDO_PEDIDO_07, FN_CALC_PRECISION_V2(X.FISICO_08, X.PEDIDO_08, '-', 8) AS SALDO_PEDIDO_08, FN_CALC_PRECISION_V2(X.FISICO_09, X.PEDIDO_09, '-', 8) AS SALDO_PEDIDO_09, FN_CALC_PRECISION_V2(X.FISICO_10, X.PEDIDO_10, '-', 8) AS SALDO_PEDIDO_10,
                    FN_CALC_PRECISION_V2(X.FISICO_11, X.PEDIDO_11, '-', 8) AS SALDO_PEDIDO_11, FN_CALC_PRECISION_V2(X.FISICO_12, X.PEDIDO_12, '-', 8) AS SALDO_PEDIDO_12, FN_CALC_PRECISION_V2(X.FISICO_13, X.PEDIDO_13, '-', 8) AS SALDO_PEDIDO_13, FN_CALC_PRECISION_V2(X.FISICO_14, X.PEDIDO_14, '-', 8) AS SALDO_PEDIDO_14, FN_CALC_PRECISION_V2(X.FISICO_15, X.PEDIDO_15, '-', 8) AS SALDO_PEDIDO_15,
                    FN_CALC_PRECISION_V2(X.FISICO_16, X.PEDIDO_16, '-', 8) AS SALDO_PEDIDO_16, FN_CALC_PRECISION_V2(X.FISICO_17, X.PEDIDO_17, '-', 8) AS SALDO_PEDIDO_17, FN_CALC_PRECISION_V2(X.FISICO_18, X.PEDIDO_18, '-', 8) AS SALDO_PEDIDO_18, FN_CALC_PRECISION_V2(X.FISICO_19, X.PEDIDO_19, '-', 8) AS SALDO_PEDIDO_19, FN_CALC_PRECISION_V2(X.FISICO_20, X.PEDIDO_20, '-', 8) AS SALDO_PEDIDO_20,
    
                    X.FISICO_01, X.FISICO_02, X.FISICO_03, X.FISICO_04, X.FISICO_05,
                    X.FISICO_06, X.FISICO_07, X.FISICO_08, X.FISICO_09, X.FISICO_10,
                    X.FISICO_11, X.FISICO_12, X.FISICO_13, X.FISICO_14, X.FISICO_15,
                    X.FISICO_16, X.FISICO_17, X.FISICO_18, X.FISICO_19, X.FISICO_20
    
                FROM (
                    SELECT
                        C.CODIGO AS COR_ID,
                        P.CODIGO AS PRODUTO_ID,
                    
                        FN_ESTOQUE_SALDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO,  1) AS FISICO_01,
                        FN_ESTOQUE_SALDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO,  2) AS FISICO_02,
                        FN_ESTOQUE_SALDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO,  3) AS FISICO_03,
                        FN_ESTOQUE_SALDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO,  4) AS FISICO_04,
                        FN_ESTOQUE_SALDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO,  5) AS FISICO_05,
                        FN_ESTOQUE_SALDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO,  6) AS FISICO_06,
                        FN_ESTOQUE_SALDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO,  7) AS FISICO_07,
                        FN_ESTOQUE_SALDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO,  8) AS FISICO_08,
                        FN_ESTOQUE_SALDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO,  9) AS FISICO_09,
                        FN_ESTOQUE_SALDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO, 10) AS FISICO_10,
                        FN_ESTOQUE_SALDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO, 11) AS FISICO_11,
                        FN_ESTOQUE_SALDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO, 12) AS FISICO_12,
                        FN_ESTOQUE_SALDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO, 13) AS FISICO_13,
                        FN_ESTOQUE_SALDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO, 14) AS FISICO_14,
                        FN_ESTOQUE_SALDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO, 15) AS FISICO_15,
                        FN_ESTOQUE_SALDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO, 16) AS FISICO_16,
                        FN_ESTOQUE_SALDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO, 17) AS FISICO_17,
                        FN_ESTOQUE_SALDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO, 18) AS FISICO_18,
                        FN_ESTOQUE_SALDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO, 19) AS FISICO_19,
                        FN_ESTOQUE_SALDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO, 20) AS FISICO_20,
                    
                        FN_ESTOQUE_SALDO_DISPONIVEL(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO,  1) AS DISPONIVEL_01,
                        FN_ESTOQUE_SALDO_DISPONIVEL(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO,  2) AS DISPONIVEL_02,
                        FN_ESTOQUE_SALDO_DISPONIVEL(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO,  3) AS DISPONIVEL_03,
                        FN_ESTOQUE_SALDO_DISPONIVEL(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO,  4) AS DISPONIVEL_04,
                        FN_ESTOQUE_SALDO_DISPONIVEL(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO,  5) AS DISPONIVEL_05,
                        FN_ESTOQUE_SALDO_DISPONIVEL(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO,  6) AS DISPONIVEL_06,
                        FN_ESTOQUE_SALDO_DISPONIVEL(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO,  7) AS DISPONIVEL_07,
                        FN_ESTOQUE_SALDO_DISPONIVEL(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO,  8) AS DISPONIVEL_08,
                        FN_ESTOQUE_SALDO_DISPONIVEL(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO,  9) AS DISPONIVEL_09,
                        FN_ESTOQUE_SALDO_DISPONIVEL(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO, 10) AS DISPONIVEL_10,
                        FN_ESTOQUE_SALDO_DISPONIVEL(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO, 11) AS DISPONIVEL_11,
                        FN_ESTOQUE_SALDO_DISPONIVEL(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO, 12) AS DISPONIVEL_12,
                        FN_ESTOQUE_SALDO_DISPONIVEL(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO, 13) AS DISPONIVEL_13,
                        FN_ESTOQUE_SALDO_DISPONIVEL(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO, 14) AS DISPONIVEL_14,
                        FN_ESTOQUE_SALDO_DISPONIVEL(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO, 15) AS DISPONIVEL_15,
                        FN_ESTOQUE_SALDO_DISPONIVEL(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO, 16) AS DISPONIVEL_16,
                        FN_ESTOQUE_SALDO_DISPONIVEL(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO, 17) AS DISPONIVEL_17,
                        FN_ESTOQUE_SALDO_DISPONIVEL(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO, 18) AS DISPONIVEL_18,
                        FN_ESTOQUE_SALDO_DISPONIVEL(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO, 19) AS DISPONIVEL_19,
                        FN_ESTOQUE_SALDO_DISPONIVEL(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO, 20) AS DISPONIVEL_20,
                    
                        FN_EMPENHADO_PEDIDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO,  1) AS PEDIDO_01,
                        FN_EMPENHADO_PEDIDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO,  2) AS PEDIDO_02,
                        FN_EMPENHADO_PEDIDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO,  3) AS PEDIDO_03,
                        FN_EMPENHADO_PEDIDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO,  4) AS PEDIDO_04,
                        FN_EMPENHADO_PEDIDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO,  5) AS PEDIDO_05,
                        FN_EMPENHADO_PEDIDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO,  6) AS PEDIDO_06,
                        FN_EMPENHADO_PEDIDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO,  7) AS PEDIDO_07,
                        FN_EMPENHADO_PEDIDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO,  8) AS PEDIDO_08,
                        FN_EMPENHADO_PEDIDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO,  9) AS PEDIDO_09,
                        FN_EMPENHADO_PEDIDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO, 10) AS PEDIDO_10,
                        FN_EMPENHADO_PEDIDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO, 11) AS PEDIDO_11,
                        FN_EMPENHADO_PEDIDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO, 12) AS PEDIDO_12,
                        FN_EMPENHADO_PEDIDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO, 13) AS PEDIDO_13,
                        FN_EMPENHADO_PEDIDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO, 14) AS PEDIDO_14,
                        FN_EMPENHADO_PEDIDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO, 15) AS PEDIDO_15,
                        FN_EMPENHADO_PEDIDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO, 16) AS PEDIDO_16,
                        FN_EMPENHADO_PEDIDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO, 17) AS PEDIDO_17,
                        FN_EMPENHADO_PEDIDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO, 18) AS PEDIDO_18,
                        FN_EMPENHADO_PEDIDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO, 19) AS PEDIDO_19,
                        FN_EMPENHADO_PEDIDO(:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, P.CODIGO, 20) AS PEDIDO_20
                    
                    FROM TBMODELO_COR MC
                    INNER JOIN TBCOR C ON C.CODIGO = MC.COR_ID
                    INNER JOIN TBPRODUTO P ON P.MODELO_CODIGO = MC.MODELO_ID AND P.COR_CODIGO = MC.COR_ID
                    WHERE MC.MODELO_ID = :VMODELO_ID
                    AND MC.STATUS = '1'
                    AND C.STATUS = '1'
                    AND P.STATUS = '1'
                ) X
    
            INTO
                :V2_COR_ID,
                :V2_PRODUTO_ID,
                
                :V2_DISPONIVEL_01, :V2_DISPONIVEL_02, :V2_DISPONIVEL_03, :V2_DISPONIVEL_04, :V2_DISPONIVEL_05, 
                :V2_DISPONIVEL_06, :V2_DISPONIVEL_07, :V2_DISPONIVEL_08, :V2_DISPONIVEL_09, :V2_DISPONIVEL_10, 
                :V2_DISPONIVEL_11, :V2_DISPONIVEL_12, :V2_DISPONIVEL_13, :V2_DISPONIVEL_14, :V2_DISPONIVEL_15, 
                :V2_DISPONIVEL_16, :V2_DISPONIVEL_17, :V2_DISPONIVEL_18, :V2_DISPONIVEL_19, :V2_DISPONIVEL_20, 
                
                :V2_SALDO_PEDIDO_01, :V2_SALDO_PEDIDO_02, :V2_SALDO_PEDIDO_03, :V2_SALDO_PEDIDO_04, :V2_SALDO_PEDIDO_05, 
                :V2_SALDO_PEDIDO_06, :V2_SALDO_PEDIDO_07, :V2_SALDO_PEDIDO_08, :V2_SALDO_PEDIDO_09, :V2_SALDO_PEDIDO_10, 
                :V2_SALDO_PEDIDO_11, :V2_SALDO_PEDIDO_12, :V2_SALDO_PEDIDO_13, :V2_SALDO_PEDIDO_14, :V2_SALDO_PEDIDO_15, 
                :V2_SALDO_PEDIDO_16, :V2_SALDO_PEDIDO_17, :V2_SALDO_PEDIDO_18, :V2_SALDO_PEDIDO_19, :V2_SALDO_PEDIDO_20,
                
                :V2_FISICO_01, :V2_FISICO_02, :V2_FISICO_03, :V2_FISICO_04, :V2_FISICO_05,
                :V2_FISICO_06, :V2_FISICO_07, :V2_FISICO_08, :V2_FISICO_09, :V2_FISICO_10,
                :V2_FISICO_11, :V2_FISICO_12, :V2_FISICO_13, :V2_FISICO_14, :V2_FISICO_15,
                :V2_FISICO_16, :V2_FISICO_17, :V2_FISICO_18, :V2_FISICO_19, :V2_FISICO_20
    
            DO
            BEGIN
    
                :V2_ESTOQUE_TOTAL = 0;
    
                IF (:VTIPO_ESTOQUE = 1) THEN
                BEGIN
    
                    :V2_ESTOQUE_TOTAL =
                        FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(
                        FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(
                        FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(
                        FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(
                        :V2_DISPONIVEL_01,          :V2_DISPONIVEL_02, '+', 8), :V2_DISPONIVEL_03, '+', 8), :V2_DISPONIVEL_04, '+', 8), :V2_DISPONIVEL_05, '+', 8),
                        :V2_DISPONIVEL_06, '+', 8), :V2_DISPONIVEL_07, '+', 8), :V2_DISPONIVEL_08, '+', 8), :V2_DISPONIVEL_09, '+', 8), :V2_DISPONIVEL_10, '+', 8),
                        :V2_DISPONIVEL_11, '+', 8), :V2_DISPONIVEL_12, '+', 8), :V2_DISPONIVEL_13, '+', 8), :V2_DISPONIVEL_14, '+', 8), :V2_DISPONIVEL_15, '+', 8),
                        :V2_DISPONIVEL_16, '+', 8), :V2_DISPONIVEL_17, '+', 8), :V2_DISPONIVEL_18, '+', 8), :V2_DISPONIVEL_19, '+', 8), :V2_DISPONIVEL_20, '+', 8);
    
                    /******************************************************************/
    
                    IF (COALESCE(:OARRAY_ESTOQUE_CORES, '') <> '') THEN
                    BEGIN
        
                        :OARRAY_ESTOQUE_CORES = :OARRAY_ESTOQUE_CORES||','||FN_TO_JSON_V3(
                                                                                FN_TO_PAR_JSON_V3('COR_ID', :V2_COR_ID),
                                                                                FN_TO_PAR_JSON_V3('PRODUTO_ID', :V2_PRODUTO_ID),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE', :V2_ESTOQUE_TOTAL),
                                    
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_01', :V2_DISPONIVEL_01),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_02', :V2_DISPONIVEL_02),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_03', :V2_DISPONIVEL_03),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_04', :V2_DISPONIVEL_04),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_05', :V2_DISPONIVEL_05),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_06', :V2_DISPONIVEL_06),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_07', :V2_DISPONIVEL_07),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_08', :V2_DISPONIVEL_08),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_09', :V2_DISPONIVEL_09),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_10', :V2_DISPONIVEL_10),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_11', :V2_DISPONIVEL_11),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_12', :V2_DISPONIVEL_12),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_13', :V2_DISPONIVEL_13),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_14', :V2_DISPONIVEL_14),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_15', :V2_DISPONIVEL_15),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_16', :V2_DISPONIVEL_16),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_17', :V2_DISPONIVEL_17),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_18', :V2_DISPONIVEL_18),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_19', :V2_DISPONIVEL_19),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_20', :V2_DISPONIVEL_20)
                                                                                );
        
                    END ELSE
                    BEGIN
        
                        :OARRAY_ESTOQUE_CORES = FN_TO_JSON_V3(
                                                    FN_TO_PAR_JSON_V3('COR_ID', :V2_COR_ID),
                                                    FN_TO_PAR_JSON_V3('PRODUTO_ID', :V2_PRODUTO_ID),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE', :V2_ESTOQUE_TOTAL),
        
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_01', :V2_DISPONIVEL_01),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_02', :V2_DISPONIVEL_02),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_03', :V2_DISPONIVEL_03),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_04', :V2_DISPONIVEL_04),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_05', :V2_DISPONIVEL_05),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_06', :V2_DISPONIVEL_06),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_07', :V2_DISPONIVEL_07),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_08', :V2_DISPONIVEL_08),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_09', :V2_DISPONIVEL_09),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_10', :V2_DISPONIVEL_10),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_11', :V2_DISPONIVEL_11),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_12', :V2_DISPONIVEL_12),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_13', :V2_DISPONIVEL_13),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_14', :V2_DISPONIVEL_14),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_15', :V2_DISPONIVEL_15),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_16', :V2_DISPONIVEL_16),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_17', :V2_DISPONIVEL_17),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_18', :V2_DISPONIVEL_18),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_19', :V2_DISPONIVEL_19),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_20', :V2_DISPONIVEL_20)
                                                    );
        
                    END
                END ELSE
                IF (:VTIPO_ESTOQUE = 2) THEN
                BEGIN
    
                    :V2_ESTOQUE_TOTAL =
                        FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(
                        FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(
                        FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(
                        FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(
                        :V2_SALDO_PEDIDO_01,          :V2_SALDO_PEDIDO_02, '+', 8), :V2_SALDO_PEDIDO_03, '+', 8), :V2_SALDO_PEDIDO_04, '+', 8), :V2_SALDO_PEDIDO_05, '+', 8),
                        :V2_SALDO_PEDIDO_06, '+', 8), :V2_SALDO_PEDIDO_07, '+', 8), :V2_SALDO_PEDIDO_08, '+', 8), :V2_SALDO_PEDIDO_09, '+', 8), :V2_SALDO_PEDIDO_10, '+', 8),
                        :V2_SALDO_PEDIDO_11, '+', 8), :V2_SALDO_PEDIDO_12, '+', 8), :V2_SALDO_PEDIDO_13, '+', 8), :V2_SALDO_PEDIDO_14, '+', 8), :V2_SALDO_PEDIDO_15, '+', 8),
                        :V2_SALDO_PEDIDO_16, '+', 8), :V2_SALDO_PEDIDO_17, '+', 8), :V2_SALDO_PEDIDO_18, '+', 8), :V2_SALDO_PEDIDO_19, '+', 8), :V2_SALDO_PEDIDO_20, '+', 8);
    
                    /******************************************************************/
    
                    IF (COALESCE(:OARRAY_ESTOQUE_CORES, '') <> '') THEN
                    BEGIN
        
                        :OARRAY_ESTOQUE_CORES = :OARRAY_ESTOQUE_CORES||','||FN_TO_JSON_V3(
                                                                                FN_TO_PAR_JSON_V3('COR_ID', :V2_COR_ID),
                                                                                FN_TO_PAR_JSON_V3('PRODUTO_ID', :V2_PRODUTO_ID),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE', :V2_ESTOQUE_TOTAL),
                                    
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_01', :V2_SALDO_PEDIDO_01),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_02', :V2_SALDO_PEDIDO_02),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_03', :V2_SALDO_PEDIDO_03),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_04', :V2_SALDO_PEDIDO_04),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_05', :V2_SALDO_PEDIDO_05),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_06', :V2_SALDO_PEDIDO_06),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_07', :V2_SALDO_PEDIDO_07),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_08', :V2_SALDO_PEDIDO_08),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_09', :V2_SALDO_PEDIDO_09),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_10', :V2_SALDO_PEDIDO_10),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_11', :V2_SALDO_PEDIDO_11),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_12', :V2_SALDO_PEDIDO_12),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_13', :V2_SALDO_PEDIDO_13),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_14', :V2_SALDO_PEDIDO_14),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_15', :V2_SALDO_PEDIDO_15),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_16', :V2_SALDO_PEDIDO_16),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_17', :V2_SALDO_PEDIDO_17),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_18', :V2_SALDO_PEDIDO_18),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_19', :V2_SALDO_PEDIDO_19),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_20', :V2_SALDO_PEDIDO_20)
                                                                                );
        
                    END ELSE
                    BEGIN
        
                        :OARRAY_ESTOQUE_CORES = FN_TO_JSON_V3(
                                                    FN_TO_PAR_JSON_V3('COR_ID', :V2_COR_ID),
                                                    FN_TO_PAR_JSON_V3('PRODUTO_ID', :V2_PRODUTO_ID),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE', :V2_ESTOQUE_TOTAL),
        
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_01', :V2_SALDO_PEDIDO_01),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_02', :V2_SALDO_PEDIDO_02),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_03', :V2_SALDO_PEDIDO_03),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_04', :V2_SALDO_PEDIDO_04),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_05', :V2_SALDO_PEDIDO_05),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_06', :V2_SALDO_PEDIDO_06),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_07', :V2_SALDO_PEDIDO_07),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_08', :V2_SALDO_PEDIDO_08),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_09', :V2_SALDO_PEDIDO_09),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_10', :V2_SALDO_PEDIDO_10),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_11', :V2_SALDO_PEDIDO_11),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_12', :V2_SALDO_PEDIDO_12),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_13', :V2_SALDO_PEDIDO_13),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_14', :V2_SALDO_PEDIDO_14),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_15', :V2_SALDO_PEDIDO_15),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_16', :V2_SALDO_PEDIDO_16),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_17', :V2_SALDO_PEDIDO_17),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_18', :V2_SALDO_PEDIDO_18),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_19', :V2_SALDO_PEDIDO_19),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_20', :V2_SALDO_PEDIDO_20)
                                                    );
        
                    END
                END ELSE
                IF (:VTIPO_ESTOQUE = 3) THEN
                BEGIN
    
                    :V2_ESTOQUE_TOTAL =
                        FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(
                        FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(
                        FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(
                        FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(FN_CALC_PRECISION_V2(
                        :V2_FISICO_01,          :V2_FISICO_02, '+', 8), :V2_FISICO_03, '+', 8), :V2_FISICO_04, '+', 8), :V2_FISICO_05, '+', 8),
                        :V2_FISICO_06, '+', 8), :V2_FISICO_07, '+', 8), :V2_FISICO_08, '+', 8), :V2_FISICO_09, '+', 8), :V2_FISICO_10, '+', 8),
                        :V2_FISICO_11, '+', 8), :V2_FISICO_12, '+', 8), :V2_FISICO_13, '+', 8), :V2_FISICO_14, '+', 8), :V2_FISICO_15, '+', 8),
                        :V2_FISICO_16, '+', 8), :V2_FISICO_17, '+', 8), :V2_FISICO_18, '+', 8), :V2_FISICO_19, '+', 8), :V2_FISICO_20, '+', 8);
    
                     /******************************************************************/
    
                    IF (COALESCE(:OARRAY_ESTOQUE_CORES, '') <> '') THEN
                    BEGIN
        
                        :OARRAY_ESTOQUE_CORES = :OARRAY_ESTOQUE_CORES||','||FN_TO_JSON_V3(
                                                                                FN_TO_PAR_JSON_V3('COR_ID', :V2_COR_ID),
                                                                                FN_TO_PAR_JSON_V3('PRODUTO_ID', :V2_PRODUTO_ID),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE', :V2_ESTOQUE_TOTAL),
                                    
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_01', :V2_FISICO_01),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_02', :V2_FISICO_02),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_03', :V2_FISICO_03),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_04', :V2_FISICO_04),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_05', :V2_FISICO_05),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_06', :V2_FISICO_06),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_07', :V2_FISICO_07),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_08', :V2_FISICO_08),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_09', :V2_FISICO_09),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_10', :V2_FISICO_10),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_11', :V2_FISICO_11),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_12', :V2_FISICO_12),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_13', :V2_FISICO_13),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_14', :V2_FISICO_14),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_15', :V2_FISICO_15),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_16', :V2_FISICO_16),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_17', :V2_FISICO_17),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_18', :V2_FISICO_18),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_19', :V2_FISICO_19),
                                                                                FN_TO_PAR_JSON_V3('ESTOQUE_20', :V2_FISICO_20)
                                                                                );
        
                    END ELSE
                    BEGIN
        
                        :OARRAY_ESTOQUE_CORES = FN_TO_JSON_V3(
                                                    FN_TO_PAR_JSON_V3('COR_ID', :V2_COR_ID),
                                                    FN_TO_PAR_JSON_V3('PRODUTO_ID', :V2_PRODUTO_ID),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE', :V2_ESTOQUE_TOTAL),
        
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_01', :V2_FISICO_01),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_02', :V2_FISICO_02),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_03', :V2_FISICO_03),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_04', :V2_FISICO_04),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_05', :V2_FISICO_05),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_06', :V2_FISICO_06),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_07', :V2_FISICO_07),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_08', :V2_FISICO_08),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_09', :V2_FISICO_09),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_10', :V2_FISICO_10),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_11', :V2_FISICO_11),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_12', :V2_FISICO_12),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_13', :V2_FISICO_13),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_14', :V2_FISICO_14),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_15', :V2_FISICO_15),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_16', :V2_FISICO_16),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_17', :V2_FISICO_17),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_18', :V2_FISICO_18),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_19', :V2_FISICO_19),
                                                    FN_TO_PAR_JSON_V3('ESTOQUE_20', :V2_FISICO_20)
                                                    );
        
                    END
                END
            END
    
    
            INSERT INTO TBTEMP_ESTOQUE_CATALOGO (ESTABELECIMENTO_ID, LOCALIZACAO_ID, MODELO_ID, TIPO_ESTOQUE, ESTOQUE)
                VALUES (:VESTABELECIMENTO_ID, :VLOCALIZACAO_ID, :VMODELO_ID, :VTIPO_ESTOQUE, '['||:OARRAY_ESTOQUE_CORES||']');

        END
    END
END
^

SET TERM ; ^


/******************************************************************************/
/******************************************************************************/
/******************************************************************************/


DROP INDEX ITBTEMP_ESTOQUE_CATALOGO_01;

ALTER TABLE TBTEMP_ESTOQUE_CATALOGO DROP CATALOGO_PRODUTO_ID;


DELETE FROM TBTEMP_ESTOQUE_CATALOGO WHERE ID > 0;


/******************************************************************************/
/******************************************************************************/
/******************************************************************************/


INSERT INTO TBSQL (DESCRICAO, SQL)
    VALUES ('ATUALIZAR ESTOQUES DOS CATALOGOS DE VENDA DA 12461', 'EXECUTE PROCEDURE SPU_TEMP_ESTOQUE_CATALOGO(0);');


INSERT INTO TBAGENDAMENTO_SQL (DESCRICAO, TIPO, HORAINICIO, HORAFIM, INTERVALO, SQL_ID, STATUS, SEG, TER, QUA, QUI, SEX, SAB, DOM, DIA, REPETIVEL)
    VALUES ('ATUALIZAR ESTOQUES DOS CATALOGOS DE VENDA DA 12461', 'D', '00:00:00', '00:00:00', 10, COALESCE((SELECT FIRST 1 A.ID FROM TBSQL A WHERE A.DESCRICAO = 'ATUALIZAR ESTOQUES DOS CATALOGOS DE VENDA DA 12461'), 0), 1, 1, 1, 1, 1, 1, 1, 1, 0, 1);