
UPDATE OR INSERT INTO TBMENU (CONTROLE, GRUPO, SUBGRUPO, TIPO, URL, DESCRICAO) 
	VALUES (14230, 'LOG', 'LOG', '1', '', 'REGISTRO DE CONFERÊNCIA DE PEÇAS DAS COMANDAS')
	MATCHING (CONTROLE);

CREATE INDEX ITBCONFERENCIA_03
ON TBCONFERENCIA (TABELA,TABELA_ID);

COMMENT ON COLUMN TBCONFERENCIA.TABELA IS 
'NFE - NOTA FISCAL DE ENTRADA
NFS - NOTA FISCAL DE SAÍDA
PED - PEDIDOS
COM - COMANDA DE ALOCACAO';

COMMENT ON COLUMN TBCONFERENCIA.STATUS IS
'0 - CONFERÊNCIA NÃO REALIZADA;
1 - CONFERÊNCIA INICIADA;
2 - CONFERÊNCIA FINALIZADA (OK);
3 - CONFERÊNCIA FINALIZADA COM DIVERGÊNCIAS;
4 - CONFERÊNCIA FATURADA;
5 - CONFERÊNCIA PARCIALMENTE FATURADA;';

/************************************************/

CREATE INDEX ITBPEDIDO_ITEM_18
ON TBPEDIDO_ITEM (PEDIDO,CONTROLE);

/************************************************/

SET TERM ^ ;

CREATE OR ALTER trigger ttbconferencia_b02i for tbconferencia
active before insert position 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
DECLARE VARIABLE DESC_STTS_NEW VARCHAR(500);
DECLARE VARIABLE HISTORICO_ID INTEGER;
BEGIN

    HISTORICO = '';
    
    IF (NEW.ID > 0) THEN
    BEGIN
        :DESC_STTS_NEW = '';
        
        IF (NEW.STATUS = 0) THEN
        BEGIN
            :DESC_STTS_NEW = 'NAO REALIZADA';
        END ELSE IF (NEW.STATUS = 1) THEN
        BEGIN
            :DESC_STTS_NEW = 'INICIADA';
        END ELSE IF (NEW.STATUS = 2) THEN
        BEGIN
            :DESC_STTS_NEW = 'FINALIZADA OK';
        END ELSE IF (NEW.STATUS = 3) THEN
        BEGIN
            :DESC_STTS_NEW = 'FINALIZADA COM DIVERGÊNCIAS';
        END ELSE IF (NEW.STATUS = 4) THEN
        BEGIN
            :DESC_STTS_NEW = 'FATURADA';
        END ELSE IF (NEW.STATUS = 5) THEN
        BEGIN
            :DESC_STTS_NEW = 'PARCIALMENTE FATURADA';
        END

        IF (NEW.TABELA = 'PED') THEN
        BEGIN
            :DESC_STTS_NEW = FN_LPAD(NEW.TABELA_ID, 8, '0')||FN_IS_EMPTY(NEW.SEQUENCIA)||' INCLUIDA';
        END

        IF (NEW.TABELA = 'COM') THEN
        BEGIN
            :DESC_STTS_NEW = FN_LPAD(NEW.TABELA_ID, 8, '0')||FN_IS_EMPTY(NEW.SEQUENCIA)||' INCLUIDA';
        END
    
        HISTORICO = HISTORICO||'CONFERENCIA '||:DESC_STTS_NEW;
    END
    
    IF (HISTORICO <> '') THEN
    BEGIN
        IF (NEW.TABELA = 'NFE') THEN
        BEGIN
            :HISTORICO_ID = '01'||NEW.TABELA_ID;
        END ELSE IF (NEW.TABELA = 'NFS') THEN
        BEGIN
            :HISTORICO_ID = '02'||NEW.TABELA_ID;
        END ELSE IF (NEW.TABELA = 'PED') THEN
        BEGIN
            :HISTORICO_ID = '03'||NEW.TABELA_ID;
        END ELSE IF (NEW.TABELA = 'COM') THEN
        BEGIN
            :HISTORICO_ID = '04'||NEW.TABELA_ID;
        END
    
        IF (NEW.TABELA = 'PED') THEN
        BEGIN
            EXECUTE PROCEDURE SPI_HISTORICO('TBCONFERENCIA', NEW.ID, :HISTORICO);
        END ELSE IF (NEW.TABELA = 'COM') THEN
        BEGIN
            EXECUTE PROCEDURE SPI_HISTORICO('TBCONFERENCIA', NEW.ID, :HISTORICO);
        END ELSE
        BEGIN
            EXECUTE PROCEDURE SPI_HISTORICO('TBCONFERENCIA', :HISTORICO_ID, :HISTORICO);
        END
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbconferencia_b01u for tbconferencia
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);

DECLARE VARIABLE HISTORICO_ID INTEGER;
DECLARE VARIABLE OLD_STATUS VARCHAR(500);
DECLARE VARIABLE NEW_STATUS VARCHAR(500);
DECLARE VARIABLE OLD_USUARIO VARCHAR(500);
DECLARE VARIABLE NEW_USUARIO VARCHAR(500);
BEGIN

    :HISTORICO = '';

    OLD_STATUS  = IIF(OLD.STATUS = '0', 'NAO REALIZADA', IIF(OLD.STATUS = '1', 'INICIADA', IIF(OLD.STATUS = '2', 'FINALIZADA OK', IIF(OLD.STATUS = '3', 'FINALIZADA COM DIVERGÊNCIAS', IIF(OLD.STATUS = '4', 'FATURADA', IIF(OLD.STATUS = '5', 'PARCIALMENTE FATURADA', ''))))));
    NEW_STATUS  = IIF(NEW.STATUS = '0', 'NAO REALIZADA', IIF(NEW.STATUS = '1', 'INICIADA', IIF(NEW.STATUS = '2', 'FINALIZADA OK', IIF(NEW.STATUS = '3', 'FINALIZADA COM DIVERGÊNCIAS', IIF(NEW.STATUS = '4', 'FATURADA', IIF(NEW.STATUS = '5', 'PARCIALMENTE FATURADA', ''))))));
    OLD_USUARIO = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 4, '0')||' - '||A.USUARIO FROM TBUSUARIO A WHERE A.CODIGO = OLD.USUARIO_ID), '');
    NEW_USUARIO = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 4, '0')||' - '||A.USUARIO FROM TBUSUARIO A WHERE A.CODIGO = NEW.USUARIO_ID), '');

    IF (OLD.TABELA <> NEW.TABELA) THEN
    BEGIN
        HISTORICO = HISTORICO||' TABELA:'||OLD.TABELA||'->'||NEW.TABELA;
    END

    IF (OLD.TABELA_ID <> NEW.TABELA_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' CODIGO:'||FN_LPAD(OLD.TABELA_ID, 8, '0')||'->'||FN_LPAD(NEW.TABELA_ID, 8, '0');
    END

    IF ((OLD.DATAHORA IS NULL AND NEW.DATAHORA IS NOT NULL) OR (OLD.DATAHORA IS NOT NULL AND NEW.DATAHORA IS NULL) OR (OLD.DATAHORA <> NEW.DATAHORA)) THEN
    BEGIN
        HISTORICO = HISTORICO||' DT.HORA INI:'||FN_TIMESTAMP_TO_STRING(OLD.DATAHORA)||'->'||FN_TIMESTAMP_TO_STRING(NEW.DATAHORA);
    END

    IF (OLD.USUARIO_ID <> NEW.USUARIO_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' USUARIO:'||OLD_USUARIO||'->'||NEW_USUARIO;
    END

    IF (OLD.STATUS <> NEW.STATUS) THEN
    BEGIN
        HISTORICO = HISTORICO||' STATUS:'||OLD_STATUS||'->'||NEW_STATUS;
    END

    IF (OLD.JUSTIFICATIVA <> NEW.JUSTIFICATIVA) THEN
    BEGIN
        HISTORICO = HISTORICO||' JUSTIF:'||OLD.JUSTIFICATIVA||'->'||NEW.JUSTIFICATIVA;
    END

    IF ((OLD.DATAHORA_FIM IS NULL AND NEW.DATAHORA_FIM IS NOT NULL) OR (OLD.DATAHORA_FIM IS NOT NULL AND NEW.DATAHORA_FIM IS NULL) OR (OLD.DATAHORA_FIM <> NEW.DATAHORA_FIM)) THEN
    BEGIN
        HISTORICO = HISTORICO||' DT.HORA FIM:'||FN_TIMESTAMP_TO_STRING(OLD.DATAHORA_FIM)||'->'||FN_TIMESTAMP_TO_STRING(NEW.DATAHORA_FIM);
    END

    IF (OLD.SEQUENCIA <> NEW.SEQUENCIA) THEN
    BEGIN
        HISTORICO = HISTORICO||' SEQ:'||OLD.SEQUENCIA||'->'||NEW.SEQUENCIA;
    END

    -- GRAVAR HISTORICO
    IF (HISTORICO <> '') THEN
    BEGIN
        IF (OLD.TABELA = 'NFE') THEN
        BEGIN
          :HISTORICO_ID = '01'||OLD.TABELA_ID;
        END ELSE IF (OLD.TABELA = 'NFS') THEN
        BEGIN
          :HISTORICO_ID = '02'||OLD.TABELA_ID;
        END ELSE IF (OLD.TABELA = 'PED') THEN
        BEGIN
          :HISTORICO_ID = '03'||OLD.TABELA_ID;
        END ELSE IF (OLD.TABELA = 'COM') THEN
        BEGIN
          :HISTORICO_ID = '04'||OLD.TABELA_ID;
        END
    
        HISTORICO = 'CONFERENCIA '||FN_LPAD(NEW.TABELA_ID, 8, '0')||FN_IS_EMPTY(NEW.SEQUENCIA)||' ALTERADA:'||HISTORICO;
        IF (OLD.TABELA = 'PED') THEN
        BEGIN
            EXECUTE PROCEDURE SPI_HISTORICO('TBCONFERENCIA', OLD.ID, FN_ELIPSE(:HISTORICO, 500));
        END ELSE IF (OLD.TABELA = 'COM') THEN
        BEGIN
            EXECUTE PROCEDURE SPI_HISTORICO('TBCONFERENCIA', OLD.ID, FN_ELIPSE(:HISTORICO, 500));
        END ELSE
        BEGIN
            EXECUTE PROCEDURE SPI_HISTORICO('TBCONFERENCIA', :HISTORICO_ID, FN_ELIPSE(:HISTORICO, 500));
        END
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbconferencia_b01d for tbconferencia
active before delete position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
DECLARE VARIABLE HISTORICO_ID INTEGER;
BEGIN
    
    HISTORICO = '';
    
    IF ((OLD.STATUS = 4) OR (OLD.STATUS = 5)) THEN
    BEGIN
        EXCEPTION "..." 'ESTA CONFERENCIA JÁ FOI FATURADA. EXCLUSAO NAO AUTORIZADA!';
    END
    
    IF (OLD.ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'CONFERENCIA '||FN_LPAD(OLD.TABELA_ID, 8, '0')||FN_IS_EMPTY(OLD.SEQUENCIA)||' EXCLUIDA';
    END
    
    IF (HISTORICO <> '') THEN
    BEGIN
        IF (OLD.TABELA = 'NFE') THEN
        BEGIN
            :HISTORICO_ID = '01'||OLD.TABELA_ID;
        END ELSE IF (OLD.TABELA = 'NFS') THEN
        BEGIN
            :HISTORICO_ID = '02'||OLD.TABELA_ID;
        END ELSE IF (OLD.TABELA = 'PED') THEN
        BEGIN
            :HISTORICO_ID = '03'||OLD.TABELA_ID;
        END ELSE IF (OLD.TABELA = 'COM') THEN
        BEGIN
            :HISTORICO_ID = '04'||OLD.TABELA_ID;
        END
    
        IF (OLD.TABELA = 'PED') THEN
        BEGIN
            EXECUTE PROCEDURE SPI_HISTORICO('TBCONFERENCIA', OLD.ID, :HISTORICO);
        END ELSE IF (OLD.TABELA = 'COM') THEN
        BEGIN
            EXECUTE PROCEDURE SPI_HISTORICO('TBCONFERENCIA', OLD.ID, :HISTORICO);
        END ELSE
        BEGIN
            EXECUTE PROCEDURE SPI_HISTORICO('TBCONFERENCIA', :HISTORICO_ID, :HISTORICO);
        END
    END
END
^

SET TERM ; ^

/***************************************************************************************************************************/
/***************************************************************************************************************************/
/***************************************************************************************************************************/

ALTER TABLE TBCONFERENCIA
    ADD ESPECIE VARCHAR(20) CHARACTER SET UTF8 DEFAULT '' COLLATE UTF8,
    ADD VOLUMES INTEGER DEFAULT 0,
    ADD PESO_BRUTO NUMERIC(15,4) DEFAULT 0,
    ADD PESO_LIQUIDO NUMERIC(15,4) DEFAULT 0;

SET TERM ^ ;

CREATE OR ALTER trigger ttbconferencia_b01u for tbconferencia
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);

DECLARE VARIABLE HISTORICO_ID INTEGER;
DECLARE VARIABLE OLD_STATUS VARCHAR(500);
DECLARE VARIABLE NEW_STATUS VARCHAR(500);
DECLARE VARIABLE OLD_USUARIO VARCHAR(500);
DECLARE VARIABLE NEW_USUARIO VARCHAR(500);
BEGIN

    :HISTORICO = '';

    OLD_STATUS  = IIF(OLD.STATUS = '0', 'NAO REALIZADA', IIF(OLD.STATUS = '1', 'INICIADA', IIF(OLD.STATUS = '2', 'FINALIZADA OK', IIF(OLD.STATUS = '3', 'FINALIZADA COM DIVERGÊNCIAS', IIF(OLD.STATUS = '4', 'FATURADA', IIF(OLD.STATUS = '5', 'PARCIALMENTE FATURADA', ''))))));
    NEW_STATUS  = IIF(NEW.STATUS = '0', 'NAO REALIZADA', IIF(NEW.STATUS = '1', 'INICIADA', IIF(NEW.STATUS = '2', 'FINALIZADA OK', IIF(NEW.STATUS = '3', 'FINALIZADA COM DIVERGÊNCIAS', IIF(NEW.STATUS = '4', 'FATURADA', IIF(NEW.STATUS = '5', 'PARCIALMENTE FATURADA', ''))))));
    OLD_USUARIO = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 4, '0')||' - '||A.USUARIO FROM TBUSUARIO A WHERE A.CODIGO = OLD.USUARIO_ID), '');
    NEW_USUARIO = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 4, '0')||' - '||A.USUARIO FROM TBUSUARIO A WHERE A.CODIGO = NEW.USUARIO_ID), '');

    IF (OLD.TABELA <> NEW.TABELA) THEN
    BEGIN
        HISTORICO = HISTORICO||' TABELA:'||OLD.TABELA||'->'||NEW.TABELA;
    END

    IF (OLD.TABELA_ID <> NEW.TABELA_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' CODIGO:'||FN_LPAD(OLD.TABELA_ID, 8, '0')||'->'||FN_LPAD(NEW.TABELA_ID, 8, '0');
    END

    IF ((OLD.DATAHORA IS NULL AND NEW.DATAHORA IS NOT NULL) OR (OLD.DATAHORA IS NOT NULL AND NEW.DATAHORA IS NULL) OR (OLD.DATAHORA <> NEW.DATAHORA)) THEN
    BEGIN
        HISTORICO = HISTORICO||' DT.HORA INI:'||FN_TIMESTAMP_TO_STRING(OLD.DATAHORA)||'->'||FN_TIMESTAMP_TO_STRING(NEW.DATAHORA);
    END

    IF (OLD.USUARIO_ID <> NEW.USUARIO_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' USUARIO:'||OLD_USUARIO||'->'||NEW_USUARIO;
    END

    IF (OLD.STATUS <> NEW.STATUS) THEN
    BEGIN
        HISTORICO = HISTORICO||' STATUS:'||OLD_STATUS||'->'||NEW_STATUS;
    END

    IF (OLD.JUSTIFICATIVA <> NEW.JUSTIFICATIVA) THEN
    BEGIN
        HISTORICO = HISTORICO||' JUSTIF:'||OLD.JUSTIFICATIVA||'->'||NEW.JUSTIFICATIVA;
    END

    IF ((OLD.DATAHORA_FIM IS NULL AND NEW.DATAHORA_FIM IS NOT NULL) OR (OLD.DATAHORA_FIM IS NOT NULL AND NEW.DATAHORA_FIM IS NULL) OR (OLD.DATAHORA_FIM <> NEW.DATAHORA_FIM)) THEN
    BEGIN
        HISTORICO = HISTORICO||' DT.HORA FIM:'||FN_TIMESTAMP_TO_STRING(OLD.DATAHORA_FIM)||'->'||FN_TIMESTAMP_TO_STRING(NEW.DATAHORA_FIM);
    END

    IF (OLD.SEQUENCIA <> NEW.SEQUENCIA) THEN
    BEGIN
        HISTORICO = HISTORICO||' SEQ:'||OLD.SEQUENCIA||'->'||NEW.SEQUENCIA;
    END

    IF (OLD.ESPECIE <> NEW.ESPECIE) THEN
    BEGIN
        HISTORICO = HISTORICO||' ESPECIE:'||OLD.ESPECIE||'->'||NEW.ESPECIE;
    END

    IF (OLD.VOLUMES <> NEW.VOLUMES) THEN
    BEGIN
        HISTORICO = HISTORICO||' VOLUMES:'||OLD.VOLUMES||'->'||NEW.VOLUMES;
    END

    IF (OLD.PESO_BRUTO <> NEW.PESO_BRUTO) THEN
    BEGIN
        HISTORICO = HISTORICO||' PESO BRUTO:'||FN_FORMAT_NUMBER2(OLD.PESO_BRUTO, 4)||'->'||FN_FORMAT_NUMBER2(NEW.PESO_BRUTO, 4);
    END

    IF (OLD.PESO_LIQUIDO <> NEW.PESO_LIQUIDO) THEN
    BEGIN
        HISTORICO = HISTORICO||' PESO LIQ:'||FN_FORMAT_NUMBER2(OLD.PESO_LIQUIDO, 4)||'->'||FN_FORMAT_NUMBER2(NEW.PESO_LIQUIDO, 4);
    END

    -- GRAVAR HISTORICO
    IF (HISTORICO <> '') THEN
    BEGIN
        IF (OLD.TABELA = 'NFE') THEN
        BEGIN
          :HISTORICO_ID = '01'||OLD.TABELA_ID;
        END ELSE IF (OLD.TABELA = 'NFS') THEN
        BEGIN
          :HISTORICO_ID = '02'||OLD.TABELA_ID;
        END ELSE IF (OLD.TABELA = 'PED') THEN
        BEGIN
          :HISTORICO_ID = '03'||OLD.TABELA_ID;
        END ELSE IF (OLD.TABELA = 'COM') THEN
        BEGIN
          :HISTORICO_ID = '04'||OLD.TABELA_ID;
        END
    
        HISTORICO = 'CONFERENCIA '||FN_LPAD(NEW.TABELA_ID, 8, '0')||FN_IS_EMPTY(NEW.SEQUENCIA)||' ALTERADA:'||HISTORICO;
        IF (OLD.TABELA = 'PED') THEN
        BEGIN
            EXECUTE PROCEDURE SPI_HISTORICO('TBCONFERENCIA', OLD.ID, FN_ELIPSE(:HISTORICO, 500));
        END ELSE IF (OLD.TABELA = 'COM') THEN
        BEGIN
            EXECUTE PROCEDURE SPI_HISTORICO('TBCONFERENCIA', OLD.ID, FN_ELIPSE(:HISTORICO, 500));
        END ELSE
        BEGIN
            EXECUTE PROCEDURE SPI_HISTORICO('TBCONFERENCIA', :HISTORICO_ID, FN_ELIPSE(:HISTORICO, 500));
        END
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbconferencia_b02d for tbconferencia
active before delete position 1
AS
DECLARE VARIABLE DADOS BLOB SUB_TYPE 1 SEGMENT SIZE 80;
BEGIN
    DELETE FROM TBCONFERENCIA_ITEM A WHERE A.CONFERENCIA_ID = OLD.ID; /* Exclui os registros filhos */

    DADOS = COALESCE((
        FN_TO_JSON_V2(
            FN_TO_PAR_JSON_V2('ID', OLD.ID),
            FN_TO_PAR_JSON_V2('TABELA', OLD.TABELA),
            FN_TO_PAR_JSON_V2('TABELA_ID', OLD.TABELA_ID),
            FN_TO_PAR_JSON_V2('DATAHORA', OLD.DATAHORA),
            FN_TO_PAR_JSON_V2('USUARIO_ID', OLD.USUARIO_ID),
            FN_TO_PAR_JSON_V2('STATUS', OLD.STATUS),
            FN_TO_PAR_JSON_V2('JUSTIFICATIVA', OLD.JUSTIFICATIVA),
            FN_TO_PAR_JSON_V2('DATAHORA_FIM', OLD.DATAHORA_FIM),
            FN_TO_PAR_JSON_V2('SEQUENCIA', OLD.SEQUENCIA),
            FN_TO_PAR_JSON_V2('ESPECIE', OLD.ESPECIE),
            FN_TO_PAR_JSON_V2('VOLUMES', OLD.VOLUMES),
            FN_TO_PAR_JSON_V2('PESO_BRUTO', OLD.PESO_BRUTO),
            FN_TO_PAR_JSON_V2('PESO_LIQUIDO', OLD.PESO_LIQUIDO)
        )), '');

    EXECUTE PROCEDURE SPI_BACKUP('TBCONFERENCIA', OLD.ID, DADOS);
END
^

SET TERM ; ^

/***************************************************************************************************************************/
/***************************************************************************************************************************/
/***************************************************************************************************************************/

SET TERM ^ ;

CREATE OR ALTER trigger ttbpedido_item_a01u for tbpedido_item
active after update position 1
AS
DECLARE VARIABLE CONFERENCIA_ITEM_ID INTEGER;
DECLARE VARIABLE CONFERENCIA_ID INTEGER;

DECLARE VARIABLE SALDO_DISPONIVEL NUMERIC(15,4);
BEGIN
    
    IF(OLD.QTD_EST <> NEW.QTD_EST) THEN
    BEGIN
    
        SELECT FIRST 1
            K.ID,
            K.CONFERENCIA_ID
        FROM TBCONFERENCIA_ITEM K
        INNER JOIN TBCONFERENCIA K2 ON K2.ID = K.CONFERENCIA_ID
        WHERE COALESCE(K.STATUS, '0') <> '1'
        AND K2.TABELA = 'PED'
        AND K.TABELA_ITEM_ID = NEW.CONTROLE INTO :CONFERENCIA_ITEM_ID, :CONFERENCIA_ID;

        IF(COALESCE(:CONFERENCIA_ITEM_ID, 0) > 0) THEN
        BEGIN
    
            IF (NEW.QTD_EST = 0) THEN
            BEGIN
            
                :SALDO_DISPONIVEL = COALESCE((SELECT FIRST 1
                    IIF((FN_ESTOQUE_SALDO_DISPONIVEL(B.ESTABELECIMENTO_CODIGO, B.LOCALIZACAO_ID, B.PRODUTO_CODIGO, B.TAMANHO)) > B.QUANTIDADE, B.QUANTIDADE, (FN_ESTOQUE_SALDO_DISPONIVEL(B.ESTABELECIMENTO_CODIGO, B.LOCALIZACAO_ID, B.PRODUTO_CODIGO, B.TAMANHO)))
                FROM TBCONFERENCIA A, TBCONFERENCIA_ITEM T
                INNER JOIN TBPEDIDO_ITEM B ON B.CONTROLE = T.TABELA_ITEM_ID
                WHERE A.ID = T.CONFERENCIA_ID
                AND A.TABELA = 'PED'
                AND T.ID = :CONFERENCIA_ITEM_ID), 0);
            
            END ELSE
            BEGIN
            
                :SALDO_DISPONIVEL = NEW.QTD_EST;
            
            END
    
            UPDATE TBCONFERENCIA_ITEM T SET
                T.QTD_ALOCADA       = NEW.QTD_EST,
                T.QTD_DISPONIVEL    = :SALDO_DISPONIVEL
            WHERE T.ID = :CONFERENCIA_ITEM_ID;
        
        END
    
    END
END^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbestoque_detalhe_aloc_b01iud for tbestoque_detalhe_alocacao
active before insert or update or delete position 0
AS
DECLARE VARIABLE CONFERENCIA VARCHAR(500);
DECLARE VARIABLE CONFERENCIA_STATUS INTEGER;
BEGIN

    IF (INSERTING) THEN
    BEGIN

        IF (NEW.ESTOQUE_DETALHE_ID > 0) THEN
        BEGIN

            EXCEPTION "..." 'ESTOQUE VINCULADO A UMA COMANDA DE PEDIDO. INCLUSAO NAO AUTORIZADA!';

        END

    END

    IF (UPDATING) THEN
    BEGIN

        IF (OLD.ESTOQUE_DETALHE_ID <> NEW.ESTOQUE_DETALHE_ID AND OLD.ESTOQUE_DETALHE_ID > 0 AND NEW.ESTOQUE_DETALHE_ID > 0) THEN
        BEGIN
            IF ((OLD.SALDO <> NEW.SALDO) OR (OLD.ESTOQUE_DETALHE_ID <> NEW.ESTOQUE_DETALHE_ID)) THEN
            BEGIN

            END ELSE
            BEGIN
                EXCEPTION "..." 'ESTOQUE VINCULADO A UMA COMANDA DE PEDIDO. ALTERACAO NAO AUTORIZADA!';
            END
        END

        CONFERENCIA             = COALESCE((SELECT FIRST 1 FN_LPAD(B.TABELA_ID, 8, '0')||'-'||FN_IS_EMPTY(B.SEQUENCIA) FROM TBCONFERENCIA_ITEM A INNER JOIN TBCONFERENCIA B ON B.ID = A.CONFERENCIA_ID WHERE A.TABELA_ITEM_ID = OLD.TAB_ITEM_ID AND B.TABELA = 'COM' AND B.TABELA_ID = OLD.ESTOQUE_DETALHE_ID), '');
        CONFERENCIA_STATUS      = COALESCE((SELECT FIRST 1 B.STATUS FROM TBCONFERENCIA_ITEM A INNER JOIN TBCONFERENCIA B ON B.ID = A.CONFERENCIA_ID WHERE A.TABELA_ITEM_ID = OLD.TAB_ITEM_ID AND B.TABELA = 'COM' AND B.TABELA_ID = OLD.ESTOQUE_DETALHE_ID), 0);

        IF (CONFERENCIA <> '') THEN
        BEGIN

            IF (CONFERENCIA_STATUS > 1) THEN
            BEGIN
                IF (OLD.SALDO <> NEW.SALDO) THEN
                BEGIN
    
                END ELSE
                BEGIN
                    EXCEPTION "..." 'CONFERENCIA '||CONFERENCIA||' FINALIZADA OU JA FATURADA. ALTERACAO NAO AUTORIZADA!';
                END
            END

        END

    END

    IF (DELETING) THEN
    BEGIN

        IF (OLD.ESTOQUE_DETALHE_ID > 0) THEN
        BEGIN

            EXCEPTION "..." 'ESTOQUE VINCULADO A UMA COMANDA DE PEDIDO. EXCLUSAO NAO AUTORIZADA!';

        END

        CONFERENCIA             = COALESCE((SELECT FIRST 1 FN_LPAD(B.TABELA_ID, 8, '0')||'-'||FN_IS_EMPTY(B.SEQUENCIA) FROM TBCONFERENCIA_ITEM A INNER JOIN TBCONFERENCIA B ON B.ID = A.CONFERENCIA_ID WHERE A.TABELA_ITEM_ID = OLD.TAB_ITEM_ID AND B.TABELA = 'COM' AND B.TABELA_ID = OLD.ESTOQUE_DETALHE_ID), '');
        CONFERENCIA_STATUS      = COALESCE((SELECT FIRST 1 B.STATUS FROM TBCONFERENCIA_ITEM A INNER JOIN TBCONFERENCIA B ON B.ID = A.CONFERENCIA_ID WHERE A.TABELA_ITEM_ID = OLD.TAB_ITEM_ID AND B.TABELA = 'COM' AND B.TABELA_ID = OLD.ESTOQUE_DETALHE_ID), 0);

        IF (CONFERENCIA <> '') THEN
        BEGIN
            EXCEPTION "..." 'ITEM VINCULADO A CONFERENCIA '||CONFERENCIA||'. EXCLUSAO NAO AUTORIZADA!';
        END
    END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE trigger ttbestoque_detalhe_b01ud for tbestoque_detalhe
active before update or delete position 0
AS
DECLARE VARIABLE CONFERENCIA VARCHAR(500);
DECLARE VARIABLE CONFERENCIA_STATUS INTEGER;
BEGIN

    IF (UPDATING) THEN
    BEGIN

        CONFERENCIA        = COALESCE((SELECT FIRST 1 FN_LPAD(A.TABELA, 8, '0')||'-'||FN_IS_EMPTY(A.SEQUENCIA) FROM TBCONFERENCIA A WHERE A.TABELA_ID = OLD.ID AND A.TABELA = 'COM'), '');
        CONFERENCIA_STATUS = COALESCE((SELECT FIRST 1 A.STATUS FROM TBCONFERENCIA A WHERE A.TABELA_ID = OLD.ID AND A.TABELA = 'COM'), 0);

        IF (CONFERENCIA <> '' AND OLD.PEDIDO <> NEW.PEDIDO) THEN
        BEGIN
            EXCEPTION "..." 'COMANDA DE ALOCACAO VINCULADA A CONFERENCIA '||CONFERENCIA||'. ALTERACAO NAO AUTORIZADA!';
        END
    END

    IF (DELETING) THEN
    BEGIN

        CONFERENCIA        = COALESCE((SELECT FIRST 1 FN_LPAD(A.TABELA, 8, '0')||'-'||FN_IS_EMPTY(A.SEQUENCIA) FROM TBCONFERENCIA A WHERE A.TABELA_ID = OLD.ID AND A.TABELA = 'COM'), '');
        CONFERENCIA_STATUS = COALESCE((SELECT FIRST 1 A.STATUS FROM TBCONFERENCIA A WHERE A.TABELA_ID = OLD.ID AND A.TABELA = 'COM'), 0);

        IF (CONFERENCIA <> '') THEN
        BEGIN
            EXCEPTION "..." 'COMANDA DE ALOCACAO VINCULADA A CONFERENCIA '||CONFERENCIA||'. EXCLUSAO NAO AUTORIZADA!';
        END
    END

END
^

SET TERM ; ^

