SET TERM ^ ;

CREATE OR ALTER procedure SPC_PRODUCAO_BOJO_ETIQUETA (
    OPERADOR_CODIGO_BARRAS varchar(50),
    REMESSA_TALAO_DETALHE_ID integer = 10140462)
returns (
    ETIQUETA blob sub_type 1 segment size 80)
as
declare variable ESTABELECIMENTO_ID integer;
declare variable REMESSA_ID integer;
declare variable REMESSA_TALAO_ID varchar(4000);
declare variable DATA_PRODUCAO varchar(40);
declare variable PRODUTO_ID integer;
declare variable PRODUTO_DESCRICAO varchar(400);
declare variable PRODUTO_EDI_DESCRICAO varchar(400);
declare variable MODELO_ID integer;
declare variable MODELO_DESCRICAO varchar(200);
declare variable TAMANHO integer;
declare variable TAMANHO_DESCRICAO varchar(200);
declare variable TAMANHO_DESCRICAO_USA varchar(200);
declare variable TAMANHO_DESCRICAO_EUR varchar(200);
declare variable COR_ID integer;
declare variable COR_DESCRICAO varchar(80);
declare variable COR_DESCRICAO_USA varchar(80);
declare variable COR_DESCRICAO_EUR varchar(80);
declare variable PRODUTO_DESCRICAO_RESUMO blob sub_type 1 segment size 100;
declare variable COR_RESUMO blob sub_type 1 segment size 100;
declare variable ETIQUETA_VIA bigint;
declare variable CODIGO_BARRAS_2 varchar(4000);
declare variable GP_DESCRICAO varchar(4000);
declare variable QUANTIDADE numeric(18,5);
declare variable CLIENTE_ETIQUETA varchar(80);
declare variable PEDIDO integer;
declare variable FAMILIA_DESCRICAO varchar(255);
declare variable EAN varchar(255);
declare variable ETIQUETA_BLOB blob sub_type 0 segment size 80 character set WIN1252;
declare variable OPERADOR_ID integer;
declare variable OPERADOR_DESCRICAO varchar(255);
begin

    IF ( TRIM(COALESCE(OPERADOR_CODIGO_BARRAS,'')) = '' ) THEN
    BEGIN
        EXCEPTION "..." 'INFORME O OPERADOR.';
    END
    IF ( COALESCE(OPERADOR_CODIGO_BARRAS,0) = 0 ) THEN
    BEGIN
        EXCEPTION "..." 'INFORME O CODIGO DO TALAO.';
    END
    
    SELECT FIRST 1 E.SCRIPT
      FROM TBETIQUETAS E
     WHERE E.TIPO = 'W22210'
      INTO ETIQUETA_BLOB;

    ETIQUETA = ETIQUETA_BLOB;


    IF ( COALESCE(ETIQUETA,'') = '' ) THEN
    BEGIN
        EXCEPTION "..." 'ETIQUETA DE PRODUCAO NAO LOCALIZADA.';
    END
         
    OPERADOR_ID        = FN_OPERADOR_AUTENTICACAO(:OPERADOR_CODIGO_BARRAS,7); /* REGISTRAR PRODUCAO */
    OPERADOR_DESCRICAO = COALESCE(FN_DESCRICAO('TBOPERADOR',:OPERADOR_ID),'');


    IF ( COALESCE(OPERADOR_ID,0) = 0 OR TRIM(COALESCE(OPERADOR_DESCRICAO,'')) = '' ) THEN
    BEGIN
        EXCEPTION "..." 'OPERADOR PARA IMPRESSAO DE ETIQUETA INVALIDO.';

    END

    SELECT
        X.FAMILIA_DESCRICAO,
        X.ESTABELECIMENTO_ID,
        X.REMESSA_ID,
        X.REMESSA_TALAO_ID,
        X.REMESSA_TALAO_DETALHE_ID,
        X.DATA_PRODUCAO,
        X.PRODUTO_ID,
        X.PRODUTO_DESCRICAO,
        X.MODELO_ID,
        X.MODELO_DESCRICAO,
        X.TAMANHO,
        X.TAMANHO_DESCRICAO,
        X.TAMANHO_DESCRICAO_USA,
        X.TAMANHO_DESCRICAO_EUR,
        X.COR_ID,
        X.COR_DESCRICAO,
        X.COR_DESCRICAO_USA,
        X.COR_DESCRICAO_EUR,
        X.COR_RESUMO,
        X.ETIQUETA_VIA,
        X.CODIGO_BARRAS_2,
        X.GP_DESCRICAO,
        X.QUANTIDADE,
        X.EAN,
        G.TABELA_ID PEDIDO,
        COALESCE((
            SELECT FIRST 1 C.ETIQUETA
              FROM TBPEDIDO PD, TBCLIENTE C
         WHERE G.TABELA_ID = PD.PEDIDO
           AND PD.CLIENTE_CODIGO = C.CODIGO),'') CLIENTE_ETIQUETA,
        TRIM(COALESCE((
            SELECT FIRST 1 PE.DESCRICAO
              FROM TBPEDIDO PD, TBPRODUTO_EDI PE
             WHERE G.TABELA_ID = PD.PEDIDO
              AND PD.CLIENTE_CODIGO = PE.EMPRESA_CODIGO
              AND PE.PRODUTO_CODIGO = X.PRODUTO_ID),'')) PRODUTO_EDI_DESCRICAO
    FROM (
        SELECT FIRST 1
            F.DESCRICAO FAMILIA_DESCRICAO,
            A.ESTABELECIMENTO_CODIGO ESTABELECIMENTO_ID,
            A.REMESSA REMESSA_ID,
            FN_LPAD(A.REMESSA_ACUMULADO_CONTROLE,4,0) REMESSA_TALAO_ID,
            A.CONTROLE REMESSA_TALAO_DETALHE_ID,
            COALESCE(A.DATA_PRODUCAO,'') DATA_PRODUCAO,
            A.PRODUTO_CODIGO PRODUTO_ID,
            P.DESCRICAO PRODUTO_DESCRICAO,
            P.MODELO_CODIGO MODELO_ID,
            M.DESCRICAO MODELO_DESCRICAO,
            A.TAMANHO,
            COALESCE(FN_TAMANHO_GRADE(P.GRADE_CODIGO, A.TAMANHO),'') TAMANHO_DESCRICAO,
            COALESCE(FN_TAMANHO_GRADE(P.GRADE_CODIGO, A.TAMANHO,'USA'),'') TAMANHO_DESCRICAO_USA,
            COALESCE(FN_TAMANHO_GRADE(P.GRADE_CODIGO, A.TAMANHO,'EUR'),'') TAMANHO_DESCRICAO_EUR,
            P.COR_CODIGO COR_ID,
            C.DESCRICAO COR_DESCRICAO,
            COALESCE(C.DESCRICAO_ING,'') COR_DESCRICAO_USA,
            COALESCE(C.DESCRICAO_ESP,'') COR_DESCRICAO_EUR,
            COALESCE(TRIM(FN_REMOVE_ACENTOS(REPLACE(FN_REMOVE_ACENTOS(REPLACE(P.DESCRICAO,F.DESCRICAO,'')),M.DESCRICAO,''))),'') COR_RESUMO,
            COALESCE(A.VIA_ETIQUETA,0)+1 ETIQUETA_VIA,
            FN_LPAD(A.CONTROLE,8,0) CODIGO_BARRAS_2,
            FN_DESCRICAO('TBGP',A.ESTEIRA_PRODUCAO) GP_DESCRICAO,
            A.QUANTIDADE_PEDIDO QUANTIDADE,
            COALESCE((
                SELECT FIRST 1 COALESCE(E.PREFIXO||E.CODIGO,'')
                  FROM TBEAN E
                 WHERE E.MODELO_ID = A.MODELO_CODIGO
                   AND E.COR_ID = A.COR_ID
                   AND E.TAMANHO = A.TAMANHO),'') EAN
        FROM
            TBPEDIDO_ITEM_PROCESSADO A,
            TBPRODUTO P,
            TBMODELO M,
            TBCOR C,
            TBFAMILIA F
        WHERE A.CONTROLE = :REMESSA_TALAO_DETALHE_ID
        AND P.CODIGO = A.PRODUTO_CODIGO
        AND M.CODIGO = P.MODELO_CODIGO
        AND C.CODIGO = P.COR_CODIGO
        AND F.CODIGO = P.FAMILIA_CODIGO
        AND P.FAMILIA_CODIGO = 3
    ) X
    LEFT JOIN TBREMESSA_ITEM_ALOCACAO G ON X.ESTABELECIMENTO_ID       = G.ESTABELECIMENTO_ID
                                       AND X.REMESSA_TALAO_DETALHE_ID = G.TALAO
                                       AND X.REMESSA_ID               = G.REMESSA
    INTO
        FAMILIA_DESCRICAO,
        ESTABELECIMENTO_ID,
        REMESSA_ID,
        REMESSA_TALAO_ID,
        REMESSA_TALAO_DETALHE_ID,
        DATA_PRODUCAO,
        PRODUTO_ID,
        PRODUTO_DESCRICAO,
        MODELO_ID,
        MODELO_DESCRICAO,
        TAMANHO,
        TAMANHO_DESCRICAO,
        TAMANHO_DESCRICAO_USA,
        TAMANHO_DESCRICAO_EUR,
        COR_ID,
        COR_DESCRICAO,
        COR_DESCRICAO_USA,
        COR_DESCRICAO_EUR,
        COR_RESUMO,
        ETIQUETA_VIA,
        CODIGO_BARRAS_2,
        GP_DESCRICAO,
        QUANTIDADE,
        EAN,
        PEDIDO,
        CLIENTE_ETIQUETA,
        PRODUTO_EDI_DESCRICAO;


    PRODUTO_DESCRICAO = COALESCE(NULLIF(PRODUTO_EDI_DESCRICAO,''),PRODUTO_DESCRICAO);

    PRODUTO_DESCRICAO_RESUMO = COALESCE(TRIM(FN_REMOVE_ACENTOS(REPLACE(PRODUTO_DESCRICAO,FAMILIA_DESCRICAO,''))),'');


    ETIQUETA = REPLACE(ETIQUETA,'#IMAGEM'           , ''                                                                                        );
    ETIQUETA = REPLACE(ETIQUETA,'#PEDIDO#'          , PEDIDO                                                                                    );
    ETIQUETA = REPLACE(ETIQUETA,'#CLIENTE_ETIQUETA#', CLIENTE_ETIQUETA                                                                          );
    ETIQUETA = REPLACE(ETIQUETA,'#CODIGO1'          , FN_LPAD(PRODUTO_ID,5,0)||FN_LPAD(TAMANHO,2,0)||FN_LPAD(FN_FORMAT_NUMBER(QUANTIDADE),3,0)  );
    ETIQUETA = REPLACE(ETIQUETA,'#DATAHORA'         , FN_DATE('NOW','DT HRS')                                                                   );
    ETIQUETA = REPLACE(ETIQUETA,'#OPERADOR_ID'      , OPERADOR_ID                                                                               );
    ETIQUETA = REPLACE(ETIQUETA,'#OPERADOR_NOME'    , OPERADOR_DESCRICAO                                                                        );
    ETIQUETA = REPLACE(ETIQUETA,'#VIA'              , 'VIA:'||ETIQUETA_VIA                                                                              );
    ETIQUETA = REPLACE(ETIQUETA,'#CONTROLE'         , REMESSA_TALAO_DETALHE_ID                                                                  );
    ETIQUETA = REPLACE(ETIQUETA,'#SKU'              , EAN                                                                                       );
    ETIQUETA = REPLACE(ETIQUETA,'#CODIGO2'          , FN_LPAD(REMESSA_TALAO_DETALHE_ID,8,0)                                                     );
    ETIQUETA = REPLACE(ETIQUETA,'#PRODUTO2'         , PRODUTO_DESCRICAO_RESUMO                                                                  );
    ETIQUETA = REPLACE(ETIQUETA,'#QUANTIDADE'       , FN_FORMAT_NUMBER(QUANTIDADE)                                                              );
    ETIQUETA = REPLACE(ETIQUETA,'#TAMANHO'          , TAMANHO_DESCRICAO                                                                         );
    ETIQUETA = REPLACE(ETIQUETA,'#TAM_USA'          , TAMANHO_DESCRICAO_USA                                                                     );
    ETIQUETA = REPLACE(ETIQUETA,'#TAM_EUR'          , TAMANHO_DESCRICAO_EUR                                                                     );
    ETIQUETA = REPLACE(ETIQUETA,'#NUMERO_TALAO'     , REMESSA_TALAO_ID                                                                          );
    ETIQUETA = REPLACE(ETIQUETA,'#REMESSA'          , REMESSA_ID                                                                                );
    ETIQUETA = REPLACE(ETIQUETA,'#GP_DESCRICAO'     , GP_DESCRICAO                                                                              );
    ETIQUETA = REPLACE(ETIQUETA,'#VOLUME_PEDIDO'    , ''                                                                                        );
    ETIQUETA = REPLACE(ETIQUETA,'#NR_ETIQUETAS'     , ''                                                                                        );



    IF ( COALESCE(ETIQUETA,'') = '' ) THEN
    BEGIN
        EXCEPTION "..." 'ETIQUEA INVALIDA.';

    END

    UPDATE TBPEDIDO_ITEM_PROCESSADO P
       SET P.VIA_ETIQUETA = :ETIQUETA_VIA
     WHERE P.CONTROLE = :REMESSA_TALAO_DETALHE_ID;

  /* Procedure Text */
  SUSPEND;
end
^

SET TERM ; ^

