/******************************************************************************/
/****              GENERATED BY IBEXPERT 16/05/2023 11:48:25               ****/
/******************************************************************************/

/******************************************************************************/
/****     FOLLOWING SET SQL DIALECT IS JUST FOR THE DATABASE COMPARER      ****/
/******************************************************************************/
SET SQL DIALECT 3;



/******************************************************************************/
/****                                TABLES                                ****/
/******************************************************************************/


CREATE GENERATOR GTBPDV_MOVIMENTO_ANTECIPACAO;

CREATE TABLE TBPDV_MOVIMENTO_ANTECIPACAO (
    ID                      INTEGER NOT NULL,
    PDV_MOVIMENTO_ID        INTEGER,
    PDV_MOVIMENTO_CAIXA_ID  INTEGER,
    TABELA_ID               INTEGER,
    ORIGEM                  VARCHAR(3) DEFAULT '',
    VALOR                   NUMERIC(15,2) DEFAULT 0,
    SALDO                   NUMERIC(15,2) DEFAULT 0,
    DATAHORA                TIMESTAMP DEFAULT 'NOW',
    USUARIO_ID              INTEGER,
    FORMA_PAGAMENTO_ID      INTEGER,
    CLIENTE_ID              INTEGER,
    CAIXABANCO_ID           INTEGER,
    ESTABELECIMENTO_ID      INTEGER
);




/******************************************************************************/
/****                             PRIMARY KEYS                             ****/
/******************************************************************************/

ALTER TABLE TBPDV_MOVIMENTO_ANTECIPACAO ADD CONSTRAINT PK_TBPDV_MOVIMENTO_ANTECIPACAO PRIMARY KEY (ID);


/******************************************************************************/
/****                               INDICES                                ****/
/******************************************************************************/

CREATE INDEX ITBPDV_MOVIMENTO_ANTECIPACAO_01 ON TBPDV_MOVIMENTO_ANTECIPACAO (PDV_MOVIMENTO_ID);
CREATE INDEX ITBPDV_MOVIMENTO_ANTECIPACAO_02 ON TBPDV_MOVIMENTO_ANTECIPACAO (PDV_MOVIMENTO_CAIXA_ID);
CREATE INDEX ITBPDV_MOVIMENTO_ANTECIPACAO_03 ON TBPDV_MOVIMENTO_ANTECIPACAO (ORIGEM);
CREATE INDEX ITBPDV_MOVIMENTO_ANTECIPACAO_04 ON TBPDV_MOVIMENTO_ANTECIPACAO (TABELA_ID);
CREATE INDEX ITBPDV_MOVIMENTO_ANTECIPACAO_05 ON TBPDV_MOVIMENTO_ANTECIPACAO (CLIENTE_ID);
CREATE INDEX ITBPDV_MOVIMENTO_ANTECIPACAO_06 ON TBPDV_MOVIMENTO_ANTECIPACAO (FORMA_PAGAMENTO_ID);
CREATE INDEX ITBPDV_MOVIMENTO_ANTECIPACAO_07 ON TBPDV_MOVIMENTO_ANTECIPACAO (ESTABELECIMENTO_ID);
CREATE INDEX ITBPDV_MOVIMENTO_ANTECIPACAO_08 ON TBPDV_MOVIMENTO_ANTECIPACAO (CAIXABANCO_ID);


/******************************************************************************/
/****                               TRIGGERS                               ****/
/******************************************************************************/



SET TERM ^ ;



/******************************************************************************/
/****                         TRIGGERS FOR TABLES                          ****/
/******************************************************************************/



/* TRIGGER: TBPDV_MOVIMENTO_ANTEC_B03U */
CREATE OR ALTER TRIGGER TBPDV_MOVIMENTO_ANTEC_B03U FOR TBPDV_MOVIMENTO_ANTECIPACAO
ACTIVE BEFORE UPDATE OR DELETE POSITION 0
AS
BEGIN
 IF(UPDATING)THEN
 BEGIN
   IF(OLD.SALDO <> OLD.VALOR)THEN
   BEGIN
     EXCEPTION "..." 'ANTECIP.ID:'||FN_LPAD(NEW.ID,4,0)||',VR R$ '||FN_FORMAT_NUMBER(OLD.VALOR,2)||',SD R$ '||FN_FORMAT_NUMBER(OLD.SALDO,2)||' JA UTILIZADA. <BR> OPERACAO CANCELADA!.';
   END
 END

 IF(DELETING)THEN
 BEGIN
   IF((OLD.SALDO <> OLD.VALOR))THEN
   BEGIN
     EXCEPTION "..." 'ANTECIP.ID:'||FN_LPAD(NEW.ID,4,0)||',VR R$ '||FN_FORMAT_NUMBER(OLD.VALOR,2)||' JA UTILIZADA. <BR> OPERACAO CANCELADA!.';
   END
 END

END
^


/* TRIGGER: TTBPDV_MOVIMENTO_ANTEC_B01I */
CREATE OR ALTER TRIGGER TTBPDV_MOVIMENTO_ANTEC_B01I FOR TBPDV_MOVIMENTO_ANTECIPACAO
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.ID IS NULL) THEN
  BEGIN
    NEW.ID = GEN_ID(GTBPDV_MOVIMENTO_ANTECIPACAO,1);
  END

  IF(NEW.USUARIO_ID IS NULL)THEN
  BEGIN
     NEW.USUARIO_ID = FN_CURRENT_USER_ID();
  END
END
^


/* TRIGGER: TTBPDV_MOVIMENTO_ANTEC_B02U */
CREATE OR ALTER TRIGGER TTBPDV_MOVIMENTO_ANTEC_B02U FOR TBPDV_MOVIMENTO_ANTECIPACAO
ACTIVE BEFORE UPDATE POSITION 4
AS
DECLARE VARIABLE HISTORICO VARCHAR(1000);
BEGIN
    HISTORICO = '';
    
    IF(OLD.ESTABELECIMENTO_ID <> NEW.ESTABELECIMENTO_ID)THEN
    BEGIN
       HISTORICO = HISTORICO||' ESTAB:'||OLD.ESTABELECIMENTO_ID||'->'||NEW.ESTABELECIMENTO_ID;
    END
    
    IF(OLD.CAIXABANCO_ID <> NEW.CAIXABANCO_ID)THEN
    BEGIN
       HISTORICO = HISTORICO||' BANCO:'||OLD.CAIXABANCO_ID||'->'||NEW.CAIXABANCO_ID;
    END
    
    IF(OLD.FORMA_PAGAMENTO_ID <> NEW.FORMA_PAGAMENTO_ID)THEN
    BEGIN
       HISTORICO = HISTORICO||' FORMA PAG:'||OLD.FORMA_PAGAMENTO_ID||'->'||NEW.FORMA_PAGAMENTO_ID;
    END
    
    IF(OLD.CLIENTE_ID <> NEW.CLIENTE_ID)THEN
    BEGIN
       HISTORICO = HISTORICO||' CLIENTE:'||OLD.CLIENTE_ID||'->'||NEW.CLIENTE_ID;
    END

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

    IF(HISTORICO <> '') THEN
    BEGIN
        HISTORICO = 'REGISTRO ALTERADO '||:HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBPDV_MOVIMENTO_ANTECIPACAO', NEW.PDV_MOVIMENTO_ID, :HISTORICO);
    END
END
^

SET TERM ; ^


/******************************************************************************/
/****                              PRIVILEGES                              ****/
/******************************************************************************/


/* PRIVILEGES OF USERS */
GRANT SELECT ON MON$ATTACHMENTS TO PUBLIC;
GRANT SELECT ON MON$CALL_STACK TO PUBLIC;
GRANT SELECT ON MON$CONTEXT_VARIABLES TO PUBLIC;
GRANT SELECT ON MON$DATABASE TO PUBLIC;
GRANT SELECT ON MON$IO_STATS TO PUBLIC;
GRANT SELECT ON MON$MEMORY_USAGE TO PUBLIC;
GRANT SELECT ON MON$RECORD_STATS TO PUBLIC;
GRANT SELECT ON MON$STATEMENTS TO PUBLIC;
GRANT SELECT ON MON$TABLE_STATS TO PUBLIC;
GRANT SELECT ON MON$TRANSACTIONS TO PUBLIC;

/* PRIVILEGES OF ROLES */
GRANT ALL ON TBPDV_MOVIMENTO_ANTECIPACAO TO RDB$ADMIN;