ALTER TABLE TBFICHA_CUSTO
    ADD TIPO_FATOR INTEGER DEFAULT 0;
    
    
COMMENT ON COLUMN TBFICHA_CUSTO.TIPO_FATOR IS
'0 - TEMPO;
1 - QUANTIDADE;';


CREATE INDEX ITBFICHA_CUSTO_01
ON TBFICHA_CUSTO (MERCADO_ID);

CREATE INDEX ITBFICHA_CUSTO_02
ON TBFICHA_CUSTO (MODELO_ID);

CREATE INDEX ITBFICHA_CUSTO_03
ON TBFICHA_CUSTO (MES);

CREATE INDEX ITBFICHA_CUSTO_04
ON TBFICHA_CUSTO (ANO);

CREATE INDEX ITBFICHA_CUSTO_05
ON TBFICHA_CUSTO (COR_ID);

CREATE INDEX ITBFICHA_CUSTO_06
ON TBFICHA_CUSTO (TAMANHO);

CREATE INDEX ITBFICHA_CUSTO_07
ON TBFICHA_CUSTO (CENTRO_NEGOCIO_ID);

CREATE INDEX ITBFICHA_CUSTO_08
ON TBFICHA_CUSTO (FAMILIA_ID);

CREATE INDEX ITBFICHA_CUSTO_09
ON TBFICHA_CUSTO (INCENTIVO_FISCAL_ID);

CREATE INDEX ITBFICHA_CUSTO_10
ON TBFICHA_CUSTO (TIPO_METODOLOGIA);

CREATE INDEX ITBFICHA_CUSTO_11
ON TBFICHA_CUSTO (TIPO_FATOR);


CREATE INDEX ITBFICHA_CUSTO_CALENDARIO_01
ON TBFICHA_CUSTO_CALENDARIO (FICHA_CUSTO_ID);

CREATE INDEX ITBFICHA_CUSTO_CALENDARIO_02
ON TBFICHA_CUSTO_CALENDARIO (SEQUENCIA);

CREATE INDEX ITBFICHA_CUSTO_CALENDARIO_03
ON TBFICHA_CUSTO_CALENDARIO (UP_ID);

CREATE INDEX ITBFICHA_CUSTO_CALENDARIO_04
ON TBFICHA_CUSTO_CALENDARIO (COLABORADORES);


CREATE INDEX ITBFICHA_CUSTO_CONSUMO_01
ON TBFICHA_CUSTO_CONSUMO (FICHA_CUSTO_ID);

CREATE INDEX ITBFICHA_CUSTO_CONSUMO_02
ON TBFICHA_CUSTO_CONSUMO (SEQUENCIA);

CREATE INDEX ITBFICHA_CUSTO_CONSUMO_03
ON TBFICHA_CUSTO_CONSUMO (CONSUMO_ID);

CREATE INDEX ITBFICHA_CUSTO_CONSUMO_04
ON TBFICHA_CUSTO_CONSUMO (CLASSIFICACAO_CODIGO);

CREATE INDEX ITBFICHA_CUSTO_CONSUMO_05
ON TBFICHA_CUSTO_CONSUMO (TIPO);

CREATE INDEX ITBFICHA_CUSTO_MP_01
ON TBFICHA_CUSTO_MP (FICHA_CUSTO_ID);

CREATE INDEX ITBFICHA_CUSTO_MP_02
ON TBFICHA_CUSTO_MP (SEQUENCIA);

CREATE INDEX ITBFICHA_CUSTO_MP_03
ON TBFICHA_CUSTO_MP (FAMILIA_ID);

CREATE INDEX ITBFICHA_CUSTO_MP_04
ON TBFICHA_CUSTO_MP (PRODUTO_ID);

CREATE INDEX ITBFICHA_CUSTO_MP_05
ON TBFICHA_CUSTO_MP (TIPO_CUSTO);

CREATE INDEX ITBFICHA_CUSTO_MP_06
ON TBFICHA_CUSTO_MP (TIPO_MP);

CREATE INDEX ITBFICHA_CUSTO_TEMPO_01
ON TBFICHA_CUSTO_TEMPO (FICHA_CUSTO_ID);

CREATE INDEX ITBFICHA_CUSTO_TEMPO_02
ON TBFICHA_CUSTO_TEMPO (SEQUENCIA);

CREATE INDEX ITBFICHA_CUSTO_TEMPO_03
ON TBFICHA_CUSTO_TEMPO (FLUXO_ID);

CREATE INDEX ITBFICHA_CUSTO_TEMPO_04
ON TBFICHA_CUSTO_TEMPO (TIPO);

CREATE INDEX ITBFICHA_CUSTO_TEMPO_05
ON TBFICHA_CUSTO_TEMPO (TIPO_CADASTRO);

CREATE INDEX ITBFICHA_CUSTO_TRIBUTACOES_01
ON TBFICHA_CUSTO_TRIBUTACOES (FICHA_CUSTO_ID);

CREATE INDEX ITBFICHA_CUSTO_TRIBUTACOES_02
ON TBFICHA_CUSTO_TRIBUTACOES (TRIBUTACAO_ID);


CREATE TABLE TBFICHA_CUSTO_SERVICO (
    ID INTEGER NOT NULL,
    FICHA_CUSTO_ID INTEGER,
    SEQUENCIA INTEGER,
    PRODUTO_ID INTEGER,
    PRODUTO_DESCRICAO VARCHAR(200),
    CUSTO_PC NUMERIC(18,4),
    TIPO_SERVICO INTEGER);

ALTER TABLE TBFICHA_CUSTO_SERVICO
ADD CONSTRAINT PK_TBFICHA_CUSTO_SERVICO
PRIMARY KEY (ID);

COMMENT ON COLUMN TBFICHA_CUSTO_SERVICO.TIPO_SERVICO IS
'0 - Padrao;
1 - Avulso;';


CREATE SEQUENCE GTBFICHA_CUSTO_SERVICO;

create trigger ttbficha_custo_servico_b01 for tbficha_custo_servico
active before insert position 1
as
begin
  if (new.id is null) then
    new.id = gen_id(gtbficha_custo_servico,1);
end;



CREATE INDEX ITBFICHA_CUSTO_SERVICO_01
ON TBFICHA_CUSTO_SERVICO (FICHA_CUSTO_ID);

CREATE INDEX ITBFICHA_CUSTO_SERVICO_02
ON TBFICHA_CUSTO_SERVICO (SEQUENCIA);

CREATE INDEX ITBFICHA_CUSTO_SERVICO_03
ON TBFICHA_CUSTO_SERVICO (PRODUTO_ID);

CREATE INDEX ITBFICHA_CUSTO_SERVICO_04
ON TBFICHA_CUSTO_SERVICO (TIPO_SERVICO);




DROP TRIGGER TTBESTOQUE_CLIENTE_ITEM_B01U;

DROP TRIGGER TTBESTOQUE_CLIENTE_ITEM_B02I;

DROP TRIGGER TTBESTOQUE_CLIENTE_ITEM_B01D;

DROP INDEX ITBESTOQUE_CLIENTE_ITEM_05;

ALTER TABLE TBESTOQUE_CLIENTE_ITEM ALTER QUANTIDADE TO ESTOQUE;

ALTER TABLE TBESTOQUE_CLIENTE_ITEM DROP PERIODO;


ALTER TABLE TBESTOQUE_CLIENTE_ITEM
    ADD LOTE_MIN_MAX NUMERIC(18,4);

CREATE OR ALTER trigger ttbestoque_cliente_item_b01u for tbestoque_cliente_item
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
DECLARE VARIABLE COR_DESC VARCHAR(100);
BEGIN

    HISTORICO = '';

    COR_DESC    = COALESCE((SELECT FIRST 1 C.DESCRICAO FROM TBCOR C WHERE C.CODIGO = NEW.COR_ID), '');

    IF (OLD.MODELO_ID IS DISTINCT FROM NEW.MODELO_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' MOD: '||COALESCE(OLD.MODELO_ID, 0)||'->'||COALESCE(NEW.MODELO_ID, 0);
    END

    IF (OLD.COR_ID IS DISTINCT FROM NEW.COR_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||' COR: '||COALESCE(OLD.COR_ID, 0)||'->'||COALESCE(NEW.COR_ID, 0);
    END

    IF(OLD.TAMANHO IS DISTINCT FROM NEW.TAMANHO) THEN
    BEGIN
        HISTORICO = HISTORICO||' TAM: '||COALESCE(OLD.TAMANHO, '')||'->'||COALESCE(NEW.TAMANHO, '');
    END

    IF(OLD.ESTOQUE <> NEW.ESTOQUE) THEN
    BEGIN
        HISTORICO = HISTORICO||' EST. '||OLD.ESTOQUE||'->'||NEW.ESTOQUE;
    END

    IF (HISTORICO <> '') THEN
    BEGIN

        HISTORICO = ' ITEM: MOD:'||OLD.MODELO_ID||', COR: '||COR_DESC||', ESTOQUE: '||OLD.ESTOQUE||' ALTERADO: '||HISTORICO;


        EXECUTE PROCEDURE SPI_HISTORICO('TBESTOQUE_CLIENTE', NEW.ESTOQUE_CLIENTE_ID, HISTORICO);
    END

END;


CREATE OR ALTER trigger ttbestoque_cliente_item_b02i for tbestoque_cliente_item
active before insert position 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
DECLARE VARIABLE MODELO_DESC VARCHAR(100);
DECLARE VARIABLE COR_DESC VARCHAR(100);

BEGIN

    HISTORICO = '';
    
    MODELO_DESC = COALESCE((SELECT FIRST 1 M.DESCRICAO FROM TBMODELO M WHERE M.CODIGO = NEW.MODELO_ID), '');
    COR_DESC    = COALESCE((SELECT FIRST 1 C.DESCRICAO FROM TBCOR C WHERE C.CODIGO = NEW.COR_ID), '');

    IF ( NEW.ESTOQUE_CLIENTE_ID > 0 AND NEW.ID > 0 ) THEN
    BEGIN
        HISTORICO = HISTORICO||' ITEM INCLUIDO: MODELO:'||NEW.MODELO_ID||' - '||MODELO_DESC||', COR: '||COR_DESC||', EST. '||NEW.ESTOQUE;
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBESTOQUE_CLIENTE',NEW.ESTOQUE_CLIENTE_ID, HISTORICO);
    END
END;


CREATE OR ALTER trigger ttbestoque_cliente_item_b01d for tbestoque_cliente_item
active before delete position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
DECLARE VARIABLE MODELO_DESC VARCHAR(100);
DECLARE VARIABLE COR_DESC VARCHAR(100);

BEGIN

    HISTORICO = '';
    
    MODELO_DESC = COALESCE((SELECT FIRST 1 M.DESCRICAO FROM TBMODELO M WHERE M.CODIGO = OLD.MODELO_ID), '');
    COR_DESC    = COALESCE((SELECT FIRST 1 C.DESCRICAO FROM TBCOR C WHERE C.CODIGO = OLD.COR_ID), '');

    IF ( OLD.ESTOQUE_CLIENTE_ID > 0 AND OLD.ID > 0 ) THEN
    BEGIN
        HISTORICO = HISTORICO||' ITEM EXCLUIDO: MODELO:'||OLD.MODELO_ID||' - '||MODELO_DESC||', COR: '||COR_DESC||', EST. '||OLD.ESTOQUE;
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBESTOQUE_CLIENTE',OLD.ESTOQUE_CLIENTE_ID, HISTORICO);
    END
END;



CREATE TABLE TBESTOQUE_CLIENTE_ITEM_PREVISAO (
    ID INTEGER NOT NULL,
    ESTOQUE_CLIENTE_ITEM_ID INTEGER,
    PERIODO DATE,
    QUANTIDADE INTEGER);

ALTER TABLE TBESTOQUE_CLIENTE_ITEM_PREVISAO
ADD CONSTRAINT PK_TBESTOQUE_CLIENTE_ITEM_PREVI
PRIMARY KEY (ID);

CREATE SEQUENCE GTBESTOQUE_CLIENTE_ITEM_PREV;

create trigger ttbestoque_cli_item_prevb01I for tbestoque_cliente_item_previsao
active before insert position 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gtbestoque_cliente_item_prev,1);
end;


CREATE INDEX ITBESTOQUE_CLIENTE_ITEM_PRE_01
ON TBESTOQUE_CLIENTE_ITEM_PREVISAO (ESTOQUE_CLIENTE_ITEM_ID);

CREATE INDEX ITBESTOQUE_CLIENTE_ITEM_PRE_02
ON TBESTOQUE_CLIENTE_ITEM_PREVISAO (PERIODO);
