-- TRIGGERS PARA TBNFE

-- PARÂMETRO GC_WEB

ALTER TABLE TBNFE
ADD GC_WEB INTEGER
DEFAULT 0;

ALTER TABLE TBNFE_TOTAIS
ADD GC_WEB INTEGER
DEFAULT 0;

ALTER TABLE TBNFE_TRANSPORTADORA
ADD GC_WEB INTEGER
DEFAULT 0;

-- DATA DE ATUALIZAÇÃO
ALTER TABLE TBNFE
ADD DATA_ATUALIZACAO TIMESTAMP
DEFAULT 'NOW'; 

-- UPDATE
CREATE OR ALTER TRIGGER TTBNFE_B1U_01 FOR TBNFE
ACTIVE BEFORE UPDATE POSITION 1
AS
DECLARE VARIABLE CONTROLE INTEGER;
DECLARE VARIABLE NFS_ITEM_CONTROLE INTEGER;
DECLARE VARIABLE NF_EXTERNO_ITEM_CONTROLE INTEGER;
/*DECLARE VARIABLE NF_CONSIGNACAO_ITEM INTEGER;*/
DECLARE VARIABLE QUANTIDADE NUMERIC(10,5);
DECLARE VARIABLE T01 NUMERIC(10,5); DECLARE VARIABLE T02 NUMERIC(10,5);
DECLARE VARIABLE T03 NUMERIC(10,5); DECLARE VARIABLE T04 NUMERIC(10,5);
DECLARE VARIABLE T05 NUMERIC(10,5); DECLARE VARIABLE T06 NUMERIC(10,5);
DECLARE VARIABLE T07 NUMERIC(10,5); DECLARE VARIABLE T08 NUMERIC(10,5);
DECLARE VARIABLE T09 NUMERIC(10,5); DECLARE VARIABLE T10 NUMERIC(10,5);
DECLARE VARIABLE T11 NUMERIC(10,5); DECLARE VARIABLE T12 NUMERIC(10,5);
DECLARE VARIABLE T13 NUMERIC(10,5); DECLARE VARIABLE T14 NUMERIC(15,5);
DECLARE VARIABLE T15 NUMERIC(10,5); DECLARE VARIABLE T16 NUMERIC(10,5);
DECLARE VARIABLE T17 NUMERIC(10,5); DECLARE VARIABLE T18 NUMERIC(10,5);
DECLARE VARIABLE T19 NUMERIC(10,5); DECLARE VARIABLE T20 NUMERIC(10,5);
BEGIN

IF (COALESCE(NEW.GC_WEB,'0') = '0') THEN
    BEGIN

            IF((OLD.SITUACAO = 2 AND NEW.SITUACAO = 3) OR
               (OLD.SITUACAO = 2 AND NEW.SITUACAO = 1) OR
               (OLD.SITUACAO = 1 AND NEW.SITUACAO = 2)) THEN
               BEGIN
            
                    FOR
                    SELECT CONTROLE,NFS_ITEM_CONTROLE,NF_EXTERNO_ITEM_CONTROLE,
                    /*NF_CONSIGNACAO_ITEM,*/QUANTIDADE,T01,T02,T03, T04, T05, T06,
                    T07,T08,T09,T10,T11,T12,T13,T14,T15,T16,T17, T18, T19, T20
                    FROM TBNFE_ITEM A
                    WHERE A.NFE_CONTROLE = OLD.CONTROLE
                      AND((OLD.SITUACAO = 2 AND NEW.SITUACAO = 1) OR
                          (OLD.SITUACAO = 2 AND NEW.SITUACAO = 3) OR
                          (OLD.SITUACAO = 1 AND NEW.SITUACAO = 2))
                      AND(NFS_ITEM_CONTROLE > 0 OR
                          NF_EXTERNO_ITEM_CONTROLE > 0)
                        /*NF_CONSIGNACAO_ITEM > 0)*/
                    INTO :CONTROLE,:NFS_ITEM_CONTROLE,:NF_EXTERNO_ITEM_CONTROLE,
                       /*:NF_CONSIGNACAO_ITEM,*/:QUANTIDADE,:T01,:T02,:T03,:T04,:T05,:T06,:T07,
                         :T08,:T09,:T10,:T11,:T12,:T13,:T14,:T15,:T16,:T17,:T18,:T19,:T20
                    DO
                    BEGIN
                    /* ATIVO PARA CONCLUÍDO */
                    IF (OLD.SITUACAO = 1 AND NEW.SITUACAO = 2) THEN
                       BEGIN
                       IF (:NFS_ITEM_CONTROLE > 0) THEN
                           BEGIN
                              UPDATE TBNFS_ITEM_SALDO SET
                              QUANTIDADE = QUANTIDADE - :QUANTIDADE,
                              T01 = T01 - :T01, T02 = T02 - :T02, T03 = T03 - :T03, T04 = T04 - :T04,
                              T05 = T05 - :T05, T06 = T06 - :T06, T07 = T07 - :T07, T08 = T08 - :T08,
                              T09 = T09 - :T09, T10 = T10 - :T10, T11 = T11 - :T11, T12 = T12 - :T12,
                              T13 = T13 - :T13, T14 = T14 - :T14, T15 = T15 - :T15, T16 = T16 - :T16,
                              T17 = T17 - :T17, T18 = T18 - :T18, T19 = T19 - :T19, T20 = T20 - :T20
                              WHERE NFS_ITEM_CONTROLE = :NFS_ITEM_CONTROLE;
                            END
                    
                       IF (:NF_EXTERNO_ITEM_CONTROLE > 0) THEN
                           BEGIN
                              UPDATE TBNFS_ITEM_SALDO SET
                              QUANTIDADE = QUANTIDADE - :QUANTIDADE,
                              T01 = T01 - :T01, T02 = T02 - :T02, T03 = T03 - :T03, T04 = T04 - :T04,
                              T05 = T05 - :T05, T06 = T06 - :T06, T07 = T07 - :T07, T08 = T08 - :T08,
                              T09 = T09 - :T09, T10 = T10 - :T10, T11 = T11 - :T11, T12 = T12 - :T12,
                              T13 = T13 - :T13, T14 = T14 - :T14, T15 = T15 - :T15, T16 = T16 - :T16,
                              T17 = T17 - :T17, T18 = T18 - :T18, T19 = T19 - :T19, T20 = T20 - :T20
                              WHERE NFS_ITEM_CONTROLE = :NF_EXTERNO_ITEM_CONTROLE;
                           END
                      /*
                       IF (:NF_CONSIGNACAO_ITEM > 0) THEN
                           BEGIN
                              UPDATE TBNFE_ITEM_SALDO SET
                              QUANTIDADE = QUANTIDADE - :QUANTIDADE,
                              T01 = T01 - :T01, T02 = T02 - :T02, T03 = T03 - :T03, T04 = T04 - :T04,
                              T05 = T05 - :T05, T06 = T06 - :T06, T07 = T07 - :T07, T08 = T08 - :T08,
                              T09 = T09 - :T09, T10 = T10 - :T10, T11 = T11 - :T11, T12 = T12 - :T12,
                              T13 = T13 - :T13, T14 = T14 - :T14, T15 = T15 - :T15, T16 = T16 - :T16,
                              T17 = T17 - :T17, T18 = T18 - :T18, T19 = T19 - :T19, T20 = T20 - :T20
                              WHERE NFE_ITEM_CONTROLE = :NF_CONSIGNACAO_ITEM;
                           END
                       */
                       END ELSE
                    
                    /* CONCLUIDO PARA ATIVO */
                    IF (OLD.SITUACAO = 2 AND NEW.SITUACAO = 1) THEN
                       BEGIN
                    
                       IF (:NFS_ITEM_CONTROLE > 0) THEN
                           BEGIN
                              UPDATE TBNFS_ITEM_SALDO SET
                              QUANTIDADE = QUANTIDADE + :QUANTIDADE,
                              T01 = T01 + :T01, T02 = T02 + :T02, T03 = T03 + :T03, T04 = T04 + :T04,
                              T05 = T05 + :T05, T06 = T06 + :T06, T07 = T07 + :T07, T08 = T08 + :T08,
                              T09 = T09 + :T09, T10 = T10 + :T10, T11 = T11 + :T11, T12 = T12 + :T12,
                              T13 = T13 + :T13, T14 = T14 + :T14, T15 = T15 + :T15, T16 = T16 + :T16,
                              T17 = T17 + :T17, T18 = T18 + :T18, T19 = T19 + :T19, T20 = T20 + :T20
                              WHERE NFS_ITEM_CONTROLE = :NFS_ITEM_CONTROLE;
                            END
                    
                       IF (:NF_EXTERNO_ITEM_CONTROLE > 0) THEN
                           BEGIN
                              UPDATE TBNFS_ITEM_SALDO SET
                              QUANTIDADE = QUANTIDADE + :QUANTIDADE,
                              T01 = T01 + :T01, T02 = T02 + :T02, T03 = T03 + :T03, T04 = T04 + :T04,
                              T05 = T05 + :T05, T06 = T06 + :T06, T07 = T07 + :T07, T08 = T08 + :T08,
                              T09 = T09 + :T09, T10 = T10 + :T10, T11 = T11 + :T11, T12 = T12 + :T12,
                              T13 = T13 + :T13, T14 = T14 + :T14, T15 = T15 + :T15, T16 = T16 + :T16,
                              T17 = T17 + :T17, T18 = T18 + :T18, T19 = T19 + :T19, T20 = T20 + :T20
                              WHERE NFS_ITEM_CONTROLE = :NF_EXTERNO_ITEM_CONTROLE;
                           END
                       /*
                       IF (:NF_CONSIGNACAO_ITEM > 0) THEN
                           BEGIN
                              UPDATE TBNFE_ITEM_SALDO SET
                              QUANTIDADE = QUANTIDADE + :QUANTIDADE,
                              T01 = T01 + :T01, T02 = T02 + :T02, T03 = T03 + :T03, T04 = T04 + :T04,
                              T05 = T05 + :T05, T06 = T06 + :T06, T07 = T07 + :T07, T08 = T08 + :T08,
                              T09 = T09 + :T09, T10 = T10 + :T10, T11 = T11 + :T11, T12 = T12 + :T12,
                              T13 = T13 + :T13, T14 = T14 + :T14, T15 = T15 + :T15, T16 = T16 + :T16,
                              T17 = T17 + :T17, T18 = T18 + :T18, T19 = T19 + :T19, T20 = T20 + :T20
                              WHERE NFE_ITEM_CONTROLE = :NF_CONSIGNACAO_ITEM;
                           END
                       */
                       END ELSE
                    
                    /* CONCLUIDO PARA CANCELADO */
                    IF (OLD.SITUACAO = 2 AND NEW.SITUACAO = 3) THEN
                       BEGIN
                    
                       IF (:NFS_ITEM_CONTROLE > 0) THEN
                           BEGIN
                              UPDATE TBNFS_ITEM_SALDO SET
                              QUANTIDADE = QUANTIDADE + :QUANTIDADE,
                              T01 = T01 + :T01, T02 = T02 + :T02, T03 = T03 + :T03, T04 = T04 + :T04,
                              T05 = T05 + :T05, T06 = T06 + :T06, T07 = T07 + :T07, T08 = T08 + :T08,
                              T09 = T09 + :T09, T10 = T10 + :T10, T11 = T11 + :T11, T12 = T12 + :T12,
                              T13 = T13 + :T13, T14 = T14 + :T14, T15 = T15 + :T15, T16 = T16 + :T16,
                              T17 = T17 + :T17, T18 = T18 + :T18, T19 = T19 + :T19, T20 = T20 + :T20
                              WHERE NFS_ITEM_CONTROLE = :NFS_ITEM_CONTROLE;
                            END
                    
                       IF (:NF_EXTERNO_ITEM_CONTROLE > 0) THEN
                           BEGIN
                              UPDATE TBNFS_ITEM_SALDO SET
                              QUANTIDADE = QUANTIDADE + :QUANTIDADE,
                              T01 = T01 + :T01, T02 = T02 + :T02, T03 = T03 + :T03, T04 = T04 + :T04,
                              T05 = T05 + :T05, T06 = T06 + :T06, T07 = T07 + :T07, T08 = T08 + :T08,
                              T09 = T09 + :T09, T10 = T10 + :T10, T11 = T11 + :T11, T12 = T12 + :T12,
                              T13 = T13 + :T13, T14 = T14 + :T14, T15 = T15 + :T15, T16 = T16 + :T16,
                              T17 = T17 + :T17, T18 = T18 + :T18, T19 = T19 + :T19, T20 = T20 + :T20
                              WHERE NFS_ITEM_CONTROLE = :NF_EXTERNO_ITEM_CONTROLE;
                           END
                      /*
                       IF (:NF_CONSIGNACAO_ITEM > 0) THEN
                           BEGIN
                              UPDATE TBNFE_ITEM_SALDO SET
                              QUANTIDADE = QUANTIDADE + :QUANTIDADE,
                              T01 = T01 + :T01, T02 = T02 + :T02, T03 = T03 + :T03, T04 = T04 + :T04,
                              T05 = T05 + :T05, T06 = T06 + :T06, T07 = T07 + :T07, T08 = T08 + :T08,
                              T09 = T09 + :T09, T10 = T10 + :T10, T11 = T11 + :T11, T12 = T12 + :T12,
                              T13 = T13 + :T13, T14 = T14 + :T14, T15 = T15 + :T15, T16 = T16 + :T16,
                              T17 = T17 + :T17, T18 = T18 + :T18, T19 = T19 + :T19, T20 = T20 + :T20
                              WHERE NFE_ITEM_CONTROLE = :NF_CONSIGNACAO_ITEM;
                           END
                        */
                       END
                    
                    END
               END

    END
END;

COMMENT ON TRIGGER TTBNFE_B1U_01 IS 'Baixar/Desfazer saldo da Nota Referenciada no Gc Desktop';

-- DELETE

CREATE OR ALTER TRIGGER TTBNFE_B11D FOR TBNFE
ACTIVE BEFORE DELETE POSITION 5
AS
BEGIN
  EXECUTE PROCEDURE SPD_NF(OLD.CONTROLE, 'NFE', OLD.ESTABELECIMENTO_CODIGO);
END;

COMMENT ON TRIGGER TTBNFE_B11D IS 'Executa procedure de Delete para Itens, Parcelas, Totais, Nota Referenciada, Vínculo Contábil, Lote';



-- PROCEDURE DE INSERÇÃO
CREATE OR ALTER procedure SPI_NFE (
    ESTABELECIMENTO_CODIGO integer,
    NUMERO_NOTAFISCAL integer,
    SERIE varchar(3),
    EMPRESA_CODIGO integer,
    NATUREZA integer,
    DATA_ENTRADA date,
    DATA_EMISSAO date,
    HORA_EMISSAO varchar(5),
    HORA_ENTRADA varchar(5),
    CONTROLE integer,
    SITUACAO integer,
    CFOP_CODIGO varchar(5),
    CFOP_DESCRICAO varchar(60),
    USUARIO_CODIGO integer,
    USUARIO_DATA date,
    EMPRESA_RAZAOSOCIAL varchar(50),
    EMPRESA_CNPJ varchar(14),
    EMPRESA_IE varchar(20),
    EMPRESA_ENDERECO varchar(200),
    EMPRESA_NUMERO varchar(20),
    EMPRESA_BAIRRO varchar(20),
    EMPRESA_CIDADE varchar(40),
    EMPRESA_CEP varchar(8),
    EMPRESA_UF varchar(2),
    SUFRAMA varchar(9),
    CHAVE_ACESSO varchar(44),
    TIPO char(1),
    CLASSIFICACAO varchar(10),
    XML char(2),
    DANFE char(1),
    PAGAMENTO char(1),
    PROTOCOLO_CANCELAMENTO varchar(20),
    MOTIVO_CANCELAMENTO varchar(50),
    SPED char(1),
    MODELO char(2),
    ESPECIE1 varchar(5),
    DATA_FISCAL date,
    FISCAL_CFOP_CODIGO varchar(5),
    BASECALCULO_ICMS numeric(10,5),
    BASECALCULO_ICMS_SUBST numeric(10,5),
    VALOR_ICMS numeric(10,5),
    VALOR_ICMS_SUBST numeric(10,5),
    VALOR_IPI numeric(10,5),
    VALOR_ISSQN numeric(10,5),
    VALOR_FRETE numeric(10,5),
    VALOR_SEGURO numeric(10,5),
    VALOR_PIS numeric(10,5),
    VALOR_COFINS numeric(10,5),
    VALOR_CSLL numeric(10,5),
    RETENCAO_BASE_CALCULO_IRRF numeric(10,2),
    RETENCAO_BASE_CALCULO_INSS numeric(10,2),
    DI_BASE_CALCULO numeric(10,2),
    DI_DESPESAS_ADUANEIRAS numeric(10,2),
    DI_VALOR_II numeric(10,2),
    DI_VALOR_IOF numeric(10,2),
    VALOR_DESCONTO numeric(10,5),
    VALOR_ACRESCIMO numeric(10,5),
    VALOR_OUTROSCUSTOS numeric(10,5),
    VALOR_TOTAL_PRODUTO numeric(10,5),
    VALOR_TOTAL_NF numeric(10,5),
    RETENCAO_VALOR_PIS numeric(10,5),
    RETENCAO_VALOR_COFINS numeric(10,5),
    RETENCAO_VALOR_INSS numeric(10,5),
    RETENCAO_VALOR_ISSQN numeric(10,5),
    RETENCAO_VALOR_IRRF numeric(10,5),
    RETENCAO_VALOR_CSLL numeric(10,5),
    VALOR_PARCELAS numeric(10,5),
    VALOR_CONTABIL numeric(10,2),
    VALOR_PEDAGIO numeric(10,2),
    TRANSPORTADORA_CODIGO integer,
    FRETE integer,
    MODALIDADE integer,
    IND_NAT_FRETE varchar(1),
    PLACA varchar(8),
    PLACA_UF varchar(2),
    VOLUMES integer,
    ESPECIE varchar(10),
    MARCA varchar(10),
    PESO_BRUTO numeric(10,5),
    PESO_LIQUIDO numeric(10,5),
    NUMERO varchar(10),
    OBSERVACAO01 varchar(130),
    OBSERVACAO02 varchar(130),
    OBSERVACAO03 varchar(130),
    OBSERVACAO04 varchar(130),
    OBSERVACAO05 varchar(130),
    OBSERVACAO06 varchar(130),
    OBSERVACAO07 varchar(130),
    OBSERVACAO08 varchar(130),
    OBSERVACAO09 varchar(130),
    OBSERVACAO10 varchar(130),
    OBSERVACAO11 varchar(130),
    OBSERVACAO12 varchar(130),
    OBSERVACAO13 varchar(130),
    OBSERVACAO14 varchar(130),
    OBSERVACAO15 varchar(130),
    TIPO_DOC char(1),
    SPED_PISCOF char(1),
    IND_FINAL char(1),
    CMUNINI varchar(10),
    CMUNFIM varchar(10),
    GC_WEB integer)
as
BEGIN
INSERT INTO TBNFE (
ESTABELECIMENTO_CODIGO,NUMERO_NOTAFISCAL,SERIE,EMPRESA_CODIGO,NATUREZA,
DATA_ENTRADA,DATA_EMISSAO,HORA_EMISSAO,HORA_ENTRADA,
CONTROLE,SITUACAO,CFOP_CODIGO,CFOP_DESCRICAO,USUARIO_CODIGO,
USUARIO_DATA,EMPRESA_RAZAOSOCIAL,EMPRESA_CNPJ,EMPRESA_IE,EMPRESA_ENDERECO,
EMPRESA_NUMERO,EMPRESA_BAIRRO,EMPRESA_CIDADE,EMPRESA_CEP,EMPRESA_UF,SUFRAMA,CHAVE_ACESSO,
TIPO,XML,DANFE,PAGAMENTO,PROTOCOLO_CANCELAMENTO,MOTIVO_CANCELAMENTO,
SPED,MODELO,ESPECIE,DATA_FISCAL,FISCAL_CFOP_CODIGO,
TIPO_DOC,CLASSIFICACAO,SPED_PISCOF,IND_FINAL, GC_WEB) VALUES (
:ESTABELECIMENTO_CODIGO,:NUMERO_NOTAFISCAL,:SERIE,:EMPRESA_CODIGO,:NATUREZA,
:DATA_ENTRADA,:DATA_EMISSAO,:HORA_EMISSAO,:HORA_ENTRADA,:CONTROLE,:SITUACAO,
:CFOP_CODIGO,:CFOP_DESCRICAO,
:USUARIO_CODIGO,:USUARIO_DATA,:EMPRESA_RAZAOSOCIAL,
:EMPRESA_CNPJ,:EMPRESA_IE,:EMPRESA_ENDERECO,:EMPRESA_NUMERO,:EMPRESA_BAIRRO,
:EMPRESA_CIDADE,:EMPRESA_CEP,:EMPRESA_UF,:SUFRAMA,:CHAVE_ACESSO,:TIPO,:XML,:DANFE,:PAGAMENTO,
:PROTOCOLO_CANCELAMENTO,:MOTIVO_CANCELAMENTO,
:SPED,:MODELO,:ESPECIE1,:DATA_FISCAL,
:FISCAL_CFOP_CODIGO,:TIPO_DOC,:CLASSIFICACAO,:SPED_PISCOF,:IND_FINAL, :GC_WEB);

INSERT INTO TBNFE_TOTAIS (
NFE_CONTROLE,BASECALCULO_ICMS,BASECALCULO_ICMS_SUBST,VALOR_ICMS,VALOR_ICMS_SUBST,
VALOR_IPI,VALOR_ISSQN,VALOR_FRETE,VALOR_SEGURO,VALOR_PIS,VALOR_COFINS,VALOR_DESCONTO,
VALOR_PARCELAS,VALOR_ACRESCIMO,VALOR_OUTROSCUSTOS,VALOR_TOTAL_PRODUTO,VALOR_TOTAL_NF,
RETENCAO_VALOR_PIS,RETENCAO_VALOR_COFINS,RETENCAO_VALOR_INSS,RETENCAO_VALOR_ISSQN,
RETENCAO_VALOR_IRRF,VALOR_CSLL,RETENCAO_VALOR_CSLL,RETENCAO_BASE_CALCULO_IRRF,
RETENCAO_BASE_CALCULO_INSS,DI_BASE_CALCULO,DI_DESPESAS_ADUANEIRAS,DI_VALOR_II,
DI_VALOR_IOF,VALOR_CONTABIL,VALOR_PEDAGIO, GC_WEB)
VALUES(
:CONTROLE,:BASECALCULO_ICMS,:BASECALCULO_ICMS_SUBST,:VALOR_ICMS,:VALOR_ICMS_SUBST,
:VALOR_IPI,:VALOR_ISSQN,:VALOR_FRETE,:VALOR_SEGURO,:VALOR_PIS,:VALOR_COFINS,:VALOR_DESCONTO,
:VALOR_PARCELAS,:VALOR_ACRESCIMO,:VALOR_OUTROSCUSTOS,:VALOR_TOTAL_PRODUTO,:VALOR_TOTAL_NF,
:RETENCAO_VALOR_PIS,:RETENCAO_VALOR_COFINS,:RETENCAO_VALOR_INSS,:RETENCAO_VALOR_ISSQN,
:RETENCAO_VALOR_IRRF,:VALOR_CSLL,:RETENCAO_VALOR_CSLL,:RETENCAO_BASE_CALCULO_IRRF,
:RETENCAO_BASE_CALCULO_INSS,:DI_BASE_CALCULO,:DI_DESPESAS_ADUANEIRAS,:DI_VALOR_II,
:DI_VALOR_IOF,:VALOR_CONTABIL,:VALOR_PEDAGIO, :GC_WEB);

INSERT INTO TBNFE_TRANSPORTADORA(
NFE_CONTROLE,TRANSPORTADORA_CODIGO,FRETE,MODALIDADE,IND_NAT_FRETE,VOLUMES,ESPECIE,
PESO_BRUTO,PESO_LIQUIDO,MARCA,NUMERO,PLACA,PLACA_UF,CMUNINI,CMUNFIM, GC_WEB
) VALUES(
:CONTROLE,:TRANSPORTADORA_CODIGO,:FRETE,:MODALIDADE,:IND_NAT_FRETE,:VOLUMES,:ESPECIE,
:PESO_BRUTO,:PESO_LIQUIDO,:MARCA,:NUMERO,:PLACA,:PLACA_UF,:CMUNINI,:CMUNFIM,:GC_WEB
);

INSERT INTO TBNFE_OBSERVACAO(
NFE_CONTROLE,OBSERVACAO01,OBSERVACAO02,OBSERVACAO03,OBSERVACAO04,OBSERVACAO05,
OBSERVACAO06,OBSERVACAO07,OBSERVACAO08,OBSERVACAO09,OBSERVACAO10,OBSERVACAO11,
OBSERVACAO12,OBSERVACAO13,OBSERVACAO14,OBSERVACAO15) VALUES  ( 
:CONTROLE,:OBSERVACAO01,:OBSERVACAO02,:OBSERVACAO03,:OBSERVACAO04,:OBSERVACAO05,
:OBSERVACAO06,:OBSERVACAO07,:OBSERVACAO08,:OBSERVACAO09,:OBSERVACAO10,:OBSERVACAO11,
:OBSERVACAO12,:OBSERVACAO13,:OBSERVACAO14,:OBSERVACAO15);

END;


-- PROCEDURE DE ATUALIZAÇÃO
CREATE OR ALTER procedure SPU_NFE (
    ESTABELECIMENTO_CODIGO integer,
    NUMERO_NOTAFISCAL integer,
    SERIE varchar(3),
    EMPRESA_CODIGO integer,
    NATUREZA integer,
    DATA_ENTRADA date,
    DATA_EMISSAO date,
    HORA_EMISSAO varchar(5),
    HORA_ENTRADA varchar(5),
    CONTROLE integer,
    SITUACAO integer,
    CFOP_CODIGO varchar(5),
    CFOP_DESCRICAO varchar(60),
    CFOP_OPCIONAL varchar(60),
    USUARIO_CODIGO integer,
    USUARIO_DATA date,
    EMPRESA_RAZAOSOCIAL varchar(50),
    EMPRESA_CNPJ varchar(14),
    EMPRESA_IE varchar(20),
    EMPRESA_ENDERECO varchar(200),
    EMPRESA_NUMERO varchar(20),
    EMPRESA_BAIRRO varchar(20),
    EMPRESA_CIDADE varchar(40),
    EMPRESA_CEP varchar(8),
    EMPRESA_UF varchar(2),
    SUFRAMA varchar(9),
    CHAVE_ACESSO varchar(44),
    TIPO char(1),
    CLASSIFICACAO varchar(10),
    XML char(2),
    DANFE char(1),
    PAGAMENTO char(1),
    PROTOCOLO_CANCELAMENTO varchar(20),
    MOTIVO_CANCELAMENTO varchar(50),
    SPED char(1),
    MODELO char(2),
    ESPECIE varchar(5),
    DATA_FISCAL date,
    FISCAL_CFOP_CODIGO varchar(5),
    BASECALCULO_ICMS numeric(10,5),
    BASECALCULO_ICMS_SUBST numeric(10,5),
    VALOR_ICMS numeric(10,5),
    VALOR_ICMS_SUBST numeric(10,5),
    VALOR_IPI numeric(10,5),
    VALOR_ISSQN numeric(10,5),
    VALOR_FRETE numeric(10,5),
    VALOR_SEGURO numeric(10,5),
    VALOR_PIS numeric(10,5),
    VALOR_COFINS numeric(10,5),
    VALOR_CSLL numeric(10,5),
    RETENCAO_BASE_CALCULO_IRRF numeric(10,2),
    RETENCAO_BASE_CALCULO_INSS numeric(10,2),
    DI_BASE_CALCULO numeric(10,2),
    DI_DESPESAS_ADUANEIRAS numeric(10,2),
    DI_VALOR_II numeric(10,2),
    DI_VALOR_IOF numeric(10,2),
    VALOR_DESCONTO numeric(10,5),
    VALOR_ACRESCIMO numeric(10,5),
    VALOR_OUTROSCUSTOS numeric(10,5),
    VALOR_TOTAL_PRODUTO numeric(10,5),
    VALOR_TOTAL_NF numeric(10,5),
    RETENCAO_VALOR_PIS numeric(10,5),
    RETENCAO_VALOR_COFINS numeric(10,5),
    RETENCAO_VALOR_INSS numeric(10,5),
    RETENCAO_VALOR_ISSQN numeric(10,5),
    RETENCAO_VALOR_IRRF numeric(10,5),
    RETENCAO_VALOR_CSLL numeric(10,5),
    VALOR_PARCELAS numeric(10,5),
    VALOR_CONTABIL numeric(10,2),
    VALOR_PEDAGIO numeric(10,2),
    TRANSPORTADORA_CODIGO integer,
    FRETE integer,
    MODALIDADE integer,
    IND_NAT_FRETE varchar(1),
    PLACA varchar(8),
    PLACA_UF varchar(2),
    VOLUMES integer,
    ESPECIE_TRANSPORTADORA varchar(10),
    MARCA varchar(10),
    PESO_BRUTO numeric(10,5),
    PESO_LIQUIDO numeric(10,5),
    NUMERO varchar(10),
    OBSERVACAO01 varchar(130),
    OBSERVACAO02 varchar(130),
    OBSERVACAO03 varchar(130),
    OBSERVACAO04 varchar(130),
    OBSERVACAO05 varchar(130),
    OBSERVACAO06 varchar(130),
    OBSERVACAO07 varchar(130),
    OBSERVACAO08 varchar(130),
    OBSERVACAO09 varchar(130),
    OBSERVACAO10 varchar(130),
    OBSERVACAO11 varchar(130),
    OBSERVACAO12 varchar(130),
    OBSERVACAO13 varchar(130),
    OBSERVACAO14 varchar(130),
    OBSERVACAO15 varchar(130),
    TIPO_DOC char(1),
    SPED_PISCOF char(1),
    IND_FINAL char(1),
    CMUNINI varchar(10),
    CMUNFIM varchar(10),
    GC_WEB integer)
as
BEGIN
    UPDATE TBNFE SET 
        DATA_ENTRADA                    = :DATA_ENTRADA,
        ESTABELECIMENTO_CODIGO          = :ESTABELECIMENTO_CODIGO,
        NUMERO_NOTAFISCAL               = :NUMERO_NOTAFISCAL,
        SERIE                           = :SERIE,
        NATUREZA                        = :NATUREZA,
        SITUACAO                        = :SITUACAO,
        DATA_EMISSAO                    = :DATA_EMISSAO,
        EMPRESA_RAZAOSOCIAL             = :EMPRESA_RAZAOSOCIAL,
        EMPRESA_CNPJ                    = :EMPRESA_CNPJ,
        EMPRESA_IE                      = :EMPRESA_IE,
        EMPRESA_ENDERECO                = :EMPRESA_ENDERECO,
        EMPRESA_NUMERO                  = :EMPRESA_NUMERO,
        EMPRESA_BAIRRO                  = :EMPRESA_BAIRRO,
        EMPRESA_CIDADE                  = :EMPRESA_CIDADE,
        EMPRESA_UF                      = :EMPRESA_UF,
        EMPRESA_CEP                     = :EMPRESA_CEP,
        CFOP_CODIGO                     = :CFOP_CODIGO,
        CFOP_DESCRICAO                  = :CFOP_DESCRICAO,
        CFOP_OPCIONAL                   = :CFOP_OPCIONAL,
        USUARIO_CODIGO                  = :USUARIO_CODIGO,
        USUARIO_DATA                    = :USUARIO_DATA,
        PROTOCOLO_CANCELAMENTO          = :PROTOCOLO_CANCELAMENTO,
        MOTIVO_CANCELAMENTO             = :MOTIVO_CANCELAMENTO,
        SUFRAMA                         = :SUFRAMA,
        CHAVE_ACESSO                    = :CHAVE_ACESSO,
        TIPO                            = :TIPO,
        XML                             = :XML,
        DANFE                           = :DANFE,
        PAGAMENTO                       = :PAGAMENTO,
        MODELO                          = :MODELO,
        ESPECIE                         = :ESPECIE,
        SPED                            = :SPED,
        DATA_FISCAL                     = :DATA_FISCAL,
        FISCAL_CFOP_CODIGO              = :FISCAL_CFOP_CODIGO,
        SPED_PISCOF                     = :SPED_PISCOF,
        TIPO_DOC                        = :TIPO_DOC,
        HORA_EMISSAO                    = :HORA_EMISSAO,
        HORA_ENTRADA                    = :HORA_ENTRADA,
        IND_FINAL                       = :IND_FINAL,
        CLASSIFICACAO                   = :CLASSIFICACAO,
        GC_WEB                          = :GC_WEB
    WHERE CONTROLE                      = :CONTROLE;


    UPDATE TBNFE_TOTAIS SET 
        BASECALCULO_ICMS                = :BASECALCULO_ICMS,
        BASECALCULO_ICMS_SUBST          = :BASECALCULO_ICMS_SUBST,
        VALOR_ICMS                      = :VALOR_ICMS,
        VALOR_ICMS_SUBST                = :VALOR_ICMS_SUBST,
        VALOR_IPI                       = :VALOR_IPI,
        VALOR_ISSQN                     = :VALOR_ISSQN,
        VALOR_FRETE                     = :VALOR_FRETE,
        VALOR_SEGURO                    = :VALOR_SEGURO,
        VALOR_PIS                       = :VALOR_PIS,
        VALOR_COFINS                    = :VALOR_COFINS,
        VALOR_CSLL                      = :VALOR_CSLL,
        VALOR_DESCONTO                  = :VALOR_DESCONTO,
        VALOR_ACRESCIMO                 = :VALOR_ACRESCIMO,
        VALOR_OUTROSCUSTOS              = :VALOR_OUTROSCUSTOS,
        VALOR_TOTAL_PRODUTO             = :VALOR_TOTAL_PRODUTO,
        VALOR_TOTAL_NF                  = :VALOR_TOTAL_NF,
        RETENCAO_VALOR_PIS              = :RETENCAO_VALOR_PIS,
        RETENCAO_VALOR_COFINS           = :RETENCAO_VALOR_COFINS,
        RETENCAO_VALOR_INSS             = :RETENCAO_VALOR_INSS,
        RETENCAO_VALOR_ISSQN            = :RETENCAO_VALOR_ISSQN,
        RETENCAO_VALOR_IRRF             = :RETENCAO_VALOR_IRRF,
        RETENCAO_VALOR_CSLL             = :RETENCAO_VALOR_CSLL,
        VALOR_PARCELAS                  = :VALOR_PARCELAS,
        RETENCAO_BASE_CALCULO_IRRF      = :RETENCAO_BASE_CALCULO_IRRF,
        RETENCAO_BASE_CALCULO_INSS      = :RETENCAO_BASE_CALCULO_INSS,
        DI_BASE_CALCULO                 = :DI_BASE_CALCULO,
        DI_DESPESAS_ADUANEIRAS          = :DI_DESPESAS_ADUANEIRAS,
        DI_VALOR_II                     = :DI_VALOR_II,
        DI_VALOR_IOF                    = :DI_VALOR_IOF,
        VALOR_CONTABIL                  = :VALOR_CONTABIL,
        VALOR_PEDAGIO                   = :VALOR_PEDAGIO,
        GC_WEB                          = :GC_WEB
    WHERE (NFE_CONTROLE                 = :CONTROLE);

    
    UPDATE TBNFE_TRANSPORTADORA SET 
        TRANSPORTADORA_CODIGO           = :TRANSPORTADORA_CODIGO,
        FRETE                           = :FRETE,
        MODALIDADE                      = :MODALIDADE,
        VOLUMES                         = :VOLUMES,
        ESPECIE                         = :ESPECIE_TRANSPORTADORA,
        PESO_BRUTO                      = :PESO_BRUTO,
        PESO_LIQUIDO                    = :PESO_LIQUIDO,
        MARCA                           = :MARCA,
        NUMERO                          = :NUMERO,
        PLACA                           = :PLACA,
        PLACA_UF                        = :PLACA_UF,
        IND_NAT_FRETE                   = :IND_NAT_FRETE,
        CMUNINI                         = :CMUNINI,
        CMUNFIM                         = :CMUNFIM,
        GC_WEB                          = :GC_WEB
    WHERE (NFE_CONTROLE                 = :CONTROLE);

    
    UPDATE TBNFE_OBSERVACAO SET 
        OBSERVACAO01                    = :OBSERVACAO01,
        OBSERVACAO02                    = :OBSERVACAO02,
        OBSERVACAO03                    = :OBSERVACAO03,
        OBSERVACAO04                    = :OBSERVACAO04,
        OBSERVACAO05                    = :OBSERVACAO05,
        OBSERVACAO06                    = :OBSERVACAO06,
        OBSERVACAO07                    = :OBSERVACAO07,
        OBSERVACAO08                    = :OBSERVACAO08,
        OBSERVACAO09                    = :OBSERVACAO09,
        OBSERVACAO10                    = :OBSERVACAO10,
        OBSERVACAO11                    = :OBSERVACAO11,
        OBSERVACAO12                    = :OBSERVACAO12,
        OBSERVACAO13                    = :OBSERVACAO13,
        OBSERVACAO14                    = :OBSERVACAO14,
        OBSERVACAO15                    = :OBSERVACAO15
    WHERE (NFE_CONTROLE                 = :CONTROLE);
    
END;