UPDATE OR INSERT INTO TBMENU (CONTROLE, GRUPO, SUBGRUPO, TIPO, URL, DESCRICAO)
	VALUES (27090, 'PRO', 'PRO', '1', '', 'CADASTRO DE GRUPOS DE PRODUTOS')
	MATCHING (CONTROLE);

/***********************************************************************************************/
/***** TBPRODUTO *******************************************************************************/

ALTER TABLE TBPRODUTO
    ADD GRUPO_PRODUTO_ID INTEGER,
	ADD TIPO_INC CHAR(1) CHARACTER SET UTF8 DEFAULT '0' COLLATE UTF8;

COMMENT ON COLUMN TBPRODUTO.GRUPO_PRODUTO_ID IS
'ID DO GRUPO DE PRODUTO (TBGRUPO_PRODUTO)';

COMMENT ON COLUMN TBPRODUTO.TIPO_INC IS
'0 - Tela de Produtos;
1 - Tela de Grupos de Produtos;';

CREATE INDEX ITBPRODUTO_22
ON TBPRODUTO (GRUPO_PRODUTO_ID);

CREATE INDEX ITBPRODUTO_23
ON TBPRODUTO (TIPO_INC);

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

SET TERM ^ ;

CREATE OR ALTER trigger ttbproduto_b9u for tbproduto
active before update position 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(1000);
BEGIN

   HISTORICO = '';

   IF (OLD.DESCRICAO <> NEW.DESCRICAO) THEN
       BEGIN
       HISTORICO = HISTORICO||' DESC:'||OLD.DESCRICAO||'->'||NEW.DESCRICAO;
       END
   IF (OLD.TIPOPRODUTO_CODIGO <> NEW.TIPOPRODUTO_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' TIPO:'||OLD.TIPOPRODUTO_CODIGO||'->'||NEW.TIPOPRODUTO_CODIGO;
       END
   IF (OLD.FAMILIA_CODIGO <> NEW.FAMILIA_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' FAM:'||OLD.FAMILIA_CODIGO||'->'||NEW.FAMILIA_CODIGO;
       END
   IF (OLD.LINHA_CODIGO <> NEW.LINHA_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' LIN:'||OLD.LINHA_CODIGO||'->'||NEW.LINHA_CODIGO;
       END
   IF (OLD.MODELO_CODIGO <> NEW.MODELO_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' MOD:'||OLD.MODELO_CODIGO||'->'||NEW.MODELO_CODIGO;
       END
   IF (OLD.GRADE_CODIGO <> NEW.GRADE_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' GDE:'||OLD.GRADE_CODIGO||'->'||NEW.GRADE_CODIGO;
       END
   IF (OLD.UNIDADEMEDIDA_SIGLA <> NEW.UNIDADEMEDIDA_SIGLA) THEN
       BEGIN
       HISTORICO = HISTORICO||' UND:'||OLD.UNIDADEMEDIDA_SIGLA||'->'||NEW.UNIDADEMEDIDA_SIGLA;
       END
   IF (OLD.COR_CODIGO <> NEW.COR_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' COR:'||OLD.COR_CODIGO||'->'||NEW.COR_CODIGO;
       END
   IF (OLD.LOCALIZACAO_CODIGO <> NEW.LOCALIZACAO_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' LOC:'||OLD.LOCALIZACAO_CODIGO||'->'||NEW.LOCALIZACAO_CODIGO;
       END
   IF (OLD.GRUPO_PRODUTO_ID <> NEW.GRUPO_PRODUTO_ID) THEN
       BEGIN
       HISTORICO = HISTORICO||' GRUPO PROD.:'||OLD.GRUPO_PRODUTO_ID||'->'||NEW.GRUPO_PRODUTO_ID;
       END

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

   IF (OLD.NBM_CODIGO <> NEW.NBM_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' NBM:'||OLD.NBM_CODIGO||'->'||NEW.NBM_CODIGO;
       END
   IF (OLD.EAN <> NEW.EAN) THEN
       BEGIN
       HISTORICO = HISTORICO||' EAN:'||OLD.EAN||'->'||NEW.EAN;
       END
   IF (OLD.HABILITA_COMPRA <> NEW.HABILITA_COMPRA) THEN
       BEGIN
       HISTORICO = HISTORICO||' HAB.COMP:'||OLD.HABILITA_COMPRA||'->'||NEW.HABILITA_COMPRA;
       END
   IF (OLD.HABILITA_VENDA <> NEW.HABILITA_VENDA) THEN
       BEGIN
       HISTORICO = HISTORICO||' HAB.VEND:'||OLD.HABILITA_VENDA||'->'||NEW.HABILITA_VENDA;
       END
   IF (OLD.PROGRAMAR_SEM_ESTOQUE <> NEW.PROGRAMAR_SEM_ESTOQUE) THEN
       BEGIN
       HISTORICO = HISTORICO||' PROG.S/EST:'||OLD.PROGRAMAR_SEM_ESTOQUE||'->'||NEW.PROGRAMAR_SEM_ESTOQUE;
       END
   IF (OLD.INVENTARIO <> NEW.INVENTARIO) THEN
       BEGIN
       HISTORICO = HISTORICO||' INV:'||OLD.INVENTARIO||'->'||NEW.INVENTARIO;
       END
   IF (OLD.TOLERANCIA <> NEW.TOLERANCIA) THEN
       BEGIN
       HISTORICO = HISTORICO||' TOLERANCIA: '||OLD.TOLERANCIA||'->'||NEW.TOLERANCIA;
       END
   IF (OLD.SEGURANCA <> NEW.SEGURANCA) THEN
       BEGIN
       HISTORICO = HISTORICO||' %EST.SEG:'||OLD.SEGURANCA||'->'||NEW.SEGURANCA;
       END
   IF (OLD.GERAR_OC <> NEW.GERAR_OC) THEN
       BEGIN
       HISTORICO = HISTORICO||' GERAR OC:'||OLD.GERAR_OC||'->'||NEW.GERAR_OC;
       END
   IF (OLD.FEEF <> NEW.FEEF) THEN
       BEGIN
       HISTORICO = HISTORICO||' FEEF:'||OLD.FEEF||'->'||NEW.FEEF;
       END
   IF (OLD.FAMILIA_ALTERNATIVA <> NEW.FAMILIA_ALTERNATIVA) THEN
       BEGIN
       HISTORICO = HISTORICO||' FAM.ALT:'||OLD.FAMILIA_ALTERNATIVA||'->'||NEW.FAMILIA_ALTERNATIVA;
       END
   IF (OLD.DESCRICAO_ETIQUETA <> NEW.DESCRICAO_ETIQUETA) THEN
       BEGIN
       HISTORICO = HISTORICO||' DESC.ETIQ:'||OLD.DESCRICAO_ETIQUETA||'->'||NEW.DESCRICAO_ETIQUETA;
       END
   IF (OLD.INFORMACOES_COMPLEMENTARES <> NEW.INFORMACOES_COMPLEMENTARES) THEN
       BEGIN
       HISTORICO = HISTORICO||' INF.COMP:'||FN_ELIPSES(OLD.INFORMACOES_COMPLEMENTARES,100)||'->'||FN_ELIPSES(NEW.INFORMACOES_COMPLEMENTARES,100);
       END

   IF (OLD.STATUS <> NEW.STATUS) THEN
       BEGIN
       HISTORICO = HISTORICO||' STATUS:'||OLD.STATUS||'->'||NEW.STATUS;
       IF (NEW.STATUS = '0') THEN
           BEGIN
           NEW.DATA_INATIVACAO = CURRENT_DATE;
           END
       IF (NEW.STATUS = '1') THEN
           BEGIN
           NEW.DATA_ATIVACAO = CURRENT_DATE;
           END
       END
	
   IF (OLD.TIPO_INC <> NEW.TIPO_INC) THEN
       BEGIN
       HISTORICO = HISTORICO||' TIPO INC:'||OLD.TIPO_INC||'->'||NEW.TIPO_INC;
       END

   if (HISTORICO <> '') Then
       Begin
       INSERT INTO TBHISTORICO (
       TABELA, TABELA_ID, USUARIO, IP,HISTORICO ) VALUES (
      'TBPRODUTO', OLD.CODIGO,
      (Select First 1 MON$USER from mon$attachments where mon$attachment_id = current_connection),
      (Select First 1 MON$REMOTE_ADDRESS from mon$attachments where mon$attachment_id = current_connection),
        FN_ELIPSES(:Historico,500));
       End
end
^

SET TERM ; ^

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

/******************************************************************************/
/****                                Tables                                ****/
/******************************************************************************/


CREATE GENERATOR GTBGRUPO_PRODUTO_OPCONTABIL;

CREATE TABLE TBGRUPO_PRODUTO_OPCONTABIL (
    ID                INTEGER NOT NULL,
    GRUPO_PRODUTO_ID  INTEGER,
    OPERACAO_CODIGO   VARCHAR(10),
    CONTA_CONTABIL    VARCHAR(11),
    OBSERVACAO        VARCHAR(100) DEFAULT '',
    DATAHORA          TIMESTAMP DEFAULT 'NOW',
    CCUSTO_CODIGO     VARCHAR(10) DEFAULT ''
);




/******************************************************************************/
/****                             Primary keys                             ****/
/******************************************************************************/

ALTER TABLE TBGRUPO_PRODUTO_OPCONTABIL ADD CONSTRAINT PK_TBGRUPO_PRODUTO_OPCONTABIL PRIMARY KEY (ID);


/******************************************************************************/
/****                               Triggers                               ****/
/******************************************************************************/



SET TERM ^ ;



/******************************************************************************/
/****                         Triggers for tables                          ****/
/******************************************************************************/



/* Trigger: TTBGRUPO_PRODUTO_OPCONT_B01D */
CREATE OR ALTER TRIGGER TTBGRUPO_PRODUTO_OPCONT_B01D FOR TBGRUPO_PRODUTO_OPCONTABIL
ACTIVE BEFORE DELETE POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF (OLD.ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'OP.CONTABIL:'||FN_LPAD(OLD.ID, 6, '0')||', OPERACAO:'||FN_LPAD(OLD.OPERACAO_CODIGO, 4, '0')||', C.CUSTO'||FN_MASK_V2(OLD.CCUSTO_CODIGO, 'CC')||', C.CONTABIL:'||FN_MASK_V2(OLD.CONTA_CONTABIL, 'CONTA')||' EXCLUIDA';
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBGRUPO_PRODUTO', OLD.GRUPO_PRODUTO_ID, HISTORICO);
    END
END
^


/* Trigger: TTBGRUPO_PRODUTO_OPCONT_B01I */
CREATE OR ALTER TRIGGER TTBGRUPO_PRODUTO_OPCONT_B01I FOR TBGRUPO_PRODUTO_OPCONTABIL
ACTIVE BEFORE INSERT POSITION 3
AS
BEGIN
    IF (NEW.ID IS NULL) THEN
        NEW.ID = GEN_ID(GTBGRUPO_PRODUTO_OPCONTABIL, 1);
END
^


/* Trigger: TTBGRUPO_PRODUTO_OPCONT_B01IUD */
CREATE OR ALTER TRIGGER TTBGRUPO_PRODUTO_OPCONT_B01IUD FOR TBGRUPO_PRODUTO_OPCONTABIL
ACTIVE BEFORE INSERT OR UPDATE OR DELETE POSITION 0
AS
DECLARE VARIABLE USUARIO_ID INTEGER;
DECLARE VARIABLE PERMISSAO VARCHAR(500);

DECLARE VARIABLE ID INTEGER;
BEGIN

    USUARIO_ID = COALESCE((SELECT FIRST 1 A.CODIGO FROM TBUSUARIO A WHERE A.CODIGO = FN_CURRENT_USER_ID()), 0);
    PERMISSAO  = COALESCE((SELECT FIRST 1 B.VALOR_EXT FROM TBCONTROLE_USUARIO B WHERE B.USUARIO_ID = :USUARIO_ID AND B.ID = 244), '0');

    IF (PERMISSAO <> '1') THEN
    BEGIN
        EXCEPTION "..." '(p244) USUÁRIO SEM PERMISSÃO PARA INCLUIR/ALTERAR/EXCLUIR REGISTROS DESSE CADASTRO!';
    END

    IF (INSERTING OR UPDATING) THEN
    BEGIN

        ID = COALESCE((SELECT FIRST 1 C.ID FROM TBGRUPO_PRODUTO_OPCONTABIL C WHERE C.GRUPO_PRODUTO_ID = NEW.GRUPO_PRODUTO_ID AND C.OPERACAO_CODIGO = NEW.OPERACAO_CODIGO AND C.CCUSTO_CODIGO = NEW.CCUSTO_CODIGO AND C.CONTA_CONTABIL = NEW.CONTA_CONTABIL AND C.ID <> NEW.ID), 0);
    
        IF (ID > 0) THEN
        BEGIN
            EXCEPTION "..." 'OPERAÇÃO:'||FN_LPAD(NEW.OPERACAO_CODIGO, 4, '0')||', C.CUSTO'||FN_MASK_V2(NEW.CCUSTO_CODIGO, 'CC')||', C.CONTÁBIL:'||FN_MASK_V2(NEW.CONTA_CONTABIL, 'CONTA')||' JÁ REGISTRADAS PARA ESTE PRODUTO, OPERAÇÃO CANCELADA!';
        END

    END

END
^


/* Trigger: TTBGRUPO_PRODUTO_OPCONT_B01U */
CREATE OR ALTER TRIGGER TTBGRUPO_PRODUTO_OPCONT_B01U FOR TBGRUPO_PRODUTO_OPCONTABIL
ACTIVE BEFORE UPDATE POSITION 8
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);

DECLARE VARIABLE OLD_OPERACAO VARCHAR(500);
DECLARE VARIABLE NEW_OPERACAO VARCHAR(500);
DECLARE VARIABLE OLD_CONTA_CONTABIL VARCHAR(500);
DECLARE VARIABLE NEW_CONTA_CONTABIL VARCHAR(500);
DECLARE VARIABLE OLD_CCUSTO VARCHAR(500);
DECLARE VARIABLE NEW_CCUSTO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF (OLD.OPERACAO_CODIGO <> NEW.OPERACAO_CODIGO) THEN
    BEGIN
        OLD_OPERACAO = COALESCE((SELECT FIRST 1 A.CODIGO||' - '||A.DESCRICAO FROM TBOPERACAO A WHERE A.CODIGO = OLD.OPERACAO_CODIGO), '');
        NEW_OPERACAO = COALESCE((SELECT FIRST 1 A.CODIGO||' - '||A.DESCRICAO FROM TBOPERACAO A WHERE A.CODIGO = NEW.OPERACAO_CODIGO), '');

        HISTORICO = HISTORICO||' OPERACAO:'||OLD_OPERACAO||'->'||NEW_OPERACAO;
    END

    IF (OLD.CONTA_CONTABIL <> NEW.CONTA_CONTABIL) THEN
    BEGIN
        OLD_CONTA_CONTABIL = COALESCE((SELECT FIRST 1 FN_MASK_V2(B.CONTA, 'CONTA')||' - '||B.DESCRED FROM TBCONTACONTABIL B WHERE B.CONTA = OLD.CONTA_CONTABIL), '');
        NEW_CONTA_CONTABIL = COALESCE((SELECT FIRST 1 FN_MASK_V2(B.CONTA, 'CONTA')||' - '||B.DESCRED FROM TBCONTACONTABIL B WHERE B.CONTA = NEW.CONTA_CONTABIL), '');

        HISTORICO = HISTORICO||' C.CONTABIL:'||OLD_CONTA_CONTABIL||'->'||NEW_CONTA_CONTABIL;
    END

    IF (OLD.CCUSTO_CODIGO <> NEW.CCUSTO_CODIGO) THEN
    BEGIN
        OLD_CCUSTO = COALESCE((SELECT FIRST 1 FN_MASK_V2(C.CODIGO, 'CC')||' - '||C.DESCRICAO FROM TBCENTRO_DE_CUSTO C WHERE C.CODIGO = OLD.CCUSTO_CODIGO), '');
        NEW_CCUSTO = COALESCE((SELECT FIRST 1 FN_MASK_V2(C.CODIGO, 'CC')||' - '||C.DESCRICAO FROM TBCENTRO_DE_CUSTO C WHERE C.CODIGO = NEW.CCUSTO_CODIGO), '');

        HISTORICO = HISTORICO||' C.CUSTO:'||OLD_CCUSTO||'->'||NEW_CCUSTO;
    END

    IF (OLD.DATAHORA <> NEW.DATAHORA) THEN
    BEGIN
        HISTORICO = HISTORICO||' DATA/HORA:'||FN_TIMESTAMP_TO_STRING(OLD.DATAHORA)||'->'||FN_TIMESTAMP_TO_STRING(NEW.DATAHORA);
    END

    IF (OLD.OBSERVACAO <> NEW.OBSERVACAO) THEN
    BEGIN
        HISTORICO = ' OBSERVACAO ALTERADA!';
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'OP.CONTABIL:'||FN_LPAD(OLD.ID, 6, '0')||', OPERACAO:'||FN_LPAD(NEW.OPERACAO_CODIGO, 4, '0')||', C.CUSTO'||FN_MASK_V2(NEW.CCUSTO_CODIGO, 'CC')||', C.CONTABIL:'||FN_MASK_V2(NEW.CONTA_CONTABIL, 'CONTA')||' ALTERADA:'||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBGRUPO_PRODUTO', OLD.GRUPO_PRODUTO_ID, FN_ELIPSE(HISTORICO, 500));
    END
END
^


/* Trigger: TTBGRUPO_PRODUTO_OPCONT_B02I */
CREATE OR ALTER TRIGGER TTBGRUPO_PRODUTO_OPCONT_B02I FOR TBGRUPO_PRODUTO_OPCONTABIL
ACTIVE BEFORE INSERT POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF (NEW.ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'OP.CONTABIL:'||FN_LPAD(NEW.ID, 6, '0')||', OPERACAO:'||FN_LPAD(NEW.OPERACAO_CODIGO, 4, '0')||', C.CUSTO'||FN_MASK_V2(NEW.CCUSTO_CODIGO, 'CC')||', C.CONTABIL:'||FN_MASK_V2(NEW.CONTA_CONTABIL, 'CONTA')||' INCLUIDA';
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBGRUPO_PRODUTO', NEW.GRUPO_PRODUTO_ID, HISTORICO);
    END
END
^


/* Trigger: TTBGRUPO_PRODUTO_OPCONT_B02IUD */
CREATE OR ALTER TRIGGER TTBGRUPO_PRODUTO_OPCONT_B02IUD FOR TBGRUPO_PRODUTO_OPCONTABIL
ACTIVE BEFORE INSERT OR UPDATE OR DELETE POSITION 2
AS
DECLARE VARIABLE ID_OPCONT INTEGER;
DECLARE VARIABLE PRODUTO_ID INTEGER;
DECLARE VARIABLE HISTORICO VARCHAR(5000);
BEGIN

    FOR
        SELECT
            P.CODIGO
        FROM TBPRODUTO P
        WHERE P.GRUPO_PRODUTO_ID = COALESCE(NEW.GRUPO_PRODUTO_ID, OLD.GRUPO_PRODUTO_ID)
    INTO
        :PRODUTO_ID
    DO
    BEGIN
        
        :HISTORICO = '';

        IF (INSERTING) THEN
        BEGIN

            :ID_OPCONT = GEN_ID(GTBPRODUTO_OPERACAO_CONTABIL, 1);
            :HISTORICO = :HISTORICO||'OPERACAO CONTABIL INCLUIDA VIA VINCULO COM GRUPO DE PRODUTO. GRUPO DE PRODUTO: '||FN_LPAD(NEW.GRUPO_PRODUTO_ID, 6, '0');
            
            INSERT INTO TBPRODUTO_OPERACAO_CONTABIL (ID, PRODUTO_ID, OPERACAO_CODIGO, CONTA_CONTABIL, OBSERVACAO, DATAHORA, CCUSTO, GRUPO_PROD_OP_ID)
                VALUES (:ID_OPCONT, :PRODUTO_ID, NEW.OPERACAO_CODIGO, NEW.CONTA_CONTABIL, NEW.OBSERVACAO, NEW.DATAHORA, NEW.CCUSTO_CODIGO, NEW.ID);

            EXECUTE PROCEDURE SPI_HISTORICO('TBPRODUTO_OPERACAO_CONTABIL', :ID_OPCONT, FN_ELIPSE(:HISTORICO, 500));

        END

        IF (UPDATING) THEN
        BEGIN

            :ID_OPCONT = COALESCE((SELECT FIRST 1 A.ID FROM TBPRODUTO_OPERACAO_CONTABIL A WHERE A.GRUPO_PROD_OP_ID = OLD.ID), 0);
            :HISTORICO = :HISTORICO||'OPERACAO CONTABIL ALTERADA VIA VINCULO COM GRUPO DE PRODUTO.';

            IF (:ID_OPCONT > 0) THEN
            BEGIN
                IF (OLD.OPERACAO_CODIGO <> NEW.OPERACAO_CODIGO) THEN
                BEGIN
                    :HISTORICO = :HISTORICO||' OP:'||OLD.OPERACAO_CODIGO||'->'||NEW.OPERACAO_CODIGO;

                    UPDATE TBPRODUTO_OPERACAO_CONTABIL O
                        SET O.OPERACAO_CODIGO = NEW.OPERACAO_CODIGO
                        WHERE O.ID = :ID_OPCONT
                        AND O.PRODUTO_ID = :PRODUTO_ID;
                END

                IF (OLD.CONTA_CONTABIL <> NEW.CONTA_CONTABIL) THEN
                BEGIN
                    :HISTORICO = :HISTORICO||' C.CONTABIL:'||OLD.CONTA_CONTABIL||'->'||NEW.CONTA_CONTABIL;

                    UPDATE TBPRODUTO_OPERACAO_CONTABIL O
                        SET O.CONTA_CONTABIL = NEW.CONTA_CONTABIL
                        WHERE O.ID = :ID_OPCONT
                        AND O.PRODUTO_ID = :PRODUTO_ID;
                END

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

                    UPDATE TBPRODUTO_OPERACAO_CONTABIL O
                        SET O.OBSERVACAO = NEW.OBSERVACAO
                        WHERE O.ID = :ID_OPCONT
                        AND O.PRODUTO_ID = :PRODUTO_ID;
                END

                IF (OLD.DATAHORA <> NEW.DATAHORA) THEN
                BEGIN
                    :HISTORICO = :HISTORICO||' DT.HORA:'||OLD.DATAHORA||'->'||NEW.DATAHORA;

                    UPDATE TBPRODUTO_OPERACAO_CONTABIL O
                        SET O.DATAHORA = NEW.DATAHORA
                        WHERE O.ID = :ID_OPCONT
                        AND O.PRODUTO_ID = :PRODUTO_ID;
                END

                IF (OLD.CCUSTO_CODIGO <> NEW.CCUSTO_CODIGO) THEN
                BEGIN
                    :HISTORICO = :HISTORICO||' C.CUSTO:'||OLD.CCUSTO_CODIGO||'->'||NEW.CCUSTO_CODIGO;

                    UPDATE TBPRODUTO_OPERACAO_CONTABIL O
                        SET O.CCUSTO = NEW.CCUSTO_CODIGO
                        WHERE O.ID = :ID_OPCONT
                        AND O.PRODUTO_ID = :PRODUTO_ID;
                END

                EXECUTE PROCEDURE SPI_HISTORICO('TBPRODUTO_OPERACAO_CONTABIL', :ID_OPCONT, FN_ELIPSE(:HISTORICO, 500));
            END

        END

        IF (DELETING) THEN
        BEGIN

            :ID_OPCONT = COALESCE((SELECT FIRST 1 A.ID FROM TBPRODUTO_OPERACAO_CONTABIL A WHERE A.GRUPO_PROD_OP_ID = OLD.ID), 0);
            :HISTORICO = :HISTORICO||'OPERACAO CONTABIL EXCLUIDA VIA VINCULO COM GRUPO DE PRODUTO. GRUPO DE PRODUTO: '||FN_LPAD(OLD.GRUPO_PRODUTO_ID, 6, '0');

            IF (:ID_OPCONT > 0) THEN
            BEGIN
                DELETE FROM TBPRODUTO_OPERACAO_CONTABIL O WHERE O.ID = :ID_OPCONT AND O.PRODUTO_ID = :PRODUTO_ID;

                EXECUTE PROCEDURE SPI_HISTORICO('TBPRODUTO_OPERACAO_CONTABIL', :ID_OPCONT, FN_ELIPSE(:HISTORICO, 500));
            END

        END

    END

END
^


/* Trigger: TTBGRUPO_PRODUTO_OPCONT_B02U */
CREATE OR ALTER TRIGGER TTBGRUPO_PRODUTO_OPCONT_B02U FOR TBGRUPO_PRODUTO_OPCONTABIL
ACTIVE BEFORE UPDATE POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
BEGIN

    HISTORICO = '';

    IF (OLD.OBSERVACAO <> NEW.OBSERVACAO) THEN
    BEGIN
        HISTORICO = HISTORICO||FN_ELIPSE(OLD.OBSERVACAO, 200)||'->'||FN_ELIPSE(NEW.OBSERVACAO, 200);
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'OBSERVACAO DA OP.CONTABIL:'||FN_LPAD(OLD.ID, 6, '0')||', OPERACAO:'||FN_LPAD(NEW.OPERACAO_CODIGO, 4, '0')||', C.CUSTO'||FN_MASK_V2(NEW.CCUSTO_CODIGO, 'CC')||', C.CONTABIL:'||FN_MASK_V2(NEW.CONTA_CONTABIL, 'CONTA')||' ALTERADA:'||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBGRUPO_PRODUTO', OLD.GRUPO_PRODUTO_ID, FN_ELIPSE(HISTORICO, 500));
    END
END
^

SET TERM ; ^



/******************************************************************************/
/****                             Descriptions                             ****/
/******************************************************************************/

COMMENT ON TRIGGER TTBGRUPO_PRODUTO_OPCONT_B01D IS 
'Histórico';

COMMENT ON TRIGGER TTBGRUPO_PRODUTO_OPCONT_B01I IS 
'Generator';

COMMENT ON TRIGGER TTBGRUPO_PRODUTO_OPCONT_B01U IS 
'Histórico';

COMMENT ON TRIGGER TTBGRUPO_PRODUTO_OPCONT_B02I IS 
'Histórico';

COMMENT ON TRIGGER TTBGRUPO_PRODUTO_OPCONT_B02U IS 
'Histórico (Observação)';
