unit ufrmCentralBoletos; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, System.StrUtils, System.DateUtils, System.UITypes, System.Math, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, umstMaster, Vcl.ComCtrls, Vcl.StdCtrls, Data.DB, Datasnap.DBClient, Vcl.Grids, Vcl.DBGrids, Vcl.Buttons, System.JSON, MidasLib, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdSSL, IdSSLOpenSSL, IdBaseComponent, IdComponent, IdGlobal, IdTCPConnection, IdTCPClient, IdHTTP, REST.Response.Adapter, rDBComponents, Vcl.Mask, Vcl.DBCtrls, Vcl.Menus, IdCoder, IdCoder3to4, IdCoderMIME, ZAbstractRODataset, ZDataset, Vcl.ExtCtrls, IdStack, IdException, Vcl.CheckLst; type TMethod = (GET, POST); TStringArray = array of string; TfrmCentralBoletos = class(TmstMaster) dtsBoletos: TDataSource; IdHTTP: TIdHTTP; IdSSLHandler: TIdSSLIOHandlerSocketOpenSSL; tblDesc1: TClientDataSet; dtsDesc1: TDataSource; tblDesc2: TClientDataSet; dtsDesc2: TDataSource; tblDesc3: TClientDataSet; dtsDesc3: TDataSource; tblMulta: TClientDataSet; dtsMulta: TDataSource; tblMora: TClientDataSet; dtsMora: TDataSource; tblDesc1codigo: TStringField; tblDesc1taxa: TFloatField; tblDesc1valor: TCurrencyField; tblDesc2codigo: TStringField; tblDesc2taxa: TFloatField; tblDesc2valor: TCurrencyField; tblDesc3codigo: TStringField; tblDesc3taxa: TFloatField; tblDesc3valor: TCurrencyField; tblMultacodigo: TStringField; tblMultataxa: TFloatField; tblMultavalor: TCurrencyField; tblMultadata: TDateField; tblMoracodigo: TStringField; tblMorataxa: TFloatField; tblMoravalor: TCurrencyField; tblMoradata: TDateField; pcBoletos: TPageControl; tsPesquisa: TTabSheet; gb_searchfilter: TGroupBox; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; SpeedButton1: TSpeedButton; cb_filtrosituacao: TComboBox; cb_filtrotipodata: TComboBox; dt_inicio: TDateTimePicker; dt_fim: TDateTimePicker; cb_filtroordem: TComboBox; dbgrd_boletos: TDBGrid; tsGeraBoleto: TTabSheet; pum_download: TPopupMenu; mnuDownload: TMenuItem; SaveDialog: TSaveDialog; IdDecoderMIME: TIdDecoderMIME; MainMenu1: TMainMenu; mnuCadastro: TMenuItem; mnhGrupoBoletos: TMenuItem; pum_incldel: TPopupMenu; mnuIncluir: TMenuItem; mnuRemover: TMenuItem; N1: TMenuItem; N2: TMenuItem; mnuBaixarInter: TMenuItem; mnuAcertos: TMenuItem; mnuProtestado: TMenuItem; mnuDevolucao: TMenuItem; mnuProtestoAposBaixa: TMenuItem; mnuPagoDireto: TMenuItem; mnuSubstituicao: TMenuItem; mnuFalta: TMenuItem; mnuAPedidoCliente: TMenuItem; mnuBaixarCob: TMenuItem; rotblRepasseFase: TZReadOnlyQuery; rotblRepasseFaseID_FASE: TIntegerField; rotblRepasseFasePR_PRINCIPAL: TFloatField; rotblRepasseFasePR_JUROS: TFloatField; rotblRepasseFasePR_MULTA: TFloatField; rotblRepasseFasePR_ENCARGOS: TFloatField; rotblRepasseFasePR_CORRIGIDO: TFloatField; rotblRepasseFaseMIN_ATRASO: TIntegerField; rotblRepasseFaseMAX_ATRASO: TIntegerField; rotblRepasseFaseID_REPASSE: TIntegerField; rotblRepasseFaseID_ULTIMO_USUARIO: TIntegerField; rotblRepasseFaseDT_HORA_ULTIMA_ATT: TDateTimeField; tblPagador: TClientDataSet; dtsPagador: TDataSource; cdsBoletos: TClientDataSet; DBMemo1: TDBMemo; cdsBoletosnossoNumero: TWideStringField; cdsBoletosseuNumero: TWideStringField; cdsBoletospagador: TWideMemoField; gbBoleto: TGroupBox; cdsBoletossituacao: TWideStringField; cdsBoletosdataVencimento: TDateField; cdsBoletosdataHoraSituacao: TWideStringField; pcPesquisaGerar: TPageControl; TabSheet1: TTabSheet; TabSheet2: TTabSheet; btn_gerarbolunico: TButton; gbPesquisa: TGroupBox; edtPesquisa: TEdit; rgTipoPesquisa: TRadioGroup; DBGrid1: TDBGrid; dtsHist: TDataSource; spdbtnPesquisa: TSpeedButton; DBGrid2: TDBGrid; Label6: TLabel; dtsPesquisa: TDataSource; zroqryPesquisa: TZReadOnlyQuery; zroqryPesquisaTX_NOME: TWideStringField; zroqryPesquisaTX_DOCUMENTO: TWideStringField; zroqryPesquisaID_DEVEDOR: TIntegerField; GroupBox1: TGroupBox; dbedtNomeDevBoleto: TDBEdit; Label7: TLabel; dbedtDocDevBoleto: TDBEdit; Label8: TLabel; dtsEmpresasTitulos: TDataSource; zroqryEmpresasTitulos: TZReadOnlyQuery; zroqryEmpresasTitulosID_EMPRESA: TIntegerField; zroqryEmpresasTitulosTX_NOME: TWideStringField; zroqryEmpresasTitulosTX_FANTASIA: TWideStringField; zroqryEmpresasTitulosTX_CNPJ: TWideStringField; zroqryEmpresasTitulosTX_IE: TWideStringField; zroqryEmpresasTitulosTX_ENDERECO: TWideStringField; zroqryEmpresasTitulosTX_COMPLEMENTO: TWideStringField; zroqryEmpresasTitulosID_CIDADE: TIntegerField; zroqryEmpresasTitulosTX_BAIRRO: TWideStringField; zroqryEmpresasTitulosID_ESTADO: TIntegerField; zroqryEmpresasTitulosTX_CEP: TWideStringField; zroqryEmpresasTitulosTX_TELEFONE: TWideStringField; zroqryEmpresasTitulosTX_EMAIL: TWideStringField; zroqryEmpresasTitulosTX_WEBSITE: TWideStringField; zroqryEmpresasTitulosNR_NUMERO: TIntegerField; zroqryEmpresasTitulosTX_IM: TWideStringField; zroqryEmpresasTitulosTL_OBSERVACOES: TWideMemoField; zroqryEmpresasTitulosID_REPASSE: TIntegerField; zroqryEmpresasTitulosTP_ENTRADA: TWideStringField; zroqryEmpresasTitulosPR_MULTA: TFloatField; zroqryEmpresasTitulosPR_JUROS: TFloatField; zroqryEmpresasTitulosNR_PARCELAS: TIntegerField; zroqryEmpresasTitulosPR_DESC_QUIT_PRIN: TFloatField; zroqryEmpresasTitulosPR_DESC_QUIT_JUROS: TFloatField; zroqryEmpresasTitulosPR_DESC_QUIT_MULTA: TFloatField; zroqryEmpresasTitulosPR_DESC_QUIT_IND_FIN: TFloatField; zroqryEmpresasTitulosPR_DESC_QUIT_COR: TFloatField; zroqryEmpresasTitulosPR_DESC_FINAN_PRIN: TFloatField; zroqryEmpresasTitulosPR_DESC_FINAN_JUROS: TFloatField; zroqryEmpresasTitulosPR_DESC_FINAN_MULTA: TFloatField; zroqryEmpresasTitulosPR_DESC_FINAN_IND_FIN: TFloatField; zroqryEmpresasTitulosPR_DESC_FINAN_COR: TFloatField; zroqryEmpresasTitulosPR_INDICADOR_FINANCEIRO: TFloatField; zroqryEmpresasTitulosPR_JUROS_PARCELAR: TFloatField; zroqryEmpresasTitulosPR_ENTRADA_MIN: TFloatField; zroqryEmpresasTitulosPR_ENTRADA_MAX: TFloatField; zroqryEmpresasTitulosTP_CHEQUE: TWideStringField; zroqryEmpresasTitulosTP_CRED: TWideStringField; zroqryEmpresasTitulosTP_DIN: TWideStringField; zroqryEmpresasTitulosID_ULTIMO_USUARIO: TIntegerField; zroqryEmpresasTitulosDT_HORA_ULTIMA_ATT: TDateTimeField; zroqryEmpresasTitulosID_DEPARTAMENTO: TIntegerField; zroqryEmpresasTitulosNR_JUROS: TFloatField; zroqryEmpresasTitulosTP_JUROS: TWideStringField; gbPagador: TGroupBox; lblNomePagador: TLabel; edtNomePagador: TEdit; lblDocumentoPagador: TLabel; edtDocumentoPagador: TEdit; lblTipoPagador: TLabel; cbTipoPagador: TComboBox; lblEmailPagador: TLabel; edtEmailPagador: TEdit; lblEnderecoPagador: TLabel; edtEnderecoPagador: TEdit; edtNumeroPagador: TEdit; lblNumeroPagador: TLabel; lblComplementoPagador: TLabel; edtComplementoPagador: TEdit; lblBairroPagador: TLabel; edtBairroPagador: TEdit; lblCidadePagador: TLabel; edtCidadePagador: TEdit; lblUfPagador: TLabel; edtUfPagador: TEdit; lblCepPagador: TLabel; edtCepPagador: TEdit; lblDddPagador: TLabel; edtDddPagador: TEdit; lblTelefonePagador: TLabel; edtTelefonePagador: TEdit; gbDadosBoleto: TGroupBox; lblSeuNumeroBoleto: TLabel; edtSeuNumeroBoleto: TEdit; lblVlNominalBoleto: TLabel; edtVlNominalBoleto: TEdit; dtpVencimentoBoleto: TDateTimePicker; lblVencimentoBoleto: TLabel; lblDiasCancelamentoBoleto: TLabel; edtDiasCancelamentoBoleto: TEdit; gbMensagemBoleto: TGroupBox; Label49: TLabel; Label50: TLabel; Label51: TLabel; Label52: TLabel; Label57: TLabel; edtLinha1Boleto: TEdit; edtLinha2Boleto: TEdit; edtLinha3Boleto: TEdit; edtLinha4Boleto: TEdit; edtLinha5Boleto: TEdit; GroupBox2: TGroupBox; Label34: TLabel; Label35: TLabel; Label36: TLabel; cb_desc1: TComboBox; edt_taxa1bol: TEdit; edt_val1bol: TEdit; dtp_desc1: TDateTimePicker; GroupBox3: TGroupBox; Label37: TLabel; Label38: TLabel; Label39: TLabel; cb_desc2: TComboBox; edt_taxa2bol: TEdit; edt_val2bol: TEdit; dtp_desc2: TDateTimePicker; GroupBox4: TGroupBox; Label40: TLabel; Label41: TLabel; Label42: TLabel; cb_desc3: TComboBox; edt_taxa3bol: TEdit; edt_val3bol: TEdit; dtp_desc3: TDateTimePicker; GroupBox6: TGroupBox; Label47: TLabel; Label48: TLabel; Label55: TLabel; cb_morabol: TComboBox; edt_taxamorabol: TEdit; edt_vlmorabol: TEdit; dtp_multa: TDateTimePicker; GroupBox5: TGroupBox; Label45: TLabel; Label46: TLabel; Label56: TLabel; cb_multabol: TComboBox; edt_taxamultabol: TEdit; edt_vlmultabol: TEdit; dtp_mora: TDateTimePicker; gbBeneficiarioBoleto: TGroupBox; Label14: TLabel; edtNomeBeneficiario: TEdit; Label15: TLabel; edtDocumentoBeneficiario: TEdit; Label16: TLabel; cbTipoBeneficiario: TComboBox; Label17: TLabel; edtEnderecoBeneficiario: TEdit; Label18: TLabel; edtBairroBeneficiario: TEdit; Label19: TLabel; edtCidadeBeneficiario: TEdit; Label20: TLabel; edtUfBeneficiario: TEdit; Label21: TLabel; edtCepBeneficiario: TEdit; dtsDevedor: TDataSource; Label13: TLabel; dblucbEndDevBoleto: TDBLookupComboBox; Label9: TLabel; dblucbTelDevBoleto: TDBLookupComboBox; Label10: TLabel; dblucbEmailDevBoleto: TDBLookupComboBox; navPrincipal: TDBNavigator; GroupBox7: TGroupBox; Label11: TLabel; Label12: TLabel; Label22: TLabel; Label23: TLabel; Label24: TLabel; dbEdtLinha1Boleto: TDBEdit; dbEdtLinha2Boleto: TDBEdit; dbEdtLinha3Boleto: TDBEdit; dbEdtLinha4Boleto: TDBEdit; dbEdtLinha5Boleto: TDBEdit; btnPreparaBoleto: TButton; GroupBox8: TGroupBox; Label25: TLabel; Label26: TLabel; Label27: TLabel; DBLookupComboBox5: TDBLookupComboBox; DBEdit5: TDBEdit; DBEdit6: TDBEdit; DBEdit7: TDBEdit; GroupBox9: TGroupBox; Label28: TLabel; Label29: TLabel; Label30: TLabel; DBLookupComboBox6: TDBLookupComboBox; DBEdit8: TDBEdit; DBEdit9: TDBEdit; DBEdit10: TDBEdit; GroupBox10: TGroupBox; Label31: TLabel; Label32: TLabel; Label33: TLabel; DBLookupComboBox7: TDBLookupComboBox; DBEdit11: TDBEdit; DBEdit14: TDBEdit; DBEdit17: TDBEdit; GroupBox11: TGroupBox; Label43: TLabel; Label44: TLabel; Label53: TLabel; DBLookupComboBox8: TDBLookupComboBox; DBEdit12: TDBEdit; DBEdit15: TDBEdit; DBEdit18: TDBEdit; GroupBox12: TGroupBox; Label54: TLabel; Label58: TLabel; Label59: TLabel; DBLookupComboBox9: TDBLookupComboBox; DBEdit13: TDBEdit; DBEdit16: TDBEdit; DBEdit19: TDBEdit; Label60: TLabel; Label61: TLabel; Label62: TLabel; DBEdit20: TDBEdit; DBEdit21: TDBEdit; DBEdit22: TDBEdit; Label63: TLabel; DBEdit23: TDBEdit; btnGerarBoleto: TButton; btnFichaCliente: TButton; GroupBox13: TGroupBox; DBLookupComboBox10: TDBLookupComboBox; DBGrid3: TDBGrid; DBNavigator1: TDBNavigator; procedure FormCreate(Sender: TObject); procedure SpeedButton1Click(Sender: TObject); procedure dtsBoletosDataChange(Sender: TObject; Field: TField); procedure dbgrd_boletosDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); procedure mnuDownloadClick(Sender: TObject); procedure dbgrd_boletosMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure mnhGrupoBoletosClick(Sender: TObject); procedure dbgrd_bolunicoMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure btn_gerarbolunicoClick(Sender: TObject); procedure mnuAcertosClick(Sender: TObject); procedure mnuProtestadoClick(Sender: TObject); procedure mnuDevolucaoClick(Sender: TObject); procedure mnuProtestoAposBaixaClick(Sender: TObject); procedure mnuPagoDiretoClick(Sender: TObject); procedure mnuSubstituicaoClick(Sender: TObject); procedure mnuFaltaClick(Sender: TObject); procedure mnuAPedidoClienteClick(Sender: TObject); procedure mnuBaixarCobClick(Sender: TObject); procedure cdsBoletosAfterScroll(DataSet: TDataSet); procedure spdbtnPesquisaClick(Sender: TObject); procedure DBGrid2DblClick(Sender: TObject); procedure cbSituacaoChange(Sender: TObject); procedure btnPreparaBoletoClick(Sender: TObject); procedure dtpVencimentoIniChange(Sender: TObject); procedure dtpVencimentoFimChange(Sender: TObject); procedure clbEmpresasTitulosClickCheck(Sender: TObject); procedure dtsDevedorStateChange(Sender: TObject); procedure DBEdit6KeyPress(Sender: TObject; var Key: Char); procedure DBEdit7KeyPress(Sender: TObject; var Key: Char); procedure btnGerarBoletoClick(Sender: TObject); procedure btnFichaClienteClick(Sender: TObject); procedure DBNavigator1BeforeAction(Sender: TObject; Button: TNavigateBtn); private opcoes_situacao, opcoes_datatipo, opcoes_ordem: TStringList; JSONBoletoUnico: TJSONObject; vl_bol: currency; function RequestJSON(URL: String; Body: TStringStream = nil): TJSONObject; function POST2(URL: String; Body: TStringStream = nil): TJSONObject; function RequestBase64(URL: String; Body: TStringStream = nil): string; function SendJSON(URL: String; JSON: TJSONObject): string; function ValidadorPagador: TStringArray; function ValidadorDescontos: TStringArray; function ValidadorMultaMora: TStringArray; function ValidadorBeneficiado: TStringArray; function ValidadorBoleto: TStringArray; procedure JsonToDataset2(aDataset: TDataSet; aJSON: string); procedure JsonToClientDataSetString(aDataset: TDataSet; aJSON: string); procedure JsonArrayToDataset(aDataset: TDataSet; aJSON: TJSONArray); procedure HorScrollBar(ListBox: TCheckListBox; MaxWidth: Integer); procedure AdjustCheckListBox(ListBox: TCheckListBox); procedure FiltrarTitulos; function Request(Method: TMethod; URL: String; Body: TStringStream = nil) : TJSONObject; function JsonArrayToText(jObj: TJSONObject; strField: string): string; { Private declarations } public { Public declarations } end; var frmCentralBoletos: TfrmCentralBoletos; implementation {$R *.dfm} uses udtmSystem, ufrmGrupoBoletoEmpresas, ucadDevedores; var jsonBoletoBase: string = '{' + ' "pagador":{' + ' "cpfCnpj":"",' + ' "nome":"",' + ' "cep":"",' + ' "endereco":"",' + ' "numero":"",' + ' "complemento":"",' + ' "bairro":"",' + ' "cidade":"",' + ' "uf":"",' + ' "email":"",' + ' "ddd":"",' + ' "telefone":"",' + ' "tipoPessoa":""' + ' },' + ' "dataEmissao":"",' + ' "seuNumero":"",' + ' "dataLimite":"",' + ' "dataVencimento":"",' + ' "mensagem":{' + ' "linha1":"",' + ' "linha2":"",' + ' "linha3":"",' + ' "linha4":"",' + ' "linha5":""' + ' },' + ' "desconto1":{' + ' "codigoDesconto":"",' + ' "taxa":0,' + ' "valor":0,' + ' "data":""' + ' },' + ' "desconto2":{' + ' "codigoDesconto":"",' + ' "taxa":0,' + ' "valor":0,' + ' "data":""' + ' },' + ' "desconto3":{' + ' "codigoDesconto":"",' + ' "taxa":0,' + ' "valor":0,' + ' "data":""' + ' },' + ' "valorNominal":0,' + ' "valorAbatimento":0,' + ' "multa":{' + ' "codigoMulta":"",' + ' "valor":0,' + ' "taxa":0,' + ' "data":""' + ' },' + ' "mora":{' + ' "codigoMora":"",' + ' "valor":0,' + ' "taxa":0,' + ' "data":""' + ' },' + ' "cnpjCPFBeneficiario":"",' + ' "numDiasAgenda":""' + '}'; jsonBase: string = '{"seuNumero": "", "valorNominal": 0, "dataVencimento": "", "numDiasAgenda": 0, ' + '"pagador": {"cpfCnpj": "", "tipoPessoa": "", "nome": "", "endereco": "", "cidade": "", "uf": "", "cep": ""}, ' + '"desconto1": {"codigoDesconto": "", "taxa": 0, "valor": 0}, ' + '"desconto2": {"codigoDesconto": "", "taxa": 0, "valor": 0}, ' + '"desconto3": {"codigoDesconto": "", "taxa": 0, "valor": 0}, ' + '"multa":{}'+'}'; situacoes: array [0 .. 6] of string = ( 'A', 'AC', 'AB', 'AJ', 'B', 'QC', 'QB' ); procedure TfrmCentralBoletos.AdjustCheckListBox(ListBox: TCheckListBox); var i, nMaxWidth, nItemWidth: Integer; begin // ajusta o checklistbox pra ter scroll horizontal nMaxWidth := ListBox.ClientWidth; for i := 0 to ListBox.Items.Count - 1 do begin nItemWidth := ListBox.Canvas.TextWidth(ListBox.Items[i]) + 20; if (nItemWidth > nMaxWidth) then nMaxWidth := nItemWidth; end; if (nMaxWidth > ListBox.ClientWidth) then begin ListBox.ScrollWidth := nMaxWidth; end; end; procedure TfrmCentralBoletos.btn_gerarbolunicoClick(Sender: TObject); var pagador, mensagem, desc1, desc2, desc3, multa, mora, resposta: TJSONObject; JSONPair: TJSONPair; i: Integer; resp: string; begin inherited; if MessageDlg ('Por favor verifique se as datas para Multa e Mora estão preenchidas corretamente.' + ' Esses valor não são calculados automaticamente.' + ' Deseja continuar?', mtWarning, [mbYes, mbNo], 0) = mrNo then begin abort; end; if ValidadorPagador[0] = 'False' then begin MessageDlg(ValidadorPagador[1], mtError, [mbOK], 0); abort; end; if ValidadorDescontos[0] = 'False' then begin MessageDlg(ValidadorDescontos[1], mtError, [mbOK], 0); abort; end; if ValidadorMultaMora[0] = 'False' then begin MessageDlg(ValidadorMultaMora[1], mtError, [mbOK], 0); abort; end; with dtmSystem do begin tblBoletos.Append; // tblBoletosVL_NOMINAL.AsCurrency := StrToCurr(edt_valorboleto.Text); // if edt_abatimentobol.Text <> '' then // begin // tblBoletosVL_ABATIMENTO.AsCurrency := StrToCurr(edt_abatimentobol.Text); // end // else // begin // tblBoletosVL_ABATIMENTO.AsCurrency := 0; // end; // tblBoletosDT_VENCIMENTO.AsDateTime := dt_vencbolunico.Date; tblBoletos.POST; // for i := 0 to dbgrd_bolunico.SelectedRows.Count - 1 do // begin // zroqryBolUnico.GotoBookmark // (pointer(dbgrd_bolunico.SelectedRows.Items[i])); // tblBoletoTitulos.Append; // tblBoletoTitulosID_DEVEDOR.AsInteger := // zroqryBolUnicoID_DEVEDOR.AsInteger; // tblBoletoTitulosID_TITULO.AsInteger := zroqryBolUnicoID_TITULO.AsInteger; // tblBoletoTitulosID_BOLETO.AsInteger := tblBoletosID.AsInteger; // tblBoletoTitulos.POST; // end; end; try JSONBoletoUnico := TJSONObject.ParseJSONValue(jsonBoletoBase) as TJSONObject; except end; JSONPair := JSONBoletoUnico.GET('seuNumero'); JSONPair.JsonValue.Free; // JSONPair.JsonValue := TJSONString.create // (dtmSystem.tblBoletosNR_NOSSO_NUMERO.AsString); JSONPair := JSONBoletoUnico.GET('cnpjCPFBeneficiario'); JSONPair.JsonValue.Free; JSONPair.JsonValue := TJSONString.create (StringReplace(StringReplace(StringReplace(dtmSystem.tblEmpresaTX_CNPJ. AsString, '.', '', [rfReplaceAll]), '-', '', [rfReplaceAll]), '/', '', [rfReplaceAll])); JSONPair := JSONBoletoUnico.GET('valorNominal'); JSONPair.JsonValue.Free; // JSONPair.JsonValue := TJSONNumber.create // (dtmSystem.tblBoletosVL_NOMINAL.AsString); JSONPair := JSONBoletoUnico.GET('valorAbatimento'); JSONPair.JsonValue.Free; // JSONPair.JsonValue := TJSONNumber.create // (dtmSystem.tblBoletosVL_ABATIMENTO.AsString); JSONPair := JSONBoletoUnico.GET('dataEmissao'); JSONPair.JsonValue.Free; JSONPair.JsonValue := TJSONString.create(FormatDateTime('yyyy-mm-dd', Date)); JSONPair := JSONBoletoUnico.GET('dataVencimento'); JSONPair.JsonValue.Free; // JSONPair.JsonValue := TJSONString.create(FormatDateTime('yyyy-mm-dd', // dtmSystem.tblBoletosDT_VENCIMENTO.AsDateTime)); JSONPair := JSONBoletoUnico.GET('numDiasAgenda'); JSONPair.JsonValue.Free; // JSONPair.JsonValue := TJSONString.create(cb_agendabol.Text); JSONPair := JSONBoletoUnico.GET('dataLimite'); JSONPair.JsonValue.Free; // JSONPair.JsonValue := TJSONString.create(cb_dtlimitebol.Text); pagador := JSONBoletoUnico.Values['pagador'] as TJSONObject; JSONPair := pagador.GET('cnpjCpf'); JSONPair.JsonValue.Free; // JSONPair.JsonValue := TJSONString.create(edt_docbolunico.Text); JSONPair := pagador.GET('tipoPessoa'); JSONPair.JsonValue.Free; // if length(edt_docbolunico.Text) = 11 then // begin // JSONPair.JsonValue := TJSONString.create('FISICA'); // end // else // begin // JSONPair.JsonValue := TJSONString.create('JURIDICA'); // end; JSONPair := pagador.GET('nome'); JSONPair.JsonValue.Free; // JSONPair.JsonValue := TJSONString.create(edt_nomebolunico.Text); JSONPair := pagador.GET('endereco'); JSONPair.JsonValue.Free; // JSONPair.JsonValue := TJSONString.create(edt_endbolunico.Text); JSONPair := pagador.GET('numero'); JSONPair.JsonValue.Free; // JSONPair.JsonValue := TJSONString.create(edt_endnumbolunico.Text); JSONPair := pagador.GET('complemento'); JSONPair.JsonValue.Free; // JSONPair.JsonValue := TJSONString.create(edt_compbolunico.Text); JSONPair := pagador.GET('bairro'); JSONPair.JsonValue.Free; // JSONPair.JsonValue := TJSONString.create(edt_bairrobolunico.Text); JSONPair := pagador.GET('cidade'); JSONPair.JsonValue.Free; // JSONPair.JsonValue := TJSONString.create(edt_cidadebolunico.Text); JSONPair := pagador.GET('uf'); JSONPair.JsonValue.Free; // JSONPair.JsonValue := TJSONString.create(edt_estadobolunico.Text); JSONPair := pagador.GET('cep'); JSONPair.JsonValue.Free; // JSONPair.JsonValue := TJSONString.create(edt_cepbolunico.Text); JSONPair := pagador.GET('email'); JSONPair.JsonValue.Free; // JSONPair.JsonValue := TJSONString.create(edt_emailbolunico.Text); JSONPair := pagador.GET('ddd'); JSONPair.JsonValue.Free; // JSONPair.JsonValue := TJSONString.create(edt_dddbolunico.Text); JSONPair := pagador.GET('telefone'); JSONPair.JsonValue.Free; // JSONPair.JsonValue := TJSONString.create(edt_telbolunico.Text); mensagem := JSONBoletoUnico.Values['mensagem'] as TJSONObject; JSONPair := mensagem.GET('linha1'); JSONPair.JsonValue.Free; // JSONPair.JsonValue := TJSONString.create(edt_linha1bol.Text); JSONPair := mensagem.GET('linha2'); JSONPair.JsonValue.Free; // JSONPair.JsonValue := TJSONString.create(edt_linha2bol.Text); JSONPair := mensagem.GET('linha3'); JSONPair.JsonValue.Free; // JSONPair.JsonValue := TJSONString.create(edt_linha3bol.Text); JSONPair := mensagem.GET('linha4'); JSONPair.JsonValue.Free; // JSONPair.JsonValue := TJSONString.create(edt_linha4bol.Text); JSONPair := mensagem.GET('linha5'); JSONPair.JsonValue.Free; // JSONPair.JsonValue := TJSONString.create(edt_linha5bol.Text); desc1 := JSONBoletoUnico.Values['desconto1'] as TJSONObject; JSONPair := desc1.GET('codigoDesconto'); JSONPair.JsonValue.Free; JSONPair.JsonValue := TJSONString.create(cb_desc1.Text); JSONPair := desc1.GET('data'); JSONPair.JsonValue.Free; if cb_desc1.ItemIndex = 0 then begin JSONPair.JsonValue := TJSONString.create(''); end else begin JSONPair.JsonValue := TJSONString.create(FormatDateTime('yyyy-mm-dd', dtp_desc1.Date)); end; JSONPair := desc1.GET('taxa'); JSONPair.JsonValue.Free; JSONPair.JsonValue := TJSONNumber.create(edt_taxa1bol.Text); JSONPair := desc1.GET('valor'); JSONPair.JsonValue.Free; JSONPair.JsonValue := TJSONNumber.create(edt_val1bol.Text); desc2 := JSONBoletoUnico.Values['desconto2'] as TJSONObject; JSONPair := desc2.GET('codigoDesconto'); JSONPair.JsonValue.Free; JSONPair.JsonValue := TJSONString.create(cb_desc2.Text); JSONPair := desc2.GET('data'); JSONPair.JsonValue.Free; if cb_desc2.ItemIndex = 0 then begin JSONPair.JsonValue := TJSONString.create(''); end else begin JSONPair.JsonValue := TJSONString.create(FormatDateTime('yyyy-mm-dd', dtp_desc2.Date)); end; JSONPair := desc2.GET('taxa'); JSONPair.JsonValue.Free; JSONPair.JsonValue := TJSONNumber.create(edt_taxa2bol.Text); JSONPair := desc2.GET('valor'); JSONPair.JsonValue.Free; JSONPair.JsonValue := TJSONNumber.create(edt_val2bol.Text); desc3 := JSONBoletoUnico.Values['desconto3'] as TJSONObject; JSONPair := desc3.GET('codigoDesconto'); JSONPair.JsonValue.Free; JSONPair.JsonValue := TJSONString.create(cb_desc3.Text); JSONPair := desc3.GET('data'); JSONPair.JsonValue.Free; if cb_desc3.ItemIndex = 0 then begin JSONPair.JsonValue := TJSONString.create(''); end else begin JSONPair.JsonValue := TJSONString.create(FormatDateTime('yyyy-mm-dd', dtp_desc3.Date)); end; JSONPair := desc3.GET('taxa'); JSONPair.JsonValue.Free; JSONPair.JsonValue := TJSONNumber.create(edt_taxa3bol.Text); JSONPair := desc3.GET('valor'); JSONPair.JsonValue.Free; JSONPair.JsonValue := TJSONNumber.create(edt_val3bol.Text); multa := JSONBoletoUnico.Values['multa'] as TJSONObject; JSONPair := multa.GET('codigoMulta'); JSONPair.JsonValue.Free; JSONPair.JsonValue := TJSONString.create(cb_multabol.Text); JSONPair := multa.GET('data'); JSONPair.JsonValue.Free; if cb_multabol.ItemIndex = 0 then begin JSONPair.JsonValue := TJSONString.create(''); end else begin JSONPair.JsonValue := TJSONString.create(FormatDateTime('yyyy-mm-dd', dtp_multa.Date)); end; JSONPair := multa.GET('taxa'); JSONPair.JsonValue.Free; JSONPair.JsonValue := TJSONNumber.create(edt_taxamultabol.Text); JSONPair := multa.GET('valor'); JSONPair.JsonValue.Free; JSONPair.JsonValue := TJSONNumber.create(edt_vlmultabol.Text); mora := JSONBoletoUnico.Values['mora'] as TJSONObject; JSONPair := mora.GET('codigoMora'); JSONPair.JsonValue.Free; JSONPair.JsonValue := TJSONString.create(cb_morabol.Text); JSONPair := mora.GET('data'); JSONPair.JsonValue.Free; if cb_morabol.ItemIndex = 2 then begin JSONPair.JsonValue := TJSONString.create(''); end else begin JSONPair.JsonValue := TJSONString.create(FormatDateTime('yyyy-mm-dd', dtp_mora.Date)); end; JSONPair := mora.GET('taxa'); JSONPair.JsonValue.Free; JSONPair.JsonValue := TJSONNumber.create(edt_taxamorabol.Text); JSONPair := mora.GET('valor'); JSONPair.JsonValue.Free; JSONPair.JsonValue := TJSONNumber.create(edt_vlmorabol.Text); resp := SendJSON ('https://apis.bancointer.com.br/openbanking/v1/certificado/boletos', JSONBoletoUnico); if resp = 'Error' then begin // while dtmSystem.tblBoletoTitulos.Locate('ID_BOLETO', // dtmSystem.tblBoletosID.AsInteger, []) do // begin // dtmSystem.tblBoletoTitulos.DELETE; // end; dtmSystem.tblBoletos.DELETE; dtmSystem.seqBoletos.BlockSize := -1; dtmSystem.seqBoletos.GetNextValue; dtmSystem.seqBoletos.BlockSize := 1; end else begin resposta := TJSONObject.ParseJSONValue(resp) as TJSONObject; dtmSystem.tblBoletos.Edit; // dtmSystem.tblBoletosCD_COD_BARRAS.AsString := // resposta.Values['codigoBarras'].Value; // dtmSystem.tblBoletosCD_COD_BARRAS.AsString := // resposta.Values['linhaDigitavel'].Value; // dtmSystem.tblBoletos.POST; // Showmessage('Boleto de Nº ' + dtmSystem.tblBoletosNR_NOSSO_NUMERO.AsString + // ' gerado com sucesso!'#13#10 + // ' Aguarde aproximadamente por 5 minutos para poder consultá-lo.'); end; end; procedure TfrmCentralBoletos.btnFichaClienteClick(Sender: TObject); begin inherited; cadDevedores := TcadDevedores.create(Self); try cadDevedores.ShowModal; finally cadDevedores.Free; end; end; procedure TfrmCentralBoletos.btnGerarBoletoClick(Sender: TObject); var resValidador: TStringArray; begin inherited; Screen.Cursor := crHourGlass; SetLength(resValidador, 2); resValidador := ValidadorPagador; if resValidador[0] = 'False' then begin MessageDlg(resValidador[1], mtError, [mbOK], 0); abort; end; resValidador := ValidadorDescontos; if resValidador[0] = 'False' then begin MessageDlg(resValidador[1], mtError, [mbOK], 0); abort; end; resValidador := ValidadorMultaMora; if resValidador[0] = 'False' then begin MessageDlg(resValidador[1], mtError, [mbOK], 0); abort; end; resValidador := ValidadorBeneficiado; if resValidador[0] = 'False' then begin MessageDlg(resValidador[1], mtError, [mbOK], 0); abort; end; resValidador := ValidadorBoleto; if resValidador[0] = 'False' then begin MessageDlg(resValidador[1], mtError, [mbOK], 0); abort; end; if dtmSystem.tblDevEmpBoletos.IsEmpty then begin if MessageDlg('Este devedor não possui empresas vinculadas ao boleto.' + ' Não será possível vincular o boleto a títulos do Sistema. Deseja continuar?', mtWarning, [mbYes, mbNo], 0) = mrNo then begin abort; end; end; Screen.Cursor := crDefault; end; procedure TfrmCentralBoletos.btnPreparaBoletoClick(Sender: TObject); var i: Integer; docHelper: string; selecionouAlgo: boolean; vlNominal: currency; begin inherited; // Showmessage(inttostr(dbgrdTitulos.SelectedRows.Count)); // for i := 0 to dbgrdTitulos.SelectedRows.Count - 1 do // begin // dbgrdTitulos.DataSource.DataSet.GotoBookmark // (Pointer(dbgrdTitulos.SelectedRows.Items[i])); // Showmessage(dbgrdTitulos.DataSource.DataSet.FieldByName // ('tx_produto').AsString) // end; Screen.Cursor := crHourGlass; // Zerando a página edtNomePagador.Clear; edtDocumentoPagador.Clear; cbTipoPagador.ItemIndex := -1; edtEmailPagador.Clear; edtEnderecoPagador.Clear; edtNumeroPagador.Clear; edtComplementoPagador.Clear; edtBairroPagador.Clear; edtCidadePagador.Clear; edtUfPagador.Clear; edtCepPagador.Clear; edtDddPagador.Clear; edtTelefonePagador.Clear; edtSeuNumeroBoleto.Clear; edtVlNominalBoleto.Clear; dtpVencimentoBoleto.Date := Date; edtDiasCancelamentoBoleto.Text := '0'; cb_multabol.ItemIndex := -1; cb_morabol.ItemIndex := -1; cb_desc1.ItemIndex := -1; cb_desc2.ItemIndex := -1; cb_desc3.ItemIndex := -1; edt_taxamultabol.Clear; edt_taxamorabol.Clear; edt_taxa1bol.Clear; edt_taxa2bol.Clear; edt_taxa3bol.Clear; edt_vlmorabol.Clear; edt_vlmultabol.Clear; edt_val1bol.Clear; edt_val2bol.Clear; edt_val3bol.Clear; dtp_mora.Date := Date; dtp_multa.Date := Date; dtp_desc1.Date := Date; dtp_desc2.Date := Date; dtp_desc3.Date := Date; edtLinha1Boleto.Clear; edtLinha2Boleto.Clear; edtLinha3Boleto.Clear; edtLinha4Boleto.Clear; edtLinha5Boleto.Clear; edtNomeBeneficiario.Clear; edtDocumentoBeneficiario.Clear; cbTipoBeneficiario.ItemIndex := -1; edtEnderecoBeneficiario.Clear; edtBairroBeneficiario.Clear; edtCidadeBeneficiario.Clear; edtUfBeneficiario.Clear; edtCepBeneficiario.Clear; with dtmSystem do begin try try edtNomePagador.Text := tblDevedoresTX_NOME.AsString; cbTipoPagador.ItemIndex := IfThen(tblDevedoresTP_CLIENTE.AsString = 'F', 0, 1); if tblDevedoresTP_CLIENTE.AsString = 'F' then begin docHelper := StringReplace(tblDevedoresCD_CPF.AsString, '.', '', [rfReplaceAll]); docHelper := StringReplace(docHelper, '-', '', [rfReplaceAll]); docHelper := docHelper.PadLeft(14, '0'); end else begin docHelper := StringReplace(tblDevedoresCD_CNPJ.AsString, '.', '', [rfReplaceAll]); docHelper := StringReplace(tblDevedoresCD_CNPJ.AsString, '-', '', [rfReplaceAll]); docHelper := StringReplace(tblDevedoresCD_CNPJ.AsString, '/', '', [rfReplaceAll]); end; edtDocumentoPagador.Text := docHelper; if not tblEmail.IsEmpty then begin edtEmailPagador.Text := tblEmailTX_EMAIL.AsString; end else begin edtEmailPagador.Text := ''; end; if not tblEnderecos.IsEmpty then begin edtEnderecoPagador.Text := tblEnderecosTX_LOGRADOURO.AsString; edtNumeroPagador.Text := tblEnderecosNR_NUMERO.AsString; edtComplementoPagador.Text := tblEnderecosTX_COMPLEMENTO.AsString; edtBairroPagador.Text := tblEnderecosTX_BAIRRO.AsString; edtCidadePagador.Text := tblEnderecosTX_CIDADE.AsString; edtUfPagador.Text := tblEnderecosTX_UF.AsString; end else begin edtEnderecoPagador.Clear; edtNumeroPagador.Clear; edtComplementoPagador.Clear; edtBairroPagador.Clear; edtCidadePagador.Clear; edtUfPagador.Clear; edtCepPagador.Clear; end; if not tblTelefones.IsEmpty then begin edtDddPagador.Text := tblTelefonesNR_DDD.AsString; edtTelefonePagador.Text := tblTelefonesNR_NUMERO.AsString; end else begin edtDddPagador.Clear; edtTelefonePagador.Clear; end; cb_multabol.ItemIndex := -1; cb_morabol.ItemIndex := -1; cb_desc1.ItemIndex := -1; cb_desc2.ItemIndex := -1; cb_desc3.ItemIndex := -1; edt_taxamultabol.Clear; edt_taxamorabol.Clear; edt_taxa1bol.Clear; edt_taxa2bol.Clear; edt_taxa3bol.Clear; edt_vlmorabol.Clear; edt_vlmultabol.Clear; edt_val1bol.Clear; edt_val2bol.Clear; edt_val3bol.Clear; dtp_mora.Date := Date; dtp_multa.Date := Date; dtp_desc1.Date := Date; dtp_desc2.Date := Date; dtp_desc3.Date := Date; edtLinha1Boleto.Clear; edtLinha2Boleto.Clear; edtLinha3Boleto.Clear; edtLinha4Boleto.Clear; edtLinha5Boleto.Clear; edtNomeBeneficiario.Text := tblEmpresaTX_NOME.AsString; edtDocumentoBeneficiario.Text := tblEmpresaTX_CNPJ.AsString; cbTipoBeneficiario.ItemIndex := 1; edtEnderecoBeneficiario.Text := tblEmpresaTX_ENDERECO.AsString; edtBairroBeneficiario.Text := tblEmpresaTX_BAIRRO.AsString; edtCidadeBeneficiario.Text := tblEmpresaTX_CIDADE.AsString; edtUfBeneficiario.Text := tblEmpresaTX_UF.AsString; edtCepBeneficiario.Text := tblEmpresaTX_CEP.AsString; pcPesquisaGerar.TabIndex := 1; except end; finally Screen.Cursor := crDefault; end; end; end; procedure TfrmCentralBoletos.cbSituacaoChange(Sender: TObject); begin inherited; FiltrarTitulos; end; procedure TfrmCentralBoletos.cdsBoletosAfterScroll(DataSet: TDataSet); begin inherited; JsonToDataset2(tblPagador, Format('[%s]', [cdsBoletos.FieldByName('pagador').AsString])); end; procedure TfrmCentralBoletos.clbEmpresasTitulosClickCheck(Sender: TObject); begin inherited; FiltrarTitulos; end; procedure TfrmCentralBoletos.DBEdit6KeyPress(Sender: TObject; var Key: Char); begin inherited; if not(Key in [#8, '0' .. '9', System.SysUtils.FormatSettings.DecimalSeparator]) then begin Key := #0; end else if (Key = System.SysUtils.FormatSettings.DecimalSeparator) and (Pos(Key, (Sender as TDBEdit).Text) > 0) then begin Key := #0; end; end; procedure TfrmCentralBoletos.DBEdit7KeyPress(Sender: TObject; var Key: Char); begin inherited; if not(Key in [#8, '0' .. '9', System.SysUtils.FormatSettings.DecimalSeparator]) then begin Key := #0; end; end; procedure TfrmCentralBoletos.dbgrd_boletosDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin // case AnsiIndexStr(tblBoletossituacao.AsString, ['BAIXADO', 'PAGO']) of // 0: // dbgrd_boletos.Canvas.Brush.Color := $7AA0FF; // 1: // dbgrd_boletos.Canvas.Brush.Color := $FFF8F0; // end; // dbgrd_boletos.DefaultDrawColumnCell(Rect, DataCol, Column, State); end; procedure TfrmCentralBoletos.dbgrd_boletosMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var Pt: TPoint; Coord: TGridCoord; begin inherited; Pt := dbgrd_boletos.ScreenToClient(Mouse.CursorPos); Coord := dbgrd_boletos.MouseCoord(Pt.X, Pt.Y); if (Coord.Y > 0) and not(cdsBoletos.IsEmpty) and (Button = mbRight) then begin pum_download.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; end; procedure TfrmCentralBoletos.dbgrd_bolunicoMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var Pt: TPoint; Coord: TGridCoord; begin inherited; // Pt := dbgrd_bolunico.ScreenToClient(Mouse.CursorPos); // Coord := dbgrd_bolunico.MouseCoord(Pt.X, Pt.Y); // if (Coord.Y > 0) and not(zroqryBolUnico.IsEmpty) and (Button = mbRight) then // begin // pum_incldel.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y); // end; end; procedure TfrmCentralBoletos.DBGrid2DblClick(Sender: TObject); begin inherited; with dtmSystem do begin Screen.Cursor := crHourGlass; OpenOrRefresh(tblDevedores); if tblDevedores.Locate('ID_DEVEDOR', zroqryPesquisaID_DEVEDOR.AsInteger, []) then begin cdsHist.DisableControls; if cdsHist.RecordCount > 10 then begin cdsHist.First; cdsHist.DELETE; end; if not(cdsHist.Locate('TX_NOME', zroqryPesquisaTX_NOME.AsString, [loCaseInsensitive, loPartialKey])) then begin cdsHist.Append; cdsHisttx_nome.AsString := zroqryPesquisaTX_NOME.AsString; cdsHistid_devedor.AsInteger := zroqryPesquisaID_DEVEDOR.AsInteger; cdsHist.POST; end; cdsHist.EnableControls; if not Assigned(dtsDevedor.DataSet) then begin dtsDevedor.DataSet := dtmSystem.tblDevedores; end; OpenOrRefresh(tblEnderecos); OpenOrRefresh(tblTelefones); OpenOrRefresh(tblEmail); OpenOrRefresh(tblTitulos); OpenOrRefresh(tblHistorico); btnFichaCliente.Enabled := true; end; Screen.Cursor := crDefault; end; end; procedure TfrmCentralBoletos.DBNavigator1BeforeAction(Sender: TObject; Button: TNavigateBtn); begin inherited; if Button = nbPost then begin dtmSystem.tblDevEmpBoletosID_DEVEDOR.AsInteger := dtmSystem.id_devedor; end; end; procedure TfrmCentralBoletos.dtpVencimentoFimChange(Sender: TObject); begin inherited; FiltrarTitulos; end; procedure TfrmCentralBoletos.dtpVencimentoIniChange(Sender: TObject); begin inherited; FiltrarTitulos; end; procedure TfrmCentralBoletos.dtsBoletosDataChange(Sender: TObject; Field: TField); begin // if not tblBoletos.IsEmpty then // begin // if tblBoletosdesconto1.AsString <> '' then // begin // tblDesc1.ReadOnly := False; // JsonToDataset2(tblDesc1, '[' + TJSONObject.ParseJSONValue // (tblBoletosdesconto1.AsString).ToString + ']'); // tblDesc1.ReadOnly := True; // end; // if tblBoletosdesconto2.AsString <> '' then // begin // tblDesc2.ReadOnly := False; // JsonToDataset2(tblDesc2, '[' + TJSONObject.ParseJSONValue // (tblBoletosdesconto2.AsString).ToString + ']'); // tblDesc2.ReadOnly := True; // end; // if tblBoletosdesconto3.AsString <> '' then // begin // tblDesc3.ReadOnly := False; // JsonToDataset2(tblDesc3, '[' + TJSONObject.ParseJSONValue // (tblBoletosdesconto3.AsString).ToString + ']'); // tblDesc3.ReadOnly := True; // end; // if tblBoletosmulta.AsString <> '' then // begin // tblMulta.ReadOnly := False; // JsonToDataset2(tblMulta, '[' + TJSONObject.ParseJSONValue // (tblBoletosmulta.AsString).ToString + ']'); // tblMulta.ReadOnly := True; // end; // if tblBoletosmora.AsString <> '' then // begin // tblMora.ReadOnly := False; // JsonToDataset2(tblMora, '[' + TJSONObject.ParseJSONValue // (tblBoletosmora.AsString).ToString + ']'); // tblMora.ReadOnly := True; // end; // end; end; procedure TfrmCentralBoletos.dtsDevedorStateChange(Sender: TObject); begin inherited; dbedtNomeDevBoleto.ReadOnly := not(dtsDevedor.DataSet.State in [dsEdit]); dbedtDocDevBoleto.ReadOnly := not(dtsDevedor.DataSet.State in [dsEdit]); dblucbEndDevBoleto.ReadOnly := not(dtsDevedor.DataSet.State in [dsEdit]); dblucbTelDevBoleto.ReadOnly := not(dtsDevedor.DataSet.State in [dsEdit]); dblucbEmailDevBoleto.ReadOnly := not(dtsDevedor.DataSet.State in [dsEdit]); dbEdtLinha1Boleto.ReadOnly := not(dtsDevedor.DataSet.State in [dsEdit]); dbEdtLinha2Boleto.ReadOnly := not(dtsDevedor.DataSet.State in [dsEdit]); dbEdtLinha3Boleto.ReadOnly := not(dtsDevedor.DataSet.State in [dsEdit]); dbEdtLinha4Boleto.ReadOnly := not(dtsDevedor.DataSet.State in [dsEdit]); dbEdtLinha5Boleto.ReadOnly := not(dtsDevedor.DataSet.State in [dsEdit]); DBLookupComboBox5.ReadOnly := not(dtsDevedor.DataSet.State in [dsEdit]); DBEdit6.ReadOnly := not(dtsDevedor.DataSet.State in [dsEdit]); DBEdit5.ReadOnly := not(dtsDevedor.DataSet.State in [dsEdit]); DBEdit7.ReadOnly := not(dtsDevedor.DataSet.State in [dsEdit]); DBLookupComboBox6.ReadOnly := not(dtsDevedor.DataSet.State in [dsEdit]); DBEdit9.ReadOnly := not(dtsDevedor.DataSet.State in [dsEdit]); DBEdit8.ReadOnly := not(dtsDevedor.DataSet.State in [dsEdit]); DBEdit10.ReadOnly := not(dtsDevedor.DataSet.State in [dsEdit]); DBLookupComboBox7.ReadOnly := not(dtsDevedor.DataSet.State in [dsEdit]); DBEdit11.ReadOnly := not(dtsDevedor.DataSet.State in [dsEdit]); DBEdit14.ReadOnly := not(dtsDevedor.DataSet.State in [dsEdit]); DBEdit17.ReadOnly := not(dtsDevedor.DataSet.State in [dsEdit]); DBLookupComboBox8.ReadOnly := not(dtsDevedor.DataSet.State in [dsEdit]); DBEdit12.ReadOnly := not(dtsDevedor.DataSet.State in [dsEdit]); DBEdit15.ReadOnly := not(dtsDevedor.DataSet.State in [dsEdit]); DBEdit18.ReadOnly := not(dtsDevedor.DataSet.State in [dsEdit]); DBLookupComboBox9.ReadOnly := not(dtsDevedor.DataSet.State in [dsEdit]); DBEdit13.ReadOnly := not(dtsDevedor.DataSet.State in [dsEdit]); DBEdit16.ReadOnly := not(dtsDevedor.DataSet.State in [dsEdit]); DBEdit19.ReadOnly := not(dtsDevedor.DataSet.State in [dsEdit]); end; procedure TfrmCentralBoletos.FiltrarTitulos; begin end; procedure TfrmCentralBoletos.FormCreate(Sender: TObject); begin inherited; vl_bol := 0; opcoes_situacao := TStringList.create; opcoes_situacao.Add('TODOS'); opcoes_situacao.Add('VENCIDOSAVENCER'); opcoes_situacao.Add('EXPIRADOS'); opcoes_situacao.Add('PAGOS'); opcoes_situacao.Add('TODOSBAIXADOS'); opcoes_datatipo := TStringList.create; opcoes_datatipo.Add('VENCIMENTO'); opcoes_datatipo.Add('EMISSAO'); opcoes_datatipo.Add('SITUACAO'); opcoes_ordem := TStringList.create; opcoes_ordem.Add('NOSSONUMERO'); opcoes_ordem.Add('SEUNUMERO'); opcoes_ordem.Add('DATAVENCIMENTO_ASC'); opcoes_ordem.Add('DATAVENCIMENTO_DSC'); opcoes_ordem.Add('NOMESACADO'); opcoes_ordem.Add('VALOR_ASC'); opcoes_ordem.Add('VALOR_DSC'); opcoes_ordem.Add('STATUS_ASC'); opcoes_ordem.Add('STATUS_DSC'); dt_inicio.Date := StartOfTheMonth(Date); dt_fim.Date := EndOfTheMonth(Date); // dt_vencbolunico.Date := Date; // dtp_vencinbolunico.Date := StartOfTheMonth(Date); // dtp_vencoutbolunico.Date := EndOfTheMonth(Date); with dtmSystem do begin OpenOrRefresh(tblEstados); OpenOrRefresh(tblCidades); OpenOrRefreshRO(tblCidadesConsulta); OpenOrRefresh(tblBoletos); OpenOrRefresh(tblBoletoTitulos); OpenOrRefresh(tblEmpresa); OpenOrRefresh(tblDevEmpBoletos); // dblucb_filtrobolunico.KeyValue := tblGrupoBoletosID_GRUPO.AsInteger; end; IdSSLHandler.SSLOptions.CertFile := dtmSystem.tblEmpresaPATH_CERT.AsString; IdSSLHandler.SSLOptions.KeyFile := dtmSystem.tblEmpresaPATH_KEY.AsString; IdSSLHandler.SSLOptions.RootCertFile := dtmSystem.tblEmpresaPATH_CERT.AsString; GIdDefaultTextEncoding := encUTF8; dtsDevedor.DataSet := nil; // zroqryBolUnico.Open; // zroqryEmails.Open; // zroqryTelefones.Open; // zroqryEnderecos.Open; // pcGeraBoletos.TabIndex := 0; pcBoletos.TabIndex := 0; pcPesquisaGerar.TabIndex := 0; end; procedure TfrmCentralBoletos.HorScrollBar(ListBox: TCheckListBox; MaxWidth: Integer); var i, w: Integer; begin if MaxWidth = 0 then SendMessage(ListBox.Handle, LB_SETHORIZONTALEXTENT, MaxWidth, 0) else begin { get largest item } for i := 0 to ListBox.Items.Count - 1 do with ListBox do begin w := Canvas.TextWidth(Items[i]); if w > MaxWidth then MaxWidth := w; end; SendMessage(ListBox.Handle, LB_SETHORIZONTALEXTENT, MaxWidth + GetSystemMetrics(SM_CXFRAME), 0); end; end; procedure TfrmCentralBoletos.JsonArrayToDataset(aDataset: TDataSet; aJSON: TJSONArray); var vConv: TCustomJSONDataSetAdapter; begin if (aJSON.ToString = EmptyStr) then begin Exit; end; vConv := TCustomJSONDataSetAdapter.create(Nil); try vConv.DataSet := aDataset; vConv.UpdateDataSet(aJSON); finally vConv.Free; aJSON.Free; end; end; function TfrmCentralBoletos.JsonArrayToText(jObj: TJSONObject; strField: string): string; var j: Integer; begin with jObj do begin with TStringList.create do try try for j := 0 to Pred(GetValue(strField).Count) do begin Add(GetValue(strField).Items[j].ToJSON); end; Result := Text; except on E: Exception do Result := GetValue(strField); end; finally Free; end; end; end; procedure TfrmCentralBoletos.JsonToClientDataSetString(aDataset: TDataSet; aJSON: string); var jObj: TJSONArray; vConv: TCustomJSONDataSetAdapter; begin if (aJSON = EmptyStr) then begin Exit; end; jObj := TJSONObject.ParseJSONValue(aJSON) as TJSONArray; vConv := TCustomJSONDataSetAdapter.create(Nil); try vConv.DataSet := aDataset; vConv.UpdateDataSet(jObj); finally vConv.Free; jObj.Free; end; end; procedure TfrmCentralBoletos.JsonToDataset2(aDataset: TDataSet; aJSON: string); var jObj: TJSONArray; vConv: TCustomJSONDataSetAdapter; begin if (aJSON = EmptyStr) then begin Exit; end; jObj := TJSONObject.ParseJSONValue(aJSON) as TJSONArray; vConv := TCustomJSONDataSetAdapter.create(Nil); try vConv.DataSet := aDataset; vConv.UpdateDataSet(jObj); finally vConv.Free; jObj.Free; end; end; procedure TfrmCentralBoletos.mnhGrupoBoletosClick(Sender: TObject); begin inherited; frmGrupoBoletoEmpresas := TfrmGrupoBoletoEmpresas.create(Self); frmGrupoBoletoEmpresas.ShowModal; end; procedure TfrmCentralBoletos.mnuAcertosClick(Sender: TObject); var resp: string; begin inherited; // resp := SendJSON // ('https://apis.bancointer.com.br/openbanking/v1/certificado/boletos/' + // cdsBoletosnossoNumero.AsString + '/baixas', // TJSONObject.ParseJSONValue('{"codigoBaixa": "ACERTOS"}') as TJSONObject); // if resp <> 'Error' then // begin // Showmessage('Boleto Nº ' + tblBoletosseuNumero.AsString + // ' baixado com sucesso!'); // end; end; procedure TfrmCentralBoletos.mnuAPedidoClienteClick(Sender: TObject); var resp: string; begin inherited; // resp := SendJSON // ('https://apis.bancointer.com.br/openbanking/v1/certificado/boletos/' + // tblBoletosnossoNumero.AsString + '/baixas', // TJSONObject.ParseJSONValue('{"codigoBaixa": "APEDIDODOCLIENTE"}') // as TJSONObject); // if resp <> 'Error' then // begin // Showmessage('Boleto Nº ' + tblBoletosseuNumero.AsString + // ' baixado com sucesso!'); // end; end; procedure TfrmCentralBoletos.mnuBaixarCobClick(Sender: TObject); var total_recebido, nominal_boleto, recebido_rateio, help_pr, help_j, help_m, help_cor: currency; prct_rateio: double; atraso, atraso_repasse: Integer; mes, ano: string; begin inherited; // if not dtmSystem.tblBoletos.Locate('NR_NOSSO_NUMERO', // tblBoletosseuNumero.AsString, []) then // begin // Showmessage('Não foi possível encontrar o boleto desejado no sistema.'); // abort; // end // else // begin // with dtmSystem do // begin // /// / total_recebido := tblBoletosvalorTotalRecebimento.AsCurrency; /// / nominal_boleto := tblBoletosvalorNominal.AsCurrency; // // tblBoletoTitulos.First; // while not tblBoletoTitulos.Eof do // begin // tblDevedores.Locate('ID_DEVEDOR', // tblBoletoTitulosID_DEVEDOR.AsInteger, []); // tblTitulos.Locate('ID_TITULO', tblBoletoTitulosID_TITULO.AsInteger, []); // prct_rateio := ((tblTitulosVL_TITULO.AsCurrency * 100) / // nominal_boleto) / 100; // recebido_rateio := (prct_rateio * total_recebido); // // tblTitulos.Edit; // tblTitulosVL_CORRIGIDO.AsCurrency := recebido_rateio; // if recebido_rateio < tblTitulosVL_TITULO.AsCurrency then // begin // tblTitulosVL_DESC_PRINCIPAL.AsCurrency := // tblTitulosVL_TITULO.AsCurrency - recebido_rateio; // end; // // if tblMultacodigo.AsString <> 'NAOTEMMULTA' then // begin /// / atraso := DaysBetween(tblBoletosdataPagtoBaixa.AsDateTime, /// / IncDay(tblMultadata.AsDateTime, -1)); // if atraso > 0 then // begin // if tblMultacodigo.AsString = 'VALORFIXO' then // begin // tblTitulosVL_MULTA.AsCurrency := // (tblMultavalor.AsCurrency * prct_rateio); // end // else // begin // tblTitulosVL_MULTA.AsCurrency := // ((tblTitulosVL_TITULO.AsCurrency * tblMultataxa.AsFloat) / 100) // * prct_rateio; // end; // end; // end; // // if tblMoracodigo.AsString <> 'ISENTO' then // begin /// / atraso := DaysBetween(tblBoletosdataPagtoBaixa.AsDateTime, /// / IncDay(tblMoradata.AsDateTime, -1)); // if atraso > 0 then // begin // if tblMoracodigo.AsString = 'VALORDIA' then // begin // tblTitulosVL_JUROS.AsCurrency := // (tblMoravalor.AsCurrency * atraso) * prct_rateio; // end // else // begin // tblTitulosVL_MULTA.AsCurrency := // ((tblTitulosVL_TITULO.AsCurrency * ((tblMultataxa.AsFloat / 30) // / 100)) * atraso) * prct_rateio; // end; // end; // end; // /// / mes := inttostr(strtoint(copy(FormatDateTime('yyyy-mm-dd', /// / tblBoletosdataPagtoBaixa.AsDateTime), 6, 2))); /// / ano := copy(FormatDateTime('yyyy-mm-dd', /// / tblBoletosdataPagtoBaixa.AsDateTime), 1, 4); /// / /// / atraso_repasse := DaysBetween(tblBoletosdataPagtoBaixa.AsDateTime, /// / tblTitulosDT_VENCIMENTO.AsDateTime); // // tblCHGEmpresa.Locate('ID_EMPRESA', tblTitulosID_EMPRESA.AsInteger, []); // // tblEmpresaRepasse.Locate('ID_MES;ID_ANO', VarArrayOf([mes, ano]), []); // // rotblRepasseFase.Close; // rotblRepasseFase.SQL.Text := // 'select * from sys_repasses_fases where id_repasse = ' + // QuotedStr(tblEmpresaRepasseID_ITEM.AsString) + ' and min_atraso <= ' // + inttostr(atraso_repasse) + ' and ' + inttostr(atraso_repasse) + // ' <= max_atraso'; // rotblRepasseFase.Open; // // if not rotblRepasseFase.IsEmpty then // begin // help_pr := (rotblRepasseFasePR_PRINCIPAL.AsCurrency / 100); // help_j := (rotblRepasseFasePR_JUROS.AsCurrency / 100); // help_m := (rotblRepasseFasePR_MULTA.AsCurrency / 100); // help_cor := (rotblRepasseFasePR_CORRIGIDO.AsCurrency / 100); // end // else // begin // help_pr := (dtmSystem.tblEmpresaRepassePR_PRINCIPAL.AsCurrency / 100); // help_j := (dtmSystem.tblEmpresaRepassePR_JUROS.AsCurrency / 100); // help_m := (dtmSystem.tblEmpresaRepassePR_MULTA.AsCurrency / 100); // help_cor := // (dtmSystem.tblEmpresaRepassePR_CORRIGIDO.AsCurrency / 100); // end; // // tblTitulosVL_REPASSE_PRIN.AsCurrency := // (tblTitulosVL_TITULO.AsCurrency - // tblTitulosVL_DESC_PRINCIPAL.AsCurrency) * help_pr; // tblTitulosVL_REPASSE_JUROS.AsCurrency := // tblTitulosVL_JUROS.AsCurrency * help_j; // tblTitulosVL_REPASSE_MULTA.AsCurrency := // tblTitulosVL_MULTA.AsCurrency * help_m; // tblTitulosVL_REPASSE_ENCARGOS.AsCurrency := 0; // tblTitulosVL_REPASSE_CORRIGIDO.AsCurrency := // tblTitulosVL_CORRIGIDO.AsCurrency * help_cor; // // tblTitulosTP_SITUACAO.AsString := 'QC'; // tblTitulosTP_PRESTACAO.AsString := 'N'; // tblTitulos.POST; // tblHistorico.Append; // tblHistoricoID_DEVEDOR.AsInteger := tblTitulosID_DEVEDOR.AsInteger; // tblHistoricoID_COBRADOR.AsInteger := id_usuario; // tblHistoricoDT_CONTATO.AsDateTime := Now; // tblHistoricoTL_MEMO.AsString := 'Título ' + // tblTitulosTX_PRODUTO.AsString + ' foi baixado pelo boleto de nº ' + // tblBoletosseuNumero.AsString + '.'; // tblHistorico.POST; // tblBoletoTitulos.Next; // end; // Showmessage('Títulos baixados com sucesso!'); // end; // end; end; procedure TfrmCentralBoletos.mnuDevolucaoClick(Sender: TObject); var resp: string; begin inherited; // resp := SendJSON // ('https://apis.bancointer.com.br/openbanking/v1/certificado/boletos/' + // tblBoletosnossoNumero.AsString + '/baixas', // TJSONObject.ParseJSONValue('{"codigoBaixa": "DEVOLUCAO"}') as TJSONObject); // if resp <> 'Error' then // begin // Showmessage('Boleto Nº ' + tblBoletosseuNumero.AsString + // ' baixado com sucesso!'); // end; end; procedure TfrmCentralBoletos.mnuDownloadClick(Sender: TObject); var Base64: string; fileStream: TFileStream; begin inherited; // try // Base64 := RequestBase64 // ('https://apis.bancointer.com.br/openbanking/v1/certificado/boletos/' + // tblBoletosnossoNumero.AsString + '/pdf'); // except // on E: EIdHTTPProtocolException do // Showmessage(IdHTTP.ResponseText + #13#10 + E.ErrorMessage) // else // showexception(exceptobject, exceptaddr); // end; if IdHTTP.ResponseCode <> 200 then begin Showmessage('Transação não pode ser inicada (' + inttostr(IdHTTP.ResponseCode) + ').'); end else begin with SaveDialog do begin Execute; try fileStream := TFileStream.create(FileName, fmCreate); IdDecoderMIME.DecodeStream(Base64, fileStream); Screen.Cursor := crHourGlass; finally fileStream.Free; Screen.Cursor := crDefault; FileName := ''; end; end; end; end; procedure TfrmCentralBoletos.mnuFaltaClick(Sender: TObject); var resp: string; begin inherited; // resp := SendJSON // ('https://apis.bancointer.com.br/openbanking/v1/certificado/boletos/' + // tblBoletosnossoNumero.AsString + '/baixas', // TJSONObject.ParseJSONValue('{"codigoBaixa": "FALTADESOLUCAO"}') // as TJSONObject); // if resp <> 'Error' then // begin // Showmessage('Boleto Nº ' + tblBoletosseuNumero.AsString + // ' baixado com sucesso!'); // end; end; procedure TfrmCentralBoletos.mnuPagoDiretoClick(Sender: TObject); var resp: string; begin inherited; // resp := SendJSON // ('https://apis.bancointer.com.br/openbanking/v1/certificado/boletos/' + // tblBoletosnossoNumero.AsString + '/baixas', // TJSONObject.ParseJSONValue('{"codigoBaixa": "PAGODIRETOAOCLIENTE"}') // as TJSONObject); // if resp <> 'Error' then // begin // Showmessage('Boleto Nº ' + tblBoletosseuNumero.AsString + // ' baixado com sucesso!'); // end; end; procedure TfrmCentralBoletos.mnuProtestadoClick(Sender: TObject); var resp: string; begin inherited; // resp := SendJSON // ('https://apis.bancointer.com.br/openbanking/v1/certificado/boletos/' + // tblBoletosnossoNumero.AsString + '/baixas', // TJSONObject.ParseJSONValue('{"codigoBaixa": "PROTESTADO"}') as TJSONObject); // if resp <> 'Error' then // begin // Showmessage('Boleto Nº ' + tblBoletosseuNumero.AsString + // ' baixado com sucesso!'); // end; end; procedure TfrmCentralBoletos.mnuProtestoAposBaixaClick(Sender: TObject); var resp: string; begin inherited; // resp := SendJSON // ('https://apis.bancointer.com.br/openbanking/v1/certificado/boletos/' + // tblBoletosnossoNumero.AsString + '/baixas', // TJSONObject.ParseJSONValue('{"codigoBaixa": "PROTESTOAPOSBAIXA"}') // as TJSONObject); // if resp <> 'Error' then // begin // Showmessage('Boleto Nº ' + tblBoletosseuNumero.AsString + // ' baixado com sucesso!'); // end; end; procedure TfrmCentralBoletos.mnuSubstituicaoClick(Sender: TObject); var resp: string; begin inherited; // resp := SendJSON // ('https://apis.bancointer.com.br/openbanking/v1/certificado/boletos/' + // tblBoletosnossoNumero.AsString + '/baixas', // TJSONObject.ParseJSONValue('{"codigoBaixa": "SUBSTITUICAO"}') // as TJSONObject); // if resp <> 'Error' then // begin // Showmessage('Boleto Nº ' + tblBoletosseuNumero.AsString + // ' baixado com sucesso!'); // end; end; function TfrmCentralBoletos.POST2(URL: String; Body: TStringStream) : TJSONObject; var iDResponse: String; begin Screen.Cursor := crHourGlass; try iDResponse := IdHTTP.POST(URL, Body); except on E: EIdHTTPProtocolException do Showmessage('Error on request: '#13#10 + E.Message); end; Result := TJSONObject.ParseJSONValue(iDResponse) as TJSONObject; Screen.Cursor := crDefault; end; function TfrmCentralBoletos.Request(Method: TMethod; URL: String; Body: TStringStream): TJSONObject; var bodyString: string; jsonResponse: TJSONObject; retry: boolean; iDResponse: String; SStrm: TStringStream; begin IdHTTP.IOHandler.DefStringEncoding := IndyTextEncoding_UTF8; retry := true; while retry do begin if IdHTTP.Request.CustomHeaders.Values['Authorization'] = '' then begin try bodyString := Format('client_id=%s&client_secret=%s&scope=boleto-cobranca.read boleto-cobranca.write&grant_type=client_credentials', [dtmSystem.tblEmpresaCLIENT_ID.AsString, dtmSystem.tblEmpresaCLIENT_SECRET.AsString]); iDResponse := IdHTTP.POST('https://cdpj.partners.bancointer.com.br/oauth/v2/token', TStringStream.create(bodyString, TEncoding.UTF8)); jsonResponse := TJSONObject.ParseJSONValue(iDResponse) as TJSONObject; if Assigned(jsonResponse) then begin IdHTTP.Request.CustomHeaders.Values['Authorization'] := Format('Bearer %s', [jsonResponse.GetValue('access_token')]); end; except on E: Exception do begin MessageDlg(E.Message, mtError, [mbOK], 0); retry := false; end; end; end else begin try SStrm := TStringStream.create('', TEncoding.UTF8); case Method of GET: begin // iDResponse := IdHTTP.GET(URL + Format('?%s', [Body.DataString])); IdHTTP.GET(URL + Format('?%s', [Body.DataString]), SStrm); end; POST: begin // iDResponse := IdHTTP.POST(URL, Body); IdHTTP.POST(URL, Body, SStrm); end; end; iDResponse := SStrm.DataString; retry := false; except on E: EIdHTTPProtocolException do begin retry := false; SStrm.Free; Result := nil; case E.ErrorCode of 400: begin MessageDlg(E.Message, mtError, [mbOK], 0); end; 401: begin IdHTTP.Request.CustomHeaders.Values['Authorization'] := ''; retry := true; end; 403: begin MessageDlg(E.Message, mtError, [mbOK], 0); end; 500: begin MessageDlg(E.Message, mtError, [mbOK], 0); raise Exception.create('500 - Erro ao processar a requisição!'); end; else begin MessageDlg(E.Message, mtError, [mbOK], 0); end; end; end; on E: EIDSocketError do begin SStrm.Free; MessageDlg(E.Message, mtError, [mbOK], 0); retry := false; Result := nil; end; on E: EIdConnClosedGracefully do begin SStrm.Free; MessageDlg(E.Message, mtError, [mbOK], 0); retry := false; Result := nil; end; else begin SStrm.Free; MessageDlg('Error não identificado.', mtError, [mbOK], 0); retry := false; Result := nil; end; end; end; end; if iDResponse <> '' then begin try Result := TJSONObject.ParseJSONValue(iDResponse) as TJSONObject; except MessageDlg('Error não identificado.', mtError, [mbOK], 0); Result := nil; end; end; end; function TfrmCentralBoletos.RequestBase64(URL: String; Body: TStringStream): string; var Response: TStringStream; begin Screen.Cursor := crHourGlass; Response := TStringStream.create('', TEncoding.UTF8); try IdHTTP.GET(URL, Response); except on E: EIdHTTPProtocolException do Showmessage('Error on request: '#13#10 + E.ErrorMessage); end; Result := Response.DataString; Screen.Cursor := crDefault; end; function TfrmCentralBoletos.RequestJSON(URL: String; Body: TStringStream) : TJSONObject; var Response: TStringStream; begin Screen.Cursor := crHourGlass; Response := TStringStream.create('', TEncoding.UTF8); try IdHTTP.GET(URL, Response); except on E: EIdHTTPProtocolException do Showmessage('Error on request: '#13#10 + E.ErrorMessage); end; Result := TJSONObject.ParseJSONValue(Response.DataString) as TJSONObject; Screen.Cursor := crDefault; end; function TfrmCentralBoletos.SendJSON(URL: String; JSON: TJSONObject): string; var // JSONToReturn: TStringStream; JSONToSend: TStringStream; string_return: string; begin Screen.Cursor := crHourGlass; try JSONToSend := TStringStream.create(JSON.ToString, TEncoding.UTF8); except end; // JSONToReturn := TStringStream.create(''); try IdHTTP.Request.Accept := 'application/json'; IdHTTP.Request.CharSet := 'utf-8'; try string_return := IdHTTP.POST(URL, JSONToSend); Result := string_return; except on E: EIdHTTPProtocolException do begin Showmessage('Error on request: '#13#10 + E.ErrorMessage); Result := 'Error'; end; end; finally JSONToSend.Free; end; Screen.Cursor := crDefault; end; procedure TfrmCentralBoletos.spdbtnPesquisaClick(Sender: TObject); var strPesquisa, strQuery, strHelpDoc: string; begin inherited; Screen.Cursor := crHourGlass; if Trim(edtPesquisa.Text) = '' then begin Screen.Cursor := crDefault; abort; end; strPesquisa := Trim(edtPesquisa.Text); strPesquisa := Ansiuppercase(StringReplace(strPesquisa, ' ', '%', [rfReplaceAll])); strQuery := 'select ID_DEVEDOR, TX_NOME, case when TP_CLIENTE = ''F'' ' + 'then CD_CPF when TP_CLIENTE = ''J'' then CD_CNPJ end as TX_DOCUMENTO from ' + 'CHG_DEVEDORES where '; case rgTipoPesquisa.ItemIndex of 0: begin strQuery := strQuery + 'upper(TX_NOME COLLATE WIN_PTBR) LIKE ' + QuotedStr('%' + strPesquisa + '%'); end; 1: begin strPesquisa := StringReplace(strPesquisa, '.', '', [rfReplaceAll]); strPesquisa := StringReplace(strPesquisa, '-', '', [rfReplaceAll]); strPesquisa := StringReplace(strPesquisa, '/', '', [rfReplaceAll]); if length(strPesquisa) < 14 then begin strHelpDoc := copy(strPesquisa, 1, 3) + '.' + copy(strPesquisa, 4, 3) + '.' + copy(strPesquisa, 7, 3) + '-' + RightStr(strPesquisa, 2); strQuery := strQuery + 'CD_CPF like ' + QuotedStr(strHelpDoc); end else if length(strPesquisa) >= 14 then begin strHelpDoc := copy(strPesquisa, 1, 2) + '.' + copy(strPesquisa, 3, 3) + '.' + copy(strPesquisa, 6, 3) + '/' + copy(strPesquisa, 9, 4) + '-' + RightStr(strPesquisa, 2); strQuery := strQuery + 'CD_CNPJ like ' + QuotedStr(strHelpDoc); end; end; end; strQuery := strQuery + ' order by tx_nome'; zroqryPesquisa.Close; zroqryPesquisa.SQL.Text := strQuery; zroqryPesquisa.Open; Application.ProcessMessages; Screen.Cursor := crDefault; end; procedure TfrmCentralBoletos.SpeedButton1Click(Sender: TObject); var JSON: TJSONObject; params, content: string; begin // // Params := '?'; // Params := Params + 'filtrarPor=' + opcoes_situacao // [cb_filtrosituacao.ItemIndex] + '&'; // Params := Params + 'dataInicial=' + FormatDateTime('yyyy-mm-dd', // dt_inicio.Date) + '&'; // Params := Params + 'dataFinal=' + FormatDateTime('yyyy-mm-dd', // dt_fim.Date) + '&'; // Params := Params + 'filtrarDataPor=' + opcoes_datatipo // [cb_filtroordem.ItemIndex] + '&'; // // Params := Params + 'ordenarPor=NOMESACADO' + opcoes_ordem // // [cb_filtrotipodata.ItemIndex]; // try // JSON := RequestJSON // ('https://apis.bancointer.com.br/openbanking/v1/certificado/boletos' // + Params); // // except // on E: EIdHTTPProtocolException do // begin // Showmessage(IdHTTP.ResponseText + #13#10 + E.ErrorMessage); // Screen.Cursor := crDefault; // end // else // begin // showexception(exceptobject, exceptaddr); // Screen.Cursor := crDefault; // end; // end; // // if IdHTTP.ResponseCode <> 200 then // begin // Showmessage('Transação não pode ser inicada (' + // inttostr(IdHTTP.ResponseCode) + ').'); // end // else // begin // tblBoletos.ReadOnly := False; // Screen.Cursor := crHourGlass; // JsonToDataset2(tblBoletos, JSON.GetValue('content').ToString); // // if tblBoletos.IsEmpty then // // begin // // dbgrd_boletos.PopupMenu := nil; // // end // // else // // begin // // dbgrd_boletos.PopupMenu := pum_download; // // end; // Screen.Cursor := crDefault; // tblBoletos.ReadOnly := True; // end; // try // clientId := '9f0b9a45-8a50-4daa-beb8-e22edb7f44cb'; // clientSecret := '2377cb46-5fe9-41fc-818f-8cf11ab0f851'; // AnsiQuotedStr('client_id', '"'); // bodyString := // Format('client_id=%s&client_secret=%s&scope=boleto-cobranca.read&grant_type=client_credentials', // [clientId, clientSecret]); // // client_id=&client_secret=&scope=boleto-cobranca.read&grant_type=client_credentials // // bodyString := Format('{%s:%s,%s:%s,%s:%s,%s:%s}', // // [ // // AnsiQuotedStr('client_id', '"'), AnsiQuotedStr(clientId, '"'), // // AnsiQuotedStr('client_secret', '"'), AnsiQuotedStr(clientSecret, '"'), // // AnsiQuotedStr('scope', '"'), AnsiQuotedStr('boleto-cobranca.read', '"'), // // AnsiQuotedStr('grant_type', '"'), AnsiQuotedStr('client_credentials', '"') // // ]); // // JSON := POST('https://cdpj.partners.bancointer.com.br/oauth/v2/token', // TStringStream.create(bodyString, TEncoding.UTF8)); // Showmessage(JSON.ToString); // except // on E: Exception do // begin // Showmessage(E.Message); // end; // end; Screen.Cursor := crHourGlass; try params := Format('dataInicial=%s&', [FormatDateTime('yyyy-mm-dd', dt_inicio.Date)]); params := Format('%sdataFinal=%s', [params, FormatDateTime('yyyy-mm-dd', dt_fim.Date)]); JSON := Request(GET, 'https://cdpj.partners.bancointer.com.br/cobranca/v2/boletos', TStringStream.create(params, TEncoding.UTF8)); JsonArrayToDataset(cdsBoletos, JSON.GetValue('content')); finally Screen.Cursor := crDefault; end; end; function TfrmCentralBoletos.ValidadorBeneficiado: TStringArray; begin SetLength(Result, 2); Result[0] := 'True'; Result[1] := ''; with dtmSystem do begin if Trim(tblEmpresaTX_NOME.AsString) = '' then begin Result[0] := 'False'; Result[1] := 'Nome do Beneficiário não pode estar vazio.'; Exit; end; if Trim(tblEmpresaTX_CNPJ.AsString) = '' then begin Result[0] := 'False'; Result[1] := 'CNPJ do Beneficiário não pode estar vazio.'; Exit; end; if Trim(tblEmpresaTX_CEP.AsString) = '' then begin Result[0] := 'False'; Result[1] := 'CEP do Beneficiário não pode estar vazio.'; Exit; end; if Trim(tblEmpresaTX_ENDERECO.AsString) = '' then begin Result[0] := 'False'; Result[1] := 'Endereço (Logradouro) do Beneficiário não pode estar vazio.'; Exit; end; if Trim(tblEmpresaTX_BAIRRO.AsString) = '' then begin Result[0] := 'False'; Result[1] := 'Bairro do Beneficiário não pode estar vazio.'; Exit; end; if Trim(tblEmpresaTX_CIDADE.AsString) = '' then begin Result[0] := 'False'; Result[1] := 'Cidade do Beneficiário não pode estar vazia.'; Exit; end; if Trim(tblEmpresaTX_UF.AsString) = '' then begin Result[0] := 'False'; Result[1] := 'UF do Beneficiário não pode estar vazia.'; Exit; end; end; end; function TfrmCentralBoletos.ValidadorBoleto: TStringArray; begin SetLength(Result, 2); Result[0] := 'True'; Result[1] := ''; with dtmSystem do begin if tblDevedoresVL_NOMINAL_BOLETO.AsFloat <= 0 then begin Result[0] := 'False'; Result[1] := 'Valor do Boleto não pode ser menor ou igual a 0.'; Exit; end; if tblDevedoresNR_DIA_VENCIMENTO.AsInteger <= 0 then begin Result[0] := 'False'; Result[1] := 'Dia do mês para o vencimento não pode ser 0.'; Exit; end; if tblDevedoresNR_DIAS_AGENDA.AsInteger < 0 then begin Result[0] := 'False'; Result[1] := 'Quantidade de dias para cancelamento automático do boleto não pode ser menor que 0.'; Exit; end; end; end; function TfrmCentralBoletos.ValidadorDescontos: TStringArray; begin SetLength(Result, 2); Result[0] := 'True'; Result[1] := ''; { 1, 'NAOTEMDESCONTO' 2, 'VALORFIXODATAINFORMADA' 3, 'PERCENTUALDATAINFORMADA' } with dtmSystem do begin if Trim(tblDevedoresTP_DESC_BOLETO_1.AsString) = '' then begin Result[0] := 'False'; Result[1] := 'Selecione o tipo de Desconto para o 1º Desconto.'; Exit; end else begin case tblDevedoresTP_DESC_BOLETO_1.AsInteger of 1: begin if tblDevedoresPR_DESC_BOLETO_1.AsFloat <> 0 then begin Result[0] := 'False'; Result[1] := 'Taxa do 1º Desconto deve ser 0.'; Exit; end; if tblDevedoresVL_DESC_BOLETO_1.AsFloat <> 0 then begin Result[0] := 'False'; Result[1] := 'Valor do 1º Desconto deve ser 0.'; Exit; end; end; 2: begin if tblDevedoresPR_DESC_BOLETO_1.AsFloat <> 0 then begin Result[0] := 'False'; Result[1] := 'Taxa do 1º Desconto deve ser 0.'; Exit; end; if tblDevedoresVL_DESC_BOLETO_1.AsFloat = 0 then begin Result[0] := 'False'; Result[1] := 'Valor do 1º Desconto não pode ser 0.'; Exit; end; if tblDevedoresNR_DIAS_DESC_BOLETO_1.AsInteger < 1 then begin Result[0] := 'False'; Result[1] := 'Qtd. de Dias antes do Vencimento para 1º Desconto não pode ser menor que 1.'; Exit; end; end; 3: begin if tblDevedoresVL_DESC_BOLETO_1.AsFloat <> 0 then begin Result[0] := 'False'; Result[1] := 'Valor do 1º Desconto deve ser 0.'; Exit; end; if tblDevedoresPR_DESC_BOLETO_1.AsFloat = 0 then begin Result[0] := 'False'; Result[1] := 'Taxa do 1º Desconto não pode ser 0.'; Exit; end; if tblDevedoresNR_DIAS_DESC_BOLETO_1.AsInteger < 1 then begin Result[0] := 'False'; Result[1] := 'Qtd. de Dias antes do Vencimento para 1º Desconto não pode ser menor que 1.'; Exit; end; end else begin Result[0] := 'False'; Result[1] := 'Tipo de Desconto para 1º Desconto não existe.'; Exit; end; end; end; if Trim(tblDevedoresTP_DESC_BOLETO_2.AsString) = '' then begin Result[0] := 'False'; Result[1] := 'Selecione o tipo de Desconto para o 2º Desconto.'; Exit; end else begin case tblDevedoresTP_DESC_BOLETO_2.AsInteger of 1: begin if tblDevedoresPR_DESC_BOLETO_2.AsFloat <> 0 then begin Result[0] := 'False'; Result[1] := 'Taxa do 2º Desconto deve ser 0.'; Exit; end; if tblDevedoresVL_DESC_BOLETO_2.AsFloat <> 0 then begin Result[0] := 'False'; Result[1] := 'Valor do 2º Desconto deve ser 0.'; Exit; end; end; 2: begin if tblDevedoresPR_DESC_BOLETO_2.AsFloat <> 0 then begin Result[0] := 'False'; Result[1] := 'Taxa do 2º Desconto deve ser 0.'; Exit; end; if tblDevedoresVL_DESC_BOLETO_2.AsFloat = 0 then begin Result[0] := 'False'; Result[1] := 'Valor do 2º Desconto não pode ser 0.'; Exit; end; if tblDevedoresNR_DIAS_DESC_BOLETO_2.AsInteger < 1 then begin Result[0] := 'False'; Result[1] := 'Qtd. de Dias antes do Vencimento para 2º Desconto não pode ser menor que 1.'; Exit; end; end; 3: begin if tblDevedoresVL_DESC_BOLETO_2.AsFloat <> 0 then begin Result[0] := 'False'; Result[1] := 'Valor do 2º Desconto deve ser 0.'; Exit; end; if tblDevedoresPR_DESC_BOLETO_2.AsFloat = 0 then begin Result[0] := 'False'; Result[1] := 'Taxa do 2º Desconto não pode ser 0.'; Exit; end; if tblDevedoresNR_DIAS_DESC_BOLETO_2.AsInteger < 1 then begin Result[0] := 'False'; Result[1] := 'Qtd. de Dias antes do Vencimento para 2º Desconto não pode ser menor que 1.'; Exit; end; end else begin Result[0] := 'False'; Result[1] := 'Tipo de Desconto para 2º Desconto não existe.'; Exit; end; end; end; if Trim(tblDevedoresTP_DESC_BOLETO_3.AsString) = '' then begin Result[0] := 'False'; Result[1] := 'Selecione o tipo de Desconto para o 3º Desconto.'; Exit; end else begin case tblDevedoresTP_DESC_BOLETO_3.AsInteger of 1: begin if tblDevedoresPR_DESC_BOLETO_3.AsFloat <> 0 then begin Result[0] := 'False'; Result[1] := 'Taxa do 3º Desconto deve ser 0.'; Exit; end; if tblDevedoresVL_DESC_BOLETO_3.AsFloat <> 0 then begin Result[0] := 'False'; Result[1] := 'Valor do 3º Desconto deve ser 0.'; Exit; end; end; 2: begin if tblDevedoresPR_DESC_BOLETO_3.AsFloat <> 0 then begin Result[0] := 'False'; Result[1] := 'Taxa do 3º Desconto deve ser 0.'; Exit; end; if tblDevedoresVL_DESC_BOLETO_3.AsFloat = 0 then begin Result[0] := 'False'; Result[1] := 'Valor do 3º Desconto não pode ser 0.'; Exit; end; if tblDevedoresNR_DIAS_DESC_BOLETO_3.AsInteger < 1 then begin Result[0] := 'False'; Result[1] := 'Qtd. de Dias antes do Vencimento para 3º Desconto não pode ser menor que 1.'; Exit; end; end; 3: begin if tblDevedoresVL_DESC_BOLETO_3.AsFloat <> 0 then begin Result[0] := 'False'; Result[1] := 'Valor do 3º Desconto deve ser 0.'; Exit; end; if tblDevedoresPR_DESC_BOLETO_3.AsFloat = 0 then begin Result[0] := 'False'; Result[1] := 'Taxa do 3º Desconto não pode ser 0.'; Exit; end; if tblDevedoresNR_DIAS_DESC_BOLETO_3.AsInteger < 1 then begin Result[0] := 'False'; Result[1] := 'Qtd. de Dias antes do Vencimento para 3º Desconto não pode ser menor que 1.'; Exit; end; end else begin Result[0] := 'False'; Result[1] := 'Tipo de Desconto para 3º Desconto não existe.'; Exit; end; end; end; end; end; function TfrmCentralBoletos.ValidadorMultaMora: TStringArray; begin SetLength(Result, 2); Result[0] := 'True'; Result[1] := ''; { 1, 'NAOTEMMULTA' 2, 'VALORFIXO' 3, 'PERCENTUAL' 1, 'VALORDIA' 2, 'TAXAMENSAL' 3, 'ISENTO' } with dtmSystem do begin if Trim(tblDevedoresTP_MULTA_BOLETO.AsString) = '' then begin Result[0] := 'False'; Result[1] := 'Selecione o tipo de Multa.'; Exit; end else begin case tblDevedoresTP_MULTA_BOLETO.AsInteger of 1: begin if tblDevedoresPR_MULTA_BOLETO.AsFloat <> 0 then begin Result[0] := 'False'; Result[1] := 'Taxa da Multa deve ser 0.'; Exit; end; if tblDevedoresVL_MULTA_BOLETO.AsFloat <> 0 then begin Result[0] := 'False'; Result[1] := 'Valor da Multa deve ser 0.'; Exit; end; end; 2: begin if tblDevedoresPR_MULTA_BOLETO.AsFloat <> 0 then begin Result[0] := 'False'; Result[1] := 'Taxa da Multa deve ser 0.'; Exit; end; if tblDevedoresVL_MULTA_BOLETO.AsFloat = 0 then begin Result[0] := 'False'; Result[1] := 'Valor da Multa não pode ser 0.'; Exit; end; if tblDevedoresNR_DIAS_MULTA_BOLETO.AsInteger < 1 then begin Result[0] := 'False'; Result[1] := 'Qtd. de Dias para Cobrar Multa não pode ser menor que 1.'; Exit; end; end; 3: begin if tblDevedoresVL_MULTA_BOLETO.AsFloat <> 0 then begin Result[0] := 'False'; Result[1] := 'Valor da Multa deve ser 0.'; Exit; end; if tblDevedoresPR_MULTA_BOLETO.AsFloat = 0 then begin Result[0] := 'False'; Result[1] := 'Taxa da Multa não pode ser 0.'; Exit; end; if tblDevedoresNR_DIAS_MULTA_BOLETO.AsInteger < 1 then begin Result[0] := 'False'; Result[1] := 'Qtd. de Dias para Cobrar Multa não pode ser menor que 1.'; Exit; end; end else begin Result[0] := 'False'; Result[1] := 'Tipo de Multa não existe.'; Exit; end; end; end; if Trim(tblDevedoresTP_MULTA_BOLETO.AsString) = '' then begin Result[0] := 'False'; Result[1] := 'Selecione o tipo de Multa.'; Exit; end else begin case tblDevedoresTP_MULTA_BOLETO.AsInteger of 3: begin if tblDevedoresPR_MORA_BOLETO.AsFloat <> 0 then begin Result[0] := 'False'; Result[1] := 'Taxa da Mora deve ser 0.'; Exit; end; if tblDevedoresVL_MORA_BOLETO.AsFloat <> 0 then begin Result[0] := 'False'; Result[1] := 'Valor da Mora deve ser 0.'; Exit; end; end; 1: begin if tblDevedoresPR_MORA_BOLETO.AsFloat <> 0 then begin Result[0] := 'False'; Result[1] := 'Taxa da Mora deve ser 0.'; Exit; end; if tblDevedoresVL_MORA_BOLETO.AsFloat = 0 then begin Result[0] := 'False'; Result[1] := 'Valor da Mora não pode ser 0.'; Exit; end; if tblDevedoresNR_MORA_BOLETO.AsInteger < 1 then begin Result[0] := 'False'; Result[1] := 'Qtd. de Dias para Cobrar Mora não pode ser menor que 1.'; Exit; end; end; 2: begin if tblDevedoresVL_MORA_BOLETO.AsFloat <> 0 then begin Result[0] := 'False'; Result[1] := 'Valor da Mora deve ser 0.'; Exit; end; if tblDevedoresPR_MORA_BOLETO.AsFloat = 0 then begin Result[0] := 'False'; Result[1] := 'Taxa da Mora não pode ser 0.'; Exit; end; if tblDevedoresNR_MORA_BOLETO.AsInteger < 1 then begin Result[0] := 'False'; Result[1] := 'Qtd. de Dias para Cobrar Mora não pode ser menor que 1.'; Exit; end; end else begin Result[0] := 'False'; Result[1] := 'Tipo de Mora não existe.'; Exit; end; end; end; end; end; function TfrmCentralBoletos.ValidadorPagador: TStringArray; begin SetLength(Result, 2); Result[0] := 'True'; Result[1] := ''; with dtmSystem do begin if Trim(tblDevedoresTX_NOME.AsString) = '' then begin Result[0] := 'False'; Result[1] := 'Nome do pagador não pode estar vazio.'; Exit; end; if Trim(tblDevedoresCD_DOCUMENTO.AsString) = '' then begin Result[0] := 'False'; Result[1] := 'Documento do pagador não pode estar vazio.'; Exit; end; if tblDevedoresID_ENDERECO_BOLETO.IsNull then begin Result[0] := 'False'; Result[1] := 'Escolha um endereço do pagador para utilizar no Boleto.'; Exit; end else begin if Trim(tblEnderecosTX_LOGRADOURO.AsString) = '' then begin Result[0] := 'False'; Result[1] := 'Endereço (Logradouro) do pagador não pode estar vazio.'; Exit; end; if tblEnderecosID_CIDADE.IsNull then begin Result[0] := 'False'; Result[1] := 'Endereço deve constar uma Cidade.'; Exit; end else begin if Trim(tblEnderecosTX_CIDADE.AsString) = '' then begin Result[0] := 'False'; Result[1] := 'Cidade do pagador não pode estar vazia.'; Exit; end; end; if tblEnderecosID_ESTADO.IsNull then begin Result[0] := 'False'; Result[1] := 'Endereço deve constar uma UF.'; Exit; end else begin if Trim(tblEnderecosTX_UF.AsString) = '' then begin Result[0] := 'False'; Result[1] := 'UF do pagador não pode estar vazia.'; Exit; end; end; if Trim(tblEnderecosTX_CEP.AsString) = '' then begin Result[0] := 'False'; Result[1] := 'CEP do pagador não pode estar vazio.'; Exit; end; end; end; // if edt_nomebolunico.Text = '' then // begin // Result[0] := 'False'; // Result[1] := 'Nome do pagador não pode estar vazio.'; // Exit; // end; // if edt_docbolunico.Text = '' then // begin // Result[0] := 'False'; // Result[1] := 'Documento do pagador não pode estar vazio.'; // Exit; // end // else if (length(edt_docbolunico.Text) <> 11) and // (length(edt_docbolunico.Text) <> 14) then // begin // Result[0] := 'False'; // Result[1] := 'Documento do pagador inválido.'; // Exit; // end; // if edt_cepbolunico.Text = '' then // begin // Result[0] := 'False'; // Result[1] := 'CEP do pagador não pode estar vazio.'; // Exit; // end // else if length(edt_cepbolunico.Text) <> 8 then // begin // Result[0] := 'False'; // Result[1] := 'CEP do pagador inválido.'; // Exit; // end; // if edt_endbolunico.Text = '' then // begin // Result[0] := 'False'; // Result[1] := 'Endereço do pagador não pode estar vazio.'; // Exit; // end; // if edt_endnumbolunico.Text = '' then // begin // Result[0] := 'False'; // Result[1] := 'Número do Endereço do pagador não pode estar vazio.'; // Exit; // end; // if edt_bairrobolunico.Text = '' then // begin // Result[0] := 'False'; // Result[1] := 'Bairro do pagador não pode estar vazio.'; // Exit; // end; // if edt_cidadebolunico.Text = '' then // begin // Result[0] := 'False'; // Result[1] := 'Cidade do pagador não pode estar vazio.'; // Exit; // end; // if edt_estadobolunico.Text = '' then // begin // Result[0] := 'False'; // Result[1] := 'UF do pagador não pode estar vazio.'; // Exit; // end; end; end.