SET SQL DIALECT 3;

/******************************************************************************/
/****                                Tables                                ****/
/******************************************************************************/


CREATE GENERATOR GTBEMPRESA_GRUPO_LIMITE_CREDITO;

CREATE TABLE TBEMPRESA_GRUPO_LIMITE_CREDITO (
    ID                INTEGER NOT NULL,
    EMPRESA_GRUPO_ID  INTEGER,
    PAGAMENTO_FORMA   INTEGER,
    LIMITE_CREDITO    NUMERIC(15,2)
);




/******************************************************************************/
/****                             Primary keys                             ****/
/******************************************************************************/

ALTER TABLE TBEMPRESA_GRUPO_LIMITE_CREDITO ADD CONSTRAINT PK_TBEMPRESA_GRUPO_CREDITO PRIMARY KEY (ID);


/******************************************************************************/
/****                               Indices                                ****/
/******************************************************************************/

CREATE INDEX ITBEMPRESA_GRUPO_CRED_02   ON TBEMPRESA_GRUPO_LIMITE_CREDITO (EMPRESA_GRUPO_ID);
CREATE INDEX ITBEMPRESA_GRUPO_CRED_IDX1 ON TBEMPRESA_GRUPO_LIMITE_CREDITO (ID);


/******************************************************************************/
/****                               Triggers                               ****/
/******************************************************************************/



SET TERM ^ ;



/******************************************************************************/
/****                         Triggers for tables                          ****/
/******************************************************************************/



/* Trigger: TTBEMPRESA_GRUPO_CRED_B01D */
CREATE OR ALTER TRIGGER TTBEMPRESA_GRUPO_CRED_B01D FOR TBEMPRESA_GRUPO_LIMITE_CREDITO
ACTIVE BEFORE DELETE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
DECLARE VARIABLE DESC_FORMA VARCHAR(100);
BEGIN

    HISTORICO = '';
    SELECT TRIM(W.DESCRICAO) FROM TBPAGAMENTO_FORMA W WHERE W.CODIGO = OLD.PAGAMENTO_FORMA INTO DESC_FORMA;    

    HISTORICO = HISTORICO||' FORMA DE PAGAMENTO EXCLUIDA: '||FN_LPAD(OLD.PAGAMENTO_FORMA,0,4)||' - '||DESC_FORMA;
    
    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBEMPRESA_GRUPO',OLD.EMPRESA_GRUPO_ID,HISTORICO);
    END
END
^

/* Trigger: TTBEMPRESA_GRUPO_CRED_B01I */
CREATE OR ALTER TRIGGER TTBEMPRESA_GRUPO_CRED_B01I FOR TBEMPRESA_GRUPO_LIMITE_CREDITO
ACTIVE BEFORE INSERT POSITION 0
as
begin
  if (new.id is null) then
    new.id = gen_id(GTBEMPRESA_GRUPO_LIMITE_CREDITO,1);
end
^


/* Trigger: TTBEMPRESA_GRUPO_CRED_B01U */
CREATE OR ALTER TRIGGER TTBEMPRESA_GRUPO_CRED_B01U FOR TBEMPRESA_GRUPO_LIMITE_CREDITO
ACTIVE BEFORE UPDATE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
DECLARE VARIABLE DESC_FORMA VARCHAR(100);
BEGIN

    HISTORICO = '';
    SELECT TRIM(W.DESCRICAO) FROM TBPAGAMENTO_FORMA W WHERE W.CODIGO = NEW.PAGAMENTO_FORMA INTO DESC_FORMA;

    IF(OLD.LIMITE_CREDITO <> NEW.LIMITE_CREDITO) THEN
    BEGIN
        HISTORICO = HISTORICO||'LIMITE: R$ '||COALESCE(OLD.LIMITE_CREDITO,0.00)||' -> R$ '||COALESCE(NEW.LIMITE_CREDITO,0.00);
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = ' FORMA DE PAGAMENTO: '||:DESC_FORMA||' ALTERADA: '||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBEMPRESA_GRUPO',NEW.EMPRESA_GRUPO_ID,FN_ELIPSES(HISTORICO,500));
    END
END
^

/* Trigger: TTBEMPRESA_GRUPO_CRED_B02I */
CREATE OR ALTER TRIGGER TTBEMPRESA_GRUPO_CRED_B02I FOR TBEMPRESA_GRUPO_LIMITE_CREDITO
ACTIVE BEFORE INSERT POSITION 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
DECLARE VARIABLE DESC_FORMA VARCHAR(100);
BEGIN

    HISTORICO = '';
    SELECT TRIM(W.DESCRICAO) FROM TBPAGAMENTO_FORMA W WHERE W.CODIGO = NEW.PAGAMENTO_FORMA INTO DESC_FORMA;

    HISTORICO = HISTORICO||' FORMA DE PAGAMENTO INCLUIDA: '||FN_LPAD(NEW.PAGAMENTO_FORMA,0,4)||' - '||DESC_FORMA;

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBEMPRESA_GRUPO',NEW.EMPRESA_GRUPO_ID,HISTORICO);
    END
END
^


/* Trigger: TTBEMPRESA_GRUPO_CRED_B03I */
CREATE OR ALTER TRIGGER TTBEMPRESA_GRUPO_CRED_B03I FOR TBEMPRESA_GRUPO_LIMITE_CREDITO
ACTIVE BEFORE INSERT POSITION 1
AS
DECLARE VARIABLE PAGAMENTO_FORMA INTEGER;
DECLARE VARIABLE DESCRICAO_FORMA VARCHAR(100);
BEGIN

  FOR
      SELECT FIRST 1
        PAGAMENTO_FORMA
      FROM TBEMPRESA_GRUPO_LIMITE_CREDITO T
      WHERE T.PAGAMENTO_FORMA = NEW.PAGAMENTO_FORMA
      AND T.ID                = NEW.ID

   INTO
    :PAGAMENTO_FORMA

  DO BEGIN
    IF(PAGAMENTO_FORMA IS NOT NULL OR PAGAMENTO_FORMA > 0) THEN
        BEGIN
            DESCRICAO_FORMA = COALESCE((SELECT FIRST 1 EMP.DESCRICAO FROM TBPAGAMENTO_FORMA EMP WHERE EMP.CODIGO = NEW.PAGAMENTO_FORMA), '');

            EXCEPTION "..."'FORMA DE PAGAMENTO '||FN_LPAD(NEW.PAGAMENTO_FORMA, 6, '0')||' - '||DESCRICAO_FORMA||' JÁ INCLUIDA NESTE GRUPO';
            
        END
  END
END
^

ALTER TABLE TBEMPRESA_GRUPO
ADD LIMITE_CREDITO NUMERIC(15,2)
DEFAULT 0^

CREATE OR ALTER TRIGGER TBEMPRESA_GRUPO_BU0 FOR TBEMPRESA_GRUPO
ACTIVE BEFORE UPDATE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN
    HISTORICO = '';

    IF ( NEW.DESCRICAO <> OLD.DESCRICAO) THEN
    BEGIN
        HISTORICO = HISTORICO||' DESC:'||OLD.DESCRICAO||' -> '||NEW.DESCRICAO;
    END            

    IF ( NEW.LIMITE_CREDITO IS DISTINCT FROM OLD.LIMITE_CREDITO) THEN
    BEGIN
        HISTORICO = HISTORICO||' LIMITE CREDITO: R$ '||COALESCE(OLD.LIMITE_CREDITO, 0.00)||' -> R$ '||COALESCE(NEW.LIMITE_CREDITO,0.00);
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = ' REG.ALTERADO: '||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBEMPRESA_GRUPO',NEW.ID, HISTORICO);
    END
END^

SET TERM ; ^