

CREATE OR ALTER trigger ttbremessa_talao_vinculo_b1i for tbremessa_talao_vinculo
active before insert position 1
AS
declare variable PRODUTO_ID INTEGER;
declare variable OB INTEGER;
declare variable PRODUTO_DESCRICAO VARCHAR(100);
declare variable QUANTIDADE_SALDO NUMERIC(15,4);
declare variable STATUS VARCHAR(20);            
declare variable BLOQUEIO VARCHAR(20);
declare variable RESULTADO VARCHAR(20);
declare variable STATUS_OB VARCHAR(20);
declare variable ITEM_DESCRICAO VARCHAR(150);
declare variable remessa_avulsa INTEGER;
declare variable validar_peca INTEGER;
BEGIN
    /* VINCULO DA TBREVISAO */
    IF ( NEW.TIPO = 'R' ) THEN
    BEGIN
        
        SELECT R.PRODUTO_ID,
               P.DESCRICAO,
               R.SALDO,
               COALESCE(R.RESULTADO,'I'),
               R.STATUS_OB,
               coalesce(r.ob,0) as OB,
               COALESCE(R.BLOQUEIO,'0') BLOQUEIO
          FROM TBREVISAO R,
               TBPRODUTO P
         WHERE R.ID = NEW.TABELA_ID
           AND P.CODIGO = R.PRODUTO_ID
          INTO :PRODUTO_ID,
               :PRODUTO_DESCRICAO,
               :QUANTIDADE_SALDO,
               :RESULTADO,
               :STATUS_OB,
               :OB,
               :BLOQUEIO;

        remessa_avulsa = coalesce((select r.id from vwremessa_talao d, TBTALOES_AVULSOS_REMESSAS r where d.id = new.talao_id and r.remessa_id = d.remessa_id),0);
        
        IF ( PRODUTO_ID IS NULL ) THEN
        BEGIN
            EXCEPTION "..." 'PECA ' || COALESCE(NEW.TABELA_ID,'') || ' NAO LOCALIZADA.';
        END

        ITEM_DESCRICAO = ' PECA: ' || NEW.TABELA_ID || ' PRODUTO: ' || PRODUTO_ID || '-' || PRODUTO_DESCRICAO;

        IF ( BLOQUEIO = '1' ) THEN
        BEGIN
            EXCEPTION "..." 'PECA BLOQUEADA PARA UTILIZACAO. ' || ITEM_DESCRICAO ;
        END

        IF ( NOT QUANTIDADE_SALDO > 0 ) THEN
        BEGIN
            EXCEPTION "..." 'NAO A SALDO DISPONIVEL PARA ESTA PECA. ' || ITEM_DESCRICAO ;
        END

        IF ( NOT RESULTADO = 'I' OR NOT RESULTADO = 'R' ) THEN
        BEGIN

            validar_peca = 1;

            if(remessa_avulsa = 1 and RESULTADO = 'P' AND STATUS_OB = '1' )then
            begin
                validar_peca = 0;
            end

            IF ( validar_peca = 1) THEN
            BEGIN
                IF ( RESULTADO = 'P' AND STATUS_OB = '0') THEN
                BEGIN
                    EXCEPTION "..." 'OB DA PECA NAO FOI LIBERADA.' || ITEM_DESCRICAO;
                END
                ELSE
                IF ( RESULTADO = 'P' AND STATUS_OB = '1' ) THEN
                BEGIN
                    EXCEPTION "..." 'PECA PEDENTE PARA REVISAO.' || ITEM_DESCRICAO;
                END
                ELSE
                IF ( RESULTADO = 'P' AND NOT STATUS_OB = '2' ) THEN
                BEGIN
                    EXCEPTION "..." 'SITUACAO DA PECA NAO IDENTIFICADA.' || ITEM_DESCRICAO;
                END
            END
        END

    END
    ELSE
    /* VINCULO DA VWREMESSA_TALAO_DETALHE */
    IF ( NEW.TIPO = 'D' ) THEN
    BEGIN

        SELECT D.PRODUTO_ID,
               P.DESCRICAO,
               D.QUANTIDADE_SALDO,
               D.STATUS
          FROM VWREMESSA_TALAO_DETALHE D,
               TBPRODUTO P
         WHERE D.ID = NEW.TABELA_ID
           AND P.CODIGO = D.PRODUTO_ID
          INTO :PRODUTO_ID,
               :PRODUTO_DESCRICAO,
               :QUANTIDADE_SALDO,
               :STATUS;

        IF ( PRODUTO_ID IS NULL ) THEN
        BEGIN
            EXCEPTION "..." 'TALAO ' || COALESCE(NEW.TABELA_ID,'') || ' NAO LOCALIZADO.';
        END

        ITEM_DESCRICAO = ' TALAO: ' || NEW.TABELA_ID || ' PRODUTO: ' || PRODUTO_ID || '-' || PRODUTO_DESCRICAO;

        IF ( NOT QUANTIDADE_SALDO > 0 ) THEN
        BEGIN
            EXCEPTION "..." 'NAO A SALDO DISPONIVEL PARA ESTE TALAO.' || ITEM_DESCRICAO ;
        END

        IF ( NOT STATUS = '3' ) THEN
        BEGIN
            EXCEPTION "..." 'TALAO NAO PRODUZIDO.' || ITEM_DESCRICAO ;
        END

    END
    ELSE
    BEGIN
        EXCEPTION "..." 'TIPO DE VINCULO NAO IDENTIFICADO.';
    END

END;

