--TTBREQUISICAO_B2I_01 22190

ALTER TABLE TBDEFEITO_TRANSACAO_ITEM
    ADD UP_ID INTEGER;

ALTER TABLE TBREQUISICAO
    ADD UP_ID INTEGER;

ALTER TABLE TBREQUISICAO_PLACA
    ADD UP_ID INTEGER;

ALTER TABLE TBDEFEITO_TRANSACAO_ITEM
    ADD TIPO VARCHAR(2) DEFAULT 'BJ';

ALTER TABLE TBREQUISICAO
    ADD TAMANHO_ORIGEM INTEGER;

SET TERM ^ ;

CREATE OR ALTER trigger ttbdefeito_transacao_item_b3iu for tbdefeito_transacao_item
active before insert or update position 3
AS
DECLARE VARIABLE REGISTRAR_SEM_TALAO VARCHAR(10);
DECLARE VARIABLE ESTABELECIMENTO_ID INTEGER;
DECLARE VARIABLE PRODUTO_ID INTEGER;
DECLARE VARIABLE TAMANHO INTEGER;
DECLARE VARIABLE GP_ID INTEGER;
BEGIN

    REGISTRAR_SEM_TALAO = FN_PARAMETRO('TBUSUARIO.REG_DEF_SEM_TALAO',FN_CURRENT_USER_ID());

    IF ( REGISTRAR_SEM_TALAO = 0 ) THEN
    BEGIN
        IF ( COALESCE(NEW.REMESSA,0) = 0 OR COALESCE(NEW.REMESSA_CONTROLE,0) = 0 ) THEN
        BEGIN
            EXCEPTION "..." 'USUARIO NAO PERMITE REGISTRAR DEFEITO SEM REMESSA E TALAO.';
        END
    END

    IF ( NEW.REMESSA > 0 OR NEW.REMESSA_CONTROLE > 0 ) THEN
    BEGIN

        /* VERIFICA SE EH TALAO DETALHATADO */
        SELECT FIRST 1
               D.ESTABELECIMENTO_ID,
               D.PRODUTO_ID,
               D.TAMANHO,
               D.GP_ID
          FROM VWREMESSA_TALAO_DETALHE D
         WHERE D.REMESSA_ID = NEW.REMESSA
           AND D.ID         = NEW.REMESSA_CONTROLE
          INTO :ESTABELECIMENTO_ID,
               :PRODUTO_ID,
               :TAMANHO,
               :GP_ID;

         /* VERIFICA SE EH TALAO ACUMUADLO */
         IF ( PRODUTO_ID IS NULL ) THEN
         BEGIN
            SELECT FIRST 1
                   T.ESTABELECIMENTO_ID,
                   T.PRODUTO_ID,
                   T.TAMANHO,
                   T.GP_ID
              FROM VWREMESSA_TALAO T
             WHERE T.REMESSA_ID       = NEW.REMESSA
               AND T.REMESSA_TALAO_ID = NEW.REMESSA_CONTROLE
              INTO :ESTABELECIMENTO_ID,
                   :PRODUTO_ID,
                   :TAMANHO,
                   :GP_ID;

             if(ESTABELECIMENTO_ID > 0)then
             begin
                PRODUTO_ID = new.produto_id;
             end
         END

         IF ( PRODUTO_ID IS NULL ) THEN
         BEGIN
            EXCEPTION "..." 'TALAO INEXISTENTE.';
         END


         IF ( NEW.ESTABELECIMENTO_ID <> ESTABELECIMENTO_ID ) THEN
         BEGIN
            EXCEPTION "..." 'ESTABELECIMENTO NAO CONFERE.';
         END         

         IF ( NEW.ESTEIRA_ID <> GP_ID ) THEN
         BEGIN
            EXCEPTION "..." 'GP NAO CONFERE. ESPERADO: ' || COALESCE(FN_LPAD(GP_ID,3,0),'') || ' - ' || COALESCE(FN_DESCRICAO('TBGP',GP_ID),'');
         END

         IF ( NEW.PRODUTO_ID <> PRODUTO_ID ) THEN
         BEGIN
            EXCEPTION "..." 'PRODUTO NAO CONFERE. ESPERADO: ' || COALESCE(FN_LPAD(PRODUTO_ID,4,0),'') || ' - ' || COALESCE(FN_DESCRICAO('TBPRODUTO',PRODUTO_ID),'');
         END
         IF ( NEW.TAMANHO <> TAMANHO ) THEN
         BEGIN
            EXCEPTION "..." 'TAMANHO NAO CONFERE. ESPERADO: ' || COALESCE(FN_TAMANHO_PRODUTO(PRODUTO_ID,TAMANHO),'');
         END

    END

END
^

SET TERM ; ^

CREATE OR ALTER VIEW VWESTOQUE_PLACA_V2(
    STATUS,
    ID,
    SITUACAO,
    QUANTIDADE,
    SALDO,
    STATUS_SALDO,
    CHAPAS,
    PLACAS,
    TAMANHO,
    PLACA_LARGURA,
    PLACA_COMPRIMENTO,
    REMESSA,
    TALAO,
    PRODUTO_ID,
    PRODUTO,
    PRODUTO_DESC,
    ENDERECAMENTO_ID,
    ENDERECAMENTO,
    LOCALIZACAO_CODIGO,
    QUANTIDADE_PRODUCAO,
    REMESSA_ACUMULADO_CONTROLE,
    REMESSA_ID,
    REMESSA_ORIGEM,
    MODELO_ORIGEM,
    COR_ID,
    DENSIDADE,
    ESPESSURA,
    ABERTO)
AS
SELECT
    1 as status,
    y.controle as id,
    x.situacao,
    x.quantidade,
    y.quantidade_saldo as saldo,

    x.status_saldo,
    x.chapas,
    x.placas,
    x.tamanho,
    x.placa_largura,
    x.placa_comprimento,
    x.remessa,
    x.controle as talao,
    p.codigo as produto_id,
    p.descricao as produto,
    fn_lpad(p.codigo,7,'0')||' - '||p.descricao as produto_desc,
    y.enderecamento_id,
    coalesce((select e.grupo||'-'||e.subgrupo from tbenderecamento e where e.id = y.enderecamento_id),'!') as enderecamento,
    fn_parametro('SISTEMA.LOCALIZACAO_PLACAS')as LOCALIZACAO_CODIGO,
    y.quantidade_producao,
    y.remessa_acumulado_controle,
    x.remessa as remessa_id,
    (select fn_lpad(r.remessa,6,'0')||' / '||fn_lpad(x.controle,5,'0') from tbremessa r where r.numero = x.remessa) as remessa_origem,
    p.modelo_origem,
    p.cor_codigo cor_id,
    pf.densidade,
    pf.espessura,

    coalesce((select
                count(u.controle)
              from TBPEDIDO_ITEM_PROCESSADO u
                where u.remessa = x.remessa
                and u.situacao < 3
                and u.data_producao is null
                and u.cor_id = y.cor_id
                and u.remessa > 1
    ),0) as ABERTO

from tbproduto p, TBREMESSA_ITEM_PROCESSADO X, TBPEDIDO_ITEM_PROCESSADO y, tbproduto_ficha pf
WHERE p.codigo = x.produto_codigo
and y.status_saldo = 1
and x.situacao = 3
and y.remessa = x.remessa
AND X.placa_largura > 0
and y.remessa_acumulado_controle = x.controle
AND P.familia_alternativa = CAST( fn_parametro('SISTEMA.FAMILIA_PLACA') AS INTEGER)
and p.codigo = pf.produto_codigo
;

