unit ucadCredor; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, umstCadastro, Data.DB, Vcl.ExtCtrls, Vcl.DBCtrls, Vcl.StdCtrls, Vcl.Mask, Vcl.ComCtrls, Vcl.Grids, Vcl.DBGrids, Vcl.Buttons, StrUtils, Types, System.ImageList, Vcl.ImgList, ACBrBase, ACBrSocket, ACBrCEP, rDBComponents, Vcl.Menus, System.UITypes, ClipBrd, ZAbstractRODataset, ZDataset; // Tentando "Hackear" o TDBNavigator type THackDBNavigator = class(TDBNavigator); type TcadCredor = class(TmstCadastro) lbl_cidade: TLabel; dblucmbox_cidade: TDBLookupComboBox; lbl_bairro: TLabel; dbedt_bairro: TDBEdit; dbedt_tel: TDBEdit; lbl_tel: TLabel; dbedt_email: TDBEdit; lbl_email: TLabel; dbedt_website: TDBEdit; lbl_website: TLabel; dbedt_fantasia: TDBEdit; lbl_fantasia: TLabel; lbl_cnpj: TLabel; lbl_inscriest: TLabel; dbedt_inscriest: TDBEdit; lbl_inscrimuni: TLabel; dbedt_inscrimuni: TDBEdit; dbedt_cep: TDBEdit; lbl_cep: TLabel; dbedt_end: TDBEdit; lbl_end: TLabel; dbedt_num: TDBEdit; lbl_num: TLabel; dbedt_compl: TDBEdit; lbl_compl: TLabel; dblucmbox_uf: TDBLookupComboBox; lbl_uf: TLabel; ImageList1: TImageList; spdbtn_pesquisa: TSpeedButton; tabTabelas: TTabSheet; lbl_dtinicio: TLabel; lbl_faixa: TLabel; lbl_dtfim: TLabel; gb_politica: TGroupBox; lbl_fdias: TLabel; dbedt_diai: TDBEdit; dbedt_diaf: TDBEdit; lbl_extra1: TLabel; gb_encargos: TGroupBox; lbl_multa: TLabel; dbedt_multa: TDBEdit; lbl_juros: TLabel; dbedt_juros: TDBEdit; gb_desc: TGroupBox; gb_faixas: TGroupBox; tabObservacoes: TTabSheet; dbmemo_obs: TDBMemo; btn_clearmemo: TButton; navSecundario: TDBNavigator; dbl_poli: TDBLookupComboBox; dbl_faixa: TDBLookupComboBox; dtsPol: TDataSource; dtsFaixa: TDataSource; spdbtn_verIE: TSpeedButton; ACBrCEP1: TACBrCEP; dbedt_cnpj: TDBEdit; dbdate_politicai: TrDBDateTimePicker; dbdate_politicaf: TrDBDateTimePicker; gb_listcredores: TGroupBox; navFaixas: TDBNavigator; lbl_nomepoli: TLabel; dbedt_nomepoli: TDBEdit; lbl_nomefaixa: TLabel; dbedt_nomefaixa: TDBEdit; pnl_poli: TPanel; pnl_encargos: TPanel; pnl_faixa: TPanel; mmnuCredor: TMainMenu; Novo1: TMenuItem; Credor: TMenuItem; N1: TMenuItem; Poltica1: TMenuItem; Faixa1: TMenuItem; dtsCidades: TDataSource; dtsEstados: TDataSource; PopupMenu1: TPopupMenu; Copiar1: TMenuItem; dblucb_repasse: TDBLookupComboBox; lbl_repasse: TLabel; dbgrd_credoreslist: TDBGrid; pcTarifas: TPageControl; tabBasico: TTabSheet; tabPolitica: TTabSheet; GroupBox1: TGroupBox; dbedt_taxabasicaentradamin: TDBEdit; lbl_taxabasicaentrada: TLabel; dbedt_taxabasicamulta: TDBEdit; lbl_taxabasicamulta: TLabel; dbedt_taxabasicajuros: TDBEdit; lbl_taxabasicajuros: TLabel; dbedt_nparcelasbasico: TDBEdit; lbl_nparcelasbasico: TLabel; GroupBox3: TGroupBox; gb_descquitbasico: TGroupBox; lbl_descquitencbasico: TLabel; dbedt_descquitindfinbasico: TDBEdit; lbl_descquitprinbasico: TLabel; dbedt_descquitprinbasico: TDBEdit; lbl_descquitmultabasico: TLabel; lbl_descquitjurosbasico: TLabel; dbedt_descquitmultabasico: TDBEdit; dbedt_descquitjurosbasico: TDBEdit; gb_descfinbasico: TGroupBox; lbl_descfintencbasico: TLabel; dbedt_descfinindfinbasico: TDBEdit; lbl_descfintprinbasico: TLabel; dbedt_descfinprinbasico: TDBEdit; lbl_descfintmultabasico: TLabel; dbedt_descfinmultabasico: TDBEdit; lbl_descfintjurosbasico: TLabel; dbedt_descfinjurosbasico: TDBEdit; tabIndicador: TTabSheet; dtsIndicadorFinanceiro: TDataSource; navIndicadorFinanceiro: TDBNavigator; pnl_indicadorfinanceiro: TPanel; dbgrd_indicadorfinanceiro: TDBGrid; lbl_indfinpr: TLabel; dbedt_indfinpr: TDBEdit; dbedt_indfinatrasomin: TDBEdit; lbl_indfinatrasomin: TLabel; dbedt_indfinvlfix: TDBEdit; lbl_indfinvlfix: TLabel; dbedt_indfinatrasomax: TDBEdit; lbl_indfinatrasomax: TLabel; dbrgrp_indfintipo: TDBRadioGroup; gb_descquitfaixa: TGroupBox; lbl_descquitindfinfaixa: TLabel; lbl_descquitprinfaixa: TLabel; lbl_descquitmultafaixa: TLabel; lbl_descquitjurosfaixa: TLabel; dbedt_descquitindfinfaixa: TDBEdit; dbedt_descquitprinfaixa: TDBEdit; dbedt_descquitmultafaixa: TDBEdit; dbedt_descquitjurosfaixa: TDBEdit; gb_descfinfaixa: TGroupBox; lbl_descfinindfinfaixa: TLabel; lbl_descfinprinfaixa: TLabel; lbl_descfinmultafaixa: TLabel; lbl_descfinjurosfaixa: TLabel; dbedt_descfinindfinfaixa: TDBEdit; dbedt_descfinprinfaixa: TDBEdit; dbedt_descfinmultafaixa: TDBEdit; dbedt_descfinjurosfaixa: TDBEdit; lbl_taxabasicaindfin: TLabel; dbedt_taxabasicaindfin: TDBEdit; dbedt_descquitcorbasico: TDBEdit; Label1: TLabel; dbedt_descfincorbasico: TDBEdit; Label2: TLabel; dbedt_descquitcorfaixa: TDBEdit; Label3: TLabel; dbedt_descfincorfaixa: TDBEdit; Label4: TLabel; Label5: TLabel; DBEdit2: TDBEdit; Pesquisa: TGroupBox; edt_procura: TEdit; dbrg_tpentrada: TDBRadioGroup; Label6: TLabel; dbedt_taxabasicaentradamax: TDBEdit; GroupBox4: TGroupBox; dbrg_din: TDBRadioGroup; dbrg_che: TDBRadioGroup; dbrg_cred: TDBRadioGroup; rDBDateTimePicker1: TrDBDateTimePicker; rDBDateTimePicker2: TrDBDateTimePicker; Label7: TLabel; dbrg_tpfaixa: TDBRadioGroup; DBLookupComboBox1: TDBLookupComboBox; Label8: TLabel; tabRepasses: TTabSheet; dtsRepasse: TDataSource; navRepasse: TDBNavigator; dbgrdrepasse: TDBGrid; pcRepasse: TPageControl; tabRepassedados: TTabSheet; tabRepasseFase: TTabSheet; dbgrrepassedados: TDBGrid; Label9: TLabel; DBEdit3: TDBEdit; Label10: TLabel; DBEdit4: TDBEdit; DBEdit5: TDBEdit; Label11: TLabel; DBEdit6: TDBEdit; Label12: TLabel; DBEdit7: TDBEdit; Label13: TLabel; DBEdit8: TDBEdit; Label14: TLabel; DBGrid1: TDBGrid; navrepassefase: TDBNavigator; dtsRepasseFase: TDataSource; DBComboBox1: TDBComboBox; DBComboBox2: TDBComboBox; Label15: TLabel; Label16: TLabel; btn_reprepasse: TButton; DBRadioGroup1: TDBRadioGroup; Label17: TLabel; DBEdit9: TDBEdit; DBRadioGroup2: TDBRadioGroup; DBEdit10: TDBEdit; Label18: TLabel; zroqryTestaRepasse: TZReadOnlyQuery; procedure FormCreate(Sender: TObject); procedure dtsDBDataChange(Sender: TObject; Field: TField); procedure spdbtn_pesquisaClick(Sender: TObject); procedure btn_clearmemoClick(Sender: TObject); procedure navSecundarioBeforeAction(Sender: TObject; Button: TNavigateBtn); procedure dtsFaixaDataChange(Sender: TObject; Field: TField); procedure dtsPolDataChange(Sender: TObject; Field: TField); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure spdbtn_verIEClick(Sender: TObject); procedure ACBrCEP1BuscaEfetuada(Sender: TObject); procedure dbedt_cepKeyPress(Sender: TObject; var Key: Char); procedure navFaixasBeforeAction(Sender: TObject; Button: TNavigateBtn); procedure CredorClick(Sender: TObject); procedure Poltica1Click(Sender: TObject); procedure Faixa1Click(Sender: TObject); procedure dtsEstadosDataChange(Sender: TObject; Field: TField); procedure dtsCidadesDataChange(Sender: TObject; Field: TField); procedure Copiar1Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure dtsDBStateChange(Sender: TObject); procedure dtsPolStateChange(Sender: TObject); procedure dtsFaixaStateChange(Sender: TObject); procedure PopupMenu1Popup(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure navPrincipalBeforeAction(Sender: TObject; Button: TNavigateBtn); procedure pcClientesChange(Sender: TObject); procedure dtsIndicadorFinanceiroStateChange(Sender: TObject); procedure navIndicadorFinanceiroBeforeAction(Sender: TObject; Button: TNavigateBtn); procedure FormShow(Sender: TObject); procedure dbgrd_indicadorfinanceiroTitleClick(Column: TColumn); procedure edt_procuraChange(Sender: TObject); procedure dbrg_tpentradaClick(Sender: TObject); procedure dtsRepasseStateChange(Sender: TObject); procedure dtsRepasseFaseStateChange(Sender: TObject); procedure btn_reprepasseClick(Sender: TObject); procedure navRepasseBeforeAction(Sender: TObject; Button: TNavigateBtn); procedure pcRepasseChange(Sender: TObject); private old_id: integer; function FindSubcontrolAtPos(AControl: TControl; AScreenPos, AClientPos: TPoint): TControl; function FindControlAtPos(AScreenPos: TPoint): TControl; procedure SetupHackedNavigator(const Navigator: TDBNavigator; const Glyphs: TImageList; S: string); procedure WMMoving(var Msg: TWMMoving); message WM_MOVING; procedure ChecaPermissoes; { Private declarations } public pos: TPoint; primeiro_cad: Boolean; { Public declarations } end; var cadCredor: TcadCredor; implementation {$R *.dfm} uses udtmSystem, ufrmPesquisa, ufrmVerIE, ufrmCobranca, ufrmLiberaPermissao; procedure TcadCredor.CredorClick(Sender: TObject); begin // add um novo beneficiário pcClientes.TabIndex := 0; navPrincipal.DataSource.DataSet.Append; end; procedure TcadCredor.btn_clearmemoClick(Sender: TObject); begin inherited; // limpa as linhas do memo box dbmemo_obs.Lines.Clear; end; procedure TcadCredor.btn_reprepasseClick(Sender: TObject); var i, ano: integer; pr, multa, juros, enc, cor: double; begin inherited; with dtmSystem do begin if not tblEmpresaRepasse.IsEmpty then begin if Messagedlg ('Deseja repetir este repasse ao longo do ano a que ele pertence?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin pr := tblEmpresaRepassePR_PRINCIPAL.AsFloat; multa := tblEmpresaRepassePR_MULTA.AsFloat; juros := tblEmpresaRepassePR_JUROS.AsFloat; enc := tblEmpresaRepassePR_ENCARGOS.AsFloat; cor := tblEmpresaRepassePR_CORRIGIDO.AsFloat; ano := tblEmpresaRepasseID_ANO.AsInteger; tblEmpresaRepasse.Filtered := false; tblEmpresaRepasse.Filter := 'ID_ANO = ' + tblEmpresaRepasseID_ANO.AsString; tblEmpresaRepasse.Filtered := True; for i := 1 to 12 do begin if not tblEmpresaRepasse.Locate('ID_MES', i, []) then begin tblEmpresaRepasse.Append; tblEmpresaRepassePR_PRINCIPAL.AsFloat := pr; tblEmpresaRepassePR_MULTA.AsFloat := multa; tblEmpresaRepassePR_JUROS.AsFloat := juros; tblEmpresaRepassePR_ENCARGOS.AsFloat := enc; tblEmpresaRepassePR_CORRIGIDO.AsFloat := cor; tblEmpresaRepasseID_MES.AsInteger := i; tblEmpresaRepasseID_ANO.AsInteger := ano; tblEmpresaRepasseTX_NOME.AsString := inttostr(i) + '/' + inttostr(ano); tblEmpresaRepasse.Post; end; end; tblEmpresaRepasse.Filtered := false; tblEmpresaRepasse.Filter := ''; Showmessage('Processo terminado!'); end; end; end; end; procedure TcadCredor.ChecaPermissoes; begin with dtmSystem do begin navPrincipal.Enabled := VerificarPermissao('CBR.02.02.01'); if not VerificarPermissao('CBR.02.02.01.01') then navPrincipal.VisibleButtons := navPrincipal.VisibleButtons - [nbInsert]; if not VerificarPermissao('CBR.02.02.01.02') then navPrincipal.VisibleButtons := navPrincipal.VisibleButtons - [nbEdit]; if not VerificarPermissao('CBR.02.02.01.03') then navPrincipal.VisibleButtons := navPrincipal.VisibleButtons - [nbDelete]; tabTabelas.Enabled := VerificarPermissao('CBR.02.02.01.04'); navSecundario.Enabled := VerificarPermissao('CBR.02.02.02'); navFaixas.Enabled := VerificarPermissao('CBR.02.02.03'); navIndicadorFinanceiro.Enabled := VerificarPermissao('CBR.02.02.04'); end; end; procedure TcadCredor.Copiar1Click(Sender: TObject); var Control: TControl; begin // usa duas funções que achei na net pra pegar o controle na pos do mouse pra poder copiar o conteúdo dele mesmo desabilitado Control := FindControlAtPos(pos); if Control is TDBEdit then begin Clipboard.AsText := (Control as TDBEdit).Text; end; if Control is TDBLookupComboBox then begin Clipboard.AsText := (Control as TDBLookupComboBox).Text; end; if Control is TrDBDateTimePicker then begin Clipboard.AsText := formatdatetime('dd/mm/yyyy', (Control as TrDBDateTimePicker).Date); end; if Control is TDBMemo then begin (Control as TDBMemo).SelectAll; (Control as TDBMemo).CopyToClipboard; end; end; procedure TcadCredor.dbedt_cepKeyPress(Sender: TObject; var Key: Char); begin // busca endereço pelo cep ao apertar enter if (Key = #13) then begin ACBrCEP1.BuscarPorCEP(dbedt_cep.Text); end; end; procedure TcadCredor.dbgrd_indicadorfinanceiroTitleClick(Column: TColumn); begin inherited; dtmSystem.OrganizaPorColuna (dbgrd_indicadorfinanceiro.DataSource.DataSet, Column); end; procedure TcadCredor.dbrg_tpentradaClick(Sender: TObject); begin inherited; if dbrg_tpentrada.ItemIndex = 0 then begin dbedt_taxabasicaentradamin.Enabled := True; dbedt_taxabasicaentradamax.Enabled := True; end else begin dbedt_taxabasicaentradamin.Enabled := false; dbedt_taxabasicaentradamax.Enabled := false; end; end; procedure TcadCredor.dtsCidadesDataChange(Sender: TObject; Field: TField); begin // arruma o combo box com o id da cidade se existir if (dtmSystem.tblEnderecosID_CIDADE.AsVariant >= 0) then begin dblucmbox_cidade.KeyValue := dtmSystem.tblEnderecosID_CIDADE.AsVariant; end; end; procedure TcadCredor.dtsDBDataChange(Sender: TObject; Field: TField); var new_id: integer; mes, ano, name: string; begin // acontece sempre que muda algum dado no dtsDB desta janela if dbrg_tpentrada.ItemIndex = 0 then begin dbedt_taxabasicaentradamin.Enabled := True; dbedt_taxabasicaentradamax.Enabled := True; end else begin dbedt_taxabasicaentradamin.Enabled := false; dbedt_taxabasicaentradamax.Enabled := false; end; stbStatus.Panels[0].Text := 'Nº de Credores cadastrados: ' + inttostr(dtsDB.DataSet.RecordCount) + '.'; // new_id := dtmSystem.tblCHGEmpresaID_EMPRESA.AsInteger; // if (old_id <> new_id) and (self.Active) then // begin navSecundario.Enabled := not(dtsDB.DataSet.IsEmpty); new_id := dtmSystem.tblCHGEmpresaID_EMPRESA.AsInteger; if (old_id <> new_id) and (self.Active) then begin if old_id <> -1 then begin mes := copy(formatdatetime('yyyy-mm-dd', Date), 6, 2); ano := copy(formatdatetime('yyyy-mm-dd', Date), 1, 4); zroqryTestaRepasse.SQL.Text := 'select * from chg_empresa_repasse where id_empresa = ' + QuotedStr(inttostr(old_id)) + ' and id_mes = ' + QuotedStr(mes) + ' and id_ano = ' + QuotedStr(ano); zroqryTestaRepasse.Open; if zroqryTestaRepasse.IsEmpty then begin Showmessage('A empresa ' + name + ' não possui repasse para este mês. Isso impedirá a geração de recibos de títulos dessa empresa.'); end; end; old_id := new_id; name := dtmSystem.tblCHGEmpresaTX_FANTASIA.AsString; ChecaPermissoes; end; end; procedure TcadCredor.dtsDBStateChange(Sender: TObject); begin // grpDescricao.Enabled := dtsDB.State in [dsEdit, dsInsert]; // tabCadastro.Enabled := grpDescricao.Enabled; inherited; // dbgrd_credoreslist.Enabled := not(dtsDB.DataSet.IsEmpty); // tabCadastro.Enabled := dtsDB.State in [dsEdit, dsInsert]; tabBasico.Enabled := dtsDB.State in [dsEdit, dsInsert]; edt_procura.Enabled := not(dtsDB.State in [dsEdit, dsInsert]); tabObservacoes.Enabled := grpDescricao.Enabled; dbmemo_obs.Enabled := grpDescricao.Enabled; tabPolitica.Enabled := not(dtsDB.State in [dsEdit, dsInsert]); tabIndicador.Enabled := not(dtsDB.State in [dsEdit, dsInsert]); tabRepasses.Enabled := not(dtsDB.State in [dsEdit, dsInsert]); // tabTabelas.Enabled := not(dtsDB.State in [dsEdit, dsInsert]); end; procedure TcadCredor.dtsEstadosDataChange(Sender: TObject; Field: TField); begin // arruma o combo box da cidade e do estado if (dtmSystem.tblEnderecosID_ESTADO.AsVariant >= 0) then begin dblucmbox_uf.KeyValue := dtmSystem.tblEstadosID_ESTADO.AsVariant; end; if (dtmSystem.tblEnderecosID_CIDADE.AsVariant >= 0) then begin dblucmbox_cidade.KeyValue := dtmSystem.tblCidadesID_CIDADE.AsVariant; end; end; procedure TcadCredor.dtsFaixaDataChange(Sender: TObject; Field: TField); begin if (dtmSystem.tblFaixasID_FAIXA.AsVariant >= 0) and (dtsFaixa.State in [dsBrowse]) then begin dbl_faixa.KeyValue := dtmSystem.tblFaixasID_FAIXA.AsVariant; end; end; procedure TcadCredor.dtsFaixaStateChange(Sender: TObject); begin // acontece sempre que tiver mudança nos dados do db de faixas, mesma coisa de ali em cima pnl_faixa.Enabled := dtsFaixa.State in [dsEdit, dsInsert]; gb_encargos.Enabled := dtsFaixa.State in [dsEdit, dsInsert]; gb_desc.Enabled := dtsFaixa.State in [dsEdit, dsInsert]; gb_politica.Enabled := not(dtsFaixa.State in [dsEdit, dsInsert]); edt_procura.Enabled := not(dtsFaixa.State in [dsEdit, dsInsert]); // tabCadastro.Enabled := not (dtsFaixa.State in [dsEdit, dsInsert]); navPrincipal.Enabled := not(dtsFaixa.State in [dsEdit, dsInsert]); if pcTarifas.ActivePage <> tabBasico then begin tabBasico.Enabled := not(dtsFaixa.State in [dsEdit, dsInsert]); end; if dtsFaixa.State in [dsEdit, dsInsert] then begin tabObservacoes.Enabled := false; end; navSecundario.Enabled := not(dtsFaixa.State in [dsEdit, dsInsert]); end; procedure TcadCredor.dtsIndicadorFinanceiroStateChange(Sender: TObject); begin inherited; pnl_indicadorfinanceiro.Enabled := dtsIndicadorFinanceiro.State in [dsEdit, dsInsert]; navPrincipal.Enabled := not(dtsIndicadorFinanceiro.State in [dsEdit, dsInsert]); edt_procura.Enabled := not(dtsIndicadorFinanceiro.State in [dsEdit, dsInsert]); navSecundario.Enabled := not(dtsIndicadorFinanceiro.State in [dsEdit, dsInsert]); navFaixas.Enabled := not(dtsIndicadorFinanceiro.State in [dsEdit, dsInsert]); end; procedure TcadCredor.dtsPolDataChange(Sender: TObject; Field: TField); begin navFaixas.Enabled := not(dtsPol.DataSet.IsEmpty); if (dtmSystem.tblPoliticasID_POLITICA.AsVariant >= 0) and (dtsPol.State in [dsBrowse]) then begin dbl_poli.KeyValue := dtmSystem.tblPoliticasID_POLITICA.AsVariant; end; if (dtmSystem.tblFaixasID_FAIXA.AsVariant >= 0) and (dtsFaixa.State in [dsBrowse]) then begin dbl_faixa.KeyValue := dtmSystem.tblFaixasID_FAIXA.AsVariant; end; end; procedure TcadCredor.dtsPolStateChange(Sender: TObject); begin // //mesmo de ali em cima, só que com o dbPoliticas pnl_poli.Enabled := dtsPol.State in [dsEdit, dsInsert]; dbl_poli.Enabled := not(dtsPol.State in [dsEdit, dsInsert]); edt_procura.Enabled := not(dtsPol.State in [dsEdit, dsInsert]); gb_encargos.Enabled := not(dtsPol.State in [dsEdit, dsInsert]); gb_faixas.Enabled := not(dtsPol.State in [dsEdit, dsInsert]); gb_desc.Enabled := not(dtsPol.State in [dsEdit, dsInsert]); // tabCadastro.Enabled := not (dtsPol.State in [dsEdit, dsInsert]); tabObservacoes.Enabled := not(dtsPol.State in [dsEdit, dsInsert]); tabIndicador.Enabled := not(dtsPol.State in [dsEdit, dsInsert]); navPrincipal.Enabled := not(dtsPol.State in [dsEdit, dsInsert]); end; procedure TcadCredor.dtsRepasseFaseStateChange(Sender: TObject); begin inherited; if (dtsRepasseFase.State in [dsEdit, dsInsert]) then begin DBGrid1.Options := DBGrid1.Options + [dgEditing]; end else begin DBGrid1.Options := DBGrid1.Options - [dgEditing]; end; end; procedure TcadCredor.dtsRepasseStateChange(Sender: TObject); begin inherited; tabRepasseFase.Enabled := not(dtsRepasse.State in [dsEdit, dsInsert]); tabRepassedados.Enabled := (dtsRepasse.State in [dsEdit, dsInsert]); end; procedure TcadCredor.edt_procuraChange(Sender: TObject); begin inherited; dtmSystem.tblCHGEmpresa.Locate('TX_NOME', edt_procura.Text, [loCaseInsensitive, loPartialKey]); end; procedure TcadCredor.Faixa1Click(Sender: TObject); begin // add faixa pcClientes.TabIndex := 1; navFaixas.DataSource.DataSet.Append; end; function TcadCredor.FindControlAtPos(AScreenPos: TPoint): TControl; var i: integer; f, m: TForm; p: TPoint; r: TRect; begin // acha controle na posição do mouse Result := nil; for i := Screen.FormCount - 1 downto 0 do begin f := Screen.Forms[i]; if f.Visible and (f.Parent = nil) and (f.FormStyle <> fsMDIChild) and TRect.Create(f.Left, f.Top, f.Left + f.Width, f.Top + f.Height) .Contains(AScreenPos) then Result := f; end; Result := FindSubcontrolAtPos(Result, AScreenPos, AScreenPos); if (Result is TForm) and (TForm(Result).ClientHandle <> 0) then begin Winapi.Windows.GetWindowRect(TForm(Result).ClientHandle, r); p := TPoint.Create(AScreenPos.X - r.Left, AScreenPos.Y - r.Top); m := nil; for i := TForm(Result).MDIChildCount - 1 downto 0 do begin f := TForm(Result).MDIChildren[i]; if TRect.Create(f.Left, f.Top, f.Left + f.Width, f.Top + f.Height) .Contains(p) then m := f; end; if m <> nil then Result := FindSubcontrolAtPos(m, AScreenPos, p); end; end; function TcadCredor.FindSubcontrolAtPos(AControl: TControl; AScreenPos, AClientPos: TPoint): TControl; var i: integer; C: TControl; begin Result := nil; C := AControl; if (C = nil) or not C.Visible or not TRect.Create(C.Left, C.Top, C.Left + C.Width, C.Top + C.Height).Contains(AClientPos) then Exit; Result := AControl; if AControl is TWinControl then for i := 0 to TWinControl(AControl).ControlCount - 1 do begin C := FindSubcontrolAtPos(TWinControl(AControl).Controls[i], AScreenPos, AControl.ScreenToClient(AScreenPos)); if C <> nil then Result := C; end; end; procedure TcadCredor.FormClose(Sender: TObject; var Action: TCloseAction); begin with dtmSystem do begin tblCHGEmpresa.Close; tblCidades.Close; tblEstados.Close; tblPoliticas.Close; tblFaixas.Close; tblRepasse.Close; tblIndicadorFinanceiro.Close; end; cadCredor := nil; Action := caFree; end; procedure TcadCredor.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin if (navSecundario.DataSource <> nil) or (navFaixas.DataSource <> nil) or (navPrincipal.DataSource <> nil) then begin if (navSecundario.DataSource.State in [dsInsert, dsEdit]) or (navFaixas.DataSource.State in [dsInsert, dsEdit]) or (navPrincipal.DataSource.State in [dsInsert, dsEdit]) then begin Messagedlg ('Existem alterações pendentes, clique em CONFIRMAR ou CANCELAR.', mtConfirmation, [mbOK], 0); CanClose := false; end; end; end; procedure TcadCredor.FormCreate(Sender: TObject); begin inherited; // abre tabelas usadas nesta janela with dtmSystem do begin if not tblCHGEmpresa.Active then begin tblCHGEmpresa.Open; end; if not tblEmpresaRepasse.Active then begin tblEmpresaRepasse.Open; end; if not tblEstados.Active then begin tblEstados.Open; end; if not tblCidades.Active then begin tblCidades.Open; end; if not tblPoliticas.Active then begin tblPoliticas.Open; end; if not tblFaixas.Active then begin tblFaixas.Open; end; if not tblRepasse.Active then begin tblRepasse.Open; end; if not tblIndicadorFinanceiro.Active then begin tblIndicadorFinanceiro.Open; end; end; if dtsDB.DataSet.IsEmpty then begin dbgrd_credoreslist.Enabled := false; end else begin dbgrd_credoreslist.Enabled := True; end; // função usada pra "hackear" o navigator e torná-lo customizável SetupHackedNavigator(navPrincipal, ImageList1, 's'); SetupHackedNavigator(navSecundario, ImageList1, 's'); SetupHackedNavigator(navFaixas, ImageList1, 's'); SetupHackedNavigator(navIndicadorFinanceiro, ImageList1, 's'); SetupHackedNavigator(navRepasse, ImageList1, 's'); SetupHackedNavigator(navrepassefase, ImageList1, 's'); navSecundario.Enabled := not(dtsDB.DataSet.IsEmpty); navFaixas.Enabled := not(dtsPol.DataSet.IsEmpty); ChecaPermissoes; // navPrincipal.Enabled := dtmSystem.VerificarPermissao('BENCBR.01'); // navSecundario.Enabled := dtmSystem.VerificarPermissao('BENCBR.01'); // navFaixas.Enabled := dtmSystem.VerificarPermissao('BENCBR.01'); pcTarifas.TabIndex := 0; pcRepasse.TabIndex := 0; primeiro_cad := false; old_id := -1; if dtmSystem.id_grupo = 1 then begin navPrincipal.VisibleButtons := navPrincipal.VisibleButtons + [nbDelete]; btn_reprepasse.Visible := True; btn_reprepasse.Enabled := True; end; end; procedure TcadCredor.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin // inherited; if Key = VK_ESCAPE then begin Key := 0; Close; end; if (Key = 75) and (Shift = [ssCtrl]) then begin // ShowMessage('Ctrl+k is pressed!'); frmLiberaPermissao := TfrmLiberaPermissao.Create(self); with frmLiberaPermissao do begin level := 3; string_permissoes.Add('CBR.02.02.01'); string_permissoes.Add('CBR.02.02.01.01'); string_permissoes.Add('CBR.02.02.01.02'); string_permissoes.Add('CBR.02.02.01.03'); string_permissoes.Add('CBR.02.02.01.04'); string_permissoes.Add('CBR.02.02.02'); string_permissoes.Add('CBR.02.02.03'); string_permissoes.Add('CBR.02.02.04'); ShowModal; if ModalResult = mrOk then begin case dtmSystem.cod_liberapermissao of 0: navPrincipal.Enabled := True; 1: begin navPrincipal.Enabled := True; navPrincipal.VisibleButtons := navPrincipal.VisibleButtons + [nbInsert]; end; 2: begin navPrincipal.Enabled := True; navPrincipal.VisibleButtons := navPrincipal.VisibleButtons + [nbEdit]; end; 3: begin navPrincipal.Enabled := True; navPrincipal.VisibleButtons := navPrincipal.VisibleButtons + [nbDelete]; end; 4: tabTabelas.Enabled := True; 5: navSecundario.Enabled := True; 6: navFaixas.Enabled := True; 7: navIndicadorFinanceiro.Enabled := True; end; end; end; end; end; procedure TcadCredor.FormShow(Sender: TObject); begin inherited; if not(dtmSystem.tblCHGEmpresa.Active) then begin dtmSystem.tblCHGEmpresa.Open; end; if dtmSystem.tblCHGEmpresa.IsEmpty then begin // navPrincipal.VisibleButtons := navPrincipal.VisibleButtons + [nbInsert]; dtsDB.DataSet.Append; primeiro_cad := True; end; end; procedure TcadCredor.navFaixasBeforeAction(Sender: TObject; Button: TNavigateBtn); begin // acontece sempre antes de qualquer ação do navigator // primeiro o meu código, depois o obtido pela herança pq o inherited tá lá no final case Button of nbFirst, nbPrior, nbNext, nbLast, nbInsert, nbRefresh: if navFaixas.DataSource.State in [dsInsert, dsEdit] then begin Messagedlg ('Existem alterações pendentes, clique em CONFIRMAR ou CANCELAR.', mtConfirmation, [mbOK], 0); Abort; end; nbPost: begin if dbedt_nomefaixa.Text = '' then begin Messagedlg('Por favor insira um nome para a Faixa.', mtWarning, [mbOK], 0); Abort; end; if dbedt_descquitprinfaixa.Text = '' then begin Messagedlg ('Por favor insira um valor para desconto sobre principal ao quitar antes de finalizar o cadastro do Credor.', mtWarning, [mbOK], 0); Abort; end; if dbedt_descquitmultafaixa.Text = '' then begin Messagedlg ('Por favor insira um valor para desconto sobre multa ao quitar antes de finalizar o cadastro do Credor.', mtWarning, [mbOK], 0); Abort; end; if dbedt_descquitjurosfaixa.Text = '' then begin Messagedlg ('Por favor insira um valor para desconto sobre juros ao quitar antes de finalizar o cadastro do Credor.', mtWarning, [mbOK], 0); Abort; end; if dbedt_descquitcorfaixa.Text = '' then begin Messagedlg ('Por favor insira um valor para desconto sobre corrigido ao quitar antes de finalizar o cadastro do Credor.', mtWarning, [mbOK], 0); Abort; end; if dbedt_descquitindfinfaixa.Text = '' then begin Messagedlg ('Por favor insira um valor para desconto sobre indicador financeiro ao quitar antes de finalizar o cadastro do Credor.', mtWarning, [mbOK], 0); Abort; end; if dbedt_descfinprinfaixa.Text = '' then begin Messagedlg ('Por favor insira um valor para desconto sobre principal ao financiar antes de finalizar o cadastro do Credor.', mtWarning, [mbOK], 0); Abort; end; if dbedt_descfinmultafaixa.Text = '' then begin Messagedlg ('Por favor insira um valor para desconto sobre multa ao financiar antes de finalizar o cadastro do Credor.', mtWarning, [mbOK], 0); Abort; end; if dbedt_descfinjurosfaixa.Text = '' then begin Messagedlg ('Por favor insira um valor para desconto sobre juros ao financiar antes de finalizar o cadastro do Credor.', mtWarning, [mbOK], 0); Abort; end; if dbedt_descfincorfaixa.Text = '' then begin Messagedlg ('Por favor insira um valor para desconto sobre corrigido ao financiar antes de finalizar o cadastro do Credor.', mtWarning, [mbOK], 0); Abort; end; if dbedt_descfinindfinfaixa.Text = '' then begin Messagedlg ('Por favor insira um valor para desconto sobre indicador financeiro ao financiar antes de finalizar o cadastro do Credor.', mtWarning, [mbOK], 0); Abort; end; if dbrg_tpfaixa.ItemIndex < 0 then begin Messagedlg('Por favor escolha o tipo de Faixa.', mtWarning, [mbOK], 0); Abort; end; SelectNext(ActiveControl as TWinControl, True, True); end; nbDelete: begin if navFaixas.DataSource.State in [dsInsert, dsEdit] then begin Messagedlg ('Existem alterações pendentes, clique em CONFIRMAR ou CANCELAR.', mtConfirmation, [mbOK], 0); Abort; end; if Messagedlg('Deseja apagar este registro?', mtConfirmation, [mbYes, mbNo], 0) = mrNo then Abort; try dtsFaixa.DataSet.Delete; except Showmessage ('Este registro está sendo utilizado pelo sistema ou contém dependências e não pode ser apagado'); end; Abort; end; nbCancel: if Messagedlg('Deseja cancelar as modificações?', mtConfirmation, [mbYes, mbNo], 0) = mrNo then Abort; end; end; procedure TcadCredor.navIndicadorFinanceiroBeforeAction(Sender: TObject; Button: TNavigateBtn); begin inherited; // acontece sempre antes de qualquer ação do navigator // primeiro o meu código, depois o obtido pela herança case Button of nbFirst, nbPrior, nbNext, nbLast, nbInsert, nbRefresh: if navIndicadorFinanceiro.DataSource.State in [dsInsert, dsEdit] then begin Messagedlg ('Existem alterações pendentes, clique em CONFIRMAR ou CANCELAR.', mtConfirmation, [mbOK], 0); Abort; end; nbPost: begin SelectNext(ActiveControl as TWinControl, True, True); end; nbDelete: begin if navIndicadorFinanceiro.DataSource.State in [dsInsert, dsEdit] then begin Messagedlg ('Existem alterações pendentes, clique em CONFIRMAR ou CANCELAR.', mtConfirmation, [mbOK], 0); Abort; end; if Messagedlg('Deseja apagar este registro?', mtConfirmation, [mbYes, mbNo], 0) = mrNo then Abort; try dtsIndicadorFinanceiro.DataSet.Delete; except Showmessage ('Este registro está sendo utilizado pelo sistema ou contém dependências e não pode ser apagado'); end; Abort; end; nbCancel: if Messagedlg('Deseja cancelar as modificações?', mtConfirmation, [mbYes, mbNo], 0) = mrNo then Abort; end; end; procedure TcadCredor.navPrincipalBeforeAction(Sender: TObject; Button: TNavigateBtn); begin case Button of nbPost: begin if DBEdit1.Text = '' then begin Messagedlg ('Por favor insira uma Razão Social antes de finalizar o cadastro do Credor.', mtWarning, [mbOK], 0); Abort; end; if dbedt_fantasia.Text = '' then begin Messagedlg ('Por favor insira um Nome Fantasia antes de finalizar o cadastro do Credor.', mtWarning, [mbOK], 0); Abort; end; if dbedt_taxabasicamulta.Text = '' then begin Messagedlg ('Por favor insira um valor para multa antes de finalizar o cadastro do Credor.', mtWarning, [mbOK], 0); Abort; end; if dbedt_taxabasicajuros.Text = '' then begin Messagedlg ('Por favor insira um valor para juros antes de finalizar o cadastro do Credor.', mtWarning, [mbOK], 0); Abort; end; if dbrg_tpentrada.ItemIndex < 0 then begin Messagedlg ('Por favor selecione o tipo de entrada a ser utilizada para parcelamento antes de finalizar o cadastro do Credor.', mtWarning, [mbOK], 0); Abort; end; if dbrg_din.ItemIndex < 0 then begin Messagedlg ('Por favor selecione o tipo de juros para parcelameto em Dinheiro antes de finalizar o cadastro do Credor.', mtWarning, [mbOK], 0); Abort; end; if dbrg_che.ItemIndex < 0 then begin Messagedlg ('Por favor selecione o tipo de juros para parcelameto em Cheque antes de finalizar o cadastro do Credor.', mtWarning, [mbOK], 0); Abort; end; if dbrg_cred.ItemIndex < 0 then begin Messagedlg ('Por favor selecione o tipo de juros para parcelameto em Crédito antes de finalizar o cadastro do Credor.', mtWarning, [mbOK], 0); Abort; end; if (dbedt_taxabasicaentradamin.Text = '') and (dbrg_tpentrada.ItemIndex = 0) then begin Messagedlg ('Por favor insira um valor para entrada mínima antes de finalizar o cadastro do Credor.', mtWarning, [mbOK], 0); Abort; end; if (dbedt_taxabasicaentradamax.Text = '') and (dbrg_tpentrada.ItemIndex = 0) then begin Messagedlg ('Por favor insira um valor para entrada máxima antes de finalizar o cadastro do Credor.', mtWarning, [mbOK], 0); Abort; end; if dbedt_descquitprinbasico.Text = '' then begin Messagedlg ('Por favor insira um valor para desconto sobre principal ao quitar antes de finalizar o cadastro do Credor.', mtWarning, [mbOK], 0); Abort; end; if dbedt_descquitmultabasico.Text = '' then begin Messagedlg ('Por favor insira um valor para desconto sobre multa ao quitar antes de finalizar o cadastro do Credor.', mtWarning, [mbOK], 0); Abort; end; if dbedt_descquitjurosbasico.Text = '' then begin Messagedlg ('Por favor insira um valor para desconto sobre juros ao quitar antes de finalizar o cadastro do Credor.', mtWarning, [mbOK], 0); Abort; end; if dbedt_descquitindfinbasico.Text = '' then begin Messagedlg ('Por favor insira um valor para desconto sobre indicador financeiro ao quitar antes de finalizar o cadastro do Credor.', mtWarning, [mbOK], 0); Abort; end; if dbedt_descquitcorbasico.Text = '' then begin Messagedlg ('Por favor insira um valor para desconto sobre corrigido ao quitar antes de finalizar o cadastro do Credor.', mtWarning, [mbOK], 0); Abort; end; if dbedt_descfinprinbasico.Text = '' then begin Messagedlg ('Por favor insira um valor para desconto sobre principal ao financiar antes de finalizar o cadastro do Credor.', mtWarning, [mbOK], 0); Abort; end; if dbedt_descfinmultabasico.Text = '' then begin Messagedlg ('Por favor insira um valor para desconto sobre multa ao financiar antes de finalizar o cadastro do Credor.', mtWarning, [mbOK], 0); Abort; end; if dbedt_descfinjurosbasico.Text = '' then begin Messagedlg ('Por favor insira um valor para desconto sobre juros ao financiar antes de finalizar o cadastro do Credor.', mtWarning, [mbOK], 0); Abort; end; if dbedt_descfinindfinbasico.Text = '' then begin Messagedlg ('Por favor insira um valor para desconto sobre indicador financeiro ao financiar antes de finalizar o cadastro do Credor.', mtWarning, [mbOK], 0); Abort; end; if dbedt_descfincorbasico.Text = '' then begin Messagedlg ('Por favor insira um valor para desconto sobre corrigido ao financiar antes de finalizar o cadastro do Credor.', mtWarning, [mbOK], 0); Abort; end; primeiro_cad := false; end; nbCancel: begin if primeiro_cad = True then begin Messagedlg('Por favor termine de cadastrar o Credor.', mtWarning, [mbOK], 0); Abort; end; end; end; inherited; end; procedure TcadCredor.navRepasseBeforeAction(Sender: TObject; Button: TNavigateBtn); begin inherited; case Button of nbPost: begin if (DBComboBox1.ItemIndex < 0) or (DBComboBox2.ItemIndex < 0) then begin Messagedlg('Por favor indique o mês e o ano do repasse.', mtWarning, [mbOK], 0); Abort; end; end; end; end; procedure TcadCredor.navSecundarioBeforeAction(Sender: TObject; Button: TNavigateBtn); begin // acontece sempre antes de qualquer ação do navigator // primeiro o meu código, depois o obtido pela herança case Button of nbFirst, nbPrior, nbNext, nbLast, nbInsert, nbRefresh: if navSecundario.DataSource.State in [dsInsert, dsEdit] then begin Messagedlg ('Existem alterações pendentes, clique em CONFIRMAR ou CANCELAR.', mtConfirmation, [mbOK], 0); Abort; end; nbPost: begin if dbedt_nomepoli.Text = '' then begin Messagedlg('Por favor insira um nome para a nova política.', mtWarning, [mbOK], 0); Abort; end; SelectNext(ActiveControl as TWinControl, True, True); end; nbDelete: begin if navSecundario.DataSource.State in [dsInsert, dsEdit] then begin Messagedlg ('Existem alterações pendentes, clique em CONFIRMAR ou CANCELAR.', mtConfirmation, [mbOK], 0); Abort; end; if Messagedlg('Deseja apagar este registro?', mtConfirmation, [mbYes, mbNo], 0) = mrNo then Abort; try dtsPol.DataSet.Delete; except Showmessage ('Este registro está sendo utilizado pelo sistema ou contém dependências e não pode ser apagado'); end; Abort; end; nbCancel: if Messagedlg('Deseja cancelar as modificações?', mtConfirmation, [mbYes, mbNo], 0) = mrNo then Abort; end; end; procedure TcadCredor.pcClientesChange(Sender: TObject); begin if pcClientes.TabIndex = 1 then begin pcTarifas.TabIndex := 0; end; end; procedure TcadCredor.pcRepasseChange(Sender: TObject); begin inherited; if pcRepasse.TabIndex = 1 then begin btn_reprepasse.Enabled := false; end else begin btn_reprepasse.Enabled := True; end; end; procedure TcadCredor.Poltica1Click(Sender: TObject); begin // add política pcClientes.TabIndex := 1; navSecundario.DataSource.DataSet.Append; end; procedure TcadCredor.PopupMenu1Popup(Sender: TObject); begin pos := Mouse.CursorPos; end; procedure TcadCredor.SetupHackedNavigator(const Navigator: TDBNavigator; const Glyphs: TImageList; S: string); const Captions: array [TNavigateBtn] of string = ('Primeiro', 'Anterior', 'Próximo', 'Último', 'Adicionar', 'Excluir', 'Alterar', 'Confirmar', 'Cancelar', 'Atualizar', 'Aplicar Atualizações', 'Cancelar Atualizãções'); (* Captions : array[TNavigateBtn] of string = ('First', 'Prior', 'Next', 'Last', 'Insert', 'Delete', 'Edit', 'Post', 'Cancel', 'Refresh'); *) Hints: array [TNavigateBtn] of string = ('Primeiro', 'Anterior', 'Próximo', 'Último', 'Adicionar', 'Apagar', 'Modificar', 'Confirmar', 'Cancelar', 'Atualizar', 'Aplicar Atualizações', 'Cancelar Atualizãções'); var btn: TNavigateBtn; begin // função propriamente dita para "hackear" o navigator for btn := Low(TNavigateBtn) to High(TNavigateBtn) do with THackDBNavigator(Navigator).Buttons[btn] do begin // from the Captions const array Hint := Hints[btn]; if LowerCase(S) = 's' then begin Caption := Captions[btn]; end; // the number of images in the Glyph property NumGlyphs := 1; // Remove the old glyph. Glyph := nil; // Assign the custom one Glyphs.GetBitmap(integer(btn), Glyph); // gylph above text Layout := blGlyphTop; Font.Style := Font.Style - [fsbold]; end; end; procedure TcadCredor.spdbtn_pesquisaClick(Sender: TObject); begin inherited; // abre janela pesquisa TfrmPesquisa.Create(self).ShowModal; end; procedure TcadCredor.spdbtn_verIEClick(Sender: TObject); begin // verifica o IE do beneficiário frmVerIE := TfrmVerIE.Create(self); frmVerIE.ShowModal; end; procedure TcadCredor.WMMoving(var Msg: TWMMoving); var workArea: TRect; begin workArea := Screen.WorkareaRect; with Msg.DragRect^ do begin if Left < workArea.Left then OffsetRect(Msg.DragRect^, workArea.Left - Left, 0); if Top < workArea.Top then OffsetRect(Msg.DragRect^, 0, workArea.Top - Top); if Right > workArea.Right then OffsetRect(Msg.DragRect^, workArea.Right - Right, 0); if Bottom > workArea.Bottom then OffsetRect(Msg.DragRect^, 0, workArea.Bottom - Bottom); end; end; procedure TcadCredor.ACBrCEP1BuscaEfetuada(Sender: TObject); var i: integer; begin // busca por cep for i := 0 to ACBrCEP1.Enderecos.Count - 1 do begin dbedt_end.Text := ACBrCEP1.Enderecos[i].Tipo_Logradouro + ' ' + ACBrCEP1.Enderecos[i].Logradouro; dbedt_compl.Text := ACBrCEP1.Enderecos[i].Complemento; dbedt_bairro.Text := ACBrCEP1.Enderecos[i].Bairro; end; end; end.