SET DEFINE OFF;

DROP TABLE MOARQUIVOCOBRANCAXFINANC;

-- MOARQUIVOCOBRANCAXFINANC
CREATE TABLE MOARQUIVOCOBRANCAXFINANC
  (
    id                        NUMERIC (14,0) DEFAULT 0 NOT NULL,
    idArquivoCobranca         NUMERIC (14,0) DEFAULT 0 NOT NULL,
    linhaArquivo              NUMERIC (14,0) DEFAULT 0 NOT NULL,
    idFinanceiro              NUMERIC (14,0) DEFAULT 0 NOT NULL,
    idBaixaFinanceiro         NUMERIC (14,0) DEFAULT 0 NOT NULL,
    ocorrenciaArquivoCobranca CHAR (2) DEFAULT '  ' NOT NULL,
    motivoArquivoCobranca     VARCHAR (4) DEFAULT ' ' NOT NULL,
    acaoArquivoCobranca       NUMERIC (2,0) DEFAULT 0 NOT NULL,
    observacoes               VARCHAR (4000) DEFAULT ' ' NOT NULL
  );
ALTER TABLE MOARQUIVOCOBRANCAXFINANC ADD CONSTRAINT MOARQUIVOCOBRANCAXFINANC_PK1 PRIMARY KEY (id);
CREATE INDEX MOARQUIVOCOBRANCAXFINANC_K2 ON MOARQUIVOCOBRANCAXFINANC (idArquivoCobranca, linhaArquivo);
CREATE INDEX MOARQUIVOCOBRANCAXFINANC_K3 ON MOARQUIVOCOBRANCAXFINANC (idArquivoCobranca);
CREATE INDEX MOARQUIVOCOBRANCAXFINANC_K4 ON MOARQUIVOCOBRANCAXFINANC (idFinanceiro);
CREATE INDEX MOARQUIVOCOBRANCAXFINANC_K5 ON MOARQUIVOCOBRANCAXFINANC (idBaixaFinanceiro);
ALTER TABLE MOARQUIVOCOBRANCAXFINANC ADD CONSTRAINT MOARQUIVOCOBRANCAXFINANC_FK1 FOREIGN KEY (idArquivoCobranca) REFERENCES MOARQUIVOSCOBRANCA (idArquivoCobranca);
ALTER TABLE MOARQUIVOCOBRANCAXFINANC ADD CONSTRAINT MOARQUIVOCOBRANCAXFINANC_FK2 FOREIGN KEY (idFinanceiro) REFERENCES MOFINANCEIROS (idFinanceiro);
ALTER TABLE MOARQUIVOCOBRANCAXFINANC ADD CONSTRAINT MOARQUIVOCOBRANCAXFINANC_FK3 FOREIGN KEY (idBaixaFinanceiro) REFERENCES MOFINANCEIROXBAIXAS (idBaixaFinanceiro);
ALTER TABLE MOARQUIVOCOBRANCAXFINANC ADD CONSTRAINT MOARQUIVOCOBRANCAXFINANC_FK4 FOREIGN KEY (acaoArquivoCobranca) REFERENCES SIACOESARQUIVOSCOBRANCA (acaoArquivoCobranca);

INSERT INTO MOARQUIVOCOBRANCAXFINANC (id, idArquivoCobranca, linhaArquivo, idFinanceiro, idBaixaFinanceiro, ocorrenciaArquivoCobranca, motivoArquivoCobranca, acaoArquivoCobranca, observacoes) VALUES (0, 0, 0, 0, 0, '  ', ' ', 0, ' ');

COMMIT;

DROP TABLE TEMPCNABRETORNO;

--TEMPCNABRETORNO
CREATE GLOBAL TEMPORARY TABLE TEMPCNABRETORNO
  (
    uniqueMachineID           VARCHAR (18) DEFAULT ' ' NOT NULL,
    idSessao                  NUMERIC (14,0) DEFAULT 0 NOT NULL,
    ocorrenciaArquivoCobranca CHAR (2) DEFAULT '  ' NOT NULL,
    motivoArquivoCobranca     VARCHAR (4) DEFAULT ' ' NOT NULL,
    acaoArquivoCobranca       NUMERIC (2,0) DEFAULT 0 NOT NULL,
    idFinanceiro              NUMERIC (14,0) DEFAULT 0 NOT NULL,
    contador                  NUMERIC (14,0) DEFAULT 0 NOT NULL,
    descricaoOcorrencia       VARCHAR (256) DEFAULT ' ' NOT NULL,
    descricaoMotivo           VARCHAR (256) DEFAULT ' ' NOT NULL,
    nossoNumero               VARCHAR (25) DEFAULT ' ' NOT NULL,
    vencimento                DATE,
    valorTitulo               NUMERIC (15,2) DEFAULT 0 NOT NULL,
    dataCredito               DATE,
    valorPago                 NUMERIC (15,2) DEFAULT 0 NOT NULL,
    nomeRazaoSocial           VARCHAR (60) DEFAULT ' ' NOT NULL
  ) ON COMMIT PRESERVE ROWS;
CREATE UNIQUE INDEX TEMPRETORNOCNAB_PK1 ON TEMPCNABRETORNO (uniqueMachineID, idSessao, ocorrenciaArquivoCobranca, motivoArquivoCobranca, acaoArquivoCobranca, idFinanceiro, contador);

create or replace FUNCTION FUNC_ADD_BUSCA_ESTOQUE_FISCAL(
    p_dataPosicaoEstoque          IN DATE,
    p_gradeProduto                IN NUMBER,
    p_estabelecimento             IN NUMBER,
    p_indicadorPropriedadePosseIt IN CHAR,
    p_pessoaParticipante          IN NUMBER,
    p_localEstoque                IN NUMBER,
    p_personalizacao              IN NUMBER,
    p_idLoteEstoque               IN NUMBER,
    p_idEnderecoEstoque           IN NUMBER,
    p_idNumeroSerie               IN NUMBER,
    p_gradProd_produto            IN NUMBER,
    p_prod_controleEstoque        IN NUMBER,
    p_documentoDesconsiderar      IN CHAR, -- D = Documento Fiscal, I = Inventário Estoque
    p_idDocumentoDesconsiderar    IN NUMBER)
  RETURN NUMBER
IS
  v_idInventarioEstoque          NUMBER;
  v_dataInventario               DATE;
  v_dataPosicaoEstoqueInicial    DATE;
  v_quantidadeInventario         NUMBER;
  v_quantidadeEstoque            NUMBER;
  v_quantidadeFiscal             NUMBER;
  v_quantidadeFiscalFilho        NUMBER;
BEGIN
  v_quantidadeInventario         := 0;
  v_quantidadeEstoque            := 0;
  v_quantidadeFiscal             := 0;
  v_quantidadeFiscalFilho        := 0;
  -- KIT / COMBO
  IF p_prod_controleEstoque IN (3,4) THEN
    -- Busca estoque do item filho com menor estoque
    SELECT COALESCE((
      SELECT MIN (TRUNC((FUNC_ADD_BUSCA_ESTOQUE_FISCAL(
        p_dataPosicaoEstoque,
        kit.gradeProdutoFilho,
        p_estabelecimento,
        p_indicadorPropriedadePosseIt,
        p_pessoaParticipante,
        p_localEstoque,
        0,
        0,
        p_idEnderecoEstoque,
        0,
        gradProdFilho.produto,
        prodFilho.controleEstoque,
        p_documentoDesconsiderar,
        p_idDocumentoDesconsiderar) / kit.quantidade), uniMedPai.casasDecimaisUnidadeMedida))
      FROM CAGRADEPRODUTOXKITSCOMBOS kit
      JOIN CAGRADESPRODUTO gradProdFilho
      ON gradProdFilho.gradeProduto = kit.gradeProdutoFilho
      JOIN CAPRODUTOS prodFilho
      ON prodFilho.produto = gradProdFilho.produto
      JOIN CAGRADESPRODUTO gradProdPai
      ON gradProdPai.gradeProduto = kit.gradeProduto
      JOIN CAPRODUTOS prodPai
      ON prodPai.produto = gradProdPai.produto
      JOIN SIUNIDADESMEDIDA uniMedPai
      ON uniMedPai.unidadeMedida = prodPai.unidadeMedida
      WHERE kit.gradeProduto = p_gradeProduto
      AND kit.ativo = 1
      AND kit.quantidade > 0
      AND kit.gradeProduto <> kit.gradeProdutoFilho
      AND prodFilho.controleEstoque IN (1,3,4,5,11,12)),0)
    INTO v_quantidadeEstoque
    FROM DUAL;
  -- DEMAIS PRODUTOS (EXCETO KIT / COMBO)
  ELSIF p_prod_controleEstoque IN (1,5,11,12) THEN
    -- v_idInventarioEstoque / v_dataInventario
    SELECT
      TO_NUMBER(SUBSTR(a.ordenacao,9,14)), 
      TO_DATE(SUBSTR(a.ordenacao,1,8),'YYYYMMDD')
    INTO
      v_idInventarioEstoque,
      v_dataInventario
    FROM (
      SELECT
        COALESCE(MAX(TO_CHAR(TRUNC(inv.data),'YYYYMMDD')
          || LPAD (inv.inventarioEstoque,14,'0')),'1900010100000000000000') ordenacao
      FROM MOINVENTARIOSESTOQUE inv
      WHERE inv.estabelecimento = p_estabelecimento
      AND inv.inventarioEstoque <> 0
      AND (p_documentoDesconsiderar <> 'I'
        OR inv.inventarioEstoque <> p_idDocumentoDesconsiderar)
      AND inv.data < TRUNC(p_dataPosicaoEstoque) + CASE WHEN p_documentoDesconsiderar <> 'I' AND inv.motivoInventarioEstoque = '01' THEN 1 ELSE 0 END
      AND (inv.motivoInventarioEstoque = '01'
        OR EXISTS(
          SELECT 1
          FROM MOINVENTARIOESTOQUEXITENS itemInv
          JOIN CAGRADESPRODUTO gradProd ON gradProd.gradeProduto = itemInv.gradeProduto
          WHERE itemInv.inventarioEstoque = inv.inventarioEstoque
          AND gradProd.produto = p_gradProd_produto))) a;
    -- v_dataPosicaoEstoqueInicial
    SELECT COALESCE((
      SELECT MAX (est.data)
        FROM MOESTOQUES est
        JOIN CAGRADESPRODUTO gradProd ON gradProd.gradeProduto = est.gradeProduto
        WHERE gradProd.produto = p_gradProd_produto
        AND est.estabelecimento = p_estabelecimento
        AND est.operacaoInternaEstoque = 1
        AND est.data < TRUNC (p_dataPosicaoEstoque) + 1
        AND (v_idInventarioEstoque <= 0
		  OR est.data >= TRUNC(v_dataInventario)+1)),
      CASE
        WHEN v_idInventarioEstoque > 0 AND NOT (v_dataInventario IS NULL)
        THEN TRUNC (v_dataInventario) + 1
        ELSE TO_DATE ('01/01/1900','DD/MM/YYYY')
      END)
    INTO v_dataPosicaoEstoqueInicial
    FROM DUAL;
    -- v_quantidadeInventario
    IF v_idInventarioEstoque > 0 THEN
      SELECT COALESCE((
        SELECT SUM (est.quantidadeFiscal)
        FROM MOINVENTARIOESTOQUEXITENS est
        JOIN PALOCAISESTOQUE locEst
        ON locEst.localEstoque = est.localEstoque
        JOIN CAGRADESPRODUTO gradProd
        ON gradProd.gradeProduto = est.gradeProduto
        WHERE est.inventarioEstoque = v_idInventarioEstoque
        AND est.gradeProduto = p_gradeProduto
        AND (p_documentoDesconsiderar <> 'I'
          AND (p_indicadorPropriedadePosseIt IS NULL
		        OR p_indicadorPropriedadePosseIt = ' ')
		      OR est.indicadorPropriedadePosseItem = '' || p_indicadorPropriedadePosseIt || '')
        AND (p_documentoDesconsiderar <> 'I'
          AND p_pessoaParticipante = 0
		      OR est.pessoaParticipante = p_pessoaParticipante)
        AND (p_documentoDesconsiderar <> 'I'
          AND p_localEstoque = 0
		      AND locEst.validoEstoqueTotal = 1
		      OR est.localEstoque = p_localEstoque)
        AND (p_documentoDesconsiderar <> 'I'
          AND p_personalizacao = 0
		      OR est.personalizacao = p_personalizacao)
        AND (p_documentoDesconsiderar <> 'I'
          AND p_idLoteEstoque = 0
		      OR est.idLoteEstoque = p_idLoteEstoque)
        AND (p_documentoDesconsiderar <> 'I'
          AND p_idEnderecoEstoque = 0
		      OR est.idEnderecoEstoque = p_idEnderecoEstoque)
        AND (p_idNumeroSerie = 0
		      OR est.idNumeroSerie = CASE WHEN p_idNumeroSerie < 0 THEN 0 ELSE p_idNumeroSerie END)),0)
      INTO v_quantidadeInventario
      FROM DUAL;
    END IF;
    -- v_quantidadeEstoque
    IF TRUNC (v_dataPosicaoEstoqueInicial) <= TRUNC (p_dataPosicaoEstoque) THEN
      SELECT COALESCE((
        SELECT SUM (est.quantidade * CASE WHEN est.entradaSaida = 'S' THEN (-1) ELSE 1 END)
        FROM MOESTOQUES est
        JOIN PALOCAISESTOQUE locEst
        ON locEst.localEstoque = est.localEstoque
        WHERE est.gradeProduto = p_gradeProduto
        AND est.estabelecimento = p_estabelecimento
        AND est.data >= TRUNC (v_dataPosicaoEstoqueInicial)
        AND est.data < TRUNC (p_dataPosicaoEstoque) + 1
        AND (p_documentoDesconsiderar <> 'I'
          AND (p_indicadorPropriedadePosseIt IS NULL
		        OR p_indicadorPropriedadePosseIt = ' ')
		      OR est.indicadorPropriedadePosseItem = '' || p_indicadorPropriedadePosseIt || '')
        AND (p_documentoDesconsiderar <> 'I'
          AND p_pessoaParticipante = 0
		      OR est.pessoaParticipante = p_pessoaParticipante)
        AND (p_documentoDesconsiderar <> 'I'
          AND p_localEstoque = 0
		      AND locEst.validoEstoqueTotal = 1
		      OR est.localEstoque = p_localEstoque)
        AND (p_documentoDesconsiderar <> 'I'
          AND p_personalizacao = 0
		      OR est.personalizacao = p_personalizacao)
        AND (p_documentoDesconsiderar <> 'I'
          AND p_idLoteEstoque = 0
		      OR est.idLoteEstoque = p_idLoteEstoque)
        AND (p_documentoDesconsiderar <> 'I'
          AND p_idEnderecoEstoque = 0
		      OR est.idEnderecoEstoque = p_idEnderecoEstoque)
        AND (p_idNumeroSerie = 0
		      OR est.idNumeroSerie = CASE WHEN p_idNumeroSerie < 0 THEN 0 ELSE p_idNumeroSerie END)
        AND est.operacaoInternaEstoque IN (101,900)),0)
      INTO v_quantidadeEstoque
      FROM DUAL;
      SELECT COALESCE((
        SELECT SUM (CASE WHEN numSerie.idNumeroSerieDocFiscal IS NULL THEN COALESCE(endEst.quantidade,itemDoc.quantidade) ELSE 1 END * CASE WHEN cabDoc.entradaSaida = 'S' THEN (-1) ELSE 1 END)
        FROM MODOCFISCALXITENS itemDoc
        JOIN MODOCUMENTOSFISCAIS cabDoc
        ON cabDoc.idDocumentoFiscal = itemDoc.idDocumentoFiscal
        JOIN PALOCAISESTOQUE locEst
        ON locEst.localEstoque = itemDoc.localEstoque
        LEFT JOIN MODOCFISCALXENDERECOESTOQ endEst
        ON endEst.idItemDocFiscal = itemDoc.idItemDocFiscal
        LEFT JOIN MODOCFISCALXNUMEROSSERIE numSerie
        ON numSerie.idItemDocFiscal = itemDoc.idItemDocFiscal
        AND numSerie.idEnderecoEstoqueDocFiscal = COALESCE(endEst.idEnderecoEstoqueDocFiscal,0)
        AND numSerie.gradeProduto = itemDoc.gradeProduto
        WHERE itemDoc.gradeProduto = p_gradeProduto
        AND itemDoc.movimentaEstoqueFiscal = 1
        AND cabDoc.estabelecimento = p_estabelecimento
        AND cabDoc.dataEntradaSaida >= TRUNC (v_dataPosicaoEstoqueInicial)
        AND cabDoc.dataEntradaSaida < TRUNC (p_dataPosicaoEstoque) + 1
        AND (p_documentoDesconsiderar <> 'D'
          OR itemDoc.idItemDocFiscal <> p_idDocumentoDesconsiderar)
        AND (p_documentoDesconsiderar <> 'I'
          AND (p_indicadorPropriedadePosseIt IS NULL
            OR p_indicadorPropriedadePosseIt = ' ')
          OR locEst.indicadorPropriedadePosseItem = '' || p_indicadorPropriedadePosseIt || '')
        AND (p_documentoDesconsiderar <> 'I'
          AND p_pessoaParticipante = 0
          OR itemDoc.pessoaParticipante = p_pessoaParticipante)
        AND (p_documentoDesconsiderar <> 'I'
          AND p_localEstoque = 0
          AND locEst.validoEstoqueTotal = 1
          OR itemDoc.localEstoque = p_localEstoque)
        AND (p_documentoDesconsiderar <> 'I'
          AND p_personalizacao = 0
          OR itemDoc.personalizacao = p_personalizacao)
        AND (p_documentoDesconsiderar <> 'I'
          AND p_idLoteEstoque = 0
          OR itemDoc.idLoteEstoque = p_idLoteEstoque)
        AND (p_documentoDesconsiderar <> 'I'
          AND p_idEnderecoEstoque = 0
		      OR COALESCE(endEst.idEnderecoEstoque,0) = p_idEnderecoEstoque)
        AND (p_idNumeroSerie = 0
		      OR COALESCE(numSerie.idNumeroSerie,0) = CASE WHEN p_idNumeroSerie < 0 THEN 0 ELSE p_idNumeroSerie END)
        AND NOT(EXISTS(
          SELECT 1
          FROM MODOCFISCALXPRODUTOFILHO filhoDoc
          WHERE filhoDoc.idItemDocFiscal = itemDoc.idItemDocFiscal))),0)
      INTO v_quantidadeFiscal
      FROM DUAL;
      SELECT COALESCE((
        SELECT SUM (filhoDoc.quantidade * CASE WHEN cabDoc.entradaSaida = 'S' THEN (-1) ELSE 1 END)
        FROM MODOCFISCALXPRODUTOFILHO filhoDoc
        JOIN MODOCFISCALXITENS itemDoc
        ON itemDoc.idItemDocFiscal = filhoDoc.idItemDocFiscal
        JOIN MODOCUMENTOSFISCAIS cabDoc
        ON cabDoc.idDocumentoFiscal = itemDoc.idDocumentoFiscal
        JOIN PALOCAISESTOQUE locEst
        ON locEst.localEstoque = itemDoc.localEstoque
        WHERE filhoDoc.gradeProduto = p_gradeProduto
        AND itemDoc.movimentaEstoqueFiscal = 1
        AND cabDoc.estabelecimento = p_estabelecimento
        AND cabDoc.dataEntradaSaida >= TRUNC (v_dataPosicaoEstoqueInicial)
        AND cabDoc.dataEntradaSaida < TRUNC (p_dataPosicaoEstoque) + 1
        AND (p_documentoDesconsiderar <> 'D'
          OR itemDoc.idItemDocFiscal <> p_idDocumentoDesconsiderar)
        AND (p_documentoDesconsiderar <> 'I'
          AND (p_indicadorPropriedadePosseIt IS NULL
            OR p_indicadorPropriedadePosseIt = ' ')
          OR locEst.indicadorPropriedadePosseItem = '' || p_indicadorPropriedadePosseIt || '')
        AND (p_documentoDesconsiderar <> 'I'
          AND p_pessoaParticipante = 0
          OR itemDoc.pessoaParticipante = p_pessoaParticipante)
        AND (p_documentoDesconsiderar <> 'I'
          AND p_localEstoque = 0
          AND locEst.validoEstoqueTotal = 1
          OR itemDoc.localEstoque = p_localEstoque)
        AND (p_documentoDesconsiderar <> 'I'
          AND p_personalizacao = 0
          OR filhoDoc.personalizacao = p_personalizacao)
        AND (p_documentoDesconsiderar <> 'I'
          AND p_idLoteEstoque = 0
          OR filhoDoc.idLoteEstoque = p_idLoteEstoque)
        AND (p_documentoDesconsiderar <> 'I'
          AND p_idEnderecoEstoque = 0
		      OR filhoDoc.idEnderecoEstoque = p_idEnderecoEstoque)
        AND (p_idNumeroSerie = 0
		      OR filhoDoc.idNumeroSerie = CASE WHEN p_idNumeroSerie < 0 THEN 0 ELSE p_idNumeroSerie END)),0)
      INTO v_quantidadeFiscalFilho
      FROM DUAL;
    END IF;
  END IF;
  RETURN
    v_quantidadeInventario
    + v_quantidadeEstoque
    + v_quantidadeFiscal
    + v_quantidadeFiscalFilho;
END;

/

create or replace FUNCTION FUNC_ADD_BUSCA_ESTOQUE_GERENC(
    p_dataPosicaoEstoque          IN DATE,
    p_gradeProduto                IN NUMBER,
    p_estabelecimento             IN NUMBER,
    p_indicadorPropriedadePosseIt IN CHAR,
    p_pessoaParticipante          IN NUMBER,
    p_localEstoque                IN NUMBER,
    p_personalizacao              IN NUMBER,
    p_idLoteEstoque               IN NUMBER,
    p_idEnderecoEstoque           IN NUMBER,
    p_idNumeroSerie               IN NUMBER,
    p_gradProd_produto            IN NUMBER,
    p_prod_controleEstoque        IN NUMBER,
    p_documentoDesconsiderar      IN CHAR, -- D = Documento Fiscal, I = Inventário Estoque, P = Pré-Documento
    p_idDocumentoDesconsiderar    IN NUMBER)
  RETURN NUMBER
IS
  v_idInventarioEstoque       NUMBER;
  v_dataInventario            DATE;
  v_dataPosicaoEstoqueInicial DATE;
  v_quantidadeInventario      NUMBER;
  v_quantidadeEstoque         NUMBER;
  v_quantidadeDocumentoFiscal NUMBER;
  v_quantidadePreDocumento    NUMBER;
BEGIN
  v_quantidadeInventario      := 0;
  v_quantidadeEstoque         := 0;
  v_quantidadeDocumentoFiscal := 0;
  v_quantidadePreDocumento    := 0;
  -- KIT / COMBO
  IF p_prod_controleEstoque IN (3,4) THEN
    -- Busca estoque do item filho com menor estoque
    SELECT COALESCE((
      SELECT MIN (TRUNC((FUNC_ADD_BUSCA_ESTOQUE_GERENC(
        p_dataPosicaoEstoque,
        kit.gradeProdutoFilho,
        p_estabelecimento,
        p_indicadorPropriedadePosseIt,
        p_pessoaParticipante,
        p_localEstoque,
        0,
        0,
        p_idEnderecoEstoque,
        0,
        gradProdFilho.produto,
        prodFilho.controleEstoque,
        p_documentoDesconsiderar,
        p_idDocumentoDesconsiderar) / kit.quantidade), uniMedPai.casasDecimaisUnidadeMedida))
      FROM CAGRADEPRODUTOXKITSCOMBOS kit
      JOIN CAGRADESPRODUTO gradProdFilho
      ON gradProdFilho.gradeProduto = kit.gradeProdutoFilho
      JOIN CAPRODUTOS prodFilho
      ON prodFilho.produto = gradProdFilho.produto
      JOIN CAGRADESPRODUTO gradProdPai
      ON gradProdPai.gradeProduto = kit.gradeProduto
      JOIN CAPRODUTOS prodPai
      ON prodPai.produto = gradProdPai.produto
      JOIN SIUNIDADESMEDIDA uniMedPai
      ON uniMedPai.unidadeMedida = prodPai.unidadeMedida
      WHERE kit.gradeProduto = p_gradeProduto
      AND kit.ativo = 1
      AND kit.quantidade > 0
      AND kit.gradeProduto <> kit.gradeProdutoFilho
      AND prodFilho.controleEstoque IN (1,3,4,5,11,12)),0)
    INTO v_quantidadeEstoque
    FROM DUAL;
  -- DEMAIS PRODUTOS (EXCETO KIT / COMBO)
  ELSIF p_prod_controleEstoque IN (1,5,11,12) THEN
    -- v_idInventarioEstoque / v_dataInventario
    SELECT
      TO_NUMBER(SUBSTR(a.ordenacao,9,14)), 
      TO_DATE(SUBSTR(a.ordenacao,1,8),'YYYYMMDD')
    INTO
      v_idInventarioEstoque,
      v_dataInventario
    FROM (
      SELECT
        COALESCE(MAX(TO_CHAR(TRUNC(inv.data),'YYYYMMDD')
          || LPAD (inv.inventarioEstoque,14,'0')),'1900010100000000000000') ordenacao
      FROM MOINVENTARIOSESTOQUE inv
      WHERE inv.estabelecimento = p_estabelecimento
      AND inv.inventarioEstoque <> 0
      AND (p_documentoDesconsiderar <> 'I'
        OR inv.inventarioEstoque <> p_idDocumentoDesconsiderar)
      AND inv.data < TRUNC(p_dataPosicaoEstoque) + CASE WHEN p_documentoDesconsiderar <> 'I' AND inv.motivoInventarioEstoque = '01' THEN 1 ELSE 0 END
      AND (inv.motivoInventarioEstoque = '01'
        OR EXISTS(
          SELECT 1
          FROM MOINVENTARIOESTOQUEXITENS itemInv
          JOIN CAGRADESPRODUTO gradProd
          ON gradProd.gradeProduto = itemInv.gradeProduto
          WHERE itemInv.inventarioEstoque = inv.inventarioEstoque
          AND gradProd.produto = p_gradProd_produto))) a;
    -- v_dataPosicaoEstoqueInicial
    SELECT COALESCE((
      SELECT MAX (est.data)
        FROM MOESTOQUES est
        JOIN CAGRADESPRODUTO gradProd
        ON gradProd.gradeProduto = est.gradeProduto
        WHERE gradProd.produto = p_gradProd_produto
        AND est.estabelecimento = p_estabelecimento
        AND est.operacaoInternaEstoque = 1
        AND est.data < TRUNC (p_dataPosicaoEstoque) + 1
        AND (v_idInventarioEstoque <= 0
		  OR est.data >= TRUNC(v_dataInventario)+1)),
      CASE
        WHEN v_idInventarioEstoque > 0 AND NOT (v_dataInventario IS NULL)
        THEN TRUNC (v_dataInventario) + 1
        ELSE TO_DATE ('01/01/1900','DD/MM/YYYY')
      END)
    INTO v_dataPosicaoEstoqueInicial
    FROM DUAL;
    -- v_quantidadeInventario
    IF v_idInventarioEstoque > 0 THEN
      SELECT COALESCE((
        SELECT SUM (est.quantidadeGerencial)
        FROM MOINVENTARIOESTOQUEXITENS est
        JOIN PALOCAISESTOQUE locEst
        ON locEst.localEstoque = est.localEstoque
        JOIN CAGRADESPRODUTO gradProd
        ON gradProd.gradeProduto = est.gradeProduto
        WHERE est.inventarioEstoque = v_idInventarioEstoque
        AND est.gradeProduto = p_gradeProduto
        AND (p_documentoDesconsiderar <> 'I'
          AND (p_indicadorPropriedadePosseIt IS NULL
		        OR p_indicadorPropriedadePosseIt = ' ')
		      OR est.indicadorPropriedadePosseItem = '' || p_indicadorPropriedadePosseIt || '')
        AND (p_documentoDesconsiderar <> 'I'
          AND p_pessoaParticipante = 0
		      OR est.pessoaParticipante = p_pessoaParticipante)
        AND (p_documentoDesconsiderar <> 'I'
          AND p_localEstoque = 0
		      AND locEst.validoEstoqueTotal = 1
		      OR est.localEstoque = p_localEstoque)
        AND (p_documentoDesconsiderar <> 'I'
          AND p_personalizacao = 0
		      OR est.personalizacao = p_personalizacao)
        AND (p_documentoDesconsiderar <> 'I'
          AND p_idLoteEstoque = 0
		      OR est.idLoteEstoque = p_idLoteEstoque)
        AND (p_documentoDesconsiderar <> 'I'
          AND p_idEnderecoEstoque = 0
		      OR est.idEnderecoEstoque = p_idEnderecoEstoque)
        AND (p_idNumeroSerie = 0
		      OR est.idNumeroSerie = CASE WHEN p_idNumeroSerie < 0 THEN 0 ELSE p_idNumeroSerie END)),0)
      INTO v_quantidadeInventario
      FROM DUAL;
    END IF;
    -- v_quantidadeEstoque
    IF TRUNC (v_dataPosicaoEstoqueInicial) <= TRUNC (p_dataPosicaoEstoque) THEN
      SELECT COALESCE((
        SELECT SUM (est.quantidade * CASE WHEN est.entradaSaida = 'S' THEN (-1) ELSE 1 END)
        FROM MOESTOQUES est
        JOIN PALOCAISESTOQUE locEst
        ON locEst.localEstoque = est.localEstoque
        WHERE est.gradeProduto = p_gradeProduto
        AND est.estabelecimento = p_estabelecimento
        AND est.data >= TRUNC (v_dataPosicaoEstoqueInicial)
        AND est.data < TRUNC (p_dataPosicaoEstoque) + 1
        AND (p_documentoDesconsiderar <> 'I'
          AND (p_indicadorPropriedadePosseIt IS NULL
		      OR p_indicadorPropriedadePosseIt = ' ')
		      OR est.indicadorPropriedadePosseItem = '' || p_indicadorPropriedadePosseIt || '')
        AND (p_documentoDesconsiderar <> 'I'
          AND p_pessoaParticipante = 0
		      OR est.pessoaParticipante = p_pessoaParticipante)
        AND (p_documentoDesconsiderar <> 'I'
          AND p_localEstoque = 0
		      AND locEst.validoEstoqueTotal = 1
		      OR est.localEstoque = p_localEstoque)
        AND (p_documentoDesconsiderar <> 'I'
          AND p_personalizacao = 0
		      OR est.personalizacao = p_personalizacao)
        AND (p_documentoDesconsiderar <> 'I'
          AND p_idLoteEstoque = 0
		      OR est.idLoteEstoque = p_idLoteEstoque)
        AND (p_documentoDesconsiderar <> 'I'
          AND p_idEnderecoEstoque = 0
		      OR est.idEnderecoEstoque = p_idEnderecoEstoque)
        AND (p_idNumeroSerie = 0
		      OR est.idNumeroSerie = CASE WHEN p_idNumeroSerie < 0 THEN 0 ELSE p_idNumeroSerie END)),0)
      INTO v_quantidadeEstoque
      FROM DUAL;
    END IF;
    -- v_quantidadeDocumentoFiscal
    IF p_documentoDesconsiderar = 'D' AND p_idDocumentoDesconsiderar > 0 THEN
      SELECT COALESCE((
        SELECT SUM (est.quantidade * CASE WHEN est.entradaSaida = 'S' THEN (-1) ELSE 1 END)
        FROM MODOCFISCALXITENS itemDoc
        JOIN MODOCFISCALXESTOQUE docXEst
        ON docXEst.idItemDocFiscal = itemDoc.idItemDocFiscal
        JOIN MOESTOQUES est
        ON est.idEstoque = docXEst.idEstoque
        JOIN PALOCAISESTOQUE locEst
        ON locEst.localEstoque = est.localEstoque
        WHERE itemDoc.idDocumentoFiscal = p_idDocumentoDesconsiderar
        AND est.gradeProduto = p_gradeProduto
        AND est.estabelecimento = p_estabelecimento
        AND est.data < TRUNC (p_dataPosicaoEstoque) + 1
        AND (p_indicadorPropriedadePosseIt IS NULL
		      OR p_indicadorPropriedadePosseIt = ' '
		      OR est.indicadorPropriedadePosseItem = '' || p_indicadorPropriedadePosseIt || '')
        AND (p_pessoaParticipante = 0
		      OR est.pessoaParticipante = p_pessoaParticipante)
        AND (p_localEstoque = 0
		      AND locEst.validoEstoqueTotal = 1
		      OR est.localEstoque = p_localEstoque)
        AND (p_personalizacao = 0
		      OR est.personalizacao = p_personalizacao)
        AND (p_idLoteEstoque = 0
		      OR est.idLoteEstoque = p_idLoteEstoque)
        AND (p_idEnderecoEstoque = 0
		      OR est.idEnderecoEstoque = p_idEnderecoEstoque)
        AND (p_idNumeroSerie = 0
		      OR est.idNumeroSerie = CASE WHEN p_idNumeroSerie < 0 THEN 0 ELSE p_idNumeroSerie END)),0)
      INTO v_quantidadeDocumentoFiscal
      FROM DUAL;
    END IF;
    -- v_quantidadePreDocumento
    IF p_documentoDesconsiderar = 'P' AND p_idDocumentoDesconsiderar > 0 THEN
      SELECT COALESCE((
        SELECT SUM (est.quantidade * CASE WHEN est.entradaSaida = 'S' THEN (-1) ELSE 1 END)
        FROM MOPREDOCUMXITENS itemDoc
        JOIN MOPREDOCUMXESTOQUE docXEst
        ON docXEst.idItemPreDocumento = itemDoc.idItemPreDocumento
        JOIN MOESTOQUES est
        ON est.idEstoque = docXEst.idEstoque
        JOIN PALOCAISESTOQUE locEst
        ON locEst.localEstoque = est.localEstoque
        WHERE itemDoc.preDocumento = p_idDocumentoDesconsiderar
        AND est.gradeProduto = p_gradeProduto
        AND est.estabelecimento = p_estabelecimento
        AND est.data < TRUNC (p_dataPosicaoEstoque) + 1
        AND (p_indicadorPropriedadePosseIt IS NULL
		      OR p_indicadorPropriedadePosseIt = ' '
		      OR est.indicadorPropriedadePosseItem = '' || p_indicadorPropriedadePosseIt || '')
        AND (p_pessoaParticipante = 0
		      OR est.pessoaParticipante = p_pessoaParticipante)
        AND (p_localEstoque = 0
		      AND locEst.validoEstoqueTotal = 1
		      OR est.localEstoque = p_localEstoque)
        AND (p_personalizacao = 0
		      OR est.personalizacao = p_personalizacao)
        AND (p_idLoteEstoque = 0
		      OR est.idLoteEstoque = p_idLoteEstoque)
        AND (p_idEnderecoEstoque = 0
		      OR est.idEnderecoEstoque = p_idEnderecoEstoque)
        AND (p_idNumeroSerie = 0
		      OR est.idNumeroSerie = CASE WHEN p_idNumeroSerie < 0 THEN 0 ELSE p_idNumeroSerie END)),0)
      INTO v_quantidadePreDocumento
      FROM DUAL;
    END IF;
  END IF;
  RETURN
    v_quantidadeInventario
    + v_quantidadeEstoque
    - v_quantidadeDocumentoFiscal
    - v_quantidadePreDocumento;
END;

/

INSERT INTO SIMENUS (menu, descricao, ativo, ordenacao, tipoMenu, categoriaMenu, menuPrincipal, aplicacao, nomePublico, categoriaConfiguracao, categoriaPersonalCampo, categoriaMemoriaSistema, permiteReport, observacoes) values (871, 'Resumo de Ordens de Serviços', 1, 400001109, 'RE', 400001, 871, '%SYS_DIR%Versoes\%SYS_VER%\Relatorios.ecf', 'RelResumoDeOrdensDeServicos', 0, 0, 0, 0, ' ');

COMMIT;

create or replace PROCEDURE ADD_MOFINANCEIROS_EXCLUICORREL (
  p_idFinanceiro                IN NUMBER)
IS
  CURSOR c_mot IS
    SELECT idMotivoBloqueioDocumento
    FROM MOMOTBLOQXFINANCEIROS
    WHERE idFinanceiro = p_idFinanceiro;
BEGIN
  FOR a IN c_mot
  LOOP
    ADD_MOMOTIVOSBLOQUEIOS_EXCLUI (a.idMotivoBloqueioDocumento);
  END LOOP;
  -- Desvincula Financeiro
  UPDATE MOARQUIVOSCONCILIACOES    a SET a.situacaoConciliacao = 'I' WHERE a.situacaoConciliacao = 'F' AND EXISTS (SELECT 1 FROM MOCONCILIACOESCARTOES b WHERE b.idArquivoConciliacao = a.idArquivoConciliacao AND b.idFinanceiro = p_idFinanceiro);
  UPDATE MOARQUIVOCOBRANCAXFINANC    SET idFinanceiro = 0, idBaixaFinanceiro = 0 WHERE idFinanceiro = p_idFinanceiro;
  UPDATE MOCONCILIACOESCARTOES       SET idFinanceiro = 0, idBaixaFinanceiro = 0 WHERE idFinanceiro = p_idFinanceiro;
  UPDATE MOSPCREGISTROS              SET idFinanceiro = 0 WHERE idFinanceiro = p_idFinanceiro;
  UPDATE MOPREVFINANCXFINANCEIRO     SET idFinanceiro = 0 WHERE idFinanceiro = p_idFinanceiro;
  UPDATE MOTRANSACOESTEF             SET idFinanceiro = 0 WHERE idFinanceiro = p_idFinanceiro;
  UPDATE MOORCAMENTOXPAGAMENTOS      SET idFinanceiroAdiantamento = 0 WHERE idFinanceiroAdiantamento = p_idFinanceiro;
  UPDATE MODOCUMENTOSTROCA           SET idFinanceiroAdiantamento = 0 WHERE idFinanceiroAdiantamento = p_idFinanceiro;
  -- Exclui correlatos
  DELETE MOPREDOCUMXRESGATEPONTOS  a WHERE EXISTS(SELECT 1 FROM MOPONTUACOES b WHERE b.idPontuacao = a.idPontuacao AND b.idFinanceiro = p_idFinanceiro);
  DELETE MODOCFISCALXRESGATEPONTOS a WHERE EXISTS(SELECT 1 FROM MOPONTUACOES b WHERE b.idPontuacao = a.idPontuacao AND b.idFinanceiro = p_idFinanceiro);
  DELETE MOPONTUACOES                WHERE idFinanceiro = p_idFinanceiro;
  DELETE MOFINANCEIROXBOLETO         WHERE idFinanceiro = p_idFinanceiro;
  DELETE MOFINANCEIROXCARTAO         WHERE idFinanceiro = p_idFinanceiro;
  DELETE MOFINANCEIROXCARTPROPRIO    WHERE idFinanceiro = p_idFinanceiro;
  DELETE MOFINANCEIROXCHEQUE         WHERE idFinanceiro = p_idFinanceiro;
  DELETE MOFINANCEIROXPIX            WHERE idFinanceiro = p_idFinanceiro;
  DELETE MOFINANCEIROXRATEIO         WHERE idFinanceiro = p_idFinanceiro;
  DELETE MOFINANCEIROXCOMISSOES      WHERE idFinanceiro = p_idFinanceiro;
  DELETE MOFINANCEIROXDOCUMENTOS     WHERE idFinanceiro = p_idFinanceiro;
  DELETE MOFINANCEIROXARQUIVOS       WHERE idFinanceiro = p_idFinanceiro;
  DELETE MONEGDIVIDAXFINANCEIROS     WHERE idFinanceiro = p_idFinanceiro;
  DELETE MOREPARCXFINANCEIROS        WHERE idFinanceiro = p_idFinanceiro;
  DELETE MOHISTORICOCOBRANCA         WHERE idFinanceiro = p_idFinanceiro;
  DELETE MOEVENTOS                   WHERE idFinanceiro = p_idFinanceiro;
  -- Exclui correlatos com outra perna correlata que já deve ter sido excluída anteriormente
  DELETE MOFINANCEIROXCORRELATO      WHERE idFinanceiro = p_idFinanceiro;
  DELETE MOFINANCEIROXCORRELATO      WHERE idFinanceiroCorrelato = p_idFinanceiro;
  DELETE MOFINANCEIROXBAIXAS         WHERE idFinanceiro = p_idFinanceiro;
  DELETE MOBAIXAXNOVOFINANCEIRO      WHERE idNovoFinanceiro = p_idFinanceiro;
  -- Exclui financeiro principal
  DELETE MOFINANCEIROS               WHERE idFinanceiro = p_idFinanceiro;
END ADD_MOFINANCEIROS_EXCLUICORREL;

/

create or replace PROCEDURE ADD_MOFINANCEIROXBAIXAS_CORREL (
  p_idBaixaFinanceiro                IN NUMBER)
IS
BEGIN
  -- Desvincula Financeiro
  UPDATE MOARQUIVOSCONCILIACOES    a SET a.situacaoConciliacao = 'I' WHERE a.situacaoConciliacao = 'F' AND EXISTS (SELECT 1 FROM MOCONCILIACOESCARTOES b WHERE b.idArquivoConciliacao = a.idArquivoConciliacao AND b.idBaixaFinanceiro = p_idBaixaFinanceiro);
  UPDATE MOARQUIVOCOBRANCAXFINANC    SET idFinanceiro = 0, idBaixaFinanceiro = 0 WHERE idBaixaFinanceiro = p_idBaixaFinanceiro;
  UPDATE MOCONCILIACOESCARTOES       SET idFinanceiro = 0, idBaixaFinanceiro = 0 WHERE idBaixaFinanceiro = p_idBaixaFinanceiro;
  -- Exclui correlatos
  DELETE MOBAIXAFINANCXPREDOCUM      WHERE idBaixaFinanceiro = p_idBaixaFinanceiro;
  DELETE MOBAIXAFINANCXDOCFISCAL     WHERE idBaixaFinanceiro = p_idBaixaFinanceiro;
  DELETE MOREPARCXBAIXAFINANC        WHERE idBaixaFinanceiro = p_idBaixaFinanceiro;
  -- Exclui correlatos com outra perna correlata que já deve ter sido excluída
  DELETE MOBAIXAXBAIXAFINANCEIRO     WHERE idBaixaFinanceiro = p_idBaixaFinanceiro;
  DELETE MOBAIXAXBAIXAFINANCEIRO     WHERE idBaixaFinanceiroCorrel = p_idBaixaFinanceiro;
  DELETE MOBAIXAXNOVOFINANCEIRO      WHERE idBaixaFinanceiro = p_idBaixaFinanceiro;
  -- Exclui financeiro x baixa principal
  DELETE MOFINANCEIROXBAIXAS         WHERE idBaixaFinanceiro = p_idBaixaFinanceiro;
END ADD_MOFINANCEIROXBAIXAS_CORREL;

/

create or replace PROCEDURE ADD_MOFINANCEIROS_EXCLUI_LOOP (
  p_idFinanceiro                 IN NUMBER,
  p_idsFinanceirosDesconsiderar  IN CLOB,
  p_idsBaixasDesconsiderar       IN CLOB,
  r_idsFinanceirosDesconsiderar  OUT CLOB,
  r_idsBaixasDesconsiderar       OUT CLOB)
IS
  v_auxNumber NUMBER;
  CURSOR c_financExcluir IS
    SELECT idFinanceiroCorrelato idFinanceiro
    FROM MOFINANCEIROXCORRELATO
    WHERE idFinanceiro = p_idFinanceiro
    UNION ALL
    SELECT idFinanceiro
    FROM MOFINANCEIROXCORRELATO
    WHERE idFinanceiroCorrelato = p_idFinanceiro
    UNION ALL
    SELECT a.idNovoFinanceiro idFinanceiro
    FROM MOBAIXAXNOVOFINANCEIRO a
    JOIN MOFINANCEIROXBAIXAS b ON b.idBaixaFinanceiro = a.idBaixaFinanceiro
    WHERE b.idFinanceiro = p_idFinanceiro
    UNION ALL
    SELECT a.idFinanceiro
    FROM MOFINANCEIROXBAIXAS a
    WHERE a.idFinanceiro = p_idFinanceiro
    AND a.baixaAutomatica = 1
    UNION ALL
    SELECT a.idFinanceiro
    FROM MOFINANCEIROXBAIXAS a
    JOIN MOBAIXAXNOVOFINANCEIRO b ON b.idBaixaFinanceiro = a.idBaixaFinanceiro
    WHERE b.idNovoFinanceiro = p_idFinanceiro
    AND a.baixaAutomatica = 1
    UNION ALL
    SELECT a.idFinanceiro
    FROM MOFINANCEIROXBAIXAS a
    JOIN MOBAIXAXBAIXAFINANCEIRO b ON b.idBaixaFinanceiro = a.idBaixaFinanceiro
    JOIN MOFINANCEIROXBAIXAS c ON c.idBaixaFinanceiro = b.idBaixaFinanceiroCorrel
    WHERE c.idFinanceiro = p_idFinanceiro
    AND a.baixaAutomatica = 1
    UNION ALL
    SELECT a.idFinanceiro
    FROM MOFINANCEIROXBAIXAS a
    JOIN MOBAIXAXBAIXAFINANCEIRO b ON b.idBaixaFinanceiroCorrel = a.idBaixaFinanceiro
    JOIN MOFINANCEIROXBAIXAS c ON c.idBaixaFinanceiro = b.idBaixaFinanceiro
    WHERE c.idFinanceiro = p_idFinanceiro
    AND a.baixaAutomatica = 1;
  CURSOR c_baixas IS
    SELECT a.*
    FROM MOFINANCEIROXBAIXAS a
    WHERE a.idFinanceiro = p_idFinanceiro
    UNION ALL
    SELECT a.*
    FROM MOFINANCEIROXBAIXAS a
    JOIN MOBAIXAXNOVOFINANCEIRO b ON b.idBaixaFinanceiro = a.idBaixaFinanceiro
    WHERE b.idNovoFinanceiro = p_idFinanceiro
    UNION ALL
    SELECT a.*
    FROM MOFINANCEIROXBAIXAS a
    JOIN MOBAIXAXBAIXAFINANCEIRO b ON b.idBaixaFinanceiro = a.idBaixaFinanceiro
    JOIN MOFINANCEIROXBAIXAS c ON c.idBaixaFinanceiro = b.idBaixaFinanceiroCorrel
    WHERE c.idFinanceiro = p_idFinanceiro
    UNION ALL
    SELECT a.*
    FROM MOFINANCEIROXBAIXAS a
    JOIN MOBAIXAXBAIXAFINANCEIRO b ON b.idBaixaFinanceiroCorrel = a.idBaixaFinanceiro
    JOIN MOFINANCEIROXBAIXAS c ON c.idBaixaFinanceiro = b.idBaixaFinanceiro
    WHERE c.idFinanceiro = p_idFinanceiro;
BEGIN
  r_idsFinanceirosDesconsiderar := p_idsFinanceirosDesconsiderar;
  r_idsBaixasDesconsiderar      := p_idsBaixasDesconsiderar;  
  -- Somente se não processou o financeiro ainda
  IF r_idsFinanceirosDesconsiderar IS NULL OR r_idsFinanceirosDesconsiderar = ' ' OR INSTR(',' || r_idsFinanceirosDesconsiderar || ',', ',' || LPAD(p_idFinanceiro,14,'0') || ',') = 0 THEN
    IF r_idsFinanceirosDesconsiderar IS NULL OR r_idsFinanceirosDesconsiderar = ' ' THEN
      r_idsFinanceirosDesconsiderar := LPAD(p_idFinanceiro,14,'0');
    ELSE
      r_idsFinanceirosDesconsiderar := r_idsFinanceirosDesconsiderar || ',' || LPAD(p_idFinanceiro,14,'0');
    END IF;
    FOR a IN c_financExcluir
    LOOP
      IF r_idsFinanceirosDesconsiderar IS NULL OR r_idsFinanceirosDesconsiderar = ' ' OR INSTR(',' || r_idsFinanceirosDesconsiderar || ',', ',' || LPAD(a.idFinanceiro,14,'0') || ',') = 0 THEN
        ADD_MOFINANCEIROS_EXCLUI_LOOP (a.idFinanceiro, r_idsFinanceirosDesconsiderar , r_idsBaixasDesconsiderar, r_idsFinanceirosDesconsiderar , r_idsBaixasDesconsiderar);
      END IF;
    END LOOP;
    FOR a IN c_baixas
    LOOP
      -- Somente se não processou a baixa ainda
      IF r_idsBaixasDesconsiderar IS NULL OR r_idsBaixasDesconsiderar = ' ' OR INSTR(',' || r_idsBaixasDesconsiderar || ',', ',' || LPAD(a.idBaixaFinanceiro,14,'0') || ',') = 0 THEN
        IF r_idsBaixasDesconsiderar IS NULL OR r_idsBaixasDesconsiderar = ' ' THEN
          r_idsBaixasDesconsiderar := LPAD(a.idBaixaFinanceiro,14,'0');
        ELSE
          r_idsBaixasDesconsiderar := r_idsBaixasDesconsiderar || ',' || LPAD(a.idBaixaFinanceiro,14,'0');
        END IF;
        -- Se não excluiu Financeiro, volta Saldo
        IF r_idsFinanceirosDesconsiderar IS NULL OR r_idsFinanceirosDesconsiderar = ' ' OR INSTR(',' || r_idsFinanceirosDesconsiderar || ',', ',' || LPAD(a.idFinanceiro,14,'0') || ',') = 0 THEN
          ADD_MOFINANCEIROS_AJUSTA_SALDO (
            0, -- p_config_349_prazoValidadePont
            1, -- p_excluindo
            a.idBaixaFinanceiro,
            a.idFinanceiro,
            a.data,
            a.cotacao,
            a.valorBrutoIndexado,
            a.valorBruto,
            a.valorTarifaCartao,
            v_auxNumber, -- r_financ_saldo
            v_auxNumber, -- r_financ_saldoIndexado
            v_auxNumber); -- r_financ_efetivado
        END IF;
        ADD_MOFINANCEIROXBAIXAS_CORREL (a.idBaixaFinanceiro);
      END IF;
    END LOOP;
    ADD_MOFINANCEIROS_EXCLUICORREL (p_idFinanceiro);
  END IF;
END ADD_MOFINANCEIROS_EXCLUI_LOOP;

/

create or replace PROCEDURE ADD_MOFINANCEIROS_EXCLUI (
  p_idFinanceiro                 IN NUMBER)
IS
  v_auxCLOB                      CLOB;
BEGIN
  v_auxCLOB := NULL;
  ADD_MOFINANCEIROS_EXCLUI_LOOP (p_idFinanceiro, v_auxCLOB , v_auxCLOB, v_auxCLOB , v_auxCLOB);
END ADD_MOFINANCEIROS_EXCLUI;

/

create or replace PROCEDURE ADD_MODOCFISCALXPAGAMENTOS_E_C (
  p_idPagamentoDocFiscal IN NUMBER)
IS
  CURSOR c_mot IS
    SELECT idMotivoBloqueioDocumento
    FROM MOMOTBLOQXDOCFISCALPAGAM
    WHERE idPagamentoDocFiscal = p_idPagamentoDocFiscal;
  CURSOR c_fin IS
    SELECT idFinanceiro
    FROM MOFINANCEIROS
    WHERE idPagamentoDocFiscal = p_idPagamentoDocFiscal;
BEGIN
  FOR a IN c_mot
  LOOP
    ADD_MOMOTIVOSBLOQUEIOS_EXCLUI (a.idMotivoBloqueioDocumento);
  END LOOP;
  FOR a IN c_fin
  LOOP
    ADD_MOFINANCEIROS_EXCLUI (a.idFinanceiro);
  END LOOP;
  DELETE MODOCFISCALXPROMOCOES WHERE idPagamentoDocFiscal = p_idPagamentoDocFiscal;
  UPDATE MOTRANSACOESTEF SET idPagamentoDocFiscal = 0 WHERE idPagamentoDocFiscal = p_idPagamentoDocFiscal;
END ADD_MODOCFISCALXPAGAMENTOS_E_C;

/

create or replace PROCEDURE ADD_MODOCUMENTOSTROCA_EXCLUI (
  p_documentoTroca IN NUMBER)
IS
  s_idFinanceiroAdiantamento NUMBER;
  CURSOR c_itens IS
    SELECT idItemDocTroca
    FROM MODOCTROCAXITENS
    WHERE documentoTroca = p_documentoTroca;
BEGIN
  SELECT idFinanceiroAdiantamento
  INTO s_idFinanceiroAdiantamento
  FROM MODOCUMENTOSTROCA
  WHERE documentoTroca = p_documentoTroca;
  FOR a IN c_itens
  LOOP
    ADD_MODOCTROCAXITENS_EXCLUI (a.idItemDocTroca);
  END LOOP;
  DELETE MODOCUMENTOSTROCA WHERE documentoTroca = p_documentoTroca;
  IF s_idFinanceiroAdiantamento > 0 THEN
    ADD_MOFINANCEIROS_EXCLUI (s_idFinanceiroAdiantamento);
  END IF;
END ADD_MODOCUMENTOSTROCA_EXCLUI;

/

create or replace PROCEDURE ADD_MOPREDOCUMXPAGAMENTOS_ECOR (
  p_idPagamentoPreDocumento IN NUMBER)
IS
  CURSOR c_mot IS
    SELECT idMotivoBloqueioDocumento
    FROM MOMOTBLOQXPREDOCUMPAGAM
    WHERE idPagamentoPreDocumento = p_idPagamentoPreDocumento;
  CURSOR c_fin IS
    SELECT idFinanceiro
    FROM MOFINANCEIROS
    WHERE idPagamentoPreDocumento = p_idPagamentoPreDocumento;
BEGIN
  FOR a IN c_mot
  LOOP
    ADD_MOMOTIVOSBLOQUEIOS_EXCLUI (a.idMotivoBloqueioDocumento);
  END LOOP;
  FOR a IN c_fin
  LOOP
    ADD_MOFINANCEIROS_EXCLUI (a.idFinanceiro);
  END LOOP;
  DELETE MOPREDOCUMXPROMOCOES WHERE idPagamentoPreDocumento = p_idPagamentoPreDocumento;
  UPDATE MOTRANSACOESTEF SET idPagamentoPreDocumento = 0 WHERE idPagamentoPreDocumento = p_idPagamentoPreDocumento;
END ADD_MOPREDOCUMXPAGAMENTOS_ECOR;

/

INSERT INTO SIVERSOESSISTEMA (idVersaoSistema, versaoAplicativo, dataLiberacaoVersao, possuiConversaoTabelas, atualizada, dataAtualizacaoVersao, observacoes) VALUES (2023002006, '2023.2.6', TO_DATE('28/02/2023','DD/MM/YYYY'), 1, 1, sysdate, ' ');

COMMIT;

--exec dbms_utility.compile_schema('ADDERI');
--exec dbms_stats.gather_schema_stats('ADDERI');

/*
*/