-- TRIGGER DE INSERT 

CREATE OR ALTER trigger tboc_item_b05i for tboc_item
active before insert position 5
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF ( NEW.CONTROLE > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'ITEM '||NEW.SEQUENCIA||' INCLUIDO.';
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBOC',NEW.OC, HISTORICO);
    END
END;

-- TRIGGER DE UPDATE
CREATE OR ALTER trigger ttboc_item_b04u for tboc_item
active before update position 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(8000);
BEGIN
  
  HISTORICO = '';

    IF(NEW.ESTABELECIMENTO_CODIGO <> OLD.ESTABELECIMENTO_CODIGO) THEN
        BEGIN                  
            HISTORICO = HISTORICO||' Est:'||OLD.ESTABELECIMENTO_CODIGO||' -> '||NEW.ESTABELECIMENTO_CODIGO;
        END
    IF(NEW.OC <> OLD.OC) THEN
        BEGIN                  
            HISTORICO = HISTORICO||' OC:'||OLD.OC||' -> '||NEW.OC;
        END
    IF(NEW.SEQUENCIA <> OLD.SEQUENCIA) THEN
        BEGIN                  
            HISTORICO = HISTORICO||' Seq:'||OLD.SEQUENCIA||' -> '||NEW.SEQUENCIA;
        END
    IF(NEW.PRODUTO_CODIGO <> OLD.PRODUTO_CODIGO) THEN
        BEGIN                  
            HISTORICO = HISTORICO||' Prod.Cod:'||OLD.PRODUTO_CODIGO||' -> '||NEW.PRODUTO_CODIGO;
        END

    IF(NEW.QUANTIDADE <> OLD.QUANTIDADE) THEN
        BEGIN
           HISTORICO = HISTORICO||' Qtd:'||OLD.QUANTIDADE||' -> '||NEW.QUANTIDADE;
        END 
    IF(NEW.IPI <> OLD.IPI) THEN
        BEGIN
           HISTORICO = HISTORICO||' IPI:'||OLD.IPI||' -> '||NEW.IPI;
        END
    IF(NEW.VALOR <> OLD.VALOR) THEN
        BEGIN
           HISTORICO = HISTORICO||' Vr:'||OLD.VALOR||' -> '||NEW.VALOR;
        END
    IF(NEW.DATA_ENTREGA <> OLD.DATA_ENTREGA) THEN
        BEGIN
           HISTORICO = HISTORICO||' Dt.Entrega:'||FN_DATE_TO_STRING(OLD.DATA_ENTREGA)||' -> '||FN_DATE_TO_STRING(NEW.DATA_ENTREGA);
        END
    IF(NEW.SITUACAO <> OLD.SITUACAO) THEN
        BEGIN
           HISTORICO = HISTORICO||' Sit:'||OLD.SITUACAO||' -> '||NEW.SITUACAO;
        END
    IF(NEW.T01 <> OLD.T01) THEN
        BEGIN
            HISTORICO = HISTORICO||' T01:'||OLD.T01||' -> '||NEW.T01;
        END
    IF(NEW.T02 <> OLD.T02) THEN
        BEGIN
            HISTORICO = HISTORICO||' T02:'||OLD.T02||' -> '||NEW.T02;
        END
    IF(NEW.T03 <> OLD.T03) THEN
        BEGIN
            HISTORICO = HISTORICO||' T03:'||OLD.T03||' -> '||NEW.T03;
        END
    IF(NEW.T04 <> OLD.T04) THEN
        BEGIN
            HISTORICO = HISTORICO||' T04:'||OLD.T04||' -> '||NEW.T04;
        END
    IF(NEW.T05 <> OLD.T05) THEN
        BEGIN
            HISTORICO = HISTORICO||' T05:'||OLD.T05||' -> '||NEW.T05;
        END
    IF(NEW.T06 <> OLD.T06) THEN
        BEGIN
            HISTORICO = HISTORICO||' T06:'||OLD.T06||' -> '||NEW.T06;
        END
    IF(NEW.T07 <> OLD.T07) THEN
        BEGIN
            HISTORICO = HISTORICO||' T07:'||OLD.T07||' -> '||NEW.T07;
        END
    IF(NEW.T08 <> OLD.T08) THEN
        BEGIN
            HISTORICO = HISTORICO||' T08:'||OLD.T08||' -> '||NEW.T08;
        END
    IF(NEW.T09 <> OLD.T09) THEN
        BEGIN
            HISTORICO = HISTORICO||' T09:'||OLD.T09||' -> '||NEW.T09;
        END
    IF(NEW.T10 <> OLD.T10) THEN
        BEGIN
            HISTORICO = HISTORICO||' T10:'||OLD.T10||' -> '||NEW.T10;
        END
    IF(NEW.T11 <> OLD.T11) THEN
        BEGIN
            HISTORICO = HISTORICO||' T11:'||OLD.T11||' -> '||NEW.T11;
        END
    IF(NEW.T12 <> OLD.T12) THEN
        BEGIN
            HISTORICO = HISTORICO||' T12:'||OLD.T12||' -> '||NEW.T12;
        END
    IF(NEW.T13 <> OLD.T13) THEN
        BEGIN
            HISTORICO = HISTORICO||' T13:'||OLD.T13||' -> '||NEW.T13;
        END
    IF(NEW.T14 <> OLD.T14) THEN
        BEGIN
            HISTORICO = HISTORICO||' T14:'||OLD.T14||' -> '||NEW.T14;
        END
    IF(NEW.T15 <> OLD.T15) THEN
        BEGIN
            HISTORICO = HISTORICO||' T15:'||OLD.T15||' -> '||NEW.T15;
        END
    IF(NEW.T16 <> OLD.T16) THEN
        BEGIN
            HISTORICO = HISTORICO||' T16:'||OLD.T16||' -> '||NEW.T16;
        END
    IF(NEW.T17 <> OLD.T17) THEN
        BEGIN
            HISTORICO = HISTORICO||' T17:'||OLD.T17||' -> '||NEW.T17;
        END
    IF(NEW.T18 <> OLD.T18) THEN
        BEGIN
            HISTORICO = HISTORICO||' T18:'||OLD.T18||' -> '||NEW.T18;
        END
    IF(NEW.T19 <> OLD.T19) THEN
        BEGIN
            HISTORICO = HISTORICO||' T19:'||OLD.T19||' -> '||NEW.T19;
        END
    IF(NEW.T20 <> OLD.T20) THEN
        BEGIN
            HISTORICO = HISTORICO||' T20:'||OLD.T20||' -> '||NEW.T20;
        END
    IF(NEW.OBSERVACAO <> OLD.OBSERVACAO) THEN
        BEGIN
          HISTORICO = HISTORICO||' Observ:'||OLD.OBSERVACAO||' -> '||NEW.OBSERVACAO;
        END 
    IF(NEW.CONTROLE <> OLD.CONTROLE) THEN
        BEGIN
          HISTORICO = HISTORICO||' Controle:'||OLD.CONTROLE||' -> '||NEW.CONTROLE;
        END 
    IF(NEW.DATA_SAIDA <> OLD.DATA_SAIDA) THEN
        BEGIN
          HISTORICO = HISTORICO||' Dt.Saida:'||FN_DATE_TO_STRING(OLD.DATA_SAIDA)||' -> '||FN_DATE_TO_STRING(NEW.DATA_SAIDA);
        END 
    IF(NEW.ACRESCIMO <> OLD.ACRESCIMO) THEN
        BEGIN
          HISTORICO = HISTORICO||' Acresc:'||OLD.ACRESCIMO||' -> '||NEW.ACRESCIMO;
        END 
    IF(NEW.DESCONTO <> OLD.DESCONTO) THEN
        BEGIN
          HISTORICO = HISTORICO||' Desc:'||OLD.DESCONTO||' -> '||NEW.DESCONTO;
        END 
    IF(NEW.CLASSIFICACAO_FINANCEIRA <> OLD.CLASSIFICACAO_FINANCEIRA) THEN
        BEGIN
          HISTORICO = HISTORICO||' Class.Finan:'||OLD.CLASSIFICACAO_FINANCEIRA||' -> '||NEW.CLASSIFICACAO_FINANCEIRA;
        END 
    IF(NEW.CCUSTO <> OLD.CCUSTO) THEN
        BEGIN
          HISTORICO = HISTORICO||' C.custo:'||OLD.CCUSTO||' -> '||NEW.CCUSTO;
        END 
    IF(NEW.LOCALIZACAO_CODIGO <> OLD.LOCALIZACAO_CODIGO) THEN
        BEGIN
          HISTORICO = HISTORICO||' Local.Cod:'||OLD.LOCALIZACAO_CODIGO||' -> '||NEW.LOCALIZACAO_CODIGO;
        END 
    IF(NEW.OPERACAO_CODIGO <> OLD.OPERACAO_CODIGO) THEN
        BEGIN
          HISTORICO = HISTORICO||' Oper.'||OLD.OPERACAO_CODIGO||' -> '||NEW.OPERACAO_CODIGO;
        END 
    IF(NEW.CONTA_CONTABIL <> OLD.CONTA_CONTABIL) THEN
        BEGIN
          HISTORICO = HISTORICO||' Cont.Contabil:'||OLD.CONTA_CONTABIL||' -> '||NEW.CONTA_CONTABIL;
        END 
    IF(NEW.ORCAMENTO_ID <> OLD.ORCAMENTO_ID) THEN
        BEGIN
          HISTORICO = HISTORICO||' Orc.ID:'||OLD.ORCAMENTO_ID||' -> '||NEW.ORCAMENTO_ID;
        END 
    IF(NEW.VALOR_REF <> OLD.VALOR_REF) THEN
        BEGIN
            HISTORICO = HISTORICO||' Vr.Ref:'||OLD.VALOR_REF||' -> '||NEW.VALOR_REF;
        END 
    IF(NEW.PDESCONTO <> OLD.PDESCONTO) THEN
        BEGIN
            HISTORICO = HISTORICO||' P.Desc:'||OLD.PDESCONTO||' -> '||NEW.PDESCONTO;
        END 
    IF(NEW.PACRESCIMO <> OLD.PACRESCIMO) THEN
        BEGIN
            HISTORICO = HISTORICO||' P.Acres:'||OLD.PACRESCIMO||' -> '||NEW.PACRESCIMO;
        END 
    IF(NEW.PERCENTUAL_ICMS <> OLD.PERCENTUAL_ICMS) THEN
        BEGIN
            HISTORICO = HISTORICO||' %ICMS:'||OLD.PERCENTUAL_ICMS||' -> '||NEW.PERCENTUAL_ICMS;
        END 
    IF(NEW.PERCENTUAL_PIS <> OLD.PERCENTUAL_PIS) THEN
        BEGIN
            HISTORICO = HISTORICO||' %PIS:'||OLD.PERCENTUAL_PIS||' -> '||NEW.PERCENTUAL_PIS;
        END 
    IF(NEW.PERCENTUAL_COFINS <> OLD.PERCENTUAL_COFINS) THEN
        BEGIN
            HISTORICO = HISTORICO||' %Cof:'||OLD.PERCENTUAL_COFINS||' -> '||NEW.PERCENTUAL_COFINS;
        END 
    IF(NEW.QUANTIDADE_ALTERNATIVA <> OLD.QUANTIDADE_ALTERNATIVA) THEN
        BEGIN
            HISTORICO = HISTORICO||' Qtd.Alt:'||OLD.QUANTIDADE_ALTERNATIVA||' -> '||NEW.QUANTIDADE_ALTERNATIVA;
        END 
    IF(NEW.UM_ALTERNATIVA <> OLD.UM_ALTERNATIVA) THEN
        BEGIN
            HISTORICO = HISTORICO||' UM.Alt:'||OLD.UM_ALTERNATIVA||' -> '||NEW.UM_ALTERNATIVA;
        END 
    IF(NEW.VALOR_ALTERNATIVO <> OLD.VALOR_ALTERNATIVO) THEN
        BEGIN
            HISTORICO = HISTORICO||' Vr.Alt:'||OLD.VALOR_ALTERNATIVO||' -> '||NEW.VALOR_ALTERNATIVO;
        END
 IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'OC item Seq.: '||NEW.SEQUENCIA||' alterado. '||HISTORICO;
        HISTORICO = FN_ELIPSES(HISTORICO,500);
        EXECUTE PROCEDURE SPI_HISTORICO('TBOC', NEW.OC, HISTORICO);
    END
END;

-- TRIGGER DE DELETE

CREATE OR ALTER trigger tboc_item_b03d for tboc_item
active before delete position 3
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF ( OLD.CONTROLE > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'ITEM '||OLD.SEQUENCIA||' EXCLUIDO.';
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBOC',OLD.OC, HISTORICO);
    END
END;

-- AJUSTES NA TABELA PARA ACEITAR O TIPO DA MOEDA

ALTER TABLE TBOC
ADD MOEDA INTEGER;

COMMENT ON COLUMN TBOC.MOEDA IS
'COM BASE NA TABELA TBMOEDA_ESTRANGEIRA';

ALTER TABLE TBOC
ADD TAXA_MOEDA NUMERIC(18,2);

ALTER TABLE TBOC_ITEM
ADD TAXA_MOEDA NUMERIC(18,2);

ALTER TABLE TBOC_ITEM
ADD VALOR_UNIT_ESTRANGEIRO NUMERIC(18,2);

UPDATE TBOC T SET T.MOEDA = 1, T.TAXA_MOEDA = 0;

UPDATE TBOC_ITEM X SET X.TAXA_MOEDA = 0, X.VALOR_UNIT_ESTRANGEIRO = 0;