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 trim(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||'#', coalesce(:MODELO_DESCRICAO ,''));
        ETIQ=REPLACE(ETIQ,'#COR_'          ||I||'#', coalesce(:COR_DESCRICAO    ,''));
        ETIQ=REPLACE(ETIQ,'#TAMANHO_'      ||I||'#', coalesce(:TAMANHO_DESCRICAO,''));
        ETIQ=REPLACE(ETIQ,'#QUANTIDADE_'   ||I||'#', coalesce(:QUANTIDADE       ,''));
        ETIQ=REPLACE(ETIQ,'#ENDERECAMENTO_'||I||'#', coalesce(:ENDERECAMENTO    ,''));
        ETIQ=REPLACE(ETIQ,'#DATA_'         ||I||'#', coalesce(:DATA             ,''));
        ETIQ=REPLACE(ETIQ,'#CODIGO_'       ||I||'#', coalesce(:ID               ,''));
        ETIQ=REPLACE(ETIQ,'#SOBRA_ID_'     ||I||'#', coalesce(:ID               ,''));
        ETIQ=REPLACE(ETIQ,'#GP_'           ||I||'#', coalesce(:GP_DESCRICAO     ,''));
        ETIQ=REPLACE(ETIQ,'#OPERADOR_'     ||I||'#', coalesce(:OPERADOR_NOME    ,''));
        ETIQ=REPLACE(ETIQ,'#TAMANHO_PLACA' ||I||'#', coalesce(: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 ; ^

