-- TRIGGERS PARA TBNFS

-- PARÂMETRO GC_WEB

ALTER TABLE TBNFS
ADD GC_WEB INTEGER
DEFAULT 0;

ALTER TABLE TBNFS_TOTAIS
ADD GC_WEB INTEGER
DEFAULT 0;

ALTER TABLE TBNFS_TRANSPORTADORA
ADD GC_WEB INTEGER
DEFAULT 0;

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

-- ########### UPDATE ###########

-- TTBNFS_B0U
CREATE OR ALTER TRIGGER TTBNFS_B0U FOR TBNFS
ACTIVE BEFORE UPDATE POSITION 0
AS
BEGIN
 IF (OLD.SITUACAO = 1 AND NEW.SITUACAO = 2) THEN
     BEGIN
     --IN AUTONOMOUS TRANSACTION DO
        BEGIN
        EXECUTE PROCEDURE SPU_NFS_DIFAL_V3 (NEW.CONTROLE);
        END
     END
END;

-- TTBNFS_B18U
CREATE OR ALTER TRIGGER TTBNFS_B18U FOR TBNFS
ACTIVE BEFORE UPDATE POSITION 0
AS

DECLARE VARIABLE LIMITE NUMERIC(10,2);
DECLARE VARIABLE SALDO NUMERIC(10,2);
DECLARE VARIABLE BLOQUEIA_NF CHAR(1);
DECLARE VARIABLE QTD_PARCELAS INTEGER;

BEGIN
    IF(NEW.GC_WEB = 1) THEN
    BEGIN
        IF(OLD.SITUACAO = 1 AND NEW.SITUACAO = 2) THEN
        BEGIN
            SELECT COUNT(T.CONTROLE) FROM TBNFS_PARCELAMENTO T WHERE T.NFS_CONTROLE = NEW.CONTROLE INTO :QTD_PARCELAS;

            IF(QTD_PARCELAS > 0) THEN
            BEGIN
                SELECT TRIM(A.BLOQUEIA_NOTAFISCAL) FROM TBCLIENTE A WHERE A.CODIGO = NEW.EMPRESA_CODIGO INTO :BLOQUEIA_NF;

                IF(BLOQUEIA_NF = '1') THEN
                BEGIN
                   EXCEPTION "..." 'CLIENTE BLOQUEADO PARA EMISSAO DE NOVAS NOTAS FISCAIS. OPERACAO CANCELADA!';
                END ELSE
    
                    SELECT * FROM SPC_NFS_PARCELAMENTO_SALDO11(NEW.EMPRESA_CODIGO, NEW.CONTROLE) INTO :LIMITE, :SALDO;
                    IF(:LIMITE > 0) THEN
                    BEGIN
                        IF(:SALDO > :LIMITE) THEN
                        BEGIN
                            EXCEPTION "..." 'CLIENTE COM LIMITE DE CREDITO EXCEDIDO. OPERACAO CANCELADA! LIMITE: R$ '||:LIMITE||' SALDO R$ '||:SALDO;
                        END
                    END
            END
        END
    END
END;

COMMENT ON TRIGGER TTBNFS_B18U IS 'CONSULTA LIMITE DO CLIENTE QUANDO A NOTA FOR CONCLUÍDA';


-- TTBNFS_B1U_01
CREATE OR ALTER TRIGGER TTBNFS_B1U_01 FOR TBNFS
ACTIVE BEFORE UPDATE POSITION 1
AS
DECLARE VARIABLE CONTROLE INTEGER;
DECLARE VARIABLE NFE_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.NATUREZA <> NEW.NATUREZA) OR
           (OLD.SITUACAO = 2 AND NEW.SITUACAO = 1) OR
           (OLD.SITUACAO = 2 AND NEW.SITUACAO = 3) OR
           (OLD.SITUACAO = 1 AND NEW.SITUACAO = 2))THEN
           BEGIN
                FOR
                SELECT CONTROLE,NFE_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 TBNFS_ITEM A
                WHERE A.NFS_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(NFE_ITEM_CONTROLE > 0 OR
                      NF_EXTERNO_ITEM_CONTROLE > 0 OR
                      NF_CONSIGNACAO_ITEM > 0)
                INTO :CONTROLE,:NFE_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) OR
                /* EMISSÃO PARA LANÇAMENTO */
                   (OLD.SITUACAO = 1 AND NEW.SITUACAO = 1 AND OLD.NATUREZA = 1 AND NEW.NATUREZA = 2))THEN
                   BEGIN
                   IF (:NFE_ITEM_CONTROLE > 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 = :NFE_ITEM_CONTROLE;
                        END
                
                   IF (:NF_EXTERNO_ITEM_CONTROLE > 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_EXTERNO_ITEM_CONTROLE;
                       END
                
                   IF (:NF_CONSIGNACAO_ITEM > 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_CONSIGNACAO_ITEM;
                       END
                
                   END ELSE
                
                /* CONCLUIDO PARA ATIVO */
                IF((OLD.SITUACAO = 2 AND NEW.SITUACAO = 1) OR
                /* LANÇAMENTO PARA EMISSÃO */
                   (OLD.SITUACAO = 1 AND NEW.SITUACAO = 1 AND OLD.NATUREZA = 2 AND NEW.NATUREZA = 1))THEN
                   BEGIN
                
                   IF (:NFE_ITEM_CONTROLE > 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 = :NFE_ITEM_CONTROLE;
                        END
                
                   IF (:NF_EXTERNO_ITEM_CONTROLE > 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_EXTERNO_ITEM_CONTROLE;
                       END
                
                   IF (:NF_CONSIGNACAO_ITEM > 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_CONSIGNACAO_ITEM;
                       END
                
                   END ELSE
                
                /* CONCLUIDO PARA CANCELADO */
                IF (OLD.SITUACAO = 2 AND NEW.SITUACAO = 3) THEN
                   BEGIN
                
                   IF (:NFE_ITEM_CONTROLE > 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 = :NFE_ITEM_CONTROLE;
                        END
                
                   IF (:NF_EXTERNO_ITEM_CONTROLE > 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_EXTERNO_ITEM_CONTROLE;
                       END
                
                   IF (:NF_CONSIGNACAO_ITEM > 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_CONSIGNACAO_ITEM;
                       END
                
                   END
                
                END
           END
     END
END;

COMMENT ON TRIGGER TTBNFS_B1U_01 IS 'ATUALIZA SALDOS DAS NOTAS REFERENCIADAS PARA GC DESKTOP';


-- ########### DELETE ###########

-- TTBNFS_B10D

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

COMMENT ON TRIGGER TTBNFS_B10D 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_NFS (
    ESTABELECIMENTO_CODIGO INTEGER,
    NUMERO_NOTAFISCAL INTEGER,
    SERIE VARCHAR(3),
    EMPRESA_CODIGO INTEGER,
    NATUREZA INTEGER,
    DATA_SAIDA DATE,
    DATA_EMISSAO DATE,
    HORA_EMISSAO VARCHAR(5),
    HORA_SAIDA VARCHAR(5),
    IND_FINAL CHAR(1),
    IND_PRESENCA CHAR(1),
    ID_ESTRANGEIRO VARCHAR(20),
    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),
    REPRESENTANTE_CODIGO INTEGER,
    REPRESENTANTE_COMISSAO NUMERIC(10,5),
    SUFRAMA VARCHAR(9),
    CHAVE_ACESSO VARCHAR(44),
    TIPO CHAR(1),
    CLASSIFICACAO VARCHAR(10),
    XML CHAR(2),
    DANFE CHAR(1),
    PAGAMENTO CHAR(1),
    UF_EMBARQUE CHAR(2),
    LOCAL_EMBARQUE VARCHAR(60),
    PROTOCOLO_CANCELAMENTO VARCHAR(20),
    MOTIVO_CANCELAMENTO VARCHAR(50),
    SPED CHAR(1),
    MODELO CHAR(2),
    ESPECIE1 VARCHAR(5),
    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),
    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),
    RETENCAO_BASE_CALCULO_IRRF NUMERIC(10,2),
    RETENCAO_BASE_CALCULO_INSS NUMERIC(10,2),
    VALOR_PARCELAS NUMERIC(10,5),
    VALOR_CONTABIL NUMERIC(10,2),
    VALOR_ESTORNO NUMERIC(10,2),
    VENCIMENTO_DAE_DIFAL DATE,
    TRANSPORTADORA_CODIGO INTEGER,
    FRETE INTEGER,
    PLACA VARCHAR(8),
    PLACA_UF VARCHAR(2),
    VOLUMES INTEGER,
    ESPECIE VARCHAR(30),
    MARCA VARCHAR(10),
    PESO_BRUTO NUMERIC(10,5),
    PESO_LIQUIDO NUMERIC(10,5),
    CUBAGEM NUMERIC(10,4),
    MODALIDADE CHAR(1),
    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),
    ACUMULA_ITEM CHAR(1),
    OCULTA_GRADE CHAR(1),
    TIPO_DOC CHAR(1),
    SPED_PISCOF CHAR(1),
    GC_WEB INTEGER,
    VENDEDOR_ID INTEGER,
    VENDEDOR_COMISSAO NUMERIC(10,5))
AS
BEGIN
INSERT INTO TBNFS (
ESTABELECIMENTO_CODIGO,NUMERO_NOTAFISCAL,SERIE,EMPRESA_CODIGO,NATUREZA,
DATA_SAIDA,DATA_EMISSAO,
HORA_EMISSAO,HORA_SAIDA,IND_FINAL,IND_PRESENCA,ID_ESTRANGEIRO,
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,REPRESENTANTE_CODIGO,
REPRESENTANTE_COMISSAO,SUFRAMA,CHAVE_ACESSO,TIPO,XML,DANFE,PAGAMENTO,
UF_EMBARQUE,LOCAL_EMBARQUE,PROTOCOLO_CANCELAMENTO,MOTIVO_CANCELAMENTO,
SPED,MODELO,ESPECIE,FISCAL_CFOP_CODIGO,ACUMULA_ITEM, OCULTA_GRADE, TIPO_DOC,
CLASSIFICACAO,SPED_PISCOF, GC_WEB, VENDEDOR_ID, VENDEDOR_COMISSAO) VALUES (

:ESTABELECIMENTO_CODIGO,:NUMERO_NOTAFISCAL,:SERIE,:EMPRESA_CODIGO,:NATUREZA,
:DATA_SAIDA,:DATA_EMISSAO,
:HORA_EMISSAO,:HORA_SAIDA,:IND_FINAL,:IND_PRESENCA,:ID_ESTRANGEIRO,
: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,:REPRESENTANTE_CODIGO,
:REPRESENTANTE_COMISSAO,:SUFRAMA,:CHAVE_ACESSO,:TIPO,:XML,:DANFE,:PAGAMENTO,
:UF_EMBARQUE,:LOCAL_EMBARQUE,:PROTOCOLO_CANCELAMENTO,:MOTIVO_CANCELAMENTO,
:SPED,:MODELO,:ESPECIE1,:FISCAL_CFOP_CODIGO,
:ACUMULA_ITEM, :OCULTA_GRADE, :TIPO_DOC,:CLASSIFICACAO,:SPED_PISCOF, :GC_WEB, :VENDEDOR_ID, :VENDEDOR_COMISSAO);

INSERT INTO TBNFS_TOTAIS (
NFS_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,VALOR_CONTABIL,VALOR_ESTORNO,VENCIMENTO_DAE_DIFAL, 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,:VALOR_CONTABIL,:VALOR_ESTORNO,:VENCIMENTO_DAE_DIFAL, :GC_WEB);

INSERT INTO TBNFS_TRANSPORTADORA( 
NFS_CONTROLE,TRANSPORTADORA_CODIGO,FRETE,VOLUMES,ESPECIE,
PESO_BRUTO,PESO_LIQUIDO,CUBAGEM,MARCA,NUMERO,PLACA,PLACA_UF,MODALIDADE, GC_WEB) VALUES(
:CONTROLE,:TRANSPORTADORA_CODIGO,:FRETE,:VOLUMES,:ESPECIE,
:PESO_BRUTO,:PESO_LIQUIDO,:CUBAGEM,:MARCA,:NUMERO,:PLACA,:PLACA_UF,:MODALIDADE, :GC_WEB);

INSERT INTO TBNFS_OBSERVACAO( 
NFS_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_NFS (
    ESTABELECIMENTO_CODIGO INTEGER,
    NUMERO_NOTAFISCAL INTEGER,
    SERIE VARCHAR(3),
    EMPRESA_CODIGO INTEGER,
    NATUREZA INTEGER,
    DATA_SAIDA DATE,
    DATA_EMISSAO DATE,
    CONTROLE INTEGER,
    SITUACAO INTEGER,
    CFOP_CODIGO VARCHAR(5),
    CFOP_DESCRICAO VARCHAR(60),
    CFOP_OPCIONAL VARCHAR(5),
    USUARIO_CODIGO INTEGER,
    USUARIO_DATA DATE,
    STATUSEXCLUSAO CHAR(1),
    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),
    REPRESENTANTE_CODIGO INTEGER,
    REPRESENTANTE_COMISSAO NUMERIC(10,5),
    SUFRAMA VARCHAR(9),
    CHAVE_ACESSO VARCHAR(44),
    TIPO CHAR(1),
    CLASSIFICACAO VARCHAR(10),
    XML CHAR(2),
    DANFE CHAR(1),
    PAGAMENTO CHAR(1),
    UF_EMBARQUE CHAR(2),
    LOCAL_EMBARQUE VARCHAR(60),
    RECIBO VARCHAR(20),
    PROTOCOLO VARCHAR(20),
    PROTOCOLO_CANCELAMENTO VARCHAR(20),
    MOTIVO_CANCELAMENTO VARCHAR(50),
    MODELO CHAR(2),
    ESPECIE1 VARCHAR(5),
    FORMULARIO_INICIAL INTEGER,
    FORMULARIO_FINAL INTEGER,
    SPED CHAR(1),
    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),
    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_ESTORNO NUMERIC(15,2),
    VENCIMENTO_DAE_DIFAL DATE,
    TRANSPORTADORA_CODIGO INTEGER,
    FRETE INTEGER,
    PLACA VARCHAR(8),
    PLACA_UF VARCHAR(2),
    VOLUMES INTEGER,
    ESPECIE VARCHAR(30),
    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),
    ACUMULA_ITEM CHAR(1),
    TIPO_DOC CHAR(1),
    SPED_PISCOF CHAR(1),
    GC_WEB INTEGER)
AS
BEGIN
UPDATE TBNFS SET
ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO_CODIGO,
NUMERO_NOTAFISCAL      = :NUMERO_NOTAFISCAL,
SERIE                  = :SERIE,
EMPRESA_CODIGO         = :EMPRESA_CODIGO,
NATUREZA               = :NATUREZA,
DATA_SAIDA             = :DATA_SAIDA,
DATA_EMISSAO           = :DATA_EMISSAO,
SITUACAO               = :SITUACAO,
CFOP_CODIGO            = :CFOP_CODIGO,
CFOP_DESCRICAO         = :CFOP_DESCRICAO,
CFOP_OPCIONAL          = :CFOP_OPCIONAL,
USUARIO_CODIGO         = :USUARIO_CODIGO,
USUARIO_DATA           = :USUARIO_DATA,
STATUSEXCLUSAO         = :STATUSEXCLUSAO,
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_CEP            = :EMPRESA_CEP,
EMPRESA_UF             = :EMPRESA_UF,
REPRESENTANTE_CODIGO   = :REPRESENTANTE_CODIGO,
REPRESENTANTE_COMISSAO = :REPRESENTANTE_COMISSAO,
SUFRAMA       = :SUFRAMA,
CHAVE_ACESSO  = :CHAVE_ACESSO,
TIPO          = :TIPO,
XML           = :XML,
DANFE         = :DANFE,
PAGAMENTO     = :PAGAMENTO,
UF_EMBARQUE   = :UF_EMBARQUE,
LOCAL_EMBARQUE= :LOCAL_EMBARQUE,
RECIBO        = :RECIBO,
PROTOCOLO     = :PROTOCOLO,
PROTOCOLO_CANCELAMENTO = :PROTOCOLO_CANCELAMENTO,
MOTIVO_CANCELAMENTO    = :MOTIVO_CANCELAMENTO,
MODELO                 = :MODELO,
ESPECIE                = :ESPECIE1,
FORMULARIO_INICIAL     = :FORMULARIO_INICIAL,
FORMULARIO_FINAL       = :FORMULARIO_FINAL,
SPED                   = :SPED,
FISCAL_CFOP_CODIGO     = :FISCAL_CFOP_CODIGO,
ACUMULA_ITEM = :ACUMULA_ITEM,
TIPO_DOC = :TIPO_DOC,
CLASSIFICACAO = :CLASSIFICACAO,
SPED_PISCOF = :SPED_PISCOF 
WHERE CONTROLE= :CONTROLE;

UPDATE TBNFS_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_DESCONTO         = :VALOR_DESCONTO,
VALOR_PARCELAS         = :VALOR_PARCELAS,
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,
VALOR_CSLL             = :VALOR_CSLL,
RETENCAO_VALOR_CSLL    = :RETENCAO_VALOR_CSLL,
RETENCAO_BASE_CALCULO_IRRF = :RETENCAO_BASE_CALCULO_IRRF,
RETENCAO_BASE_CALCULO_INSS = :RETENCAO_BASE_CALCULO_INSS,
VALOR_CONTABIL         = :VALOR_CONTABIL,
VALOR_ESTORNO          = :VALOR_ESTORNO,
VENCIMENTO_DAE_DIFAL   = :VENCIMENTO_DAE_DIFAL
WHERE NFS_CONTROLE     = :CONTROLE;

UPDATE TBNFS_TRANSPORTADORA SET
TRANSPORTADORA_CODIGO  = :TRANSPORTADORA_CODIGO,
FRETE                  = :FRETE,
VOLUMES                = :VOLUMES,
ESPECIE                = :ESPECIE,
PESO_BRUTO             = :PESO_BRUTO,
PESO_LIQUIDO           = :PESO_LIQUIDO,
MARCA                  = :MARCA,
NUMERO                 = :NUMERO,
PLACA                  = :PLACA,
PLACA_UF               = :PLACA_UF
WHERE NFS_CONTROLE     = :CONTROLE;

UPDATE TBNFS_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 NFS_CONTROLE = :CONTROLE;

END;



