Advertisement
wanderleihuttel

Execute Block Firebird

Aug 8th, 2022 (edited)
1,677
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 4.07 KB | None | 0 0
  1. EXECUTE block
  2. (
  3.     pCodigoEmpresa INTEGER           = :pCodigoEmpresa,
  4.     pCodigoEstab   INTEGER           = :pCodigoEstab,
  5.     pChaveDuplicataSai VARCHAR(25)   = :pChaveDuplicataSai,
  6.     pNumeroDuplicataSai VARCHAR(25)  = :pNumeroDuplicataSai,
  7.     pNumeroParcela VARCHAR(3)        = :pNumeroParcela,
  8.     pDataPgto DATE                   = :pDataPgto,
  9.     pValorPago numeric(10,2)         = :pValorPago,
  10.     pValorJuros numeric(10,2)        = :pValorJuros,
  11.     pValorMulta numeric(10,2)        = :pValorMulta,
  12.     pValorDesconto numeric(10,2)     = :pValorDesconto,
  13.     pValorTarifa numeric(10,2)       = :pValorTarifa,
  14.     pCodigoTabCtbFis INTEGER         = :pCodigoTabCtbFis
  15. )
  16. /*
  17. returns (
  18.     vReturn varchar(500)
  19. )
  20. */
  21. AS
  22. DECLARE vCurrentDateTime VARCHAR(20);
  23. DECLARE vChaveDuplicataSai INTEGER;
  24. DECLARE vNumeroDuplicata VARCHAR(25);
  25. DECLARE vNumeroParcela VARCHAR(25);
  26. DECLARE vDataLctoFis DATE;
  27. DECLARE vProximaSeq INTEGER;
  28. DECLARE vCodigoTabCtbFis INTEGER;
  29. DECLARE vObservPgto VARCHAR(100);
  30. DECLARE vValorDuplicata numeric(10,2);
  31. DECLARE vValorPago numeric(10,2);
  32. DECLARE vStatus INTEGER;
  33. BEGIN
  34.  
  35.     -- Pega a data/hora atual
  36.     SELECT LPAD(EXTRACT(DAY FROM CURRENT_DATE), 2, '0')||'/'||LPAD(EXTRACT(MONTH FROM CURRENT_DATE), 2, '0')||'/'||
  37.     EXTRACT(YEAR FROM CURRENT_DATE)||' '||left(current_time,8) AS currentdate FROM rdb$database
  38.     INTO :vCurrentDateTime;
  39.     vObservPgto = 'IMPORTADO AUTOMATICAMENTE PELA PLANILHA EM '||:vCurrentDateTime;
  40.  
  41.  
  42.     -- Busca os dados das duplicatas em aberto do Questor
  43.     -- Parametros: CodigoEmpresa, CodigoEstab, ChaveDuplicataSai, NumeroDuplicataSai, NumeroParcela
  44.     SELECT chaveduplicatasai, numeroduplicatasai, numeroparcela, datalctofis
  45.     FROM duplicatasaiparcela
  46.     WHERE codigoempresa = :pCodigoEmpresa AND codigoestab = :pCodigoEstab AND chaveduplicatasai = :pChaveDuplicataSai AND numeroduplicatasai = LPAD(:pNumeroDuplicataSai, 25, ' ') AND CAST(numeroparcela AS INTEGER) = :pNumeroParcela
  47.     INTO :vChaveDuplicataSai, :vNumeroDuplicata, :vNumeroParcela, :vDataLctoFis;
  48.  
  49.  
  50.     -- Busca a proxima sequencia disponivel para a baixa da duplicata
  51.     SELECT COALESCE(MAX(seq),0)+1 AS seq
  52.     FROM duplicatasaipgto WHERE codigoempresa = :pCodigoEmpresa AND codigoestab = :pCodigoEstab AND
  53.     chaveduplicatasai = :vChaveDuplicataSai AND numeroduplicatasai = :vNumeroDuplicata AND numeroparcela = :vNumeroParcela
  54.     INTO :vProximaSeq;
  55.  
  56.  
  57.     -- Insere a baixa do pagamento
  58.     INSERT INTO duplicatasaipgto (codigoempresa, codigoestab, chaveduplicatasai, numeroduplicatasai, numeroparcela, seq, datalctofis, datapgto,
  59.     valorpago, valorjuros, valormulta, valordesconto, valortarifa, codigotabctbfis, codigousuario, datahoralctofis, origemdado, observpgto)
  60.     VALUES (:pCodigoEmpresa, :pCodigoEstab, :vChaveDuplicataSai, :vNumeroDuplicata, :vNumeroParcela, :vProximaSeq, :vDataLctoFis, :pDataPgto, :pValorPago, :pValorJuros, :pValorMulta, :pValorDesconto, :pValorTarifa, :pCodigoTabCtbFis, 1, CURRENT_TIMESTAMP, 3, :vObservPgto);
  61.  
  62.  
  63.     -- Buscar o valor da parcela
  64.     SELECT SUM(valorparcela) FROM duplicatasaiparcela
  65.     WHERE codigoempresa = :pCodigoEmpresa AND codigoestab = :pCodigoEstab AND chaveduplicatasai = :vChaveDuplicataSai AND numeroparcela = :vNumeroParcela
  66.     INTO :vValorDuplicata;
  67.  
  68.  
  69.     -- Busca o valor do pagamento
  70.     SELECT COALESCE(SUM(valorpago) + SUM(valordesconto),0) AS valorpago FROM duplicatasaipgto
  71.     WHERE  codigoempresa = :pCodigoEmpresa AND codigoestab = :pCodigoEstab AND chaveduplicatasai = :vChaveDuplicataSai AND numeroparcela = :vNumeroParcela
  72.     INTO :vValorPago;
  73.  
  74.  
  75.     -- Verifica o valor da duplicata x parcela para alterar o status
  76.     IF (vValorPago >= vValorDuplicata) THEN
  77.         vStatus = 3;
  78.     ELSE IF (vValorPago > 0 AND vValorPago < vValorDuplicata) THEN
  79.         vStatus = 2;
  80.  
  81.  
  82.     -- Atualiza o status da duplicata
  83.     UPDATE duplicatasaiparcela SET
  84.     situacao = :vStatus, datahoralctofis = CURRENT_TIMESTAMP
  85.     WHERE codigoempresa = :pCodigoEmpresa AND codigoestab = :pCodigoEstab AND chaveduplicatasai = :vChaveDuplicataSai AND numeroparcela = :vNumeroParcela;
  86. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement