SET TERM ^ ;

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.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.'||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.Unit:'||OLD.VALOR||' -> '||NEW.VALOR;
        END
    IF(NEW.DATA_ENTREGA <> OLD.DATA_ENTREGA) THEN
        BEGIN
           HISTORICO = HISTORICO||' Prev.Entr:'||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||' Obs:'||OLD.OBSERVACAO||' -> '||NEW.OBSERVACAO;
        END 
    IF(NEW.DATA_SAIDA <> OLD.DATA_SAIDA) THEN
        BEGIN
          HISTORICO = HISTORICO||' Prev.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||' Vr.Acresc:'||OLD.ACRESCIMO||' -> '||NEW.ACRESCIMO;
        END 
    IF(NEW.DESCONTO <> OLD.DESCONTO) THEN
        BEGIN
          HISTORICO = HISTORICO||' Vr.Desc:'||OLD.DESCONTO||' -> '||NEW.DESCONTO;
        END 
    IF(NEW.CLASSIFICACAO_FINANCEIRA <> OLD.CLASSIFICACAO_FINANCEIRA) THEN
        BEGIN
          HISTORICO = HISTORICO||' Class.Fin:'||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||' Loc:'||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||' C.Contabil:'||OLD.CONTA_CONTABIL||' -> '||NEW.CONTA_CONTABIL;
        END 
    IF(NEW.ORCAMENTO_ID <> OLD.ORCAMENTO_ID) THEN
        BEGIN
          HISTORICO = HISTORICO||' Orcam:'||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.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.Unit.Alt:'||OLD.VALOR_ALTERNATIVO||' -> '||NEW.VALOR_ALTERNATIVO;
        END
    IF(NEW.TAXA_MOEDA <> OLD.TAXA_MOEDA) THEN
        BEGIN
            HISTORICO = HISTORICO||' Tx.Moeda:'||OLD.TAXA_MOEDA||' -> '||NEW.TAXA_MOEDA;
        END
    IF(NEW.VALOR_UNIT_ESTRANGEIRO <> OLD.VALOR_UNIT_ESTRANGEIRO) THEN
        BEGIN
            HISTORICO = HISTORICO||' Vr.Unit.Estrang.'||OLD.VALOR_UNIT_ESTRANGEIRO||' -> '||NEW.VALOR_UNIT_ESTRANGEIRO;
        END
 IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'Item alterado. (Seq.'||NEW.SEQUENCIA||') '||HISTORICO;
        HISTORICO = FN_ELIPSES(HISTORICO,500);
        EXECUTE PROCEDURE SPI_HISTORICO('TBOC', NEW.OC, HISTORICO);
    END
END
^

SET TERM ; ^

ALTER TABLE TBOC_ITEM DROP PDESCONTO;
ALTER TABLE TBOC_ITEM DROP PACRESCIMO;



ALTER TABLE TBOC_ITEM
    ADD PACRESCIMO COMPUTED BY (CAST((CAST(ACRESCIMO AS NUMERIC(15,2)) / (CAST(CAST(VALOR AS DOUBLE PRECISION) * CAST(QUANTIDADE AS DOUBLE PRECISION) AS NUMERIC(15,2)))) AS NUMERIC(18,4)));

ALTER TABLE TBOC_ITEM
    ADD PDESCONTO COMPUTED BY (CAST((CAST(ACRESCIMO AS NUMERIC(15,2)) / (CAST(CAST(VALOR AS DOUBLE PRECISION) * CAST(QUANTIDADE AS DOUBLE PRECISION) AS NUMERIC(15,2)))) AS NUMERIC(18,4)));
	
	
SET TERM ^ ;

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.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.'||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.Unit:'||OLD.VALOR||' -> '||NEW.VALOR;
        END
    IF(NEW.DATA_ENTREGA <> OLD.DATA_ENTREGA) THEN
        BEGIN
           HISTORICO = HISTORICO||' Prev.Entr:'||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||' Obs:'||OLD.OBSERVACAO||' -> '||NEW.OBSERVACAO;
        END 
    IF(NEW.DATA_SAIDA <> OLD.DATA_SAIDA) THEN
        BEGIN
          HISTORICO = HISTORICO||' Prev.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||' Vr.Acresc:'||OLD.ACRESCIMO||' -> '||NEW.ACRESCIMO;
        END 
    IF(NEW.DESCONTO <> OLD.DESCONTO) THEN
        BEGIN
          HISTORICO = HISTORICO||' Vr.Desc:'||OLD.DESCONTO||' -> '||NEW.DESCONTO;
        END 
    IF(NEW.CLASSIFICACAO_FINANCEIRA <> OLD.CLASSIFICACAO_FINANCEIRA) THEN
        BEGIN
          HISTORICO = HISTORICO||' Class.Fin:'||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||' Loc:'||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||' C.Contabil:'||OLD.CONTA_CONTABIL||' -> '||NEW.CONTA_CONTABIL;
        END 
    IF(NEW.ORCAMENTO_ID <> OLD.ORCAMENTO_ID) THEN
        BEGIN
          HISTORICO = HISTORICO||' Orcam:'||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.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.PDESCONTO <> OLD.PDESCONTO) THEN
        BEGIN
            HISTORICO = HISTORICO||' %Desc:'||OLD.PDESCONTO||' -> '||NEW.PDESCONTO;
        END 
    IF(NEW.PACRESCIMO <> OLD.PACRESCIMO) THEN
        BEGIN
            HISTORICO = HISTORICO||' %Acres:'||OLD.PACRESCIMO||' -> '||NEW.PACRESCIMO;
        END 
    IF(NEW.VALOR_ALTERNATIVO <> OLD.VALOR_ALTERNATIVO) THEN
        BEGIN
            HISTORICO = HISTORICO||' Vr.Unit.Alt:'||OLD.VALOR_ALTERNATIVO||' -> '||NEW.VALOR_ALTERNATIVO;
        END
    IF(NEW.TAXA_MOEDA <> OLD.TAXA_MOEDA) THEN
        BEGIN
            HISTORICO = HISTORICO||' Tx.Moeda:'||OLD.TAXA_MOEDA||' -> '||NEW.TAXA_MOEDA;
        END
    IF(NEW.VALOR_UNIT_ESTRANGEIRO <> OLD.VALOR_UNIT_ESTRANGEIRO) THEN
        BEGIN
            HISTORICO = HISTORICO||' Vr.Unit.Estrang.'||OLD.VALOR_UNIT_ESTRANGEIRO||' -> '||NEW.VALOR_UNIT_ESTRANGEIRO;
        END
 IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'Item alterado. (Seq.'||NEW.SEQUENCIA||') '||HISTORICO;
        HISTORICO = FN_ELIPSES(HISTORICO,500);
        EXECUTE PROCEDURE SPI_HISTORICO('TBOC', NEW.OC, HISTORICO);
    END
END
^

SET TERM ; ^
	
	
SET TERM ^ ;

CREATE OR ALTER trigger ttboc_item_b0iu_01 for tboc_item
active before insert or update position 0
AS
DECLARE VARIABLE UM VARCHAR(10);
DECLARE VARIABLE DESCR VARCHAR(100);
DECLARE VARIABLE FRAC CHAR(1);
DECLARE VARIABLE LOC1 INTEGER;
DECLARE VARIABLE LOC2 INTEGER;


BEGIN


For
    Select First 1
        coalesce(U.SIGLA,'') as SIGLA,
        P.DESCRICAO,
        U.PODE_FRACIONAR,
        P.LOCALIZACAO_CODIGO,
        (SELECT FIRST 1 F.LOCALIZACAO_CODIGO FROM TBFAMILIA F WHERE F.CODIGO = P.FAMILIA_CODIGO)
    From TbProduto P
    left join TbUnidadeMedida U on P.Unidademedida_Sigla = U.Sigla
    Where P.Codigo = New.Produto_Codigo
    Into
        :UM,
        :DESCR,
        :FRAC,
        :LOC1,
        :LOC2
Do
Begin

  if(UM = '')then
  begin
     exception "..." 'Unidades de medida do produto nao foi encontrada. Produto:' || New.Produto_Codigo;
  end

  if (New.Controle > 0) then
      Begin
      /* Trigger text */

      IF(NEW.QUANTIDADE <= 0) THEN
      BEGIN
          EXCEPTION "..." 'A QUANTIDADE NÃO PODE SER ZERADA, OPERAÇÃO CANCELADA';
      END

      IF(NEW.VALOR <= 0) THEN
      BEGIN
          EXCEPTION "..." 'VALOR UNITÁRIO NÃO PODE SER ZERADO, OPERAÇÃO CANCELADA';
      END

      if (CAST((CAST(CAST(NEW.VALOR AS DOUBLE PRECISION) * CAST(NEW.QUANTIDADE AS DOUBLE PRECISION) AS NUMERIC(15,4))) + CAST(NEW.ACRESCIMO AS DOUBLE PRECISION) - CAST(NEW.DESCONTO AS DOUBLE PRECISION) AS NUMERIC(15,2)) < 0) THEN
          Exception "..." 'VALOR TOTAL DO ITEM INVALIDO, NAO PODE SER NEGATIVO! '||
          NEW.PRODUTO_CODIGO||'-'||:DESCR||
          ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';


      if (:FRAC = 'N') then
          BEGIN
          if (NEW.QUANTIDADE > TRUNC(NEW.QUANTIDADE)) THEN
              Exception "..." 'PRODUTO NAO PERMITE QUANTIDADE FRACIONADA: '||
              NEW.PRODUTO_CODIGO||'-'||:DESCR||' QUANT.'||NEW.QUANTIDADE||' '||:UM||
              ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
          END
    
       if (Coalesce(New.Localizacao_Codigo,0) = 0) then
           Begin
           if (:Loc1 > 0) then
               Begin
               New.Localizacao_Codigo = :Loc1;
               End else
           if (:Loc2 > 0) then
               Begin
               New.Localizacao_Codigo = :Loc2;
               End else
               Begin
               Exception "..." 'LOCALIZACAO PADRAO DE ESTOQUE DO PRODUTO NAO LOCALIZADA '||
               NEW.PRODUTO_CODIGO||'-'||:DESCR||
               ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
               End
           End


    if (Inserting) then
        Begin
            UPDATE OR INSERT INTO TbOc_Item_Saldo (
            Oc,Oc_Item_Controle,Quantidade,        
            T01,T02,T03,T04,T05,T06,T07,T08,T09,T10,
            T11,T12,T13,T14,T15,T16,T17,T18,T19,T20)
            VALUES (NEW.OC,NEW.CONTROLE,NEW.QUANTIDADE,
            NEW.T01,NEW.T02,NEW.T03,NEW.T04,NEW.T05,NEW.T06,NEW.T07,NEW.T08,NEW.T09,NEW.T10,
            NEW.T11,NEW.T12,NEW.T13,NEW.T14,NEW.T15,NEW.T16,NEW.T17,NEW.T18,NEW.T19,NEW.T20)
            MATCHING (Oc,Oc_Item_Controle);
        End

    if (Updating) then
        Begin
        --EXCEPTION "..."NEW.QUANTIDADE||' - '||OLD.QUANTIDADE;   6 -> 3

        if (NEW.QUANTIDADE <> OLD.QUANTIDADE or
            NEW.T01 <> OLD.T01 or NEW.T02 <> OLD.T02 or
            NEW.T03 <> OLD.T03 or NEW.T04 <> OLD.T04 or
            NEW.T05 <> OLD.T05 or NEW.T06 <> OLD.T06 or
            NEW.T07 <> OLD.T07 or NEW.T08 <> OLD.T08 or
            NEW.T09 <> OLD.T09 or NEW.T10 <> OLD.T10 or
            NEW.T11 <> OLD.T11 or NEW.T12 <> OLD.T12 or
            NEW.T13 <> OLD.T13 or NEW.T14 <> OLD.T14 or
            NEW.T15 <> OLD.T15 or NEW.T16 <> OLD.T16 or
            NEW.T17 <> OLD.T17 or NEW.T18 <> OLD.T18 or
            NEW.T19 <> OLD.T19 or NEW.T20 <> OLD.T20) then
            Begin
                --UPDATE OR INSERT INTO TbOc_Item_Saldo T (
                --Oc,Oc_Item_Controle,Quantidade,
                --T01,T02,T03,T04,T05,T06,T07,T08,T09,T10,
                --T11,T12,T13,T14,T15,T16,T17,T18,T19,T20)
                --VALUES (NEW.OC,NEW.CONTROLE, NEW.QUANTIDADE ,
                --NEW.T01,NEW.T02,NEW.T03,NEW.T04,NEW.T05,NEW.T06,NEW.T07,NEW.T08,NEW.T09,NEW.T10,
                --NEW.T11,NEW.T12,NEW.T13,NEW.T14,NEW.T15,NEW.T16,NEW.T17,NEW.T18,NEW.T19,NEW.T20)
                --MATCHING (Oc,Oc_Item_Controle);
                UPDATE TBOC_ITEM_SALDO T
                SET OC = NEW.OC,
                    QUANTIDADE  =  T.QUANTIDADE - (OLD.QUANTIDADE - NEW.QUANTIDADE),
                    T01         =  T.T01 - (OLD.T01 - NEW.T01),
                    T02         =  T.T02 - (OLD.T02 - NEW.T02),
                    T03         =  T.T03 - (OLD.T03 - NEW.T03),
                    T04         =  T.T04 - (OLD.T04 - NEW.T04),
                    T05         =  T.T05 - (OLD.T05 - NEW.T05),
                    T06         =  T.T06 - (OLD.T06 - NEW.T06),
                    T07         =  T.T07 - (OLD.T07 - NEW.T07),
                    T08         =  T.T08 - (OLD.T08 - NEW.T08),
                    T09         =  T.T09 - (OLD.T09 - NEW.T09),
                    T10         =  T.T10 - (OLD.T10 - NEW.T10),
                    T11         =  T.T11 - (OLD.T11 - NEW.T11),
                    T12         =  T.T12 - (OLD.T12 - NEW.T12),
                    T13         =  T.T13 - (OLD.T13 - NEW.T13),
                    T14         =  T.T14 - (OLD.T14 - NEW.T14),
                    T15         =  T.T15 - (OLD.T15 - NEW.T15),
                    T16         =  T.T16 - (OLD.T16 - NEW.T16),
                    T17         =  T.T17 - (OLD.T17 - NEW.T17),
                    T18         =  T.T18 - (OLD.T18 - NEW.T18),
                    T19         =  T.T19 - (OLD.T19 - NEW.T19),
                    T20         =  T.T20 - (OLD.T20 - NEW.T20)
                WHERE (OC_ITEM_CONTROLE = NEW.CONTROLE);

            End
        End

    End

End

END
^

SET TERM ; ^

