CREATE GENERATOR GTMPGERAL7;

CREATE GLOBAL TEMPORARY TABLE TMPGERAL7 (
    INTEIRO_00   INTEGER,
    INTEIRO_01   INTEGER,
    INTEIRO_02   INTEGER,
    INTEIRO_03   INTEGER,
    INTEIRO_04   INTEGER,
    INTEIRO_05   INTEGER,
    INTEIRO_06   INTEGER,
    INTEIRO_07   INTEGER,
    INTEIRO_08   INTEGER,
    INTEIRO_09   INTEGER,
    INTEIRO_10   INTEGER,
    INTEIRO_11   INTEGER,
    INTEIRO_12   INTEGER,
    INTEIRO_13   INTEGER,
    INTEIRO_14   INTEGER,
    INTEIRO_15   INTEGER,
    INTEIRO_16   INTEGER,
    INTEIRO_17   INTEGER,
    INTEIRO_18   INTEGER,
    INTEIRO_19   INTEGER,
    INTEIRO_20   INTEGER,
    TEXTO_00     VARCHAR(500),
    TEXTO_01     VARCHAR(500),
    TEXTO_02     VARCHAR(500),
    TEXTO_03     VARCHAR(500),
    TEXTO_04     VARCHAR(500),
    TEXTO_05     VARCHAR(500),
    TEXTO_06     VARCHAR(500),
    TEXTO_07     VARCHAR(500),
    TEXTO_08     VARCHAR(500),
    TEXTO_09     VARCHAR(500),
    TEXTO_10     VARCHAR(500),
    TEXTO_11     VARCHAR(500),
    TEXTO_12     VARCHAR(500),
    TEXTO_13     VARCHAR(500),
    TEXTO_14     VARCHAR(500),
    TEXTO_15     VARCHAR(500),
    TEXTO_16     VARCHAR(500),
    TEXTO_17     VARCHAR(500),
    TEXTO_18     VARCHAR(500),
    TEXTO_19     VARCHAR(500),
    TEXTO_20     VARCHAR(500),
    NUMERICO_00  NUMERIC(18,5),
    NUMERICO_01  NUMERIC(18,5),
    NUMERICO_02  NUMERIC(18,5),
    NUMERICO_03  NUMERIC(18,5),
    NUMERICO_04  NUMERIC(18,5),
    NUMERICO_05  NUMERIC(18,5),
    NUMERICO_06  NUMERIC(18,5),
    NUMERICO_07  NUMERIC(18,5),
    NUMERICO_08  NUMERIC(18,5),
    NUMERICO_09  NUMERIC(18,5),
    NUMERICO_10  NUMERIC(18,5),
    NUMERICO_11  NUMERIC(18,5),
    NUMERICO_12  NUMERIC(18,5),
    NUMERICO_13  NUMERIC(18,5),
    NUMERICO_14  NUMERIC(18,5),
    NUMERICO_15  NUMERIC(18,5),
    NUMERICO_16  NUMERIC(18,5),
    NUMERICO_17  NUMERIC(18,5),
    NUMERICO_18  NUMERIC(18,5),
    NUMERICO_19  NUMERIC(18,5),
    NUMERICO_20  NUMERIC(18,5),
    DATA_00      DATE,
    DATA_01      DATE,
    DATA_02      DATE,
    DATA_03      DATE,
    DATA_04      DATE,
    DATA_05      DATE,
    DATA_06      DATE,
    DATA_07      DATE,
    DATA_08      DATE,
    DATA_09      DATE,
    DATA_10      DATE,
    DATA_11      DATE,
    DATA_12      DATE,
    DATA_13      DATE,
    DATA_14      DATE,
    DATA_15      DATE,
    DATA_16      DATE,
    DATA_17      DATE,
    DATA_18      DATE,
    DATA_19      DATE,
    DATA_20      DATE,
    ID           INTEGER NOT NULL
) ON COMMIT DELETE ROWS;




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

ALTER TABLE TMPGERAL7 ADD CONSTRAINT PK_TMPGERAL7 PRIMARY KEY (ID);


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

CREATE INDEX TMPGERAL7_IDX0 ON TMPGERAL7 (INTEIRO_00);
CREATE INDEX TMPGERAL7_IDX1 ON TMPGERAL7 (INTEIRO_01);
CREATE INDEX TMPGERAL7_IDX2 ON TMPGERAL7 (INTEIRO_02);
CREATE INDEX TMPGERAL7_IDX3 ON TMPGERAL7 (INTEIRO_03);
CREATE INDEX TMPGERAL7_IDX4 ON TMPGERAL7 (INTEIRO_04);
CREATE INDEX TMPGERAL7_IDX5 ON TMPGERAL7 (INTEIRO_05);
CREATE INDEX TMPGERAL7_IDX6 ON TMPGERAL7 (INTEIRO_06);
CREATE INDEX TMPGERAL7_IDX7 ON TMPGERAL7 (INTEIRO_07);
CREATE INDEX TMPGERAL7_IDX8 ON TMPGERAL7 (INTEIRO_08);
CREATE INDEX TMPGERAL7_IDX9 ON TMPGERAL7 (INTEIRO_09);
CREATE INDEX TMPGERAL7_IDX10 ON TMPGERAL7 (INTEIRO_10);
CREATE INDEX TMPGERAL7_IDX11 ON TMPGERAL7 (INTEIRO_11);
CREATE INDEX TMPGERAL7_IDX12 ON TMPGERAL7 (INTEIRO_12);
CREATE INDEX TMPGERAL7_IDX13 ON TMPGERAL7 (INTEIRO_13);
CREATE INDEX TMPGERAL7_IDX14 ON TMPGERAL7 (INTEIRO_14);
CREATE INDEX TMPGERAL7_IDX15 ON TMPGERAL7 (INTEIRO_15);
CREATE INDEX TMPGERAL7_IDX16 ON TMPGERAL7 (INTEIRO_16);
CREATE INDEX TMPGERAL7_IDX17 ON TMPGERAL7 (INTEIRO_17);
CREATE INDEX TMPGERAL7_IDX18 ON TMPGERAL7 (INTEIRO_18);
CREATE INDEX TMPGERAL7_IDX19 ON TMPGERAL7 (INTEIRO_19);
CREATE INDEX TMPGERAL7_IDX20 ON TMPGERAL7 (INTEIRO_20);


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



SET TERM ^ ;



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



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

SET TERM ; ^



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

COMMENT ON COLUMN TMPGERAL7.ID IS 
'NAO PREENCHER';

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

SET TERM ^ ;

CREATE OR ALTER procedure SPU_TEMP_ESTOQUE_CATALOGO (
    ICATALOGO_PRODUTO_ID integer)
returns (
    OARRAY_ESTOQUE_CORES blob sub_type 1 segment size 80)
as
declare variable VESTABELECIMENTO_ID integer;
declare variable V2ESTABELECIMENTO_ID integer;
declare variable VLOCALIZACAO_ID integer;
declare variable V2LOCALIZACAO_ID integer;
declare variable VTIPO_ESTOQUE integer;
declare variable V2TIPO_ESTOQUE integer;
declare variable VMODELO_ID integer;
declare variable V2MODELO_ID integer;
declare variable VPRODUTO_ID integer;
declare variable V2PRODUTO_ID integer;
declare variable VCOR_ID integer;
declare variable V2COR_ID integer;
declare variable VSALDO numeric(15,2);
declare variable VT01_SALDO numeric(18,5);
declare variable VT02_SALDO numeric(18,5);
declare variable VT03_SALDO numeric(18,5);
declare variable VT04_SALDO numeric(18,5);
declare variable VT05_SALDO numeric(18,5);
declare variable VT06_SALDO numeric(18,5);
declare variable VT07_SALDO numeric(18,5);
declare variable VT08_SALDO numeric(18,5);
declare variable VT09_SALDO numeric(18,5);
declare variable VT10_SALDO numeric(18,5);
declare variable VT11_SALDO numeric(18,5);
declare variable VT12_SALDO numeric(18,5);
declare variable VT13_SALDO numeric(18,5);
declare variable VT14_SALDO numeric(18,5);
declare variable VT15_SALDO numeric(18,5);
declare variable VT16_SALDO numeric(18,5);
declare variable VT17_SALDO numeric(18,5);
declare variable VT18_SALDO numeric(18,5);
declare variable VT19_SALDO numeric(18,5);
declare variable VT20_SALDO numeric(18,5);
declare variable V2_ESTOQUE_TOTAL numeric(18,5);
BEGIN

    FOR
        SELECT DISTINCT
            T2.ESTABELECIMENTO_ID,
            T2.LOCALIZACAO_ID,
            T2.ESTOQUE,
        
            T.MODELO_ID
        
        FROM TBCATALOGO_PRODUTO T2, TBCATALOGO_PRODUTO_IMPORT T
        WHERE T2.ID = T.CATALOGO_PRODUTO_ID
        AND 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

    DO
    BEGIN

        /* Consulta de Estoque de Produtos - Envio para TMPGERAL */
        FOR
            SELECT
                A.CODIGO AS PRODUTO_ID,
                A.COR_CODIGO AS COR_ID
            
            FROM TBPRODUTO A
            WHERE A.MODELO_CODIGO = :VMODELO_ID

        INTO
            :VPRODUTO_ID,
            :VCOR_ID

        DO
        BEGIN

            FOR
                SELECT FIRST 1
                    B.SALDO,

                    B.T01_SALDO, B.T02_SALDO, B.T03_SALDO, B.T04_SALDO, B.T05_SALDO,
                    B.T06_SALDO, B.T07_SALDO, B.T08_SALDO, B.T09_SALDO, B.T10_SALDO,
                    B.T11_SALDO, B.T12_SALDO, B.T13_SALDO, B.T14_SALDO, B.T15_SALDO,
                    B.T16_SALDO, B.T17_SALDO, B.T18_SALDO, B.T19_SALDO, B.T20_SALDO

                FROM TBESTOQUE_SALDO B
                WHERE B.ESTABELECIMENTO_CODIGO = :VESTABELECIMENTO_ID
                AND B.LOCALIZACAO_CODIGO = :VLOCALIZACAO_ID
                AND B.PRODUTO_CODIGO = :VPRODUTO_ID
                AND B.SALDO > 0

            INTO
                :VSALDO,
                :VT01_SALDO, :VT02_SALDO, :VT03_SALDO, :VT04_SALDO, :VT05_SALDO,
                :VT06_SALDO, :VT07_SALDO, :VT08_SALDO, :VT09_SALDO, :VT10_SALDO,
                :VT11_SALDO, :VT12_SALDO, :VT13_SALDO, :VT14_SALDO, :VT15_SALDO,
                :VT16_SALDO, :VT17_SALDO, :VT18_SALDO, :VT19_SALDO, :VT20_SALDO

            DO
            BEGIN

                INSERT INTO TMPGERAL7 (INTEIRO_00, INTEIRO_01, INTEIRO_02, INTEIRO_03, INTEIRO_04, INTEIRO_05, NUMERICO_00,
                                        NUMERICO_01, NUMERICO_02, NUMERICO_03, NUMERICO_04, NUMERICO_05,
                                        NUMERICO_06, NUMERICO_07, NUMERICO_08, NUMERICO_09, NUMERICO_10,
                                        NUMERICO_11, NUMERICO_12, NUMERICO_13, NUMERICO_14, NUMERICO_15,
                                        NUMERICO_16, NUMERICO_17, NUMERICO_18, NUMERICO_19, NUMERICO_20)
                    VALUES (:VPRODUTO_ID, :VCOR_ID, :VMODELO_ID, :VTIPO_ESTOQUE, :VLOCALIZACAO_ID, :VESTABELECIMENTO_ID, :VSALDO,
                            :VT01_SALDO, :VT02_SALDO, :VT03_SALDO, :VT04_SALDO, :VT05_SALDO,
                            :VT06_SALDO, :VT07_SALDO, :VT08_SALDO, :VT09_SALDO, :VT10_SALDO,
                            :VT11_SALDO, :VT12_SALDO, :VT13_SALDO, :VT14_SALDO, :VT15_SALDO,
                            :VT16_SALDO, :VT17_SALDO, :VT18_SALDO, :VT19_SALDO, :VT20_SALDO);

            END
        END

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

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


        :OARRAY_ESTOQUE_CORES = '';

        FOR
            SELECT
                C.INTEIRO_00 AS PRODUTO_ID,
                C.INTEIRO_01 AS COR_ID,
                C.INTEIRO_02 AS MODELO_ID,
                C.INTEIRO_03 AS TIPO_ESTOQUE,
                C.INTEIRO_04 AS LOCALIZACAO_ID,
                C.INTEIRO_05 AS ESTABELECIMENTO,

                C.NUMERICO_00,
                C.NUMERICO_01, C.NUMERICO_02, C.NUMERICO_03, C.NUMERICO_04, C.NUMERICO_05,
                C.NUMERICO_06, C.NUMERICO_07, C.NUMERICO_08, C.NUMERICO_09, C.NUMERICO_10,
                C.NUMERICO_11, C.NUMERICO_12, C.NUMERICO_13, C.NUMERICO_14, C.NUMERICO_15,
                C.NUMERICO_16, C.NUMERICO_17, C.NUMERICO_18, C.NUMERICO_19, C.NUMERICO_20

            FROM TMPGERAL7 C
            WHERE C.INTEIRO_05 = :VESTABELECIMENTO_ID
            AND C.INTEIRO_04 = :VLOCALIZACAO_ID
            AND C.INTEIRO_03 = :VTIPO_ESTOQUE
            AND C.INTEIRO_02 = :VMODELO_ID
            AND C.NUMERICO_00 > 0

        INTO
            :V2PRODUTO_ID,
            :V2COR_ID,
            :V2MODELO_ID,
            :V2TIPO_ESTOQUE,
            :V2LOCALIZACAO_ID,
            :V2ESTABELECIMENTO_ID,

            :VSALDO,
            :VT01_SALDO, :VT02_SALDO, :VT03_SALDO, :VT04_SALDO, :VT05_SALDO,
            :VT06_SALDO, :VT07_SALDO, :VT08_SALDO, :VT09_SALDO, :VT10_SALDO,
            :VT11_SALDO, :VT12_SALDO, :VT13_SALDO, :VT14_SALDO, :VT15_SALDO,
            :VT16_SALDO, :VT17_SALDO, :VT18_SALDO, :VT19_SALDO, :VT20_SALDO
        
        DO
        BEGIN

            :V2_ESTOQUE_TOTAL = 0;


            IF (:V2TIPO_ESTOQUE = 1) THEN
            BEGIN

                IF (:VT01_SALDO > 0) THEN :VT01_SALDO = FN_ESTOQUE_SALDO_DISPONIVEL(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID,  1);
                IF (:VT02_SALDO > 0) THEN :VT02_SALDO = FN_ESTOQUE_SALDO_DISPONIVEL(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID,  2);
                IF (:VT03_SALDO > 0) THEN :VT03_SALDO = FN_ESTOQUE_SALDO_DISPONIVEL(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID,  3);
                IF (:VT04_SALDO > 0) THEN :VT04_SALDO = FN_ESTOQUE_SALDO_DISPONIVEL(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID,  4);
                IF (:VT05_SALDO > 0) THEN :VT05_SALDO = FN_ESTOQUE_SALDO_DISPONIVEL(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID,  5);
                IF (:VT06_SALDO > 0) THEN :VT06_SALDO = FN_ESTOQUE_SALDO_DISPONIVEL(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID,  6);
                IF (:VT07_SALDO > 0) THEN :VT07_SALDO = FN_ESTOQUE_SALDO_DISPONIVEL(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID,  7);
                IF (:VT08_SALDO > 0) THEN :VT08_SALDO = FN_ESTOQUE_SALDO_DISPONIVEL(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID,  8);
                IF (:VT09_SALDO > 0) THEN :VT09_SALDO = FN_ESTOQUE_SALDO_DISPONIVEL(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID,  9);
                IF (:VT10_SALDO > 0) THEN :VT10_SALDO = FN_ESTOQUE_SALDO_DISPONIVEL(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID, 10);
                IF (:VT11_SALDO > 0) THEN :VT11_SALDO = FN_ESTOQUE_SALDO_DISPONIVEL(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID, 11);
                IF (:VT12_SALDO > 0) THEN :VT12_SALDO = FN_ESTOQUE_SALDO_DISPONIVEL(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID, 12);
                IF (:VT13_SALDO > 0) THEN :VT13_SALDO = FN_ESTOQUE_SALDO_DISPONIVEL(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID, 13);
                IF (:VT14_SALDO > 0) THEN :VT14_SALDO = FN_ESTOQUE_SALDO_DISPONIVEL(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID, 14);
                IF (:VT15_SALDO > 0) THEN :VT15_SALDO = FN_ESTOQUE_SALDO_DISPONIVEL(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID, 15);
                IF (:VT16_SALDO > 0) THEN :VT16_SALDO = FN_ESTOQUE_SALDO_DISPONIVEL(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID, 16);
                IF (:VT17_SALDO > 0) THEN :VT17_SALDO = FN_ESTOQUE_SALDO_DISPONIVEL(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID, 17);
                IF (:VT18_SALDO > 0) THEN :VT18_SALDO = FN_ESTOQUE_SALDO_DISPONIVEL(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID, 18);
                IF (:VT19_SALDO > 0) THEN :VT19_SALDO = FN_ESTOQUE_SALDO_DISPONIVEL(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID, 19);
                IF (:VT20_SALDO > 0) THEN :VT20_SALDO = FN_ESTOQUE_SALDO_DISPONIVEL(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID, 20);
                    
                

                :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(
                        :VT01_SALDO,          :VT02_SALDO, '+', 5), :VT03_SALDO, '+', 5), :VT04_SALDO, '+', 5), :VT05_SALDO, '+', 5),
                        :VT06_SALDO, '+', 5), :VT07_SALDO, '+', 5), :VT08_SALDO, '+', 5), :VT09_SALDO, '+', 5), :VT10_SALDO, '+', 5),
                        :VT11_SALDO, '+', 5), :VT12_SALDO, '+', 5), :VT13_SALDO, '+', 5), :VT14_SALDO, '+', 5), :VT15_SALDO, '+', 5),
                        :VT16_SALDO, '+', 5), :VT17_SALDO, '+', 5), :VT18_SALDO, '+', 5), :VT19_SALDO, '+', 5), :VT20_SALDO, '+', 5);

                /******************************************************************/
    
                IF (COALESCE(:OARRAY_ESTOQUE_CORES, '') <> '') THEN
                BEGIN
    
                    :OARRAY_ESTOQUE_CORES = :OARRAY_ESTOQUE_CORES||','||FN_TO_JSON_V3(
                                                                            FN_TO_PAR_JSON_V3('COR_ID', :V2COR_ID),
                                                                            FN_TO_PAR_JSON_V3('PRODUTO_ID', :V2PRODUTO_ID),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE', :V2_ESTOQUE_TOTAL),
                                
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_01', :VT01_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_02', :VT02_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_03', :VT03_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_04', :VT04_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_05', :VT05_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_06', :VT06_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_07', :VT07_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_08', :VT08_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_09', :VT09_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_10', :VT10_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_11', :VT11_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_12', :VT12_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_13', :VT13_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_14', :VT14_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_15', :VT15_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_16', :VT16_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_17', :VT17_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_18', :VT18_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_19', :VT19_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_20', :VT20_SALDO)
                                                                            );
    
                END ELSE
                BEGIN
    
                    :OARRAY_ESTOQUE_CORES = FN_TO_JSON_V3(
                                                FN_TO_PAR_JSON_V3('COR_ID', :V2COR_ID),
                                                FN_TO_PAR_JSON_V3('PRODUTO_ID', :V2PRODUTO_ID),
                                                FN_TO_PAR_JSON_V3('ESTOQUE', :V2_ESTOQUE_TOTAL),
    
                                                FN_TO_PAR_JSON_V3('ESTOQUE_01', :VT01_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_02', :VT02_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_03', :VT03_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_04', :VT04_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_05', :VT05_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_06', :VT06_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_07', :VT07_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_08', :VT08_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_09', :VT09_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_10', :VT10_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_11', :VT11_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_12', :VT12_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_13', :VT13_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_14', :VT14_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_15', :VT15_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_16', :VT16_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_17', :VT17_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_18', :VT18_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_19', :VT19_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_20', :VT20_SALDO)
                                                );
    
                END

            END ELSE
            IF (:V2TIPO_ESTOQUE = 2) THEN
            BEGIN

                IF (:VT01_SALDO > 0) THEN :VT01_SALDO = FN_CALC_PRECISION_V2(:VT01_SALDO, FN_EMPENHADO_PEDIDO(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID,  1), '-', 5);
                IF (:VT02_SALDO > 0) THEN :VT02_SALDO = FN_CALC_PRECISION_V2(:VT02_SALDO, FN_EMPENHADO_PEDIDO(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID,  2), '-', 5);
                IF (:VT03_SALDO > 0) THEN :VT03_SALDO = FN_CALC_PRECISION_V2(:VT03_SALDO, FN_EMPENHADO_PEDIDO(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID,  3), '-', 5);
                IF (:VT04_SALDO > 0) THEN :VT04_SALDO = FN_CALC_PRECISION_V2(:VT04_SALDO, FN_EMPENHADO_PEDIDO(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID,  4), '-', 5);
                IF (:VT05_SALDO > 0) THEN :VT05_SALDO = FN_CALC_PRECISION_V2(:VT05_SALDO, FN_EMPENHADO_PEDIDO(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID,  5), '-', 5);
                IF (:VT06_SALDO > 0) THEN :VT06_SALDO = FN_CALC_PRECISION_V2(:VT06_SALDO, FN_EMPENHADO_PEDIDO(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID,  6), '-', 5);
                IF (:VT07_SALDO > 0) THEN :VT07_SALDO = FN_CALC_PRECISION_V2(:VT07_SALDO, FN_EMPENHADO_PEDIDO(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID,  7), '-', 5);
                IF (:VT08_SALDO > 0) THEN :VT08_SALDO = FN_CALC_PRECISION_V2(:VT08_SALDO, FN_EMPENHADO_PEDIDO(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID,  8), '-', 5);
                IF (:VT09_SALDO > 0) THEN :VT09_SALDO = FN_CALC_PRECISION_V2(:VT09_SALDO, FN_EMPENHADO_PEDIDO(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID,  9), '-', 5);
                IF (:VT10_SALDO > 0) THEN :VT10_SALDO = FN_CALC_PRECISION_V2(:VT10_SALDO, FN_EMPENHADO_PEDIDO(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID, 10), '-', 5);
                IF (:VT11_SALDO > 0) THEN :VT11_SALDO = FN_CALC_PRECISION_V2(:VT11_SALDO, FN_EMPENHADO_PEDIDO(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID, 11), '-', 5);
                IF (:VT12_SALDO > 0) THEN :VT12_SALDO = FN_CALC_PRECISION_V2(:VT12_SALDO, FN_EMPENHADO_PEDIDO(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID, 12), '-', 5);
                IF (:VT13_SALDO > 0) THEN :VT13_SALDO = FN_CALC_PRECISION_V2(:VT13_SALDO, FN_EMPENHADO_PEDIDO(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID, 13), '-', 5);
                IF (:VT14_SALDO > 0) THEN :VT14_SALDO = FN_CALC_PRECISION_V2(:VT14_SALDO, FN_EMPENHADO_PEDIDO(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID, 14), '-', 5);
                IF (:VT15_SALDO > 0) THEN :VT15_SALDO = FN_CALC_PRECISION_V2(:VT15_SALDO, FN_EMPENHADO_PEDIDO(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID, 15), '-', 5);
                IF (:VT16_SALDO > 0) THEN :VT16_SALDO = FN_CALC_PRECISION_V2(:VT16_SALDO, FN_EMPENHADO_PEDIDO(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID, 16), '-', 5);
                IF (:VT17_SALDO > 0) THEN :VT17_SALDO = FN_CALC_PRECISION_V2(:VT17_SALDO, FN_EMPENHADO_PEDIDO(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID, 17), '-', 5);
                IF (:VT18_SALDO > 0) THEN :VT18_SALDO = FN_CALC_PRECISION_V2(:VT18_SALDO, FN_EMPENHADO_PEDIDO(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID, 18), '-', 5);
                IF (:VT19_SALDO > 0) THEN :VT19_SALDO = FN_CALC_PRECISION_V2(:VT19_SALDO, FN_EMPENHADO_PEDIDO(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID, 19), '-', 5);
                IF (:VT20_SALDO > 0) THEN :VT20_SALDO = FN_CALC_PRECISION_V2(:VT20_SALDO, FN_EMPENHADO_PEDIDO(:V2ESTABELECIMENTO_ID, :V2LOCALIZACAO_ID, :V2PRODUTO_ID, 20), '-', 5);
                    
                

                :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(
                        :VT01_SALDO,          :VT02_SALDO, '+', 5), :VT03_SALDO, '+', 5), :VT04_SALDO, '+', 5), :VT05_SALDO, '+', 5),
                        :VT06_SALDO, '+', 5), :VT07_SALDO, '+', 5), :VT08_SALDO, '+', 5), :VT09_SALDO, '+', 5), :VT10_SALDO, '+', 5),
                        :VT11_SALDO, '+', 5), :VT12_SALDO, '+', 5), :VT13_SALDO, '+', 5), :VT14_SALDO, '+', 5), :VT15_SALDO, '+', 5),
                        :VT16_SALDO, '+', 5), :VT17_SALDO, '+', 5), :VT18_SALDO, '+', 5), :VT19_SALDO, '+', 5), :VT20_SALDO, '+', 5);

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

                IF (COALESCE(:OARRAY_ESTOQUE_CORES, '') <> '') THEN
                BEGIN
    
                    :OARRAY_ESTOQUE_CORES = :OARRAY_ESTOQUE_CORES||','||FN_TO_JSON_V3(
                                                                            FN_TO_PAR_JSON_V3('COR_ID', :V2COR_ID),
                                                                            FN_TO_PAR_JSON_V3('PRODUTO_ID', :V2PRODUTO_ID),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE', :V2_ESTOQUE_TOTAL),
                                
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_01', :VT01_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_02', :VT02_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_03', :VT03_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_04', :VT04_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_05', :VT05_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_06', :VT06_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_07', :VT07_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_08', :VT08_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_09', :VT09_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_10', :VT10_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_11', :VT11_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_12', :VT12_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_13', :VT13_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_14', :VT14_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_15', :VT15_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_16', :VT16_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_17', :VT17_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_18', :VT18_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_19', :VT19_SALDO),
                                                                            FN_TO_PAR_JSON_V3('ESTOQUE_20', :VT20_SALDO)
                                                                            );
    
                END ELSE
                BEGIN
    
                    :OARRAY_ESTOQUE_CORES = FN_TO_JSON_V3(
                                                FN_TO_PAR_JSON_V3('COR_ID', :V2COR_ID),
                                                FN_TO_PAR_JSON_V3('PRODUTO_ID', :V2PRODUTO_ID),
                                                FN_TO_PAR_JSON_V3('ESTOQUE', :V2_ESTOQUE_TOTAL),
    
                                                FN_TO_PAR_JSON_V3('ESTOQUE_01', :VT01_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_02', :VT02_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_03', :VT03_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_04', :VT04_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_05', :VT05_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_06', :VT06_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_07', :VT07_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_08', :VT08_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_09', :VT09_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_10', :VT10_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_11', :VT11_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_12', :VT12_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_13', :VT13_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_14', :VT14_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_15', :VT15_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_16', :VT16_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_17', :VT17_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_18', :VT18_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_19', :VT19_SALDO),
                                                FN_TO_PAR_JSON_V3('ESTOQUE_20', :VT20_SALDO)
                                                );
    
                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
^

SET TERM ; ^

