-- TBTRIBUTACAO_ICMS (ADICIONAR COLUNA PARA VALIDAR SE EXIGE OU NÃO ICMS_ST)
-- OK

ALTER TABLE TBTRIBUTACAO_ICMS
ADD EXIGE_ICMS_ST SMALLINT;

-- TABELA CUSTO UNITÁRIO
-- OK
CREATE TABLE TBNFE_ITEM_CUS_UNIT (
    ID INTEGER NOT NULL,
    ESTABELECIMENTO_ID INTEGER NOT NULL,
    NFE_DESTINO_ID INTEGER,
    NFE_DESTINO_ITEM_ID INTEGER,
    NFE_ORIGEM_ID INTEGER,
    NFE_ORIGEM_ITEM_ID INTEGER,
    SEQUENCIA INTEGER,
    DOCUMENTO_FISCAL INTEGER,
    PRODUTO_CODIGO INTEGER,
    PRODUTO_DESCRICAO VARCHAR(100),
    UM VARCHAR(3),
    QUANTIDADE_TOTAL NUMERIC(15,2),
    QUANTIDADE_RESTO NUMERIC(15,2),
    QUANTIDADE_USADA NUMERIC(15,2),
    VALOR_CUSTO_UNITARIO NUMERIC(15,2));

ALTER TABLE TBNFE_ITEM_CUS_UNIT
ADD CONSTRAINT PK_TBNFE_ITEM_CUS_UNIT
PRIMARY KEY (ID,ESTABELECIMENTO_ID);

CREATE INDEX TBNFE_ITEM_CUS_UNIT_I01
ON TBNFE_ITEM_CUS_UNIT (NFE_DESTINO_ID,NFE_DESTINO_ITEM_ID);

CREATE SEQUENCE GTBNFE_ITEM_CUS_UNIT;

CREATE trigger tbnfe_item_cus_unit_b01i for tbnfe_item_cus_unit
active before insert position 0
AS
begin
  IF(NEW.id IS NULL) THEN
    NEW.ID = gen_id(GTBNFE_ITEM_CUS_UNIT, 1);
end;
	

-- ADICIONANDO A COLUNA OUTROS CUSTOS PARA CALCULAR O CUSTO UNITÁRIO DO PRODUTO NO ITEM
-- OK

ALTER TABLE TBNFE_ITEM
ADD OUTROS_CUSTOS NUMERIC(15,2)
DEFAULT 0;


ALTER TABLE TBNFE_ITEM
ADD PARAMETROS_OPERACAO VARCHAR(100);

-- TABELA PARA CÓPIA DOS PARÂMETROS DA OPERAÇÃO DA NF

CREATE TABLE TBNF_PARAMETROS_OPERACAO (
    ID INTEGER NOT NULL,
    NFE_ID INTEGER NOT NULL,
    NFS_ID INTEGER NOT NULL,
    ORIGEM VARCHAR(3) NOT NULL,
    OPERACAO_CODIGO VARCHAR(3),
    ACERTO SMALLINT,
    ATUALIZA_CUSTO SMALLINT,
    BLOQUEIA_ITEM_OC SMALLINT,
    CONTROLE_DEVOLUCAO SMALLINT,
    CONTROLE_ESTOQUE_EXTERNO SMALLINT,
    CONTROLE_FATURAMENTO SMALLINT,
    CONTROLE_REVISAO SMALLINT,
    GERACONSUMO SMALLINT,
    GERA_COMISSAO SMALLINT,
    GERA_DUPLICATA SMALLINT,
    EXIGE_CUSTO SMALLINT,
    EXIGE_CUSTO_EXTERNO SMALLINT,
    EXIGE_DUPLICATA SMALLINT,
    EXIGE_LOCALIZACAO SMALLINT,
    EXIGE_OC SMALLINT,
    EXIGE_PEDIDO SMALLINT,
    EXIGE_NCM SMALLINT,
    EXIGE_NF_REFERENCIA SMALLINT,
    OPERACAOCONSUMO SMALLINT,
    TIPO_OPERACAO VARCHAR(1),
    DESCRICAO INTEGER,
    NAT_BC_CRED INTEGER,
    NAT_RECEITA VARCHAR(3),
    CONTROLE_CONSIGNACAO SMALLINT,
    DESPERDICIO SMALLINT,
    OBSERVACAO BLOB SUB_TYPE 0 SEGMENT SIZE 80,
    TIPO_SERVICO INTEGER,
    TRANSFERENCIA SMALLINT,
    SERVICO SMALLINT);
	
ALTER TABLE TBNF_PARAMETROS_OPERACAO
ADD CONSTRAINT PK_TBNF_PARAMETROS_OPERACAO
PRIMARY KEY (ID,NFE_ID,NFS_ID);

CREATE SEQUENCE GTBNF_PARAMETROS_OPERACAO;

CREATE OR ALTER trigger tbnf_parametros_operacao_b01i for tbnf_parametros_operacao
active before insert position 0
AS
begin
  IF(NEW.ID IS NULL) THEN
    NEW.ID = GEN_ID(gtbnf_parametros_operacao,1);
end;

-- TRIGGER DE HISTÓRICO TBNFE_ITEM

CREATE trigger tbnfe_item_b06i for tbnfe_item
active before insert position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
begin
    HISTORICO = '';

    IF ( NEW.CONTROLE > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||'Produto '||NEW.produto_descricao||' Incluído';
    END

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

end;

-- UPDATE OR INSERT NOTAS REFERENCIADAS

CREATE OR ALTER PROCEDURE SPUI_NFE_REF (
    NFE_CONTROLE INTEGER,
    CONTROLE INTEGER,
    NUMERO_NOTAFISCAL INTEGER,
    SERIE VARCHAR(3),
    DATA_EMISSAO DATE,
    CFOP_CODIGO VARCHAR(5),
    CHAVE_ACESSO VARCHAR(44))
AS
BEGIN
UPDATE OR INSERT INTO TBNFE_REFERENCIADA (NFE_CONTROLE,CONTROLE,NUMERO_NOTAFISCAL,
SERIE, DATA_EMISSAO, CFOP_CODIGO, CHAVE_ACESSO) VALUES (
:NFE_CONTROLE, :CONTROLE,:NUMERO_NOTAFISCAL,:SERIE, :DATA_EMISSAO,
:CFOP_CODIGO, :CHAVE_ACESSO)
MATCHING(NFE_CONTROLE, CONTROLE);
END;

-- CASO PRECISE
-- ATUALIZAÇÃO DE NONTA REFERENCIADA

CREATE OR ALTER PROCEDURE SPU_NFE_REF (
    NFE_CONTROLE INTEGER,
    CONTROLE INTEGER,
    NUMERO_NOTAFISCAL INTEGER,
    SERIE VARCHAR(3),
    DATA_EMISSAO DATE,
    CFOP_CODIGO VARCHAR(5),
    CHAVE_ACESSO VARCHAR(44))
AS
BEGIN
UPDATE TBNFE_REFERENCIADA SET 
    NFE_CONTROLE = :NFE_CONTROLE, 
    NUMERO_NOTAFISCAL = :NUMERO_NOTAFISCAL,
    SERIE = :SERIE, 
    DATA_EMISSAO = :DATA_EMISSAO,
    CFOP_CODIGO = :CFOP_CODIGO, 
    CHAVE_ACESSO = :CHAVE_ACESSO
    
    WHERE CONTROLE = :CONTROLE;
END;