CREATE GENERATOR GTBEMPRESA_CATALOGO;

CREATE TABLE TBEMPRESA_CATALOGO (
    ID                   INTEGER NOT NULL,
    EMPRESA_ID           INTEGER,
    CATALOGO_PRODUTO_ID  INTEGER
);




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

ALTER TABLE TBEMPRESA_CATALOGO ADD CONSTRAINT PK_TBEMPRESA_CATALOGO PRIMARY KEY (ID);


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

CREATE INDEX TBEMPRESA_CATALOGO_IDX1 ON TBEMPRESA_CATALOGO (EMPRESA_ID);
CREATE INDEX TBEMPRESA_CATALOGO_IDX2 ON TBEMPRESA_CATALOGO (CATALOGO_PRODUTO_ID);


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



SET TERM ^ ;



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



/* Trigger: TTBEMPRESA_CATALOGO_B01D */
CREATE OR ALTER TRIGGER TTBEMPRESA_CATALOGO_B01D FOR TBEMPRESA_CATALOGO
ACTIVE BEFORE DELETE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
DECLARE VARIABLE OLD_EMPRESA VARCHAR(500);
DECLARE VARIABLE OLD_CATALOGO_PRODUTO VARCHAR(500);
BEGIN

    HISTORICO = '';

    OLD_EMPRESA = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 6, '0')||' - '||A.NOMEFANTASIA FROM TBEMPRESA A WHERE A.CODIGO = OLD.EMPRESA_ID), '');
    OLD_CATALOGO_PRODUTO = COALESCE((SELECT FIRST 1 FN_LPAD(B.ID, 4, '0')||' - '||B.DESCRICAO FROM TBCATALOGO_PRODUTO B WHERE B.ID = OLD.CATALOGO_PRODUTO_ID), '');

    IF (OLD.ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||' '||OLD_EMPRESA||' REMOVIDO DA AREA EXCLUSIVA NO CATALOGO '||OLD_CATALOGO_PRODUTO||'';
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBEMPRESA', OLD.EMPRESA_ID, HISTORICO);
        EXECUTE PROCEDURE SPI_HISTORICO('TBCATALOGO_PRODUTO', OLD.CATALOGO_PRODUTO_ID, HISTORICO);
    END
END
^


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


/* Trigger: TTBEMPRESA_CATALOGO_B01U */
CREATE OR ALTER TRIGGER TTBEMPRESA_CATALOGO_B01U FOR TBEMPRESA_CATALOGO
ACTIVE BEFORE UPDATE POSITION 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
DECLARE VARIABLE OLD_EMPRESA VARCHAR(500);
DECLARE VARIABLE NEW_EMPRESA VARCHAR(500);
DECLARE VARIABLE OLD_CATALOGO_PRODUTO VARCHAR(500);
DECLARE VARIABLE NEW_CATALOGO_PRODUTO VARCHAR(500);
BEGIN

    HISTORICO = '';

    OLD_EMPRESA = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 6, '0')||' - '||A.NOMEFANTASIA FROM TBEMPRESA A WHERE A.CODIGO = OLD.EMPRESA_ID), '');
    NEW_EMPRESA = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 6, '0')||' - '||A.NOMEFANTASIA FROM TBEMPRESA A WHERE A.CODIGO = NEW.EMPRESA_ID), '');
    OLD_CATALOGO_PRODUTO = COALESCE((SELECT FIRST 1 FN_LPAD(B.ID, 4, '0')||' - '||B.DESCRICAO FROM TBCATALOGO_PRODUTO B WHERE B.ID = OLD.CATALOGO_PRODUTO_ID), '');
    NEW_CATALOGO_PRODUTO = COALESCE((SELECT FIRST 1 FN_LPAD(B.ID, 4, '0')||' - '||B.DESCRICAO FROM TBCATALOGO_PRODUTO B WHERE B.ID = NEW.CATALOGO_PRODUTO_ID), '');

    IF (OLD.EMPRESA_ID <> NEW.EMPRESA_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' EMPRESA:'||OLD_EMPRESA||'->'||NEW_EMPRESA;
    END

    IF (OLD.CATALOGO_PRODUTO_ID <> NEW.CATALOGO_PRODUTO_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' CAT.VENDA:'||OLD_CATALOGO_PRODUTO||'->'||NEW_CATALOGO_PRODUTO;
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        HISTORICO = ''||NEW_EMPRESA||' DA AREA DE ACESSO EXCLUSIVO DO CATALOGO '||NEW_CATALOGO_PRODUTO||' ALTERADO:'||HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBEMPRESA', OLD.EMPRESA_ID, FN_ELIPSE(:HISTORICO, 500));
        EXECUTE PROCEDURE SPI_HISTORICO('TBCATALOGO_PRODUTO', OLD.CATALOGO_PRODUTO_ID, FN_ELIPSE(:HISTORICO, 500));
    END
END
^


/* Trigger: TTBEMPRESA_CATALOGO_B02I */
CREATE OR ALTER TRIGGER TTBEMPRESA_CATALOGO_B02I FOR TBEMPRESA_CATALOGO
ACTIVE BEFORE INSERT POSITION 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
DECLARE VARIABLE NEW_EMPRESA VARCHAR(500);
DECLARE VARIABLE NEW_CATALOGO_PRODUTO VARCHAR(500);
BEGIN

    HISTORICO = '';

    NEW_EMPRESA = COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO, 6, '0')||' - '||A.NOMEFANTASIA FROM TBEMPRESA A WHERE A.CODIGO = NEW.EMPRESA_ID), '');
    NEW_CATALOGO_PRODUTO = COALESCE((SELECT FIRST 1 FN_LPAD(B.ID, 4, '0')||' - '||B.DESCRICAO FROM TBCATALOGO_PRODUTO B WHERE B.ID = NEW.CATALOGO_PRODUTO_ID), '');

    IF (NEW.ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||' '||NEW_EMPRESA||' AUTORIZADO PARA AREA EXCLUSIVA NO CATALOGO '||NEW_CATALOGO_PRODUTO||'';
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBEMPRESA', NEW.EMPRESA_ID, HISTORICO);
        EXECUTE PROCEDURE SPI_HISTORICO('TBCATALOGO_PRODUTO', NEW.CATALOGO_PRODUTO_ID, HISTORICO);
    END
END
^

SET TERM ; ^

/******************************************************************************/
/******************************************************************************/
/******************************************************************************/

SET TERM ^ ;

CREATE OR ALTER trigger ttbempresa_b0d_01 for tbempresa
active before delete position 0
AS
DECLARE VARIABLE p1  Integer;
Begin

  if (OLD.CODIGO > 0) then
      Begin
      p1 = Coalesce((Select First 1 A.NUMERO_NOTAFISCAL From TbNfs A Where A.Empresa_Codigo = OLD.CODIGO),0);
      if (:P1 > 0) Then Exception "..." 'EMPRESA JA USADA EM DOCUMENTO FISCAL. NFS.'||:P1||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
      p1 = Coalesce((Select First 1 A.NUMERO_NOTAFISCAL From TbNfe A Where A.Empresa_Codigo = OLD.CODIGO),0);
      if (:P1 > 0) Then Exception "..." 'EMPRESA JA USADA EM DOCUMENTO FISCAL. NFE.'||:P1||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
      p1 = Coalesce((Select First 1 A.NUMERO_NOTAFISCAL From TbNfs_Parcelamento A Where A.Empresa_Codigo = OLD.CODIGO),0);
      if (:P1 > 0) Then Exception "..." 'EMPRESA JA USADA EM PARCELA DE DOCUMENTO FISCAL. NFS.'||:P1||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
      p1 = Coalesce((Select First 1 A.NUMERO_NOTAFISCAL From TbNfe_Parcelamento A Where A.Empresa_Codigo = OLD.CODIGO),0);
      if (:P1 > 0) Then Exception "..." 'EMPRESA JA USADA EM PARCELA DE DOCUMENTO FISCAL. NFE.'||:P1||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
      p1 = Coalesce((Select First 1 A.NUMERO_NOTAFISCAL From TbNfs A Where A.Representante_Codigo = OLD.CODIGO),0);
      if (:P1 > 0) Then Exception "..." 'EMPRESA JA USADA COMO REPRESENTANTE EM DOCUMENTO FISCAL. NFS.'||:P1||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
      p1 = Coalesce((Select First 1 A.PRODUTO_CODIGO From TBPRODUTO_EDI A Where A.Empresa_CODIGO = OLD.CODIGO),0);
      if (:P1 > 0) Then Exception "..." 'EMPRESA JA USADA EM PRODUTO EDI. ID.'||:P1||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
      p1 = Coalesce((Select First 1 A.PEDIDO From TBPEDIDO A Where A.Cliente_Codigo = OLD.CODIGO),0);
      if (:P1 > 0) Then Exception "..." 'EMPRESA JA USADA EM PEDIDO. PED.'||:P1||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
      p1 = Coalesce((Select First 1 A.PEDIDO From TBPEDIDO A Where A.Representante_Codigo = OLD.CODIGO),0);
      if (:P1 > 0) Then Exception "..." 'EMPRESA JA USADA COMO REPRESENTANTE EM PEDIDO. PED.'||:P1||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
      p1 = Coalesce((Select First 1 A.PEDIDO From TBPEDIDO A Where A.Transportadora_Codigo = OLD.CODIGO),0);
      if (:P1 > 0) Then Exception "..." 'EMPRESA JA USADA COMO TRANSPORTADORA EM PEDIDO. PED.'||:P1||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
      p1= Coalesce((Select First 1 A.OC From TBOc A Where A.Fornecedor_Codigo = OLD.CODIGO),0);
      if (:P1> 0) Then Exception "..." 'EMPRESA JA USADA EM OC. OC.'||:P1||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
      p1= Coalesce((Select First 1 A.OC From TBOC A Where A.Transportadora_Codigo = OLD.CODIGO),0);
      if (:P1 > 0) Then Exception "..." 'EMPRESA JA USADA COMO TRANSPORTADORA EM OC. OC.'||:P1||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
      p1= Coalesce((Select First 1 A.OS From TBTECELAGEM_OS A Where A.Cliente_Codigo = OLD.CODIGO),0);
      if (:P1 > 0) Then Exception "..." 'EMPRESA JA USADA EM PROGRAMAÇAO DE TECELAGEM. OS.'||:P1||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
      p1= Coalesce((Select First 1 A.Fornecedor_Id  From TBFORNECEDOR_OCORRENCIA A Where A.Fornecedor_Id = OLD.CODIGO),0);
      if (:P1 > 0) Then Exception "..." 'EMPRESA JA USADA EM REGISTRO DE OCORRÊNCIAS DE CLIENTES.'||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
      p1= Coalesce((Select First 1 A.Cliente_Id  From TBCLIENTE_OCORRENCIA A Where A.Cliente_Id = OLD.CODIGO),0);
      if (:P1 > 0) Then Exception "..." 'EMPRESA JA USADA EM REGISTRO DE OCORRÊNCIAS DE FORNECEDORES.'||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
      p1= Coalesce((Select First 1 A.Cliente_Id  From TBPEDIDO_GRUPO A Where A.Cliente_Id = OLD.CODIGO),0);
      if (:P1 > 0) Then Exception "..." 'EMPRESA JA USADA EM REGISTRO GRUPO DE PEDIDOS.'||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
      p1= Coalesce((Select First 1 A.Cliente_Codigo From TBCLIENTE_MODELO_PRECO A Where A.Cliente_Codigo = OLD.CODIGO),0);
      if (:P1 > 0) Then Exception "..." 'EMPRESA JA USADA EM PREÇO DE MODELOS.'||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
      p1= Coalesce((Select First 1 A.Cliente_Codigo From TBCLIENTE_PRODUTO_PRECO A Where A.Cliente_Codigo = OLD.CODIGO),0);
      if (:P1 > 0) Then Exception "..." 'EMPRESA JA USADA EM PREÇO DE PRODUTOS.'||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
      p1= Coalesce((Select First 1 A.Transportadora_Codigo From TbNfs_Transportadora A Where A.Transportadora_Codigo = OLD.CODIGO),0);
      if (:P1 > 0) Then Exception "..." 'EMPRESA JA USADA COMO TRANSPORTADORA EM DOCUMENTO FISCAL DE SAÍDA.'||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
      p1= Coalesce((Select First 1 A.Transportadora_Codigo From TbNfe_Transportadora A Where A.Transportadora_Codigo = OLD.CODIGO),0);
      if (:P1 > 0) Then Exception "..." 'EMPRESA JA USADA COMO TRANSPORTADORA EM DOCUMENTO FISCAL DE ENTRADA.'||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
      p1= Coalesce((Select First 1 A.Empresa_Id From TBCF_TIPO_PAGAMENTO A Where A.Empresa_Id = OLD.CODIGO),0);
      if (:P1 > 0) Then Exception "..." 'EMPRESA JA USADA NO CADASTRO DE TIPOS DE PAGAMENTOS DE CUPONS FISCAIS.'||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
      p1= Coalesce((Select First 1 A.Empresa_Id From TBCF_PARCELAS A Where A.Empresa_Id = OLD.CODIGO),0);
      if (:P1 > 0) Then Exception "..." 'EMPRESA JA USADA NO PARCELAMENTO DOS CUPONS FISCAIS.'||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
      p1= Coalesce((Select First 1 A.Empresa_Id From TBCF_CHEQUE_CLIENTE A Where A.Empresa_Id = OLD.CODIGO),0);
      if (:P1 > 0) Then Exception "..." 'EMPRESA JA USADA NO PAGAMENTO COM CHEQUES DOS CUPONS FISCAIS.'||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';

     end


     DELETE FROM TBCLIENTE_PAGAMENTO_FORMA C WHERE C.CLIENTE_ID = OLD.CODIGO;
     DELETE FROM TBEMPRESA_CATALOGO D WHERE D.EMPRESA_ID = OLD.CODIGO;

End
^

SET TERM ; ^

/******************************************************************************/
/******************************************************************************/

SET TERM ^ ;

CREATE OR ALTER trigger ttbcatalogo_produto_b02d for tbcatalogo_produto
active before delete position 1
AS
BEGIN
    DELETE FROM TBCATALOGO_PRODUTO_ITENS A WHERE A.CATALOGO_PRODUTO_ID = OLD.ID;        /* Remove registros filhos da TBCATALOGO_PRODUTO_ITENS */
    DELETE FROM TBCATALOGO_PRODUTO_VENDEDORES B WHERE B.CATALOGO_PRODUTO_ID = OLD.ID;   /* Remove registros filhos da TBCATALOGO_PRODUTO_VENDEDORES */
    DELETE FROM TBCATALOGO_PRODUTO_FORMPAG C WHERE C.CATALOGO_PRODUTO_ID = OLD.ID;      /* Remove registros filhos da TBCATALOGO_PRODUTO_FORMPAG */
    DELETE FROM TBEMPRESA_CATALOGO D WHERE D.CATALOGO_PRODUTO_ID = OLD.ID;              /* Remove registros filhos da TBEMPRESA_CATALOGO - Permissao de Area Exclusiva */
END
^

SET TERM ; ^

