SET TERM ^ ;

CREATE OR ALTER function FN_POS_VAL_BOOLEAN (
    POS integer = false,
    V01 boolean = false,
    V02 boolean = false,
    V03 boolean = false,
    V04 boolean = false,
    V05 boolean = false,
    V06 boolean = false,
    V07 boolean = false,
    V08 boolean = false,
    V09 boolean = false,
    V10 boolean = false,
    V11 boolean = false,
    V12 boolean = false,
    V13 boolean = false,
    V14 boolean = false,
    V15 boolean = false,
    V16 boolean = false,
    V17 boolean = false,
    V18 boolean = false,
    V19 boolean = false,
    V20 boolean = false,
    DEF boolean = false)
returns boolean
AS
begin

  return iif(:POS =  1,  V01, iif(:POS =  2,  V02, iif(:POS =  3,  V03,
         iif(:POS =  4,  V04, iif(:POS =  5,  V05, iif(:POS =  6,  V06,
         iif(:POS =  7,  V07, iif(:POS =  8,  V08, iif(:POS =  9,  V09,
         iif(:POS = 10,  V10, iif(:POS = 11,  V11, iif(:POS = 12,  V12,
         iif(:POS = 13,  V13, iif(:POS = 14,  V14, iif(:POS = 15,  V15,
         iif(:POS = 16,  V16, iif(:POS = 17,  V17, iif(:POS = 18,  V18,
         iif(:POS = 19,  V19, iif(:POS = 20,  V20, DEF))))))))))))))))))));
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER function FN_POS_VAL_INTEGER (
    POS integer = 0,
    V01 integer = 0,
    V02 integer = 0,
    V03 integer = 0,
    V04 integer = 0,
    V05 integer = 0,
    V06 integer = 0,
    V07 integer = 0,
    V08 integer = 0,
    V09 integer = 0,
    V10 integer = 0,
    V11 integer = 0,
    V12 integer = 0,
    V13 integer = 0,
    V14 integer = 0,
    V15 integer = 0,
    V16 integer = 0,
    V17 integer = 0,
    V18 integer = 0,
    V19 integer = 0,
    V20 integer = 0,
    DEF integer = 0)
returns integer
as
begin

  return iif(:POS =  1,  V01, iif(:POS =  2,  V02, iif(:POS =  3,  V03,
         iif(:POS =  4,  V04, iif(:POS =  5,  V05, iif(:POS =  6,  V06,
         iif(:POS =  7,  V07, iif(:POS =  8,  V08, iif(:POS =  9,  V09,
         iif(:POS = 10,  V10, iif(:POS = 11,  V11, iif(:POS = 12,  V12,
         iif(:POS = 13,  V13, iif(:POS = 14,  V14, iif(:POS = 15,  V15,
         iif(:POS = 16,  V16, iif(:POS = 17,  V17, iif(:POS = 18,  V18,
         iif(:POS = 19,  V19, iif(:POS = 20,  V20, DEF))))))))))))))))))));
end
^

SET TERM ; ^


SET TERM ^ ;

CREATE OR ALTER function FN_POS_VAL_NUMERIC (
    POS integer = 0,
    V01 numeric(18,8) = 0,
    V02 numeric(18,8) = 0,
    V03 numeric(18,8) = 0,
    V04 numeric(18,8) = 0,
    V05 numeric(18,8) = 0,
    V06 numeric(18,8) = 0,
    V07 numeric(18,8) = 0,
    V08 numeric(18,8) = 0,
    V09 numeric(18,8) = 0,
    V10 numeric(18,8) = 0,
    V11 numeric(18,8) = 0,
    V12 numeric(18,8) = 0,
    V13 numeric(18,8) = 0,
    V14 numeric(18,8) = 0,
    V15 numeric(18,8) = 0,
    V16 numeric(18,8) = 0,
    V17 numeric(18,8) = 0,
    V18 numeric(18,8) = 0,
    V19 numeric(18,8) = 0,
    V20 numeric(18,8) = 0,
    DEF numeric(18,8) = 0)
returns numeric(18,8) as
begin

  return iif(:POS =  1,  V01, iif(:POS =  2,  V02, iif(:POS =  3,  V03,
         iif(:POS =  4,  V04, iif(:POS =  5,  V05, iif(:POS =  6,  V06,
         iif(:POS =  7,  V07, iif(:POS =  8,  V08, iif(:POS =  9,  V09,
         iif(:POS = 10,  V10, iif(:POS = 11,  V11, iif(:POS = 12,  V12,
         iif(:POS = 13,  V13, iif(:POS = 14,  V14, iif(:POS = 15,  V15,
         iif(:POS = 16,  V16, iif(:POS = 17,  V17, iif(:POS = 18,  V18,
         iif(:POS = 19,  V19, iif(:POS = 20,  V20, DEF))))))))))))))))))));
end
^

SET TERM ; ^


SET TERM ^ ;

CREATE OR ALTER function FN_POS_VAL_VARCHAR (
    POS integer = '',
    V01 varchar(300) = '',
    V02 varchar(300) = '',
    V03 varchar(300) = '',
    V04 varchar(300) = '',
    V05 varchar(300) = '',
    V06 varchar(300) = '',
    V07 varchar(300) = '',
    V08 varchar(300) = '',
    V09 varchar(300) = '',
    V10 varchar(300) = '',
    V11 varchar(300) = '',
    V12 varchar(300) = '',
    V13 varchar(300) = '',
    V14 varchar(300) = '',
    V15 varchar(300) = '',
    V16 varchar(300) = '',
    V17 varchar(300) = '',
    V18 varchar(300) = '',
    V19 varchar(300) = '',
    V20 varchar(300) = '',
    DEF varchar(300) = '')
returns varchar(300) as
begin

  return iif(:POS =  1,  V01, iif(:POS =  2,  V02, iif(:POS =  3,  V03,
         iif(:POS =  4,  V04, iif(:POS =  5,  V05, iif(:POS =  6,  V06,
         iif(:POS =  7,  V07, iif(:POS =  8,  V08, iif(:POS =  9,  V09,
         iif(:POS = 10,  V10, iif(:POS = 11,  V11, iif(:POS = 12,  V12,
         iif(:POS = 13,  V13, iif(:POS = 14,  V14, iif(:POS = 15,  V15,
         iif(:POS = 16,  V16, iif(:POS = 17,  V17, iif(:POS = 18,  V18,
         iif(:POS = 19,  V19, iif(:POS = 20,  V20, DEF))))))))))))))))))));
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPC_SOBRA_ETIQUETA (
    IDS varchar(4000))
returns (
    ETIQ blob sub_type 1 segment size 80 character set WIN1252)
as
declare variable V_ETIQ blob sub_type 1 segment size 80 character set WIN1252;
declare variable MODELO_DESCRICAO varchar(255);
declare variable COR_DESCRICAO varchar(255);
declare variable TAMANHO_DESCRICAO varchar(50);
declare variable QUANTIDADE varchar(15);
declare variable ENDERECAMENTO varchar(50);
declare variable DATA varchar(50);
declare variable ID varchar(15);
declare variable GP_DESCRICAO varchar(255);
declare variable OPERADOR_NOME varchar(255);
declare variable I integer;
declare variable TAMANHO_PLACA varchar(50);
declare variable PRODUTO_ID integer;
declare variable TAMANHO integer;
declare variable LARGURA numeric(15,4);
declare variable COMPRIMENTO numeric(15,4);
begin

    ETIQ = '';
    I = 0;
    FOR
        SELECT
             P.codigo,
             A.tamanho,
            (SELECT FIRST 1 M.DESCRICAO
               FROM TBMODELO M
              WHERE P.MODELO_CODIGO = M.CODIGO) MODELO_DESCRICAO,
        
            (SELECT FIRST 1 C.DESCRICAO
               FROM TBCOR C
              WHERE P.COR_CODIGO = C.CODIGO) COR_DESCRICAO,
        
            (SELECT TAM_DESCRICAO
               FROM SP_TAMANHO_GRADE (P.GRADE_CODIGO, A.TAMANHO)) TAMANHO_DESCRICAO,
        
            FN_FORMAT_NUMBER(IIF ( A.SALDO > 0,A.SALDO,A.QUANTIDADE)) QUANTIDADE,
        
            COALESCE((SELECT FIRST 1 E.GRUPO||'-'||E.SUBGRUPO
               FROM TBENDERECAMENTO E
              WHERE A.ENDERECAMENTO_ID = E.ID),'') ENDERECAMENTO,
        
            FN_DATE(A.DATA) DATA,
        
            FN_LPAD(A.ID,9,0) ID,
        
            (SELECT FIRST 1 G.DESCRICAO
               FROM TBGP G
              WHERE A.GP_ID = G.ID) GP_DESCRICAO,   
        
            (SELECT FIRST 1 O.NOME
               FROM TBOPERADOR O
              WHERE A.OPERADOR_ID = O.CODIGO) OPERADOR_NOME
        
        FROM TBSOBRA A, TBPRODUTO P, (SELECT OSPLIT ID FROM SPLIT(:IDS,',')) X
        
        WHERE
            A.PRODUTO_ID = P.CODIGO
        AND X.ID = A.ID

    INTO
        PRODUTO_ID,
        TAMANHO,
        MODELO_DESCRICAO,
        COR_DESCRICAO,
        TAMANHO_DESCRICAO,
        QUANTIDADE,
        ENDERECAMENTO,
        DATA,
        ID,
        GP_DESCRICAO,
        OPERADOR_NOME
    DO
    BEGIN

        TAMANHO_PLACA = '';
    
        select first 1
        
            fn_pos_val_numeric(:TAMANHO, M.COMPRIMENTO_t01, M.COMPRIMENTO_t02, M.COMPRIMENTO_t03, M.COMPRIMENTO_t04, M.COMPRIMENTO_t05, M.COMPRIMENTO_t06, M.COMPRIMENTO_t07, M.COMPRIMENTO_t08, M.COMPRIMENTO_t09, M.COMPRIMENTO_t10
                                       , M.COMPRIMENTO_t11, M.COMPRIMENTO_t12, M.COMPRIMENTO_t13, M.COMPRIMENTO_t14, M.COMPRIMENTO_t15, M.COMPRIMENTO_t16, M.COMPRIMENTO_t17, M.COMPRIMENTO_t18, M.COMPRIMENTO_t19, M.COMPRIMENTO_t20, 0) AS COMPRIMENTO,
        
            fn_pos_val_numeric(:TAMANHO, M.largura_t01, M.largura_t02, M.largura_t03, M.largura_t04, M.largura_t05, M.largura_t06, M.largura_t07, M.largura_t08, M.largura_t09, M.largura_t10
                                       , M.largura_t11, M.largura_t12, M.largura_t13, M.largura_t14, M.largura_t15, M.largura_t16, M.largura_t17, M.largura_t18, M.largura_t19, M.largura_t20, M.largura) AS largura

        FROM tbproduto P, tbmodelo_consumo_cor a, tbmatriz m
        WHERE P.codigo  = :PRODUTO_ID
        AND a.modelo_id = P.modelo_codigo
        and a.modelo_id = p.modelo_codigo
        and a.cor_id    = p.cor_codigo
        
        and fn_pos_val_boolean(:TAMANHO , a.t01 > 0, a.t02 > 0, a.t03 > 0, a.t04 > 0, a.t05 > 0, a.t06 > 0, a.t07 > 0, a.t08 > 0, a.t09 > 0, a.t10 > 0
                                        , a.t11 > 0, a.t12 > 0, a.t13 > 0, a.t14 > 0, a.t15 > 0, a.t16 > 0, a.t17 > 0, a.t18 > 0, a.t19 > 0, a.t20 > 0, FALSE)
        
        and a.nivel = 0
        and m.codigo = a.matriz_id
        INTO LARGURA, COMPRIMENTO;

        LARGURA     = coalesce(LARGURA    , 0);
        COMPRIMENTO = coalesce(COMPRIMENTO, 0);

        IF(LARGURA > 0 AND COMPRIMENTO > 0)THEN
        BEGIN
            TAMANHO_PLACA = fn_format_number2(LARGURA,4)||' X '||fn_format_number2(COMPRIMENTO,4);
        END

        /* CAPTURA A ETIQUETA MODELO */
        IF ( V_ETIQ IS NULL ) THEN
        BEGIN
            V_ETIQ = (SELECT FIRST 1 ET.SCRIPT FROM TBETIQUETAS ET WHERE ET.ID = 199);
    
            IF ( COALESCE(V_ETIQ,'') = '' ) THEN
            BEGIN
                EXCEPTION "..." 'ETIQUETA DE SOBRA INVALIDA. ID: 132';
            END
        END


        /* INSERE A ETIQUETA MODELO NO SCRIPT DE SAIDA */
        IF ( I = 0 ) THEN ETIQ = ETIQ || V_ETIQ;

        /* INCREMENTO (A POSICAO DO REGISTRO NA ETIQUETA */
        I = I + 1;



        ETIQ=REPLACE(ETIQ,'#MODELO_'       ||I||'#', :MODELO_DESCRICAO );
        ETIQ=REPLACE(ETIQ,'#COR_'          ||I||'#', :COR_DESCRICAO    );
        ETIQ=REPLACE(ETIQ,'#TAMANHO_'      ||I||'#', :TAMANHO_DESCRICAO);
        ETIQ=REPLACE(ETIQ,'#QUANTIDADE_'   ||I||'#', :QUANTIDADE       );
        ETIQ=REPLACE(ETIQ,'#ENDERECAMENTO_'||I||'#', :ENDERECAMENTO    );
        ETIQ=REPLACE(ETIQ,'#DATA_'         ||I||'#', :DATA             );
        ETIQ=REPLACE(ETIQ,'#CODIGO_'       ||I||'#', :ID               );
        ETIQ=REPLACE(ETIQ,'#SOBRA_ID_'     ||I||'#', :ID               );
        ETIQ=REPLACE(ETIQ,'#GP_'           ||I||'#', :GP_DESCRICAO     );
        ETIQ=REPLACE(ETIQ,'#OPERADOR_'     ||I||'#', :OPERADOR_NOME    );
        ETIQ=REPLACE(ETIQ,'#TAMANHO_PLACA' ||I||'#', :TAMANHO_PLACA    );


        /* RESETA O CONTADOR DA ETIQUETA */
        IF ( I = 2 ) THEN I = 0;
    END



    /* LIMPA DADOS DA ETIQUETA QUE NAO FORAM UTILIZADOS */
    IF ( NOT ETIQ = '' ) THEN
    BEGIN
        I = 0;
        WHILE (I <= 2) DO
        BEGIN
            I = I+1;
            
            ETIQ=REPLACE(ETIQ,'#MODELO_'       ||I||'#', '');
            ETIQ=REPLACE(ETIQ,'#COR_'          ||I||'#', '');
            ETIQ=REPLACE(ETIQ,'#TAMANHO_'      ||I||'#', '');
            ETIQ=REPLACE(ETIQ,'#QUANTIDADE_'   ||I||'#', '');
            ETIQ=REPLACE(ETIQ,'#ENDERECAMENTO_'||I||'#', '');
            ETIQ=REPLACE(ETIQ,'#DATA_'         ||I||'#', '');
            ETIQ=REPLACE(ETIQ,'#CODIGO_'       ||I||'#', '');
            ETIQ=REPLACE(ETIQ,'#SOBRA_ID_'     ||I||'#', '');
            ETIQ=REPLACE(ETIQ,'#GP_'           ||I||'#', '');
            ETIQ=REPLACE(ETIQ,'#OPERADOR_'     ||I||'#', '');
        END
        

        ETIQ = FN_REMOVE_ACENTOS(ETIQ);
    END

    ETIQ = NULLIF(ETIQ,'');

    SUSPEND;

end
^

SET TERM ; ^

