SET TERM ^ ;

CREATE OR ALTER trigger ttbnfe_item_b2u_01 for tbnfe_item
active before update position 2
AS
DECLARE VARIABLE VDATA  DATE;
DECLARE VARIABLE VVALOR NUMERIC(18,4);
DECLARE VARIABLE VVALORICMS NUMERIC(18,4);
DECLARE VARIABLE VVALORPISCOF NUMERIC(18,4);
DECLARE VARIABLE CONT_ORCAM1 CHAR(1);
DECLARE VARIABLE CONT_ORCAM2 CHAR(1);
DECLARE VARIABLE GERA_DUPLIC CHAR(1);
BEGIN
    
      --ALTERAÇÃO DE C.CUSTO/OPERAÇÃO/CONTA CONTÁBIL...
  IF (NEW.OPERACAO_CODIGO <> OLD.OPERACAO_CODIGO OR
      NEW.CCUSTO <> OLD.CCUSTO OR
      NEW.CONTA_CONTABIL <> OLD.CONTA_CONTABIL OR
      NEW.OC <> OLD.OC OR
      NEW.VALOR_TOTAL <> OLD.VALOR_TOTAL OR
      NEW.VALOR_FRETE <> OLD.VALOR_FRETE OR
      NEW.VALOR_DESCONTO <> OLD.VALOR_DESCONTO OR
      NEW.VALOR_ACRESCIMO <> OLD.VALOR_ACRESCIMO OR
      NEW.VALOR_IPI <> OLD.VALOR_IPI OR
      NEW.VALOR_SEGURO <> OLD.VALOR_SEGURO OR
      NEW.VALOR_PEDAGIO <> OLD.VALOR_PEDAGIO OR
      NEW.SITUACAO <> OLD.SITUACAO OR
--    NEW.FISCAL_VALOR_ICMS <> OLD.FISCAL_VALOR_ICMS OR
      NEW.FISCAL_VALOR_PIS  <> OLD.FISCAL_VALOR_PIS OR
      NEW.FISCAL_VALOR_COFINS <> OLD.FISCAL_VALOR_COFINS OR
      NEW.DATA_ENTRADA <> OLD.DATA_ENTRADA) THEN
      BEGIN

      IF (NEW.DATA_ENTRADA > CAST('01.01.2016' AS DATE)) THEN
          BEGIN

          GERA_DUPLIC = COALESCE((SELECT FIRST 1 GERA_DUPLICATA FROM TBOPERACAO O WHERE CODIGO = NEW.OPERACAO_CODIGO),'0');
          CONT_ORCAM1 = COALESCE((SELECT FIRST 1 F.CONTROLE_ORCAMENTARIO FROM TBPRODUTO P, TBFAMILIA F
                                   WHERE P.CODIGO = NEW.PRODUTO_CODIGO AND F.CODIGO = P.FAMILIA_CODIGO),'0');
          CONT_ORCAM2 = COALESCE((SELECT FIRST 1 VALOR_EXT FROM TBCONTROLE_N WHERE ID = 218),'0');

           IF (:CONT_ORCAM1 = '1' AND :CONT_ORCAM2 = '1' AND :GERA_DUPLIC = '1') THEN
               BEGIN
               IF (COALESCE(NEW.CCUSTO,'') = '') THEN
                   BEGIN
                   EXCEPTION "..." 'PRODUTO COM COTA DE CONTROLE ORCAMENTARIO. CENTRO DE CUSTO INVALIDO! '||
                   NEW.PRODUTO_CODIGO||
                   ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
                   END
               IF (COALESCE(NEW.CONTA_CONTABIL,'') = '') THEN
                   BEGIN
                   EXCEPTION "..." 'PRODUTO COM COTA DE CONTROLE ORCAMENTARIO. CONTA CONTÁBIL INVALIDA! '||
                   NEW.PRODUTO_CODIGO||
                   ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
                   END
                    IF(COALESCE(NEW.OC, '0') = '0') THEN
                    BEGIN
                        VVALOR = CAST(NEW.VALOR_TOTAL + NEW.VALOR_ACRESCIMO + NEW.VALOR_IPI + NEW.VALOR_FRETE + NEW.VALOR_SEGURO + NEW.VALOR_PEDAGIO - NEW.VALOR_DESCONTO AS NUMERIC(18,4));
                        VVALORICMS  = CAST(NEW.FISCAL_VALOR_ICMS  AS NUMERIC(18,4));
                        VVALORPISCOF= CAST(NEW.FISCAL_VALOR_PIS + NEW.FISCAL_VALOR_COFINS AS NUMERIC(18,4));
                        VDATA = NEW.DATA_ENTRADA;
        
                        UPDATE OR INSERT INTO TBCCUSTO_COTA_DETALHE (CCUSTO, CONTACONTABIL, TABELA, TABELA_ID, DESCRICAO, DATA, VALOR, ICMS, PISCOFINS, NATUREZA, STATUSEXCLUSAO)
                        VALUES (NEW.CCUSTO, NEW.CONTA_CONTABIL, 'NFE', NEW.CONTROLE, IIF(NEW.SITUACAO=3,'DOC.CANCELADO',''), :VDATA, :VVALOR, :VVALORICMS, :VVALORPISCOF, 'D', '0') MATCHING (TABELA, TABELA_ID);
                    END
               END ELSE
               BEGIN

                UPDATE TBCCUSTO_COTA_DETALHE SET
                STATUSEXCLUSAO = '1'
                WHERE TABELA = 'NFE'
                  AND TABELA_ID = OLD.CONTROLE;

               END

          END

        END

END
^

SET TERM ; ^

