/******************************************************************************/
/****              Generated by IBExpert 04/08/2023 16:14:43               ****/
/******************************************************************************/

/******************************************************************************/
/****     Following SET SQL DIALECT is just for the Database Comparer      ****/
/******************************************************************************/
SET SQL DIALECT 3;



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


CREATE GENERATOR GTBPDV_MOVIMENTO_ANTECIPACAO;

CREATE GENERATOR GTBPDV_MOVIMENTO_ANT_AGP;

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,
    AGRUPAMENTO_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 AND OLD.SALDO <= 0)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
DECLARE VARIABLE AGRUPAMENTO_EXISTENTE INTEGER;
BEGIN
  :AGRUPAMENTO_EXISTENTE = COALESCE((SELECT FIRST 1 ANT.AGRUPAMENTO_ID FROM TBPDV_MOVIMENTO_ANTECIPACAO ANT
                            WHERE ANT.CLIENTE_ID = NEW.CLIENTE_ID AND ANT.PDV_MOVIMENTO_ID = NEW.PDV_MOVIMENTO_ID
                            AND ANT.PDV_MOVIMENTO_CAIXA_ID = NEW.PDV_MOVIMENTO_CAIXA_ID AND ANT.ESTABELECIMENTO_ID = NEW.ESTABELECIMENTO_ID
                            AND ANT.AGRUPAMENTO_ID <> NEW.AGRUPAMENTO_ID),0);

  IF(:AGRUPAMENTO_EXISTENTE > 0)THEN
  BEGIN
     EXCEPTION "..." 'JA EXISTEM ADIANTAMENTOS DO CLIENTE: '||COALESCE((SELECT FIRST 1 CLI.RAZAOSOCIAL FROM TBEMPRESA CLI WHERE CLI.CODIGO = NEW.CLIENTE_ID),'')||' NO CAIXA: '
     ||COALESCE((SELECT FIRST 1 CAIXA.DESCRICAO FROM TBPDV_MOVIMENTO_CAIXA MOV_CAIXA, TBPDV_CAIXA CAIXA WHERE CAIXA.ID = MOV_CAIXA.PDV_CAIXA_ID AND MOV_CAIXA.ID = NEW.PDV_MOVIMENTO_CAIXA_ID),'')
     ||' NA DATA '||COALESCE((SELECT FIRST 1 FN_DATE(CAST(MOV.DATA AS DATE),'DD/MM/YYYY') FROM TBPDV_MOVIMENTO MOV WHERE MOV.ID = NEW.PDV_MOVIMENTO_ID),'')||', INCLUSAO CANCELADA!';

  END

  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_B02I */
CREATE OR ALTER TRIGGER TTBPDV_MOVIMENTO_ANTEC_B02I FOR TBPDV_MOVIMENTO_ANTECIPACAO
ACTIVE BEFORE INSERT POSITION 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(2000);
BEGIN
  
  HISTORICO = '';

  IF(NEW.ID > 0) THEN
  BEGIN
     :HISTORICO = 'ANTECIP.ID:'||FN_LPAD(NEW.ID,4,0)||',VR R$ '||FN_FORMAT_NUMBER(NEW.VALOR,2)||',SD R$ '||FN_FORMAT_NUMBER(NEW.SALDO,2)||',FORM.PAG:'||COALESCE((SELECT FIRST 1 FN_LPAD(PAG.CODIGO,4,0)||' - '||PAG.DESCRICAO FROM TBPAGAMENTO_FORMA PAG WHERE PAG.CODIGO = NEW.FORMA_PAGAMENTO_ID),'')||' INCLUIDO';
  END

  IF(:HISTORICO <> '')THEN
  BEGIN
     EXECUTE PROCEDURE SPI_HISTORICO('TBPDV_MOVIMENTO_ANTECIPACAO', NEW.ID, :HISTORICO);
  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
^
/* Trigger: TTBPDV_MOVIMENTO_ANTEC_B02D */
CREATE OR ALTER TRIGGER TTBPDV_MOVIMENTO_ANTEC_B02D FOR TBPDV_MOVIMENTO_ANTECIPACAO
ACTIVE BEFORE DELETE POSITION 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(2000);
BEGIN
  
  HISTORICO = '';

  IF(OLD.ID > 0) THEN
  BEGIN
     :HISTORICO = 'ANTECIP.ID:'||FN_LPAD(OLD.ID,4,0)||',VR R$ '||FN_FORMAT_NUMBER(OLD.VALOR,2)||',SD R$ '||FN_FORMAT_NUMBER(OLD.SALDO,2)||',FORM.PAG:'||COALESCE((SELECT FIRST 1 FN_LPAD(PAG.CODIGO,4,0)||' - '||PAG.DESCRICAO FROM TBPAGAMENTO_FORMA PAG WHERE PAG.CODIGO = OLD.FORMA_PAGAMENTO_ID),'')||' EXCLUIDO';
  END

  IF(:HISTORICO <> '')THEN
  BEGIN
     EXECUTE PROCEDURE SPI_HISTORICO('TBPDV_MOVIMENTO_ANTECIPACAO', OLD.ID, :HISTORICO);
  END
END^

CREATE OR ALTER TRIGGER TBPDV_MOVIMENTO_ANTEC_B01D FOR TBPDV_MOVIMENTO_ANTECIPACAO
ACTIVE BEFORE DELETE POSITION 0
AS
BEGIN
  IF(OLD.ORIGEM = 'CHE')THEN
  BEGIN
    DELETE FROM TBCHEQUE CHEQUE WHERE CHEQUE.ID = OLD.TABELA_ID AND CHEQUE.PDV_ANTECIPACAO_ID = OLD.ID;
  END                  
  IF(OLD.ORIGEM = 'AVU')THEN
  BEGIN
    DELETE FROM TBNFS_PARCELAMENTO PARC WHERE PARC.NFS_CONTROLE = OLD.TABELA_ID AND PARC.PDV_ANTECIPACAO_ID = OLD.ID AND PARC.AVULSO = '1';
  END
  IF(OLD.ORIGEM = 'LAN')THEN
  BEGIN
    DELETE FROM TBCAIXABANCO_LANCAMENTO LANC WHERE LANC.CONTROLE = OLD.TABELA_ID AND LANC.PDV_ANTECIPACAO_ID = OLD.ID;
  END
END^

SET TERM ; ^

