-- TBNFS_ITEM

-- PARAMETROS GC_WEB

ALTER TABLE TBNFS_ITEM
ADD GC_WEB INTEGER
DEFAULT 0;

-- NOVO CAMPO DE SITUAÇÃO
ALTER TABLE TBNFS_ITEM
ADD NF_SITUACAO INTEGER;

-- NOVO CAMPO DE NATUREZA
ALTER TABLE TBNFS_ITEM
ADD NF_NATUREZA INTEGER;



-- TRIGGERS

-- ########### INSERT ###########

-- TTBNFS_ITEM_B1I_01
CREATE OR ALTER TRIGGER TTBNFS_ITEM_B1I_01 FOR TBNFS_ITEM
ACTIVE BEFORE INSERT POSITION 1
AS
DECLARE VARIABLE EXEC CHAR(3);
BEGIN

IF(COALESCE(NEW.GC_WEB, '0') = '0') THEN
  BEGIN
    FOR
    SELECT FIRST 1 IIF (A.NATUREZA=1 AND A.SITUACAO=2 , 'SIM', IIF (A.NATUREZA=2 AND A.SITUACAO=1, 'SIM', 'NÃO'))
    FROM TBNFS A
    WHERE A.CONTROLE = NEW.NFS_CONTROLE
      AND(NEW.NFE_ITEM_CONTROLE > 0 OR
          NEW.NF_EXTERNO_ITEM_CONTROLE > 0 OR
          NEW.NF_CONSIGNACAO_ITEM > 0)
    INTO :EXEC 
    DO
    BEGIN
    
    IF (:EXEC = 'SIM') THEN
       BEGIN
       IF (NEW.NFE_ITEM_CONTROLE > 0) THEN
           BEGIN
              UPDATE TBNFE_ITEM_SALDO SET
              QUANTIDADE = QUANTIDADE - NEW.QUANTIDADE,
              T01 = T01 - NEW.T01, T02 = T02 - NEW.T02, T03 = T03 - NEW.T03, T04 = T04 - NEW.T04,
              T05 = T05 - NEW.T05, T06 = T06 - NEW.T06, T07 = T07 - NEW.T07, T08 = T08 - NEW.T08,
              T09 = T09 - NEW.T09, T10 = T10 - NEW.T10, T11 = T11 - NEW.T11, T12 = T12 - NEW.T12,
              T13 = T13 - NEW.T13, T14 = T14 - NEW.T14, T15 = T15 - NEW.T15, T16 = T16 - NEW.T16,
              T17 = T17 - NEW.T17, T18 = T18 - NEW.T18, T19 = T19 - NEW.T19, T20 = T20 - NEW.T20
              WHERE NFE_ITEM_CONTROLE = NEW.NFE_ITEM_CONTROLE;
            END
    
       IF (NEW.NF_EXTERNO_ITEM_CONTROLE > 0) THEN
           BEGIN
              UPDATE TBNFE_ITEM_SALDO SET
              QUANTIDADE = QUANTIDADE - NEW.QUANTIDADE,
              T01 = T01 - NEW.T01, T02 = T02 - NEW.T02, T03 = T03 - NEW.T03, T04 = T04 - NEW.T04,
              T05 = T05 - NEW.T05, T06 = T06 - NEW.T06, T07 = T07 - NEW.T07, T08 = T08 - NEW.T08,
              T09 = T09 - NEW.T09, T10 = T10 - NEW.T10, T11 = T11 - NEW.T11, T12 = T12 - NEW.T12,
              T13 = T13 - NEW.T13, T14 = T14 - NEW.T14, T15 = T15 - NEW.T15, T16 = T16 - NEW.T16,
              T17 = T17 - NEW.T17, T18 = T18 - NEW.T18, T19 = T19 - NEW.T19, T20 = T20 - NEW.T20
              WHERE NFE_ITEM_CONTROLE = NEW.NF_EXTERNO_ITEM_CONTROLE;
           END
    
       IF (NEW.NF_CONSIGNACAO_ITEM > 0) THEN
           BEGIN
              UPDATE TBNFS_ITEM_SALDO SET
              QUANTIDADE = QUANTIDADE - NEW.QUANTIDADE,
              T01 = T01 - NEW.T01, T02 = T02 - NEW.T02, T03 = T03 - NEW.T03, T04 = T04 - NEW.T04,
              T05 = T05 - NEW.T05, T06 = T06 - NEW.T06, T07 = T07 - NEW.T07, T08 = T08 - NEW.T08,
              T09 = T09 - NEW.T09, T10 = T10 - NEW.T10, T11 = T11 - NEW.T11, T12 = T12 - NEW.T12,
              T13 = T13 - NEW.T13, T14 = T14 - NEW.T14, T15 = T15 - NEW.T15, T16 = T16 - NEW.T16,
              T17 = T17 - NEW.T17, T18 = T18 - NEW.T18, T19 = T19 - NEW.T19, T20 = T20 - NEW.T20
              WHERE NFS_ITEM_CONTROLE = NEW.NF_CONSIGNACAO_ITEM;
           END
        END
    END
 END

END;


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

-- TTBNFS_ITEM_AI1
CREATE OR ALTER TRIGGER TTBNFS_ITEM_AI1 FOR TBNFS_ITEM
ACTIVE AFTER INSERT POSITION 1
AS
BEGIN

  IF(NEW.GC_WEB = 1) THEN
  BEGIN

       IF (NEW.NF_NATUREZA = 2)  THEN
       BEGIN
            -- REALIZAR BAIXA DE PEDIDO PARA NATUREZA LANÇAMENTO
            EXECUTE PROCEDURE SPU_NFS_PEDIDO(NEW.NFS_CONTROLE, NEW.CONTROLE);

            -- INCLUIR ESTOQUE
            EXECUTE PROCEDURE SP_NF_ITEM_ESTOQUE('NFS', NEW.CONTROLE, NEW.NFS_CONTROLE, 1);
       END
  END

END;

COMMENT ON TRIGGER TTBNFS_ITEM_AI1 IS 'PROCEDIMENTO PARA SAIDA DE ESTOQUE E ATUALIZAÇÃO DO SALDO DE PEDIDOS';


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

-- TTBNFS_ITEM_BU4
CREATE OR ALTER TRIGGER TTBNFS_ITEM_BU4 FOR TBNFS_ITEM
ACTIVE BEFORE UPDATE POSITION 1
AS

BEGIN

  IF(NEW.GC_WEB = 1) THEN
  BEGIN

       IF (OLD.NF_NATUREZA = 2 AND NEW.NF_NATUREZA = 1)  THEN
       BEGIN
          -- DELETAR ESTOQUE PARA NATUREZA EMISSAO
          EXECUTE PROCEDURE SP_NF_ITEM_ESTOQUE('NFS', NEW.CONTROLE, NEW.NFS_CONTROLE, 2);
          -- DESFAZER BAIXA DE PEDIDO
          EXECUTE PROCEDURE SPD_NFS_PEDIDO(NEW.NFS_CONTROLE, NEW.CONTROLE);

       END ELSE

       IF(OLD.NF_NATUREZA = 2 AND NEW.NF_NATUREZA = 2) THEN
       BEGIN
           IF(OLD.ESTABELECIMENTO_CODIGO <> NEW.ESTABELECIMENTO_CODIGO OR
              OLD.DATA_EMISSAO           <> NEW.DATA_EMISSAO OR
              OLD.LOCALIZACAO_CODIGO     <> NEW.LOCALIZACAO_CODIGO OR
              OLD.EMPRESA_CODIGO         <> NEW.EMPRESA_CODIGO OR
              OLD.NUMERO_NOTAFISCAL      <> NEW.NUMERO_NOTAFISCAL OR
              OLD.OPERACAO_CODIGO        <> NEW.OPERACAO_CODIGO OR
              OLD.PRODUTO_CODIGO         <> NEW.PRODUTO_CODIGO OR
              OLD.QUANTIDADE             <> NEW.QUANTIDADE OR
              OLD.T01 <> NEW.T01 OR   OLD.T02 <> NEW.T02 OR   OLD.T03 <> NEW.T03 OR
              OLD.T04 <> NEW.T04 OR   OLD.T05 <> NEW.T05 OR   OLD.T06 <> NEW.T06 OR
              OLD.T07 <> NEW.T07 OR   OLD.T08 <> NEW.T08 OR   OLD.T09 <> NEW.T09 OR
              OLD.T10 <> NEW.T10 OR   OLD.T11 <> NEW.T11 OR   OLD.T12 <> NEW.T12 OR
              OLD.T13 <> NEW.T13 OR   OLD.T14 <> NEW.T14 OR   OLD.T15 <> NEW.T15 OR
              OLD.T16 <> NEW.T16 OR   OLD.T17 <> NEW.T17 OR   OLD.T18 <> NEW.T18 OR
              OLD.T19 <> NEW.T19 OR   OLD.T20 <> NEW.T20)  THEN
              BEGIN
                  -- DELETAR ESTOQUE
                  EXECUTE PROCEDURE SP_NF_ITEM_ESTOQUE('NFS', NEW.CONTROLE, NEW.NFS_CONTROLE, 2);
                  -- DESFAZER BAIXA DE PEDIDO
                  EXECUTE PROCEDURE SPD_NFS_PEDIDO(NEW.NFS_CONTROLE, NEW.CONTROLE);
              END
       END ELSE

       IF(OLD.NF_NATUREZA = 1 AND NEW.NF_NATUREZA = 1) THEN
       BEGIN
            IF(OLD.NF_SITUACAO = 1 AND NEW.NF_SITUACAO = 2) THEN
            BEGIN

                -- REALIZAR BAIXA DE PEDIDO PARA NATUREZA EMISSÃO, CONCLUÍDA
                EXECUTE PROCEDURE SPU_NFS_PEDIDO(NEW.NFS_CONTROLE, NEW.CONTROLE);
                -- INCLUIR ESTOQUE
                EXECUTE PROCEDURE SP_NF_ITEM_ESTOQUE('NFS', NEW.CONTROLE, NEW.NFS_CONTROLE, 1);

            END ELSE
            IF(OLD.NF_SITUACAO = 2 AND NEW.NF_SITUACAO = 1) THEN
            BEGIN

                -- DELETAR ESTOQUE
                EXECUTE PROCEDURE SP_NF_ITEM_ESTOQUE('NFS', NEW.CONTROLE, NEW.NFS_CONTROLE, 2);
                -- DESFAZER BAIXA DE PEDIDO
                EXECUTE PROCEDURE SPD_NFS_PEDIDO(NEW.NFS_CONTROLE, NEW.CONTROLE);

            END ELSE
            IF(OLD.NF_SITUACAO = 2 AND NEW.NF_SITUACAO = 3) THEN
            BEGIN

                -- DELETAR ESTOQUE
                EXECUTE PROCEDURE SP_NF_ITEM_ESTOQUE('NFS', NEW.CONTROLE, NEW.NFS_CONTROLE, 2);
                -- DESFAZER BAIXA DE PEDIDO
                EXECUTE PROCEDURE SPD_NFS_PEDIDO(NEW.NFS_CONTROLE, NEW.CONTROLE);

            END
       END
  END
END;

COMMENT ON TRIGGER TTBNFS_ITEM_BU4 IS 'PROCEDIMENTO PARA SAIDA DE ESTOQUE E ATUALIZAÇÃO DO SALDO DE PEDIDOS';

-- TTBNFS_ITEM_AU1
CREATE OR ALTER TRIGGER TTBNFS_ITEM_AU1 FOR TBNFS_ITEM
ACTIVE AFTER UPDATE POSITION 1
AS

BEGIN

  IF(NEW.GC_WEB = 1) THEN
  BEGIN

       IF (OLD.NF_NATUREZA = 1 AND NEW.NF_NATUREZA = 2)  THEN
       BEGIN

          -- REALIZAR BAIXA DE PEDIDO PARA NATUREZA LANÇAMENTO
          EXECUTE PROCEDURE SPU_NFS_PEDIDO(NEW.NFS_CONTROLE, NEW.CONTROLE);
          -- INCLUIR ESTOQUE PARA NATUREZA LANÇAMENTO
          EXECUTE PROCEDURE SP_NF_ITEM_ESTOQUE('NFS', NEW.CONTROLE, NEW.NFS_CONTROLE, 1);

       END ELSE

       IF(OLD.NF_NATUREZA = 2 AND NEW.NF_NATUREZA = 2) THEN
       BEGIN
           IF(OLD.ESTABELECIMENTO_CODIGO <> NEW.ESTABELECIMENTO_CODIGO OR
              OLD.DATA_EMISSAO           <> NEW.DATA_EMISSAO OR
              OLD.LOCALIZACAO_CODIGO     <> NEW.LOCALIZACAO_CODIGO OR
              OLD.EMPRESA_CODIGO         <> NEW.EMPRESA_CODIGO OR
              OLD.NUMERO_NOTAFISCAL      <> NEW.NUMERO_NOTAFISCAL OR
              OLD.OPERACAO_CODIGO        <> NEW.OPERACAO_CODIGO OR
              OLD.PRODUTO_CODIGO         <> NEW.PRODUTO_CODIGO OR
              OLD.QUANTIDADE             <> NEW.QUANTIDADE OR
              OLD.T01 <> NEW.T01 OR   OLD.T02 <> NEW.T02 OR   OLD.T03 <> NEW.T03 OR
              OLD.T04 <> NEW.T04 OR   OLD.T05 <> NEW.T05 OR   OLD.T06 <> NEW.T06 OR
              OLD.T07 <> NEW.T07 OR   OLD.T08 <> NEW.T08 OR   OLD.T09 <> NEW.T09 OR
              OLD.T10 <> NEW.T10 OR   OLD.T11 <> NEW.T11 OR   OLD.T12 <> NEW.T12 OR
              OLD.T13 <> NEW.T13 OR   OLD.T14 <> NEW.T14 OR   OLD.T15 <> NEW.T15 OR
              OLD.T16 <> NEW.T16 OR   OLD.T17 <> NEW.T17 OR   OLD.T18 <> NEW.T18 OR
              OLD.T19 <> NEW.T19 OR   OLD.T20 <> NEW.T20)  THEN
              BEGIN

                  -- REALIZAR BAIXA DE PEDIDO PARA NATUREZA LANÇAMENTO
                  EXECUTE PROCEDURE SPU_NFS_PEDIDO(NEW.NFS_CONTROLE, NEW.CONTROLE);
                  -- INCLUIR ESTOQUE
                  EXECUTE PROCEDURE SP_NF_ITEM_ESTOQUE('NFS', NEW.CONTROLE, NEW.NFS_CONTROLE, 1);

              END
       END


  END
END;

COMMENT ON TRIGGER TTBNFS_ITEM_AU1 IS 'PROCEDIMENTO PARA SAIDA DE ESTOQUE E ATUALIZAÇÃO DO SALDO DE PEDIDOS';

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

-- TTBNFS_ITEM_B1D_01
CREATE OR ALTER TRIGGER TTBNFS_ITEM_B1D_01 FOR TBNFS_ITEM
ACTIVE BEFORE DELETE POSITION 1
AS
DECLARE VARIABLE EXEC CHAR(3);
BEGIN

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

                FOR
                SELECT FIRST 1 IIF (A.NATUREZA=1 AND A.SITUACAO=2 , 'SIM', IIF (A.NATUREZA=2 AND A.SITUACAO=1, 'SIM', 'NÃO'))
                FROM TBNFS A
                WHERE A.CONTROLE = OLD.NFS_CONTROLE
                  AND(OLD.NFE_ITEM_CONTROLE > 0 OR
                      OLD.NF_EXTERNO_ITEM_CONTROLE > 0 OR
                      OLD.NF_CONSIGNACAO_ITEM > 0)
                
                INTO :EXEC 
                DO
                BEGIN
                
                IF (:EXEC = 'SIM') THEN
                   BEGIN
                   IF (OLD.NFE_ITEM_CONTROLE > 0) THEN
                       BEGIN
                          UPDATE TBNFE_ITEM_SALDO SET
                          QUANTIDADE = QUANTIDADE + OLD.QUANTIDADE,
                          T01 = T01 + OLD.T01, T02 = T02 + OLD.T02, T03 = T03 + OLD.T03, T04 = T04 + OLD.T04,
                          T05 = T05 + OLD.T05, T06 = T06 + OLD.T06, T07 = T07 + OLD.T07, T08 = T08 + OLD.T08,
                          T09 = T09 + OLD.T09, T10 = T10 + OLD.T10, T11 = T11 + OLD.T11, T12 = T12 + OLD.T12,
                          T13 = T13 + OLD.T13, T14 = T14 + OLD.T14, T15 = T15 + OLD.T15, T16 = T16 + OLD.T16,
                          T17 = T17 + OLD.T17, T18 = T18 + OLD.T18, T19 = T19 + OLD.T19, T20 = T20 + OLD.T20
                          WHERE NFE_ITEM_CONTROLE = OLD.NFE_ITEM_CONTROLE;
                        END
                
                   IF (OLD.NF_EXTERNO_ITEM_CONTROLE > 0) THEN
                       BEGIN
                          UPDATE TBNFE_ITEM_SALDO SET
                          QUANTIDADE = QUANTIDADE + OLD.QUANTIDADE,
                          T01 = T01 + OLD.T01, T02 = T02 + OLD.T02, T03 = T03 + OLD.T03, T04 = T04 + OLD.T04,
                          T05 = T05 + OLD.T05, T06 = T06 + OLD.T06, T07 = T07 + OLD.T07, T08 = T08 + OLD.T08,
                          T09 = T09 + OLD.T09, T10 = T10 + OLD.T10, T11 = T11 + OLD.T11, T12 = T12 + OLD.T12,
                          T13 = T13 + OLD.T13, T14 = T14 + OLD.T14, T15 = T15 + OLD.T15, T16 = T16 + OLD.T16,
                          T17 = T17 + OLD.T17, T18 = T18 + OLD.T18, T19 = T19 + OLD.T19, T20 = T20 + OLD.T20
                          WHERE NFE_ITEM_CONTROLE = OLD.NF_EXTERNO_ITEM_CONTROLE;
                       END
                
                   IF (OLD.NF_CONSIGNACAO_ITEM > 0) THEN
                       BEGIN
                          UPDATE TBNFS_ITEM_SALDO SET
                          QUANTIDADE = QUANTIDADE + OLD.QUANTIDADE,
                          T01 = T01 + OLD.T01, T02 = T02 + OLD.T02, T03 = T03 + OLD.T03, T04 = T04 + OLD.T04,
                          T05 = T05 + OLD.T05, T06 = T06 + OLD.T06, T07 = T07 + OLD.T07, T08 = T08 + OLD.T08,
                          T09 = T09 + OLD.T09, T10 = T10 + OLD.T10, T11 = T11 + OLD.T11, T12 = T12 + OLD.T12,
                          T13 = T13 + OLD.T13, T14 = T14 + OLD.T14, T15 = T15 + OLD.T15, T16 = T16 + OLD.T16,
                          T17 = T17 + OLD.T17, T18 = T18 + OLD.T18, T19 = T19 + OLD.T19, T20 = T20 + OLD.T20
                          WHERE NFS_ITEM_CONTROLE = OLD.NF_CONSIGNACAO_ITEM;
                       END
                
                   END
                
                END
     END
END;

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

-- TTBNFS_ITEM_B05D
CREATE OR ALTER TRIGGER TTBNFS_ITEM_B05D FOR TBNFS_ITEM
ACTIVE BEFORE DELETE POSITION 5
AS
BEGIN

    DELETE FROM TBNFS_ITEM_SALDO WHERE NFS_ITEM_CONTROLE = OLD.CONTROLE;

    IF(OLD.GC_WEB = 1) THEN
    BEGIN
      IF(OLD.NF_NATUREZA = 2) THEN
      BEGIN
         -- DELETAR ESTOQUE PARA NATUREZA LANÇAMENTO
          EXECUTE PROCEDURE SP_NF_ITEM_ESTOQUE('NFS', OLD.CONTROLE, OLD.NFS_CONTROLE, 2);

          -- DESFAZER BAIXA DE PEDIDO
          EXECUTE PROCEDURE SPD_NFS_PEDIDO(OLD.NFS_CONTROLE, OLD.CONTROLE);
      END

      UPDATE TBLOTE_PECA_ITEM T SET T.NFS_ITEM_ID = NULL WHERE T.NFS_ITEM_ID = OLD.CONTROLE;
    END
END;

COMMENT ON TRIGGER TTBNFS_ITEM_B05D IS 'PROCEDIMENTO PARA SAIDA/ENTRADA DE ESTOQUE E SALDO DE PEDIDOS';




-- PROCEDURE DE INSERÇÃO
CREATE OR ALTER PROCEDURE SPI_NFS_ITEM (
    NFS_CONTROLE INTEGER,
    ESTABELECIMENTO_CODIGO INTEGER,
    EMPRESA_CODIGO INTEGER,
    NUMERO_NOTAFISCAL INTEGER,
    DATA_EMISSAO DATE,
    SITUACAO INTEGER,
    NF_NATUREZA INTEGER,
    NF_CONSIGNACAO INTEGER,
    NF_CONSIGNACAO_ITEM INTEGER,
    NFE INTEGER,
    NFE_ITEM_CONTROLE INTEGER,
    PEDIDO INTEGER,
    PEDIDO_ITEM_PE_CONTROLE INTEGER,
    NF_EXTERNO INTEGER,
    NF_EXTERNO_ITEM_CONTROLE INTEGER,
    CONTROLE INTEGER,
    SEQUENCIA INTEGER,
    OPERACAO_CODIGO VARCHAR(3),
    CFOP_CODIGO VARCHAR(5),
    PRODUTO_CODIGO INTEGER,
    PRODUTO_DESCRICAO VARCHAR(100),
    PRODUTO_UNIDADEMEDIDA VARCHAR(3),
    NCM_CODIGO VARCHAR(10),
    TRIBUTACAO_ORIGEM INTEGER,
    TRIBUTACAO_IPI VARCHAR(2),
    TRIBUTACAO_ICMS INTEGER,
    TRIBUTACAO_PIS CHAR(2),
    TRIBUTACAO_COFINS CHAR(2),
    LOCALIZACAO_CODIGO INTEGER,
    QUANTIDADE NUMERIC(10,5),
    VALOR_UNITARIO NUMERIC(10,5),
    VALOR_TOTAL NUMERIC(10,5),
    BASECALCULO_ICMS NUMERIC(10,5),
    PERCENTUAL_ICMS NUMERIC(10,5),
    PERCENTUAL_IPI NUMERIC(10,5),
    VALOR_IPI NUMERIC(10,5),
    PERCENTUAL_PIS NUMERIC(10,5),
    VALOR_PIS NUMERIC(10,5),
    PERCENTUAL_COFINS NUMERIC(10,5),
    VALOR_COFINS NUMERIC(10,5),
    T01 NUMERIC(10,5),
    T02 NUMERIC(10,5),
    T03 NUMERIC(10,5),
    T04 NUMERIC(10,5),
    T05 NUMERIC(10,5),
    T06 NUMERIC(10,5),
    T07 NUMERIC(10,5),
    T08 NUMERIC(10,5),
    T09 NUMERIC(10,5),
    T10 NUMERIC(10,5),
    T11 NUMERIC(10,5),
    T12 NUMERIC(10,5),
    T13 NUMERIC(10,5),
    T14 NUMERIC(10,5),
    T15 NUMERIC(10,5),
    T16 NUMERIC(10,5),
    T17 NUMERIC(10,5),
    T18 NUMERIC(10,5),
    T19 NUMERIC(10,5),
    T20 NUMERIC(10,5),
    TECELAGEM INTEGER,
    VALOR_ICMS NUMERIC(10,2),
    BASECALCULO_IPI NUMERIC(10,2),
    BASECALCULO_PIS NUMERIC(10,2),
    BASECALCULO_COFINS NUMERIC(10,2),
    VALOR_ACRESCIMO NUMERIC(10,2),
    VALOR_FRETE NUMERIC(10,2),
    VALOR_SEGURO NUMERIC(10,2),
    PESO_LIQUIDO NUMERIC(10,4),
    PESO_BRUTO NUMERIC(10,4),
    CUBAGEM NUMERIC(10,4),
    VOLUMES INTEGER,
    VALOR_DESCONTO NUMERIC(10,2),
    FISCAL_ISENTAS_IPI NUMERIC(10,2),
    FISCAL_ISENTAS_ICMS NUMERIC(10,2),
    FISCAL_OUTRAS_IPI NUMERIC(10,2),
    FISCAL_OUTRAS_ICMS NUMERIC(10,2),
    FISCAL_VALOR_ICMS NUMERIC(10,2),
    FISCAL_VALOR_IPI NUMERIC(10,2),
    FISCAL_VALOR_PIS NUMERIC(10,2),
    FISCAL_VALOR_COFINS NUMERIC(10,2),
    FISCAL_PERCENTUAL_ICMS NUMERIC(10,2),
    FISCAL_PERCENTUAL_IPI NUMERIC(10,2),
    FISCAL_PERCENTUAL_PIS NUMERIC(10,2),
    FISCAL_PERCENTUAL_COFINS NUMERIC(10,2),
    FISCAL_BASECALCULO_ICMS NUMERIC(10,2),
    FISCAL_BASECALCULO_IPI NUMERIC(10,2),
    FISCAL_BASECALCULO_PIS NUMERIC(10,2),
    FISCAL_BASECALCULO_COFINS NUMERIC(10,2),
    VALOR_CONTABIL NUMERIC(10,2),
    VALOR_BASECALCULO_ICMS NUMERIC(10,2),
    FISCAL_CFOP_CODIGO VARCHAR(5),
    FISCAL_TRIBUTACAO_ORIGEM INTEGER,
    FISCAL_TRIBUTACAO_ICMS INTEGER,
    FISCAL_TRIBUTACAO_IPI CHAR(2),
    FISCAL_TRIBUTACAO_PIS CHAR(2),
    FISCAL_TRIBUTACAO_COFINS CHAR(2),
    MODALIDADE_ICMS CHAR(1),
    MODALIDADE_ICMS_ST CHAR(1),
    MARGEM_ICMS_ST NUMERIC(15,4),
    REDUCAO_ICMS_ST NUMERIC(15,4),
    BASECALCULO_ICMS_ST NUMERIC(15,4),
    ALIQUOTA_ICMS_ST NUMERIC(15,4),
    VALOR_ICMS_ST NUMERIC(15,4),
    FISCAL_REDUCAO_ICMS_ST NUMERIC(10,2),
    FISCAL_BASECALCULO_ICMS_ST NUMERIC(10,2),
    FISCAL_ALIQUOTA_ICMS_ST NUMERIC(10,2),
    FISCAL_VALOR_ICMS_ST NUMERIC(10,2),
    PEDIDO_CLIENTE VARCHAR(15),
    INFORMACOES_COMPLEMENTARES VARCHAR(500),
    FCI_MENSAGEM VARCHAR(255),
    FCI_PARCELA_IMPORTACAO NUMERIC(15,2),
    FCI_CONTEUDO_IMPORTACAO NUMERIC(15,2),
    FCI_NUMERO VARCHAR(40),
    CCUSTO VARCHAR(8),
    CONTA_CONTABIL VARCHAR(11),
    ENQUADRAMENTO_IPI VARCHAR(3),
    QUANTIDADE_ALTERNATIVA NUMERIC(18,4),
    UM_ALTERNATIVA VARCHAR(3),
    VALOR_ALTERNATIVO NUMERIC(18,10),
    REDUCAO_BASE_PISCOF CHAR(1),
    GC_WEB INTEGER)
AS
BEGIN
INSERT INTO TBNFS_ITEM(
NFS_CONTROLE,ESTABELECIMENTO_CODIGO,EMPRESA_CODIGO,NUMERO_NOTAFISCAL,DATA_EMISSAO,NF_SITUACAO, NF_NATUREZA,
NF_CONSIGNACAO,NF_CONSIGNACAO_ITEM,NFE,NFE_ITEM_CONTROLE,PEDIDO,
PEDIDO_ITEM_PE_CONTROLE,NF_EXTERNO,NF_EXTERNO_ITEM_CONTROLE    ,
CONTROLE,SEQUENCIA,OPERACAO_CODIGO,CFOP_CODIGO,PRODUTO_CODIGO,PRODUTO_DESCRICAO           ,
PRODUTO_UNIDADEMEDIDA,NCM_CODIGO,TRIBUTACAO_ORIGEM,TRIBUTACAO_IPI,TRIBUTACAO_ICMS         ,
TRIBUTACAO_PIS,TRIBUTACAO_COFINS                                                          ,
LOCALIZACAO_CODIGO,QUANTIDADE,VALOR_UNITARIO,VALOR_TOTAL,BASECALCULO_ICMS,PERCENTUAL_ICMS ,
PERCENTUAL_IPI,VALOR_IPI,PERCENTUAL_PIS,VALOR_PIS,PERCENTUAL_COFINS,VALOR_COFINS          ,
T01,T02,T03,T04,T05,T06,T07,T08,T09,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,TECELAGEM,
VALOR_ICMS,BASECALCULO_IPI,BASECALCULO_PIS,BASECALCULO_COFINS,
VALOR_ACRESCIMO, VALOR_FRETE, VALOR_SEGURO, PESO_LIQUIDO, PESO_BRUTO, CUBAGEM, VOLUMES,
VALOR_DESCONTO,FISCAL_ISENTAS_IPI,FISCAL_ISENTAS_ICMS,
FISCAL_OUTRAS_IPI,FISCAL_OUTRAS_ICMS,FISCAL_VALOR_ICMS,FISCAL_VALOR_IPI,
FISCAL_VALOR_PIS,FISCAL_VALOR_COFINS,FISCAL_PERCENTUAL_ICMS,FISCAL_PERCENTUAL_IPI,
FISCAL_PERCENTUAL_PIS,FISCAL_PERCENTUAL_COFINS,FISCAL_BASECALCULO_ICMS,
FISCAL_BASECALCULO_IPI,FISCAL_BASECALCULO_PIS,FISCAL_BASECALCULO_COFINS,
VALOR_CONTABIL, VALOR_BASECALCULO_ICMS, FISCAL_CFOP_CODIGO, FISCAL_TRIBUTACAO_ORIGEM,
FISCAL_TRIBUTACAO_ICMS, FISCAL_TRIBUTACAO_IPI, FISCAL_TRIBUTACAO_PIS,
FISCAL_TRIBUTACAO_COFINS, MODALIDADE_ICMS, MODALIDADE_ICMS_ST, MARGEM_ICMS_ST,
REDUCAO_ICMS_ST, BASECALCULO_ICMS_ST, ALIQUOTA_ICMS_ST, VALOR_ICMS_ST,
FISCAL_REDUCAO_ICMS_ST, FISCAL_BASECALCULO_ICMS_ST, FISCAL_ALIQUOTA_ICMS_ST, FISCAL_VALOR_ICMS_ST,
PEDIDO_CLIENTE, INFORMACOES_COMPLEMENTARES, FCI_MENSAGEM,
FCI_PARCELA_IMPORTACAO, FCI_CONTEUDO_IMPORTACAO, FCI_NUMERO,CCUSTO,CONTA_CONTABIL,ENQUADRAMENTO_IPI,
QUANTIDADE_ALTERNATIVA, UM_ALTERNATIVA, VALOR_ALTERNATIVO, REDUCAO_BASE_PISCOF, GC_WEB)
VALUES  (
:NFS_CONTROLE,:ESTABELECIMENTO_CODIGO,:EMPRESA_CODIGO,:NUMERO_NOTAFISCAL,
:DATA_EMISSAO,:SITUACAO,:NF_NATUREZA,:NF_CONSIGNACAO,:NF_CONSIGNACAO_ITEM,
:NFE,:NFE_ITEM_CONTROLE,:PEDIDO,:PEDIDO_ITEM_PE_CONTROLE,:NF_EXTERNO,
:NF_EXTERNO_ITEM_CONTROLE,:CONTROLE,:SEQUENCIA,:OPERACAO_CODIGO,:CFOP_CODIGO,
:PRODUTO_CODIGO,:PRODUTO_DESCRICAO,:PRODUTO_UNIDADEMEDIDA,:NCM_CODIGO,:TRIBUTACAO_ORIGEM,
:TRIBUTACAO_IPI,:TRIBUTACAO_ICMS,:TRIBUTACAO_PIS,:TRIBUTACAO_COFINS,:LOCALIZACAO_CODIGO,
:QUANTIDADE,:VALOR_UNITARIO,:VALOR_TOTAL,:BASECALCULO_ICMS,:PERCENTUAL_ICMS,
:PERCENTUAL_IPI,:VALOR_IPI,:PERCENTUAL_PIS,:VALOR_PIS,:PERCENTUAL_COFINS,
:VALOR_COFINS,:T01,:T02,:T03,:T04,:T05,:T06,:T07,:T08,:T09,:T10,
:T11,:T12,:T13,:T14,:T15,:T16,:T17,:T18,:T19,:T20,:TECELAGEM,
:VALOR_ICMS,:BASECALCULO_IPI,:BASECALCULO_PIS,:BASECALCULO_COFINS,
:VALOR_ACRESCIMO, :VALOR_FRETE, :VALOR_SEGURO, :PESO_LIQUIDO, :PESO_BRUTO, :CUBAGEM, :VOLUMES,
:VALOR_DESCONTO,:FISCAL_ISENTAS_IPI,:FISCAL_ISENTAS_ICMS,
:FISCAL_OUTRAS_IPI,:FISCAL_OUTRAS_ICMS,:FISCAL_VALOR_ICMS,:FISCAL_VALOR_IPI,
:FISCAL_VALOR_PIS,:FISCAL_VALOR_COFINS,:FISCAL_PERCENTUAL_ICMS,:FISCAL_PERCENTUAL_IPI,
:FISCAL_PERCENTUAL_PIS,:FISCAL_PERCENTUAL_COFINS,:FISCAL_BASECALCULO_ICMS,
:FISCAL_BASECALCULO_IPI,:FISCAL_BASECALCULO_PIS,:FISCAL_BASECALCULO_COFINS,
:VALOR_CONTABIL, :VALOR_BASECALCULO_ICMS, :FISCAL_CFOP_CODIGO,:FISCAL_TRIBUTACAO_ORIGEM,
:FISCAL_TRIBUTACAO_ICMS,:FISCAL_TRIBUTACAO_IPI,:FISCAL_TRIBUTACAO_PIS,
:FISCAL_TRIBUTACAO_COFINS,

:MODALIDADE_ICMS, :MODALIDADE_ICMS_ST, :MARGEM_ICMS_ST, :REDUCAO_ICMS_ST,
:BASECALCULO_ICMS_ST, :ALIQUOTA_ICMS_ST, :VALOR_ICMS_ST,
:FISCAL_REDUCAO_ICMS_ST, :FISCAL_BASECALCULO_ICMS_ST, :FISCAL_ALIQUOTA_ICMS_ST, :FISCAL_VALOR_ICMS_ST,
:PEDIDO_CLIENTE, :INFORMACOES_COMPLEMENTARES,
:FCI_MENSAGEM, :FCI_PARCELA_IMPORTACAO, :FCI_CONTEUDO_IMPORTACAO, :FCI_NUMERO,:CCUSTO,:CONTA_CONTABIL,:ENQUADRAMENTO_IPI,
:QUANTIDADE_ALTERNATIVA, :UM_ALTERNATIVA, :VALOR_ALTERNATIVO, :REDUCAO_BASE_PISCOF, :GC_WEB);

INSERT INTO TBNFS_ITEM_SALDO (            
NFS_ITEM_CONTROLE,NFS_CONTROLE,QUANTIDADE,
T01,T02,T03,T04,T05,T06,T07,T08,T09,T10,  
T11,T12,T13,T14,T15,T16,T17,T18,T19,T20)  
VALUES (                                  
:CONTROLE,:NFS_CONTROLE,:QUANTIDADE,
:T01,:T02,:T03,:T04,:T05,:T06,:T07,:T08,:T09,:T10,
:T11,:T12,:T13,:T14,:T15,:T16,:T17,:T18,:T19,:T20);

END;

-- PROCEDURE DE ATUALIZAÇÃO
CREATE OR ALTER PROCEDURE SPU_NFS_ITEM (
    NFS_CONTROLE INTEGER,
    CONTROLE INTEGER,
    ESTABELECIMENTO_CODIGO INTEGER,
    EMPRESA_CODIGO INTEGER,
    NUMERO_NOTAFISCAL INTEGER,
    DATA_EMISSAO DATE,
    SITUACAO INTEGER,
    NF_NATUREZA INTEGER,
    CFOP_CODIGO VARCHAR(5),
    NCM_CODIGO VARCHAR(10),
    TRIBUTACAO_ORIGEM INTEGER,
    TRIBUTACAO_IPI VARCHAR(2),
    TRIBUTACAO_ICMS INTEGER,
    TRIBUTACAO_PIS CHAR(2),
    TRIBUTACAO_COFINS CHAR(2),
    BASECALCULO_ICMS NUMERIC(10,5),
    PERCENTUAL_ICMS NUMERIC(10,5),
    PERCENTUAL_IPI NUMERIC(10,5),
    VALOR_IPI NUMERIC(10,5),
    PERCENTUAL_PIS NUMERIC(10,5),
    VALOR_PIS NUMERIC(10,5),
    PERCENTUAL_COFINS NUMERIC(10,5),
    VALOR_COFINS NUMERIC(10,5),
    VALOR_ICMS NUMERIC(10,2),
    BASECALCULO_IPI NUMERIC(10,2),
    BASECALCULO_PIS NUMERIC(10,2),
    BASECALCULO_COFINS NUMERIC(10,2),
    VALOR_ACRESCIMO NUMERIC(10,2),
    VALOR_DESCONTO NUMERIC(10,2),
    FISCAL_ISENTAS_IPI NUMERIC(10,2),
    FISCAL_ISENTAS_ICMS NUMERIC(10,2),
    FISCAL_OUTRAS_IPI NUMERIC(10,2),
    FISCAL_OUTRAS_ICMS NUMERIC(10,2),
    FISCAL_VALOR_ICMS NUMERIC(10,2),
    FISCAL_VALOR_IPI NUMERIC(10,2),
    FISCAL_VALOR_PIS NUMERIC(10,2),
    FISCAL_VALOR_COFINS NUMERIC(10,2),
    FISCAL_PERCENTUAL_ICMS NUMERIC(10,2),
    FISCAL_PERCENTUAL_IPI NUMERIC(10,2),
    FISCAL_PERCENTUAL_PIS NUMERIC(10,2),
    FISCAL_PERCENTUAL_COFINS NUMERIC(10,2),
    FISCAL_BASECALCULO_ICMS NUMERIC(10,2),
    FISCAL_BASECALCULO_IPI NUMERIC(10,2),
    FISCAL_BASECALCULO_PIS NUMERIC(10,2),
    FISCAL_BASECALCULO_COFINS NUMERIC(10,2),
    VALOR_CONTABIL NUMERIC(10,2),
    FISCAL_CFOP_CODIGO VARCHAR(5),
    FISCAL_TRIBUTACAO_ORIGEM INTEGER,
    FISCAL_TRIBUTACAO_ICMS INTEGER,
    FISCAL_TRIBUTACAO_IPI CHAR(2),
    FISCAL_TRIBUTACAO_PIS CHAR(2),
    FISCAL_TRIBUTACAO_COFINS CHAR(2),
    VALOR_UNITARIO NUMERIC(10,5),
    VALOR_TOTAL NUMERIC(10,5),
    VALOR_BASECALCULO_ICMS NUMERIC(10,2),
    MODALIDADE_ICMS CHAR(1),
    MODALIDADE_ICMS_ST CHAR(1),
    MARGEM_ICMS_ST NUMERIC(15,4),
    REDUCAO_ICMS_ST NUMERIC(15,4),
    BASECALCULO_ICMS_ST NUMERIC(15,4),
    ALIQUOTA_ICMS_ST NUMERIC(15,4),
    VALOR_ICMS_ST NUMERIC(15,4),
    GC_WEB INTEGER,
    QUANTIDADE NUMERIC(10,5),
    T01 NUMERIC(10,5),
    T02 NUMERIC(10,5),
    T03 NUMERIC(10,5),
    T04 NUMERIC(10,5),
    T05 NUMERIC(10,5),
    T06 NUMERIC(10,5),
    T07 NUMERIC(10,5),
    T08 NUMERIC(10,5),
    T09 NUMERIC(10,5),
    T10 NUMERIC(10,5),
    T11 NUMERIC(10,5),
    T12 NUMERIC(10,5),
    T13 NUMERIC(10,5),
    T14 NUMERIC(10,5),
    T15 NUMERIC(10,5),
    T16 NUMERIC(10,5),
    T17 NUMERIC(10,5),
    T18 NUMERIC(10,5),
    T19 NUMERIC(10,5),
    T20 NUMERIC(10,5))
AS
BEGIN

-- UPDATE TBNFS_ITEM
UPDATE TBNFS_ITEM SET
ESTABELECIMENTO_CODIGO              = :ESTABELECIMENTO_CODIGO,
EMPRESA_CODIGO                      = :EMPRESA_CODIGO,
NUMERO_NOTAFISCAL                   = :NUMERO_NOTAFISCAL,
DATA_EMISSAO                        = :DATA_EMISSAO,
NF_SITUACAO                         = :SITUACAO,
NF_NATUREZA                         = :NF_NATUREZA,
CFOP_CODIGO                         = :CFOP_CODIGO,
NCM_CODIGO                          = :NCM_CODIGO,
TRIBUTACAO_ORIGEM                   = :TRIBUTACAO_ORIGEM,
TRIBUTACAO_IPI                      = :TRIBUTACAO_IPI,
TRIBUTACAO_ICMS                     = :TRIBUTACAO_ICMS,
TRIBUTACAO_PIS                      = :TRIBUTACAO_PIS,
TRIBUTACAO_COFINS                   = :TRIBUTACAO_COFINS,
BASECALCULO_ICMS                    = :BASECALCULO_ICMS,
PERCENTUAL_ICMS                     = :PERCENTUAL_ICMS ,
PERCENTUAL_IPI                      = :PERCENTUAL_IPI,
VALOR_IPI                           = :VALOR_IPI,
PERCENTUAL_PIS                      = :PERCENTUAL_PIS,
VALOR_PIS                           = :VALOR_PIS,
PERCENTUAL_COFINS                   = :PERCENTUAL_COFINS,
VALOR_COFINS                        = :VALOR_COFINS,
VALOR_ICMS                          = :VALOR_ICMS           ,
BASECALCULO_IPI                     = :BASECALCULO_IPI      ,
BASECALCULO_PIS                     = :BASECALCULO_PIS      ,
BASECALCULO_COFINS                  = :BASECALCULO_COFINS   ,
VALOR_ACRESCIMO                     = :VALOR_ACRESCIMO      ,
VALOR_DESCONTO                      = :VALOR_DESCONTO       ,
FISCAL_ISENTAS_IPI                  = :FISCAL_ISENTAS_IPI   ,
FISCAL_ISENTAS_ICMS                 = :FISCAL_ISENTAS_ICMS  ,
FISCAL_OUTRAS_IPI                   = :FISCAL_OUTRAS_IPI    ,
FISCAL_OUTRAS_ICMS                  = :FISCAL_OUTRAS_ICMS   ,
FISCAL_VALOR_ICMS                   = :FISCAL_VALOR_ICMS    ,
FISCAL_VALOR_IPI                    = :FISCAL_VALOR_IPI     ,
FISCAL_VALOR_PIS                    = :FISCAL_VALOR_PIS     ,
FISCAL_VALOR_COFINS                 = :FISCAL_VALOR_COFINS  ,
FISCAL_PERCENTUAL_ICMS              = :FISCAL_PERCENTUAL_ICMS,
FISCAL_PERCENTUAL_IPI               = :FISCAL_PERCENTUAL_IPI ,
FISCAL_PERCENTUAL_PIS               = :FISCAL_PERCENTUAL_PIS ,
FISCAL_PERCENTUAL_COFINS            = :FISCAL_PERCENTUAL_COFINS,
FISCAL_BASECALCULO_ICMS             = :FISCAL_BASECALCULO_ICMS ,
FISCAL_BASECALCULO_IPI              = :FISCAL_BASECALCULO_IPI  ,
FISCAL_BASECALCULO_PIS              = :FISCAL_BASECALCULO_PIS  ,
FISCAL_BASECALCULO_COFINS           = :FISCAL_BASECALCULO_COFINS,
VALOR_CONTABIL                      = :VALOR_CONTABIL,
FISCAL_CFOP_CODIGO                  = :FISCAL_CFOP_CODIGO,
FISCAL_TRIBUTACAO_ORIGEM            = :FISCAL_TRIBUTACAO_ORIGEM,
FISCAL_TRIBUTACAO_ICMS              = :FISCAL_TRIBUTACAO_ICMS,
FISCAL_TRIBUTACAO_IPI               = :FISCAL_TRIBUTACAO_IPI,
FISCAL_TRIBUTACAO_PIS               = :FISCAL_TRIBUTACAO_PIS,
FISCAL_TRIBUTACAO_COFINS            = :FISCAL_TRIBUTACAO_COFINS,
VALOR_UNITARIO                      = :VALOR_UNITARIO,
VALOR_TOTAL                         = :VALOR_TOTAL,
VALOR_BASECALCULO_ICMS              = :VALOR_BASECALCULO_ICMS,
MODALIDADE_ICMS                     = :MODALIDADE_ICMS,
MODALIDADE_ICMS_ST                  = :MODALIDADE_ICMS_ST,
MARGEM_ICMS_ST                      = :MARGEM_ICMS_ST,
REDUCAO_ICMS_ST                     = :REDUCAO_ICMS_ST,
BASECALCULO_ICMS_ST                 = :BASECALCULO_ICMS_ST,
ALIQUOTA_ICMS_ST                    = :ALIQUOTA_ICMS_ST,
VALOR_ICMS_ST                       = :VALOR_ICMS_ST,
GC_WEB                              = :GC_WEB,
QUANTIDADE                          = :QUANTIDADE,
T01 = :T01, T02 = :T02, T03 = :T03, T04 = :T04,
T05 = :T05, T06 = :T06, T07 = :T07, T08 = :T08,
T09 = :T09, T10 = :T10, T11 = :T11, T12 = :T12,
T13 = :T13, T14 = :T14, T15 = :T15, T16 = :T16,
T17 = :T17, T18 = :T18, T19 = :T19, T20 = :T20


WHERE NFS_CONTROLE = :NFS_CONTROLE
  AND CONTROLE = :CONTROLE;

UPDATE  TBNFS_ITEM_SALDO SET
QUANTIDADE = :QUANTIDADE,
T01 = :T01, T02 = :T02, T03 = :T03, T04 = :T04,
   T05 = :T05, T06 = :T06, T07 = :T07, T08 = :T08,
   T09 = :T09, T10 = :T10, T11 = :T11, T12 = :T12,
   T13 = :T13, T14 = :T14, T15 = :T15, T16 = :T16,
   T17 = :T17, T18 = :T18, T19 = :T19, T20 = :T20
WHERE NFS_ITEM_CONTROLE = :CONTROLE AND NFS_CONTROLE = :NFS_CONTROLE;
END;