SET TERM ^ ;

CREATE OR ALTER trigger ttbestoque_saldo_diario_b0u_03 for tbestoque_saldo_diario
active before update position 0
AS
DECLARE VARIABLE VDATA VARCHAR(10);
DECLARE VARIABLE LOC VARCHAR(300);
DECLARE VARIABLE SALDO1 NUMERIC(15,5);
DECLARE VARIABLE SALDO2 NUMERIC(15,5);
DECLARE VARIABLE SALDO3 NUMERIC(15,5);
DECLARE VARIABLE DESCRICAO_PROD VARCHAR(2000);
DECLARE VARIABLE DESC_MODELO VARCHAR(2000);
DECLARE VARIABLE DESC_COR VARCHAR(2000);
BEGIN
FOR
SELECT EXTRACT(DAY FROM OLD.DATA)||'/'||EXTRACT(MONTH FROM OLD.DATA)||'/'||EXTRACT(YEAR FROM OLD.DATA),
OLD.SALDO-NEW.SALDO, OLD.SALDO_DETERCEIRO-NEW.SALDO_DETERCEIRO, OLD.SALDO_EMTERCEIRO-NEW.SALDO_EMTERCEIRO
FROM RDB$DATABASE
INTO :VDATA,:SALDO1,:SALDO2,:SALDO3
DO
BEGIN
  :LOC               = COALESCE(' LOC.:'||(SELECT FIRST 1 L.CODIGO||'-'||L.DESCRICAO FROM TBLOCALIZACAO L WHERE L.CODIGO = NEW.LOCALIZACAO_CODIGO),'');

  :DESCRICAO_PROD    = COALESCE((SELECT FIRST 1 P.CODIGO||'-'||P.DESCRICAO FROM TBPRODUTO P WHERE P.CODIGO = OLD.PRODUTO_CODIGO), '');

  :DESC_MODELO       = COALESCE((SELECT FIRST 1 ' MODELO: '||M.CODIGO||'-'||M.DESCRICAO FROM TBMODELO M, TBPRODUTO P WHERE P.MODELO_CODIGO = M.CODIGO AND P.CODIGO = OLD.PRODUTO_CODIGO), '');
  :DESC_COR          = COALESCE((SELECT FIRST 1 ' COR: '||C.CODIGO||'-'||C.DESCRICAO FROM TBCOR C, TBPRODUTO P WHERE P.COR_CODIGO = C.CODIGO AND P.CODIGO = OLD.PRODUTO_CODIGO), '');


  IF (NEW.SALDO < 0) THEN
  BEGIN
    EXCEPTION "..." 'SALDO NÃO PODE FICAR NEGATIVO EM '||:VDATA||'   QUANTIDADE DISPONÍVEL: '||OLD.SALDO||'   QUANTIDADE A BAIXAR: '||:SALDO1||'   PRODUTO: '||:DESCRICAO_PROD||:DESC_MODELO||:DESC_COR||LOC;
  END

  IF (NEW.SALDO_DETERCEIRO < 0) THEN
  BEGIN
    EXCEPTION "..." 'SALDO DE TERCEIROS NÃO PODE FICAR NEGATIVO EM '||:VDATA||'   QUANTIDADE DISPONÍVEL: '||OLD.SALDO_DETERCEIRO||'   QUANTIDADE A BAIXAR: '||SALDO2||'   PRODUTO: '||:DESCRICAO_PROD||:DESC_MODELO||:DESC_COR||:LOC;
  END

  IF (NEW.SALDO_EMTERCEIRO < 0) THEN
  BEGIN
    EXCEPTION "..." 'SALDO EM TERCEIROS NÃO PODE FICAR NEGATIVO EM '||:VDATA||'   QUANTIDADE DISPONÍVEL: '||OLD.SALDO_EMTERCEIRO||'   QUANTIDADE A BAIXAR: '||SALDO3||'   PRODUTO: '||:DESCRICAO_PROD||:DESC_MODELO||:DESC_COR||:LOC;
  END

END
END
^

SET TERM ; ^

