SET TERM ^;

CREATE OR ALTER TRIGGER TTBPEDIDO_B0UI_02DLF FOR TBPEDIDO
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
DECLARE VARIABLE ITEM_FATURADO INTEGER;
BEGIN

  IF (NEW.CLASSIFICACAO = 'A') THEN
      NEW.TIPO_PEDIDO = 2;

  IF (NEW.DATA_CLIENTE IS NULL) THEN
      NEW.DATA_CLIENTE = NEW.DATA_ENTREGA;

  IF (NEW.DATA_CLIENTE < NEW.DATA_ENTREGA /*AND NEW.CLASSIFICACAO <> ' '*/) THEN
      NEW.DATA_CLIENTE = NEW.DATA_ENTREGA;

  IF (INSERTING) THEN
      BEGIN
      IF (NEW.DATA_CLIENTE < NEW.DATA_ENTREGA) THEN EXCEPTION "..." 'DATA DO CLIENTE NAO PODE SER MENOR QUE PREVISAO DE FATURAMENTO! DT.CLIENTE:'||NEW.DATA_CLIENTE||' DT.PREV.FAT:'||NEW.DATA_ENTREGA||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
      END

  IF (UPDATING) THEN
      BEGIN
          IF(OLD.SITUACAO = 1 AND NEW.SITUACAO = 0)THEN
          BEGIN
              :ITEM_FATURADO = COALESCE((SELECT SUM(COUNT_ITEM)
                                            FROM
                                            (SELECT
                                                COUNT(I.QUANTIDADE) COUNT_ITEM
                                                FROM TBPEDIDO_ITEM I, TBNFS_ITEM S, TBNFS G
                                                WHERE I.PEDIDO                = NEW.PEDIDO
                                                AND S.PEDIDO                  = I.PEDIDO
                                                AND S.PEDIDO_ITEM_PE_CONTROLE = I.CONTROLE
                                                AND G.CONTROLE                = S.NFS_CONTROLE
                                                --AND I.SITUACAO < 3
                                                AND S.SITUACAO < 3
                                                AND G.SITUACAO < 3
                                                UNION ALL
                                            SELECT COUNT(I.QUANTIDADE) COUNT_ITEM
                                                FROM TBPDV_CFE ZP, TBPDV_CFE_ITEM ZPI, TBPEDIDO_ITEM I
                                                WHERE ZP.ID     = ZPI.PDV_CFE_ID
                                                AND I.CONTROLE  = ZPI.PEDIDO_ITEM_ID
                                                AND ZPI.PEDIDO  = I.PEDIDO
                                                AND I.PEDIDO    = NEW.PEDIDO
                                                AND ZP.SITUACAO = 2)),0);
              IF(:ITEM_FATURADO > 0)THEN
              BEGIN                        
                  EXCEPTION "..." ' PEDIDO:'||FN_LPAD(NEW.PEDIDO,6,'0')||' JA POSSUI ITENS FATURADOS, ALTERACAO DE APROVACAO CANCELADA.';
              END
          END
          IF (NEW.DATA_CLIENTE <> OLD.DATA_CLIENTE OR NEW.DATA_ENTREGA <> OLD.DATA_ENTREGA) THEN
          BEGIN
          IF (NEW.DATA_CLIENTE < NEW.DATA_ENTREGA) THEN EXCEPTION "..." 'DATA DO CLIENTE NAO PODE SER MENOR QUE PREVISAO DE FATURAMENTO! DT.CLIENTE:'||NEW.DATA_CLIENTE||' DT.PREV.FAT:'||NEW.DATA_ENTREGA||'. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
          END
      END

END^

SET TERM ;^