ALTER TABLE TBCATALOGO_PRODUTO
    ADD WIDTH_CARD_CEL NUMERIC(5,1) DEFAULT 100,
    ADD HEIGHT_CARD_CEL NUMERIC(5,1) DEFAULT 320;

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

COMMENT ON COLUMN TBCATALOGO_PRODUTO.WIDTH_CARD_CEL IS
'Largura do card para celular';

COMMENT ON COLUMN TBCATALOGO_PRODUTO.HEIGHT_CARD_CEL IS
'Altura do card para celular';

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

UPDATE TBCATALOGO_PRODUTO
	SET WIDTH_CARD_CEL = 100
	WHERE WIDTH_CARD_CEL IS NULL;

UPDATE TBCATALOGO_PRODUTO
	SET HEIGHT_CARD_CEL = 320
	WHERE HEIGHT_CARD_CEL IS NULL;

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

DROP INDEX ITBCATALOGO_PRODUTO_ENTREGA_01;
DROP INDEX ITBCATALOGO_PRODUTO_ENTREGA_02;
DROP INDEX ITBCATALOGO_PRODUTO_ENTREGA_03;
DROP INDEX ITBCATALOGO_PRODUTO_ENTREGA_04;
DROP INDEX ITBCATALOGO_PRODUTO_ENTREGA_05;

DROP TRIGGER TTBCATALOGO_PROD_ENTREGA_B01IU;
DROP TRIGGER TTBCATALOGO_PROD_ENTREGA_B01I;
DROP TRIGGER TTBCATALOGO_PROD_ENTREGA_B01U;
DROP TRIGGER TTBCATALOGO_PROD_ENTREGA_B01D;
DROP TRIGGER TTBCATALOGO_PROD_ENTREGA_B02I;

DROP SEQUENCE GTBCATALOGO_PRODUTO_ENTREGA;

ALTER TABLE TBCATALOGO_PRODUTO_ENTREGA DROP CONSTRAINT PK_TBCATALOGO_PRODUTO_ENTREGA;

DROP TABLE TBCATALOGO_PRODUTO_ENTREGA;


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


CREATE GENERATOR GTBCATALOGO_PRODUTO_ENTREGA;

CREATE TABLE TBCATALOGO_PRODUTO_ENTREGA (
    ID                   INTEGER NOT NULL,
    CATALOGO_PRODUTO_ID  INTEGER,
    DESCRICAO            VARCHAR(100),
    TIPO_FRETE           INTEGER DEFAULT 9
);




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

ALTER TABLE TBCATALOGO_PRODUTO_ENTREGA ADD CONSTRAINT PK_TBCATALOGO_PRODUTO_ENTREGA PRIMARY KEY (ID);


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

CREATE INDEX ITBCATALOGO_PRODUTO_ENTREGA_01 ON TBCATALOGO_PRODUTO_ENTREGA (CATALOGO_PRODUTO_ID);
CREATE INDEX ITBCATALOGO_PRODUTO_ENTREGA_02 ON TBCATALOGO_PRODUTO_ENTREGA (TIPO_FRETE);


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



SET TERM ^ ;



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



/* Trigger: TTBCATALOGO_PROD_ENTREGA_B01D */
CREATE OR ALTER TRIGGER TTBCATALOGO_PROD_ENTREGA_B01D FOR TBCATALOGO_PRODUTO_ENTREGA
ACTIVE BEFORE DELETE POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    :HISTORICO = '';

    IF (OLD.ID > 0) THEN
    BEGIN
        :HISTORICO = :HISTORICO||' ENTREGA '||OLD.DESCRICAO||' EXCLUIDA';
    END

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


/* Trigger: TTBCATALOGO_PROD_ENTREGA_B01I */
CREATE OR ALTER TRIGGER TTBCATALOGO_PROD_ENTREGA_B01I FOR TBCATALOGO_PRODUTO_ENTREGA
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
    IF (NEW.ID IS NULL) THEN
        NEW.ID = GEN_ID(GTBCATALOGO_PRODUTO_ENTREGA,1);
END
^


/* Trigger: TTBCATALOGO_PROD_ENTREGA_B01U */
CREATE OR ALTER TRIGGER TTBCATALOGO_PROD_ENTREGA_B01U FOR TBCATALOGO_PRODUTO_ENTREGA
ACTIVE BEFORE UPDATE POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(5000);
BEGIN

    :HISTORICO = '';

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

    IF (OLD.TIPO_FRETE IS DISTINCT FROM NEW.TIPO_FRETE) THEN
    BEGIN
        :HISTORICO = :HISTORICO||' TIPO:'||OLD.TIPO_FRETE||'->'||NEW.TIPO_FRETE;
    END

    IF (:HISTORICO <> '') THEN
    BEGIN
        :HISTORICO = 'ENTREGA '||NEW.DESCRICAO||' ALTERADA:'||:HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBCATALOGO_PRODUTO', OLD.CATALOGO_PRODUTO_ID, FN_ELIPSE(:HISTORICO, 500));
    END
END
^


/* Trigger: TTBCATALOGO_PROD_ENTREGA_B02I */
CREATE OR ALTER TRIGGER TTBCATALOGO_PROD_ENTREGA_B02I FOR TBCATALOGO_PRODUTO_ENTREGA
ACTIVE BEFORE INSERT POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    :HISTORICO = '';

    IF (NEW.ID > 0) THEN
    BEGIN
        :HISTORICO = :HISTORICO||' ENTREGA '||NEW.DESCRICAO||' INCLUIDA';
    END

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

SET TERM ; ^



/******************************************************************************/
/****                         Fields descriptions                          ****/
/******************************************************************************/

COMMENT ON COLUMN TBCATALOGO_PRODUTO_ENTREGA.TIPO_FRETE IS 
'0 - POR CONTA DO EMITENTE (CIF)
3 - PROPRIO POR CONTA DO REMETENTE
9 - SEM FRETE';



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


CREATE GENERATOR GTBCATALOGO_PRODUTO_TRANSP;

CREATE TABLE TBCATALOGO_PRODUTO_TRANSP (
    ID                           INTEGER NOT NULL,
    CATALOGO_PRODUTO_ID          INTEGER,
    CATALOGO_PRODUTO_ENTREGA_ID  INTEGER,
    TRANSPORTADORA_ID            INTEGER
);




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

ALTER TABLE TBCATALOGO_PRODUTO_TRANSP ADD CONSTRAINT PK_TBCATALOGO_PRODUTO_TRANSP PRIMARY KEY (ID);


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

CREATE INDEX ITBCATALOGO_PRODUTO_TRANSP_01 ON TBCATALOGO_PRODUTO_TRANSP (CATALOGO_PRODUTO_ID);
CREATE INDEX ITBCATALOGO_PRODUTO_TRANSP_02 ON TBCATALOGO_PRODUTO_TRANSP (CATALOGO_PRODUTO_ENTREGA_ID);
CREATE INDEX ITBCATALOGO_PRODUTO_TRANSP_03 ON TBCATALOGO_PRODUTO_TRANSP (TRANSPORTADORA_ID);


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



SET TERM ^ ;



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



/* Trigger: TTBCATALOGO_PROD_TRANSP_B01D */
CREATE OR ALTER TRIGGER TTBCATALOGO_PROD_TRANSP_B01D FOR TBCATALOGO_PRODUTO_TRANSP
ACTIVE BEFORE DELETE POSITION 9
AS
DECLARE VARIABLE ENTREGA VARCHAR(500);
DECLARE VARIABLE HISTORICO VARCHAR(500);
DECLARE VARIABLE OLD_TRANSPORTADORA VARCHAR(500);
BEGIN

    :ENTREGA   = COALESCE((SELECT FIRST 1 A.DESCRICAO FROM TBCATALOGO_PRODUTO_ENTREGA A WHERE A.ID = OLD.CATALOGO_PRODUTO_ENTREGA_ID), '');
    :HISTORICO = '';

    :OLD_TRANSPORTADORA = COALESCE((SELECT FIRST 1 FN_LPAD(B.CODIGO, 6, '0')||' - '||B.NOMEFANTASIA FROM TBEMPRESA B, TBTRANSPORTADORA C WHERE B.CODIGO = C.CODIGO AND B.HABILITA_TRANSPORTADORA = '1' AND B.CODIGO = OLD.TRANSPORTADORA_ID), '');

    IF (OLD.ID > 0) THEN
    BEGIN
        :HISTORICO = :HISTORICO||' TRANSPORTADORA: '||:OLD_TRANSPORTADORA||' EXCLUIDA NA ENTREGA: '||:ENTREGA||'';
    END

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


/* Trigger: TTBCATALOGO_PROD_TRANSP_B01I */
CREATE OR ALTER TRIGGER TTBCATALOGO_PROD_TRANSP_B01I FOR TBCATALOGO_PRODUTO_TRANSP
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
    IF (NEW.ID IS NULL) THEN
        NEW.ID = GEN_ID(GTBCATALOGO_PRODUTO_TRANSP, 1);
END
^


/* Trigger: TTBCATALOGO_PROD_TRANSP_B01U */
CREATE OR ALTER TRIGGER TTBCATALOGO_PROD_TRANSP_B01U FOR TBCATALOGO_PRODUTO_TRANSP
ACTIVE BEFORE UPDATE POSITION 9
AS
DECLARE VARIABLE ENTREGA VARCHAR(500);
DECLARE VARIABLE HISTORICO VARCHAR(5000);
DECLARE VARIABLE OLD_TRANSPORTADORA VARCHAR(500);
DECLARE VARIABLE NEW_TRANSPORTADORA VARCHAR(500);
BEGIN

    :ENTREGA   = COALESCE((SELECT FIRST 1 A.DESCRICAO FROM TBCATALOGO_PRODUTO_ENTREGA A WHERE A.ID = NEW.CATALOGO_PRODUTO_ENTREGA_ID), '');
    :HISTORICO = '';

    :OLD_TRANSPORTADORA = COALESCE((SELECT FIRST 1 FN_LPAD(B.CODIGO, 6, '0')||' - '||B.NOMEFANTASIA FROM TBEMPRESA B, TBTRANSPORTADORA C WHERE B.CODIGO = C.CODIGO AND B.HABILITA_TRANSPORTADORA = '1' AND B.CODIGO = OLD.TRANSPORTADORA_ID), '');
    :NEW_TRANSPORTADORA = COALESCE((SELECT FIRST 1 FN_LPAD(B.CODIGO, 6, '0')||' - '||B.NOMEFANTASIA FROM TBEMPRESA B, TBTRANSPORTADORA C WHERE B.CODIGO = C.CODIGO AND B.HABILITA_TRANSPORTADORA = '1' AND B.CODIGO = NEW.TRANSPORTADORA_ID), '');

    IF (OLD.TRANSPORTADORA_ID IS DISTINCT FROM NEW.TRANSPORTADORA_ID) THEN
    BEGIN
        :HISTORICO = :HISTORICO||' TRANSPORT:'||:OLD_TRANSPORTADORA||'->'||:NEW_TRANSPORTADORA;
    END

    IF (:HISTORICO <> '') THEN
    BEGIN
        :HISTORICO = ' TRANSPORTADORA: '||:NEW_TRANSPORTADORA||' DA ENTREGA: '||:ENTREGA||' ALTERADA:'||:HISTORICO;
        EXECUTE PROCEDURE SPI_HISTORICO('TBCATALOGO_PRODUTO', NEW.CATALOGO_PRODUTO_ID, FN_ELIPSE(:HISTORICO, 500));
    END
END
^


/* Trigger: TTBCATALOGO_PROD_TRANSP_B02I */
CREATE OR ALTER TRIGGER TTBCATALOGO_PROD_TRANSP_B02I FOR TBCATALOGO_PRODUTO_TRANSP
ACTIVE BEFORE INSERT POSITION 9
AS
DECLARE VARIABLE ENTREGA VARCHAR(500);
DECLARE VARIABLE HISTORICO VARCHAR(500);
DECLARE VARIABLE NEW_TRANSPORTADORA VARCHAR(500);
BEGIN

    :ENTREGA   = COALESCE((SELECT FIRST 1 A.DESCRICAO FROM TBCATALOGO_PRODUTO_ENTREGA A WHERE A.ID = NEW.CATALOGO_PRODUTO_ENTREGA_ID), '');
    :HISTORICO = '';

    :NEW_TRANSPORTADORA = COALESCE((SELECT FIRST 1 FN_LPAD(B.CODIGO, 6, '0')||' - '||B.NOMEFANTASIA FROM TBEMPRESA B, TBTRANSPORTADORA C WHERE B.CODIGO = C.CODIGO AND B.HABILITA_TRANSPORTADORA = '1' AND B.CODIGO = NEW.TRANSPORTADORA_ID), '');

    IF (NEW.ID > 0) THEN
    BEGIN
        :HISTORICO = :HISTORICO||' TRANSPORTADORA: '||:NEW_TRANSPORTADORA||' INCLUIDA NA ENTREGA: '||:ENTREGA||'';
    END

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

SET TERM ; ^