SET DEFINE OFF;

ALTER TABLE MOFINANCEIROXCARTAO   MODIFY autorizacaoCartao VARCHAR (100);
ALTER TABLE MOCONCILIACOESCARTOES MODIFY autorizacaoCartao VARCHAR (100);
ALTER TABLE MOTRANSACOESTEF       MODIFY autorizacaoCartao VARCHAR (100);

DROP TABLE TEMPPAGAMENTOS;

-- TEMPPAGAMENTOS
CREATE GLOBAL TEMPORARY TABLE TEMPPAGAMENTOS
  (
    uniqueMachineID             VARCHAR (18) DEFAULT ' ' NOT NULL,
    contadorSessao              NUMERIC (14,0) DEFAULT 0 NOT NULL,
    origem                      CHAR (1) DEFAULT ' ' NOT NULL,
    idCabecalho                 NUMERIC (14,0) DEFAULT 0 NOT NULL,
    pagamentoTroco              CHAR (1) DEFAULT ' ' NOT NULL,
    sequencia                   NUMERIC (3,0) DEFAULT 0 NOT NULL,
    pagamentoRecebimento        CHAR (1) DEFAULT ' ' NOT NULL,
    condicaoPagamento           NUMERIC (4,0) DEFAULT 0 NOT NULL,
    cobranca                    NUMERIC (14,0) DEFAULT 0 NOT NULL,
    totalParcelas               NUMERIC (3,0) DEFAULT 0 NOT NULL,
    valorPagamentoLiquido       NUMERIC (15,2) DEFAULT 0 NOT NULL,
    contratoCompra              NUMERIC (14,0) DEFAULT 0 NOT NULL,
    cartaoCredenciadoraCartao   NUMERIC (14,0) DEFAULT 0 NOT NULL,
    cartaoBandeiraCartaoDebCred NUMERIC (2,0) DEFAULT 0 NOT NULL,
    cartaoTransacaoCartaoNSU    VARCHAR (20) DEFAULT ' ' NOT NULL,
    cartaoAutorizacaoCartao     VARCHAR (100) DEFAULT ' ' NOT NULL,
    cartaoTarifaCartao          NUMERIC (15,8) DEFAULT 0 NOT NULL,
    cartaoProprio               VARCHAR (16) DEFAULT ' ' NOT NULL,
    idFinanceiroAdiantamento    NUMERIC (14,0) DEFAULT 0 NOT NULL
  ) ON COMMIT PRESERVE ROWS;
CREATE UNIQUE INDEX TEMPPAGAMENTOS_PK1 ON TEMPPAGAMENTOS (uniqueMachineID, contadorSessao, origem, idCabecalho, pagamentoTroco, sequencia);
CREATE INDEX TEMPPAGAMENTOS_K2 ON TEMPPAGAMENTOS (uniqueMachineID, contadorSessao, contratoCompra);

UPDATE MOFINANCEIROS a SET a.cobranca = (SELECT b.credenciadoraCartao FROM MOFINANCEIROXCARTAO b WHERE b.idFinanceiro = a.idFinanceiro) WHERE a.idFinanceiro <> 0 AND EXISTS (SELECT b.credenciadoraCartao FROM MOFINANCEIROXCARTAO b WHERE b.idFinanceiro = a.idFinanceiro AND b.credenciadoraCartao <> 0 AND b.credenciadoraCartao <> a.cobranca);

COMMIT;

INSERT INTO SIMEIOSPAGAMENTO (meioPagamento, descricao, ativo, grupoPagamento, formaPagamentoNfe, indicadorFormaPagamento, integracaoCartaoDebCred, parcelado, validoRecebimento, validoPagamento, validoBaixa, observacoes) values (20, 'Pix T.E.F.', 1, 6, 17, '0', 0, 0, 1, 0, 1, 'Vista (Busca financeira e autorização do T.E.F.)');

COMMIT;

UPDATE SICAMPOSCOMPOSICAOCREDITO SET campoSelect = 'COALESCE((SELECT COUNT(1) FROM MOFINANCEIROS financ WHERE financ.pessoa = pessoa.pessoa AND financ.meioPagamento > 50 AND financ.operacaoFinanceira IN (21,22,32) AND financ.efetivado = 1 AND TRUNC(financ.dataEmissao) >= ADD_MONTHS (TRUNC(SYSDATE), - FUNC_ADD_BUSCA_CONFIG_N (306,0,0,0)) AND EXISTS (SELECT 1 FROM MOFINANCEIROXBAIXAS baixa WHERE baixa.idFinanceiro = financ.idFinanceiro AND baixa.unificadoReparcelado = 1 AND baixa.meioPagamento <> 17 AND NOT (baixa.meioPagamento BETWEEN 20 AND 28))),0)' WHERE campoComposicaoCredito = 800;
UPDATE SICAMPOSCOMPOSICAOCREDITO SET campoSelect = 'COALESCE((SELECT SUM((SELECT SUM (baixa.valorBruto) FROM MOFINANCEIROXBAIXAS baixa WHERE baixa.idFinanceiro = financ.idFinanceiro AND baixa.unificadoReparcelado = 1 AND baixa.meioPagamento <> 17 AND NOT (baixa.meioPagamento BETWEEN 20 AND 28))) FROM MOFINANCEIROS financ WHERE financ.pessoa = pessoa.pessoa AND financ.meioPagamento > 50 AND financ.operacaoFinanceira IN (21,22,32) AND TRUNC(financ.dataEmissao) >= ADD_MONTHS (TRUNC(SYSDATE), - FUNC_ADD_BUSCA_CONFIG_N (306,0,0,0)) AND EXISTS(SELECT 1 FROM MOFINANCEIROXBAIXAS baixa WHERE baixa.idFinanceiro = financ.idFinanceiro AND baixa.unificadoReparcelado = 1 AND baixa.meioPagamento <> 17 AND NOT (baixa.meioPagamento BETWEEN 20 AND 28))),0)' WHERE campoComposicaoCredito = 801;
UPDATE SICAMPOSCOMPOSICAOCREDITO SET campoSelect = 'TO_NUMBER(SUBSTR(COALESCE((SELECT MAX (TO_CHAR(baixa.data,''YYYYMMDDHH24MISS'') || LPAD(baixa.idBaixaFinanceiro,14,''0'') || TO_CHAR(CASE WHEN baixa.unificadoReparcelado = 1 AND baixa.meioPagamento <> 17 AND NOT (baixa.meioPagamento BETWEEN 20 AND 28) THEN 1 ELSE 0 END)) FROM MOFINANCEIROXBAIXAS baixa JOIN MOFINANCEIROS financ ON financ.idFinanceiro = baixa.idFinanceiro WHERE financ.pessoa = pessoa.pessoa AND financ.meioPagamento > 50 AND financ.operacaoFinanceira IN (21,22,32) AND TRUNC(financ.dataEmissao) >= ADD_MONTHS (TRUNC(SYSDATE), - FUNC_ADD_BUSCA_CONFIG_N (306,0,0,0))),''00000000000000000000000000000''),29,1))' WHERE campoComposicaoCredito = 804;

COMMIT;

INSERT INTO SITIPOSDOCUMENTOIMPRESSO (tipoDocumentoImpresso, descricao, ativo, ordenacao, habilitaFinalizacao, permiteGrafico, permiteCaractere, permiteMerge, arquivoModeloMerge, permiteReport, observacoesReport, permiteFiscal, observacoes) values (50, 'Inventário Estoque', 1, 770, 0, 1, 0, 0, ' ', 1, 'Tipo Documento = "I"', 0, ' ');

COMMIT;

UPDATE MOORCAMENTOS a
SET a.enderecoEntregaPessoa = (
  SELECT MAX (b.enderecoPessoa)
  FROM CAENDERECOSPESSOA b
  WHERE b.pessoa = a.pessoa
  AND b.ativo = 1
  AND b.principal = 1)
WHERE a.orcamento > 0
AND a.pessoa > 0
AND a.enderecoEntregaPessoa = 0
AND EXISTS (
  SELECT 1
  FROM CAENDERECOSPESSOA b
  WHERE b.pessoa = a.pessoa
  AND b.ativo = 1
  AND b.principal = 1);

COMMIT;

UPDATE MOPREDOCUMENTOS a
SET a.enderecoEntregaPessoa = (
  SELECT MAX (b.enderecoPessoa)
  FROM CAENDERECOSPESSOA b
  WHERE b.pessoa = a.pessoa
  AND b.ativo = 1
  AND b.principal = 1)
WHERE a.preDocumento > 0
AND a.pessoa > 0
AND a.enderecoEntregaPessoa = 0
AND EXISTS (
  SELECT 1
  FROM CAENDERECOSPESSOA b
  WHERE b.pessoa = a.pessoa
  AND b.ativo = 1
  AND b.principal = 1);

COMMIT;

UPDATE MODOCUMENTOSFISCAIS a
SET a.enderecoEntregaPessoa = (
  SELECT MAX (b.enderecoPessoa)
  FROM CAENDERECOSPESSOA b
  WHERE b.pessoa = a.pessoa
  AND b.ativo = 1
  AND b.principal = 1)
WHERE a.idDocumentoFiscal > 0
AND a.pessoa > 0
AND a.enderecoEntregaPessoa = 0
AND EXISTS (
  SELECT 1
  FROM CAENDERECOSPESSOA b
  WHERE b.pessoa = a.pessoa
  AND b.ativo = 1
  AND b.principal = 1);

COMMIT;

create or replace PROCEDURE ADD_ORCAMENTO_PAGAMENTO_INSERE (
    p_estabelecimentoAtivo         IN NUMBER,
    p_config_171_apenasDinheiroAVi IN NUMBER,
    p_orcamento                    IN NUMBER,
    p_pag_sequencia                IN NUMBER,
    p_pag_indicadorFormaPagamento  IN CHAR,
    p_pag_meioPagamento            IN NUMBER,
    p_pag_condicaoPagamento        IN NUMBER,
    p_pag_cobranca                 IN NUMBER,
    p_pag_numeroParcelas           IN NUMBER,
    p_pag_somaPrazoParcelas        IN NUMBER,
    p_pag_valorXPrazoParcelas      IN NUMBER,
    p_pag_valorEntradaMinima       IN NUMBER,
    p_pag_valorPagamentoBruto      IN NUMBER,
    p_pag_percDescontoPagamento    IN NUMBER,
    p_pag_valorDescontoPagamento   IN NUMBER,
    p_pag_percOutrasDespesasPag    IN NUMBER,
    p_pag_valorOutrasDespesasPag   IN NUMBER,
    p_pag_fatorJurosPagamento      IN NUMBER,
    p_pag_valorJurosPagamento      IN NUMBER,
    p_pag_valorPagImpostosSoma     IN NUMBER,
    p_pag_valorPagImpostosDiminui  IN NUMBER,
    p_pag_valorPagamentoLiquido    IN NUMBER,
    p_pag_valorFinanceiro          IN NUMBER,
    p_pag_idFinanceiroAdiantamento IN NUMBER,
    /* Retornos */
    r_pag_idPagamentoOrcamento     OUT NUMBER,
    r_cab_entradaSaida             OUT CHAR,
    r_cab_valorBasePagamento       OUT NUMBER,
    r_cab_valorPagamentoBruto      OUT NUMBER)
IS
    v_cab_contratoCompra           NUMBER;
    v_cab_condicaoPagamento        NUMBER;
    v_cab_numeroParcelas           NUMBER;
    v_cab_somaPrazoParcelas        NUMBER;
    v_cab_valorXPrazoParcelas      NUMBER;
    v_cab_prazoMedio               NUMBER;
    v_cab_prazoMedioPonderado      NUMBER;
    v_cab_valorEntradaMinima       NUMBER;
    v_cab_valorAVistaEntrada       NUMBER;
    v_cab_valorPagamentoBruto      NUMBER;
    v_cab_valorDescontoPagamento   NUMBER;
    v_cab_valorOutrasDespesasPag   NUMBER;
    v_cab_valorJurosPagamento      NUMBER;
    v_cab_valorPagamentoLiquido    NUMBER;
BEGIN
  SELECT 
    contratoCompra,
    condicaoPagamento,
    numeroParcelas,
    somaPrazoParcelas,
    valorXPrazoParcelas,
    prazoMedio,
    prazoMedioPonderado,
    valorEntradaMinima,
    valorAVistaEntrada,
    valorPagamentoBruto,
    valorDescontoPagamento,
    valorOutrasDespesasPagamento,
    valorJurosPagamento,
    valorPagamentoLiquido,
    entradaSaida,
    valorBasePagamento,
    valorPagamentoBruto
  INTO
    v_cab_contratoCompra,
    v_cab_condicaoPagamento,
    v_cab_numeroParcelas,
    v_cab_somaPrazoParcelas,
    v_cab_valorXPrazoParcelas,
    v_cab_prazoMedio,
    v_cab_prazoMedioPonderado,
    v_cab_valorEntradaMinima,
    v_cab_valorAVistaEntrada,
    v_cab_valorPagamentoBruto,
    v_cab_valorDescontoPagamento,
    v_cab_valorOutrasDespesasPag,
    v_cab_valorJurosPagamento,
    v_cab_valorPagamentoLiquido,
    r_cab_entradaSaida,
    r_cab_valorBasePagamento,
    r_cab_valorPagamentoBruto
  FROM MOORCAMENTOS
  WHERE orcamento = p_orcamento;
  r_pag_idPagamentoOrcamento     := 0;
  r_pag_idPagamentoOrcamento     := FUNC_BUSCA_PROXIMO_ID ('MOORCAMENTOXPAGAMENTOS', p_estabelecimentoAtivo, NULL);  
  v_cab_numeroParcelas           := v_cab_numeroParcelas         + p_pag_numeroParcelas;
  v_cab_somaPrazoParcelas        := v_cab_somaPrazoParcelas      + p_pag_somaPrazoParcelas;
  v_cab_valorXPrazoParcelas      := v_cab_valorXPrazoParcelas    + p_pag_valorXPrazoParcelas;
  v_cab_valorEntradaMinima       := v_cab_valorEntradaMinima     + p_pag_valorEntradaMinima;
  IF (p_config_171_apenasDinheiroAVi = 1 AND p_pag_meioPagamento IN (11,13,16,17,58) OR p_config_171_apenasDinheiroAVi = 0 AND p_pag_indicadorFormaPagamento = '0') THEN
    v_cab_valorAVistaEntrada       := v_cab_valorAVistaEntrada     + p_pag_valorPagamentoLiquido;
  END IF;
  v_cab_valorPagamentoBruto      := v_cab_valorPagamentoBruto    + p_pag_valorPagamentoBruto;
  v_cab_valorDescontoPagamento   := v_cab_valorDescontoPagamento + p_pag_valorDescontoPagamento;
  v_cab_valorOutrasDespesasPag   := v_cab_valorOutrasDespesasPag + p_pag_valorOutrasDespesasPag;
  v_cab_valorJurosPagamento      := v_cab_valorJurosPagamento    + p_pag_valorJurosPagamento;
  v_cab_valorPagamentoLiquido    := v_cab_valorPagamentoLiquido  + p_pag_valorPagamentoLiquido;
  v_cab_prazoMedio               := CASE WHEN v_cab_numeroParcelas = 0 THEN 0 ELSE ROUND ((v_cab_somaPrazoParcelas / v_cab_numeroParcelas), 0) END;
  v_cab_prazoMedioPonderado      := CASE WHEN v_cab_valorPagamentoLiquido = 0 THEN 0 ELSE ROUND ((v_cab_valorXPrazoParcelas / v_cab_valorPagamentoLiquido), 0) END;
  IF (v_cab_valorPagamentoLiquido = p_pag_valorPagamentoLiquido) THEN
    v_cab_condicaoPagamento := p_pag_condicaoPagamento;
  ELSE
    v_cab_condicaoPagamento := 0;
  END IF;
  IF (v_cab_contratoCompra <= 0 AND p_pag_meioPagamento BETWEEN 53 AND 64) THEN
    v_cab_contratoCompra := FUNC_BUSCA_PROXIMO_ID ('MOCONTRATOSCOMPRA', p_estabelecimentoAtivo, NULL);
  END IF;
  INSERT INTO MOORCAMENTOXPAGAMENTOS (
    idPagamentoOrcamento,
    orcamento,
    pagamentoTroco,
    sequencia,
    indicadorFormaPagamento,
    meioPagamento,
    condicaoPagamento,
    cobranca,
    numeroParcelas,
    somaPrazoParcelas,
    valorXPrazoParcelas,
    prazoMedio,
    prazoMedioPonderado,
    valorEntradaMinima,
    valorPagamentoBruto,
    percDescontoPagamento,
    valorDescontoPagamento,
    percOutrasDespesasPagamento,
    valorOutrasDespesasPagamento,
    fatorJurosPagamento,
    valorJurosPagamento,
    valorPagamentoImpostosSoma,
    valorPagamentoImpostosDiminui,
    valorPagamentoLiquido,
    valorFinanceiro,
    saldoEfetivar,
    idFinanceiroAdiantamento)
  VALUES (
    r_pag_idPagamentoOrcamento,
    p_orcamento,
    'P',
    p_pag_sequencia,
    p_pag_indicadorFormaPagamento,
    p_pag_meioPagamento,
    p_pag_condicaoPagamento,
    p_pag_cobranca,
    p_pag_numeroParcelas,
    p_pag_somaPrazoParcelas,
    p_pag_valorXPrazoParcelas,
    CASE WHEN p_pag_numeroParcelas = 0 THEN 0 ELSE ROUND ((p_pag_somaPrazoParcelas / p_pag_numeroParcelas), 0) END,
    CASE WHEN p_pag_valorPagamentoLiquido = 0 THEN 0 ELSE ROUND ((p_pag_valorXPrazoParcelas / p_pag_valorPagamentoLiquido), 0) END,
    p_pag_valorEntradaMinima,
    p_pag_valorPagamentoBruto,
    p_pag_percDescontoPagamento,
    p_pag_valorDescontoPagamento,
    p_pag_percOutrasDespesasPag,
    p_pag_valorOutrasDespesasPag,
    p_pag_fatorJurosPagamento,
    p_pag_valorJurosPagamento,
    p_pag_valorPagImpostosSoma,
    p_pag_valorPagImpostosDiminui,
    p_pag_valorPagamentoLiquido,
    p_pag_valorFinanceiro,
    p_pag_valorFinanceiro,
    p_pag_idFinanceiroAdiantamento);
  UPDATE MOORCAMENTOS SET 
    contratoCompra = v_cab_contratoCompra,
    condicaoPagamento = v_cab_condicaoPagamento,
    numeroParcelas = v_cab_numeroParcelas,
    somaPrazoParcelas = v_cab_somaPrazoParcelas,
    valorXPrazoParcelas = v_cab_valorXPrazoParcelas,
    prazoMedio = v_cab_prazoMedio,
    prazoMedioPonderado = v_cab_prazoMedioPonderado,
    valorEntradaMinima = v_cab_valorEntradaMinima,
    valorAVistaEntrada = v_cab_valorAVistaEntrada,
    valorPagamentoBruto = v_cab_valorPagamentoBruto,
    valorDescontoPagamento = v_cab_valorDescontoPagamento,
    valorOutrasDespesasPagamento = v_cab_valorOutrasDespesasPag,
    valorJurosPagamento = v_cab_valorJurosPagamento,
    valorPagamentoLiquido = v_cab_valorPagamentoLiquido
  WHERE orcamento = p_orcamento;
END ADD_ORCAMENTO_PAGAMENTO_INSERE;

/

UPDATE MODOCUMENTOSFISCAIS SET validoFaturamento = 0 WHERE validoFaturamento = 1 AND entradaSaida = 'E' AND devolucaoAnulacaoRetorno = 0;

COMMIT;

INSERT INTO SIVERSOESSISTEMA (idVersaoSistema, versaoAplicativo, dataLiberacaoVersao, possuiConversaoTabelas, atualizada, dataAtualizacaoVersao, observacoes) VALUES (2022002013, '2022.2.13', sysdate, 1, 1, sysdate, ' ');

COMMIT;

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

/*
*/