SET TERM ^ ;

CREATE OR ALTER trigger ttbpedido_item_b01ud for tbpedido_item
active before update or delete position 0
AS
DECLARE VARIABLE CONFERENCIA_CODIGO VARCHAR(500);
DECLARE VARIABLE QTD_TOTAL_CONFERENCIA NUMERIC(18,4);
BEGIN

    SELECT
        COALESCE(LIST(FN_LPAD(B.TABELA_ID, 8, '0')||B.SEQUENCIA, ', '), ''),
        COALESCE(SUM(A.QTD_TOTAL), 0)
    FROM TBCONFERENCIA_ITEM A, TBCONFERENCIA B
    WHERE A.CONFERENCIA_ID = B.ID
    AND B.TABELA = 'PED'
    AND B.TABELA_ID = OLD.PEDIDO
    AND B.STATUS >= 2
    AND A.TABELA_ITEM_ID = OLD.CONTROLE
    INTO :CONFERENCIA_CODIGO, :QTD_TOTAL_CONFERENCIA;

    IF (:CONFERENCIA_CODIGO <> '') THEN
    BEGIN

        IF (UPDATING) THEN
        BEGIN

            IF (OLD.PRODUTO_CODIGO <> NEW.PRODUTO_CODIGO) THEN
            BEGIN
                EXCEPTION "..." 'ITEM: '||FN_LPAD(OLD.SEQUENCIA, 3, '0')||' JA VINCULADO NA(S) CONFERENCIA(S): '||:CONFERENCIA_CODIGO||'. OPERACAO CANCELADA!';
            END

            IF (OLD.TAMANHO <> NEW.TAMANHO) THEN
            BEGIN
                EXCEPTION "..." 'ITEM: '||FN_LPAD(OLD.SEQUENCIA, 3, '0')||' JA VINCULADO NA(S) CONFERENCIA(S): '||:CONFERENCIA_CODIGO||'. OPERACAO CANCELADA!';
            END

            IF (OLD.QUANTIDADE <> NEW.QUANTIDADE) THEN
            BEGIN
                IF (NEW.QUANTIDADE < :QTD_TOTAL_CONFERENCIA) THEN
                BEGIN
                    EXCEPTION "..." 'ITEM: '||FN_LPAD(OLD.SEQUENCIA, 3, '0')||' JA VINCULADO NA(S) CONFERENCIA(S): '||:CONFERENCIA_CODIGO||'. OPERACAO CANCELADA!';
                END
            END

        END
        IF (DELETING) THEN
        BEGIN
            EXCEPTION "..." 'ITEM: '||FN_LPAD(OLD.SEQUENCIA, 3, '0')||' JA VINCULADO NA(S) CONFERENCIA(S): '||:CONFERENCIA_CODIGO||'. OPERACAO CANCELADA!';
        END

    END
END^

SET TERM ; ^

